Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / docs/archive/INTELLIGENCE_EXPANSION_SPEC.md |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | docs/archive/INTELLIGENCE_EXPANSION_SPEC.md |
| Original SHA-256 | e76b094e2381a16d930c675517b4b674e7f3e56a3773242793bf48fa72b0c247 |
| Git blob SHA | 634d3091b3cfa2443aa70130a8dc5defdc751cda |
| Reading-copy SHA-256 | e76b094e2381a16d930c675517b4b674e7f3e56a3773242793bf48fa72b0c247 |
Recovered source transcript
Download complete source text ↓229 lines · 11.5 KB
# INTELLIGENCE_EXPANSION_SPEC
missionMATCH work order, generated 27 July 2026 from the July 2026 competitive, regulatory, and data source intelligence report. Hand this to Claude Code as a single spec. It inherits every rule in CLAUDE.md.
--------------------------------------------------------------------------------
0. NON NEGOTIABLE RULES
--------------------------------------------------------------------------------
1. No Python anywhere. Go backend, TypeScript frontend, bash scripts.
2. No dashes in written output. Commas or rewrite. Hyphens appear only inside
code identifiers, protocol headers, and official designations.
3. Every API key stays on the server. Root owned 0600, never in the repo,
never in the browser bundle, never in a tenant database, never in logs.
4. Clearance is clearance intelligence, never verified.
5. Fail closed everywhere. Every new table gets organization_id, forced RLS,
and a composite index leading with organization_id. Migrations are the
only way schema changes.
--------------------------------------------------------------------------------
1. EXTERNAL INFERENCE BACKEND (OPENAI)
--------------------------------------------------------------------------------
1.1 KEY HANDLING, DO THIS FIRST
The key shared in chat on 27 July 2026 is burned. Any secret that has passed
through a chat client, email, or a browser must be treated as exposed. Tom
revokes it in the OpenAI dashboard. Provision a fresh project scoped key under
a Mission Workforce Technologies organization with a monthly usage cap and
budget alerts. Store it through internal/platform/secrets as the named secret
openai_api_key, file root owned 0600 on M4, resolved only by megamind-gateway
at boot. It never appears in the repo, in config committed to git, in
environment dumps, in error messages, or in the browser bundle. Confirm the
API organization has training on submitted data disabled and request zero
data retention where eligible.
1.2 PLACEMENT
The FIPS API binary never speaks to OpenAI. megamind-gateway on M4 gains a
third proxied backend class alongside Ollama and MLX:
backend: openai
endpoint: https://api.openai.com/v1/chat/completions
auth: bearer from the secrets resolver
model: config value, validated non empty at boot, no default in code
enabled: config flag, default false
Calls go through internal/platform/inference with the existing circuit
breaker and bounded retries. If enabled is true and the secret is missing,
the gateway fails the boot closed, matching the database role assertion
pattern.
1.3 EGRESS POLICY, THE LOAD BEARING PART
A scrub gate sits in front of every external call and classifies the payload.
Only these classes may leave the machine:
PUBLIC_KNOWLEDGE drafting or revising knowledge cards from cited
public sources
PUBLIC_DATA_SUMMARY summarizing ingested public federal datasets
ONTOLOGY_SUGGEST skill ontology and term alias suggestions from
public vocabulary
REQUIREMENT_NORMALIZE normalizing text from public solicitations only
Never external, enforced by the gate and by tests:
candidate rows, resume text, names, emails, phone numbers
any tenant identifier or organization_id
anything from the eeo schema (already unreadable by the app role,
assert it anyway)
RouteRAG and RouteGraph over tenant data
scoring inputs, scoring outputs, and slate contents
The gate fails closed. If it cannot prove the class, the call does not
happen and the router falls back to the local plane. The verifier still
gates all returned prose exactly as it does for local models. Every external
call writes an audit row containing backend name, payload class, byte count,
and content hash, never content.
1.4 GOVERNANCE
Record the backend in the model registry and the AEDT inventory as outside
the FIPS boundary and restricted to non regulated tasks. Update MODEL_CARD
and STACK_DECISIONS with the reasoning. Curation time use, meaning Tom
drafting cards, briefs, and public data summaries with no tenant data
involved, is unrestricted and needs no gateway path at all.
--------------------------------------------------------------------------------
2. INTELLIGENCE INGESTION
--------------------------------------------------------------------------------
2.1 TIER A, BEFORE DESIGN PARTNER GO LIVE
KNOWLEDGE CARDS, added through curation.curate (superuser only), each cited
to primary sources, entering the KAG set and GET /knowledge/cards:
1. NYC Local Law 144: annual independent bias audit, ten business day
candidate notice, four fifths impact ratios, DCWP enforcement.
2. Illinois HB 3773, effective 1 January 2026: AI use notice duty, zip
code proxy prohibition, private right of action. Include the
separate AI Video Interview Act.
3. California FEHA automated decision system rules, effective
1 October 2025: agent liability reaching staffing firms, four year
recordkeeping, bias testing relevance.
4. California CCPA ADMT rules, effective 1 January 2026: pre use
notice, opt out, logic disclosure, risk assessments.
5. Colorado SB 26-189: duties begin 1 January 2027, enforcement
currently stayed, attorney general rulemaking pending.
6. Texas TRAIGA, effective 1 January 2026: intent based liability,
attorney general enforcement only.
7. New Jersey LAD guidance, January 2025: disparate impact without
intent, vendor liability.
8. Mobley v. Workday through the 22 June 2026 order: vendor as agent,
bias testing discoverable, collective scope.
9. Kistler v. Eightfold FCRA theory: third party enrichment as
consumer reporting, and why missionMATCH is first party only.
10. OFCCP after EO 11246: Section 503 and VEVRAA survive, the VEVRAA
benchmark is 5.1 percent, the ESDS state job bank listing duty
remains.
11. EU AI Act: employment is Annex III high risk, Digital Omnibus
timing, relevant only if a tenant is EU facing.
SYNC BINARIES, each Go, batch, idempotent, following the sam-sync pattern,
each writing provenance into the ingest_manifest table defined in 2.3:
oews-metro-sync BLS OEWS at MSA level via the BLS public data API
version 2. Free registration key raises daily
limits. Annual release. Powers metro wage
benchmarking for LocationAvail and slate pricing.
sca-wd-sync SAM.gov wage determinations REST API. Roughly
ninety thousand records across DBA, SCA, and CBA
types. Current revision is flagged and superseded
revisions persist. No bulk download, so page and
cache.
usajobs-sync USAJOBS search API. Authentication needs three
headers: Authorization-Key, User-Agent set to the
registered email, and Host data.usajobs.gov. Pull
clearance fields, occupational series, pay plans,
and the unauthenticated code list API.
awards depth Extend awards-sync to task and delivery order
granularity using USASpending File D1 through the
api.usaspending.gov bulk_download endpoints. This
powers the recompete radar.
ALSO IN TIER A:
SAM system account. Personal keys allow roughly ten calls a day, role
backed accounts roughly one thousand, federal system accounts roughly
ten thousand. Opportunities pages cap at one thousand records and the
description field costs a second authenticated call, so budget double.
Registration approval can take weeks, start now.
CALC+ verification. Confirm whether CALC+ under buy.gsa.gov exposes a
usable bulk path before building on it. Legacy CALC data may be stale.
If there is no API, ceiling rates load manually and are versioned.
ontology-sync bump. Move to O*NET 30.3 now and 31.0 when it lands in
late August 2026. Keep the CC BY 4.0 attribution string in the
manifest. The database license is CC BY 4.0, but Career Exploration
Tools carry a no derivatives license, do not ingest those.
2.2 TIER B, DURING THE 90 DAY PROGRAM
esds-post VEVRAA state job bank posting generated from
requisitions. Formats vary by state and most lack
APIs, so build state by state starting with the
states where design partners operate.
skillbridge-sync The DoD SkillBridge authorized organizations
directory only, roughly three thousand listings.
Organizations, never people. No candidate PII ever.
forecast-sync Agency procurement forecasts. Mostly spreadsheets,
normalize into the requirement radar.
dsbs data SBA socioeconomic and 8(a) data through SAM.gov
entity extracts and the public entity APIs, never
through third party scrapers.
clearance runway A small versioned reference table, hand curated
each quarter from GAO reports and performance.gov
Trusted Workforce quarterly reports, surfacing
realistic adjudication timelines on slates.
comp benchmarks Cleared compensation benchmarks only under license.
Never scraped.
2.3 PROVENANCE
New table ingest_manifest: source, url, license, fetched_at, record_count,
content_hash. Every knowledge card and every synced row traces back to a
manifest row. This is the evidence trail behind the first party data story
and it feeds the AEDT evidence pack.
--------------------------------------------------------------------------------
3. WHERE THE INTELLIGENCE SURFACES
--------------------------------------------------------------------------------
New closed TAG intents, read only, parameterized, model selects the NAME
only, exactly like the existing registry:
wage_benchmark_by_msa(soc_code, msa)
sca_wd_lookup(state, county)
recompete_radar(agency, naics, months_ahead)
vevraa_benchmark_status()
clearance_runway(clearance_level)
The eleven cards enter RouteDirect and the public knowledge feed. The AEDT
evidence pack export lands in the governance module as a stub: scoring
inputs, engine version, weights, band caps applied, model registry entry,
exportable per decision.
--------------------------------------------------------------------------------
4. ACCEPTANCE CHECKS
--------------------------------------------------------------------------------
1. Gateway with the openai backend enabled and no secret refuses to boot.
2. A fixture candidate row placed anywhere in an external bound payload
fails the scrub test suite. Prove it by racing it, not by reasoning.
3. Every new sync writes ingest_manifest rows and reruns without
duplicates.
4. All eleven cards render with citations and appear in
GET /knowledge/cards.
5. rg confirms zero new Python and zero dashes in written docs.
6. No new table is missing organization_id, forced RLS, or the composite
index. Down migrations refuse to delete application authored rows.
--------------------------------------------------------------------------------
5. EXPLICIT NON GOALS
--------------------------------------------------------------------------------
No scraping of candidate data anywhere, for FCRA and CUI reasons. No NL to
SQL. No request time external calls carrying tenant candidate data. No
multi master writes. No Python.