Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / docs/AI_GROUNDING_PROGRAM.md |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | docs/AI_GROUNDING_PROGRAM.md |
| Original SHA-256 | d29097b2f7f3ca9df3eb43acf5eb649d684918aa70e87085e197d76ab38b059f |
| Git blob SHA | 85d5277648a5d1ce4e1968ea84ec8b196cb7cfe5 |
| Reading-copy SHA-256 | bc5083f605acb58f2a86d0e1a6cb723f21cb237a522a5bb35749eaa4a459944e |
Recovered source transcript
Download complete source text ↓352 lines · 25.3 KB
Credential-bearing and unrelated personal details were removed from this reading copy. The source identity and original checksum remain recorded.
# AI Grounding Program, design spec (missionMATCH)
Date: 2026-06-29. Status: draft for owner review. Scope approved: full program, Phases 1 to 3.
## 1. Goal
Make the missionMATCH AI perform well on the cleared GovCon job BEFORE a live customer, so the
platform demonstrably works on day one for Galapagos Federal (8a, Air Force and Space Force, Hawaii
and New Mexico, mission lanes SIGINT, GEOINT, Satellite C2, Cross Domain Solutions, cyber, intel).
This is a grounding, evaluation, and feedback program built entirely in Go, SQL, and bash over the
free federal data sources we already pull. It is NOT model weight training.
## 2. The reframe (why this is grounding, not training)
Two things in this product are deliberately frozen and are NOT trained:
1. The deterministic scoring engine. Fixed weights (Clearance 0.25, Skills 0.25, Certifications 0.15,
Customer Experience 0.15, Experience 0.10, Location 0.10), enforced byte for byte by the golden and
frozen tests. Its immutability is the AEDT compliance asset. We do not touch it.
2. The embedding model. Domain fine tuning of bge-small-en-v1.5 is ruled out by our own constraints:
no Python anywhere, cleared resumes are CUI and must not leave the self hosted plane, FIPS
(GOFIPS140=v1.0.0, CGO_ENABLED=0), and both cloud portability. The map confirmed every fine tune
path (LoRA, continued pretraining, managed Bedrock or Azure OpenAI tuning) violates at least one
hard rule, and an in place checkpoint change would silently corrupt every stored vector.
So "train the AI on this job" means: give the AI a rich, domain grounded knowledge layer it can reason
over deterministically, prove and calibrate it against labeled data, and let curated human feedback
improve that layer over time. The engine stays the floor; the AI narrates and retrieves on top of it.
## 3. Guardrails (every workstream inherits these)
- AEDT: every match stays explainable with a per component trace. A human approves or rejects every
slate decision. Nothing auto rejects. The deterministic engine stays the floor.
- EEO: protected attributes and close proxies are never a matching input. The matching and ontology
code never references the eeo schema. New skill, alias, and mission fields are screened so none is a
demographic proxy.
- Tenancy: tenant scoped tables keep RLS forced with organization_id leading every composite index.
The skills, alias, relationship, and mission reference tables are GLOBAL (outside RLS), read only to
the app role, written only by the migrator role, exactly like the existing skills table.
- FIPS and tooling: all new binaries build CGO_ENABLED=0 GOFIPS140=v1.0.0, verify the stamp after every
build. No Python. Go commands under cmd/, bash for orchestration, SQL via migrations only.
- Both cloud: stays 384 dimension so the vector columns and HNSW indexes survive a provider swap. No
cloud specific primitive in the core path. External data fetchers sit behind a source interface.
- Vector integrity: any new embedded column obeys the DEPLOY_PLAN B2 rule, query vectors and stored
vectors share one model, enforced by the existing VectorGuard gate.
## 4. Current state (from the 2026-06-29 capability map)
- Ontology is a stub: 13 real skills in production, 32 in the seed, 8 flat free text categories, no
hierarchy, no mission vocabulary. A SIGINT or Intel Analyst requirement cannot be expressed today.
- No alias or synonym table exists. SIGINT to Signals Intelligence is provably unreachable by any
single cosine threshold and is routed to an alias layer that was designed but never built.
- Adjacency runs live as raw k nearest neighbor over skills.embedding but nothing is curated or stored,
no strength, no requires, no stronger than, no deprecation edges.
- Clearance granularity is a static text rule. The generic embedding treats Secret and TS/SCI as
similar. Compartments (SCI, SAP), poly type (CI versus full scope), and reciprocity are not modeled.
- The teaching and federated learning path is built and privacy scrubbed but DISABLED and non
persistent. The gateway returns 202 and discards every signal. Nothing improves from a reviewer
action.
- There is no GovCon benchmark. Accuracy is proven internally consistent (formula, determinism,
threshold calibration on 12 plus 12 pairs) but never proven correct against real cleared hire
judgment. The four fifths adverse impact report has architecture but no sample data.
- Rich federal signal sits unparsed: incumbent staffing mix and mission keywords live in award and
opportunity descriptions and raw JSON in object storage, never extracted. BLS OEWS covers only 5
hardcoded occupations. O*NET, GSA CALC, and FPDS are entirely unintegrated.
- The generated RRF hybrid retrieval SQL is not mounted on any live path, and the production reranker
is a cosine baseline rather than a cross encoder.
## 5. Architecture of the grounded knowledge layer
```
FREE FEDERAL SOURCES GLOBAL KNOWLEDGE LAYER (new, outside RLS)
O*NET SOC skills ─┐ ┌─► skills (enriched: + mission_area, source, soc_code)
GSA CALC labor rates ├─ ingest ┼─► skill_aliases (acronym and synonym to canonical skill)
FPDS / USASpending ─┤ (Go ├─► skill_relationships (requires, substitutes_for, broader_than)
SAM raw JSON / CLINs │ cmds) ├─► clearance_levels (compartments, poly, reciprocity)
curated IC overlay ─┘ └─► mission_areas (SIGINT, GEOINT, Satellite C2, CDS, ...)
│
▼
DETERMINISTIC ENGINE (frozen weights)
exact match → alias match → relationship credit → semantic ≥ 0.62
│
▼
BRAIN (retrieval + memory + faithfulness, narrates only)
RRF hybrid + reranker, mission filtered, incumbent intelligence
│
▼
EVALUATION HARNESS ──► calibrates threshold, proves bands, four fifths
▲
BOUNDED FEEDBACK LOOP ───┘ scrubbed reviewer outcomes become CURATION
proposals for humans, never auto mutate scoring
```
The new tables are global reference data, the same class as skills today. The engine consults the
alias and relationship layer deterministically before falling back to semantic similarity, so domain
knowledge is encoded as auditable rows, not as opaque model weights.
## 6. Phase 1 — grounding (the load bearing core)
### WS1. GovCon skill ontology
Build a real cleared workforce ontology, hundreds of skills with meaningful categories and a mission
area dimension.
- Schema: add to the global skills table the columns source (text, for provenance), soc_code (text,
nullable), mission_area (text, nullable, FK to mission_areas.code), and last_verified_at. Keep the
existing id, name, category, embedding. A new mission_areas table holds the controlled mission
vocabulary (code, name, description) for SIGINT, GEOINT, HUMINT, MASINT, Satellite C2, Cross Domain
Solutions, COMSEC, EW, cyber operations, intel analysis, space systems, and the rest of the Galapagos
lanes.
- Sourcing strategy (verified 2026-06-29 against live sources): auto pull the breadth, curate only the
small IC spine. A new Go command cmd/ontology-sync (CGO_ENABLED=0, FIPS) with an OntologySource
interface (Name, Fetch) and six named adapters, mirroring the existing cmd/opp-sync adapter pattern,
using net/http with encoding/json, encoding/xml, and an xlsx reader (excelize). No Python, no new
crypto. Adapters, in run order:
1. psc: the Product Service Code manual XLSX from acquisition.gov (no auth, fully enumerable), the
procurement classification floor including AC National Defense R&D and the D series IT codes.
2. nice: the NICE Framework components JSON (NIST CPRT, no auth, public domain), pinned to a version,
the cyber and IT skill backbone (work roles, competency areas, TKS statements with stable ids).
3. dcwf: the open DoD Cyber Workforce Framework factsheet and coding guide PDFs plus the NICE to DCWF
crosswalk, projecting the cleared and IC cyber roles (Intelligence Cyberspace, Cyberspace Effects)
onto the NICE backbone. KSAT detail is CAC gated, so we ingest the open publications plus crosswalk.
4. onet: O*NET Web Services v2.0 (JSON, X-API-Key header). Built but DORMANT behind a missing key, it
logs a clear skip until ONET_API_KEY is [credential removed], so WS1 ships without it.
5. calc: GSA CALC ceiling rates (no auth), enumerating the federal labor category vocabulary by a
bounded suggest sweep and dedupe (there is no catalog endpoint).
6. corpus: the differentiator, no external call. Mine our OWN retained text (sam_opportunities.raw,
usaspending_awards.description and raw, opportunity_records via the storage.Storer) with the
existing deterministic extractor gazetteers and the matching/intel.go labor classifier, emitting
the actual skills, certs, clearances, and mission terms that Air Force and Space Force buyers in
Hawaii and New Mexico use, then reconciling them against the reference vocabularies above and the
curated mission spine.
- Staging versus matching tables: external adapters write a reference vocabulary (ontology_terms,
ontology_crosswalk) with provenance and a version; a curation step promotes selected, screened terms
into the matching facing global skills table (and the WS2 alias and relationship tables). Promotion is
human reviewed so the live ontology stays controlled. Each promoted skill gets a bge vector via the
existing embed-backfill path so the HNSW index stays live and the VectorGuard gate still passes.
- The IC mission spine is a small curated table, see decision 1 below, not an adapter.
- Acceptance: the ontology expresses every Galapagos mission lane, an Intel Analyst and a SIGINT and a
Satellite C2 requirement can each be authored and matched, and the embed gate (VectorGuard) still
passes on the enriched table.
### WS2. Deterministic alias and relationship layer
Encode the domain knowledge that embeddings provably cannot reach.
- skill_aliases (global): alias_text, canonical skill_id, alias_type (acronym, synonym, vendor_term,
legacy), source, confidence. Seeded with the load bearing GovCon acronyms (SIGINT to Signals
Intelligence, COMSEC to Communications Security, ATO to Authority to Operate, CDS to Cross Domain
Solution, RMF to Risk Management Framework, TS/SCI compartment expansions, and the rest).
- skill_relationships (global): from_skill_id, to_skill_id, relation (requires, substitutes_for,
broader_than, related_to), strength (decimal), source. Captures prerequisites (COMSEC requires
cryptography), substitutions (one tool credits for an adjacent tool at a strength below 1.0), and
hierarchy (a broader skill covers a narrower one).
- Engine integration: extend the matchOne path so the order is exact match, then alias match (an alias
hit is treated as an exact match, similarity 1.0, recorded as alias matched with the alias text in the
trace), then relationship credit (a substitutes_for or broader_than edge contributes its strength as a
partial match below 1.0, recorded), then the existing semantic similarity at or above 0.62. Every step
records which candidate skill matched which required skill and by what mechanism, so the trace stays
fully explainable. The fixed weights and band thresholds do not change. New behavior is additive and
covered by new golden cases so the existing golden contract still holds for the existing inputs.
- Curation: the alias and relationship rows are human authored or human approved. The Phase 3 feedback
loop proposes new edges, it never writes them directly.
- Acceptance: a candidate whose resume says Signals Intelligence matches a requirement that asks for
SIGINT at similarity 1.0 with alias matched in the trace, and the calibration suite still shows zero
false positives.
### WS3. Clearance and compartment modeling
Make clearance granularity first class, because for an intel customer it is the whole game.
- clearance_levels (global reference): level code, rank, requires_polygraph (none, CI, full_scope),
compartments (SCI, SAP markers), and an explicit reciprocity matrix (which level satisfies which).
This replaces the implicit hierarchy encoded in code with auditable reference rows.
- Engine integration: the Clearance component (weight 0.25, unchanged) reads the reciprocity matrix
instead of a hardcoded ladder. The rule stays deterministic and explainable, exact or higher satisfies,
lower or expired or unknown scores zero, and a compartment requirement (TS/SCI with CI poly) is only
satisfied by a clearance that carries it. The clearance value stays a self reported indicator labeled
clearance intelligence, never verified, per the existing product rule.
- Acceptance: a Secret clearance does not satisfy a TS/SCI requirement, a TS/SCI with CI poly satisfies a
TS/SCI requirement, and every verdict carries a one line reason in the trace.
## 7. Phase 2 — prove and calibrate
### WS4. GovCon evaluation and benchmark harness
Move accuracy from internally consistent to measured.
- A labeled benchmark of realistic Air Force and Space Force requirements crossed with candidate
profiles, each with an expected band (Green, Yellow, Red) and a short expected rationale. Authored as
versioned fixtures under a new testdata tree, organized by mission lane.
- Honest sourcing caveat: until Galapagos can label real outcomes, the expected bands are constructed by
us from defensible domain rules, not from real hire decisions. This benchmark proves regression safety,
threshold calibration, and band sanity. It is explicitly NOT a substitute for validation against real
cleared hire outcomes, and the model card will say so. A later workstream swaps in customer labeled
cases when they exist.
- A new Go test target and a runnable cmd/eval that scores the benchmark and reports precision, recall,
a confusion matrix over bands, and the per pair traces. The semantic threshold is recalibrated against
the expanded labeled skill pair corpus (the current 12 plus 12 grows into the mission vocabulary), with
the same hard guards (zero false positives, margin above the unrelated ceiling), and any change is
registered as a new model version row, the same mechanism as the 0.62 calibration.
- Acceptance: the harness runs green, produces a confusion matrix, and any threshold move is evidence
backed and version registered.
### WS5. Adverse impact dry run
Turn the empty AEDT deliverable into actual numbers.
- Generate a sample of 500 or more scored decisions in a non production database, with segregated
synthetic demographics in the eeo schema (synthetic, never real people, labeled demo data), then run
the existing four fifths report to produce real selection rates and ratios.
- This exercises the compliance reporting path end to end and gives a worked example for a FedRAMP or LL144
assessor. The matching code never sees the demographics, the report reads them only through the
compliance role, exactly as the architecture already enforces.
- Acceptance: the four fifths report produces ratios over the sample, and the EEO isolation tripwire
tests stay green (matching still cannot reach the eeo schema).
## 8. Phase 3 — retrieval, federal signal, and the feedback loop
### WS6. Mount RRF hybrid retrieval and a real reranker
- Wire the already generated RRF SQL (tsvector BM25 fused with pgvector HNSW by reciprocal rank fusion)
into the live brain retrieval path, replacing or augmenting the current call. Add mission_area as a
retrieval filter so the brain can answer mission scoped questions.
- Upgrade the gateway reranker from the cosine baseline toward a cross encoder served by the self hosted
plane, behind the existing rerank interface so the API contract does not change. If a FIPS clean, both
cloud portable cross encoder is not readily self hostable, this stays the cosine baseline and the
workstream documents that limit rather than reaching for a managed service.
- Acceptance: a mission scoped brain query returns mission relevant evidence, and retrieval quality on the
WS4 benchmark improves measurably against the pre RRF baseline.
### WS7. Federal labor and mission signal extraction
- A Go extraction pass over the retained award and opportunity descriptions and the raw JSON and CLIN
payloads already in object storage, pulling incumbent staffing mix (for example counts of ISSO, Cyber
Engineer, SIGINT Analyst roles) and mission keywords into queryable columns. New fields hang off the
existing usaspending_awards and opportunity_records tables, or a child table, with provenance.
- A deterministic mission classifier (keyword and alias driven, reusing the WS2 alias layer) tags
opportunities and awards with mission_area, so the Command Center can answer open SIGINT requirements
and align bench to mission, the customer's core organizing dimension.
- Extends the existing 8 keyword headline classifier in matching/intel.go into a shared, tested,
ontology backed labor inference used by both candidates and opportunities.
- Acceptance: the platform can list open requirements by mission area and surface incumbent staffing mix
on a recompete, with each inference traceable to its source text.
### WS8. Bounded teaching and feedback loop
Make the AI improve from reviewer judgment, within the privacy and AEDT boundary already designed.
- Implement the gateway side aggregation and storage that is currently a discard. The enumerated, scrubbed
TeachingSignal vocabulary already exists (adjacent_skill_substitution_outcome,
clearance_gap_override_outcome, experience_shortfall_outcome, reranker_label_agreement) carrying only
coarse band, outcome, counts, and model version, no identifiers, enforced by the two sided scrub
boundary. The gateway aggregates these into counts per pattern.
- The learning target is deterministic and human in the loop, never an auto model update. Aggregated
signals produce CURATION PROPOSALS, for example a repeated adjacent_skill_substitution_outcome proposes
a new skill_relationships substitutes_for edge for a human to approve, and a repeated
clearance_gap_override_outcome flags a reciprocity rule for review. They also feed the WS4
recalibration as evidence. No signal ever mutates a score, a weight, or a threshold automatically, and
the engine stays the floor.
- Differential privacy aggregation, currently a comment, is implemented as bounded noise on the published
counts so a single tenant's behavior cannot be inferred, keeping the cross tenant learning privacy
preserving. Federated learning stays behind its flag and defaults off until reviewed.
- Acceptance: a reviewer override produces a scrubbed signal, the gateway aggregates it, and a curation
proposal appears for human approval, with an audit entry and zero PII.
### WS9. Bulk candidate skill ingestion
- Use the existing extraction port to auto populate candidate_skills from cleared resumes at scale (CUI
safe, server side extraction, no browser key, the path the W1 Mission Check already established), so a
real bench exists to match against. Skills resolve through the WS1 ontology and the WS2 alias layer, so
an extracted Signals Intelligence resolves to the SIGINT canonical skill.
- Acceptance: a batch of resumes produces grounded candidate_skills rows resolved to canonical ontology
skills, and the Command Center bench coverage reflects them.
## 9. Free data sources used
Verified 2026-06-29 against live sources.
| Source | Access now | What it grounds | Limit | Workstream |
| --- | --- | --- | --- | --- |
| PSC manual (acquisition.gov) | yes, public XLSX | product and service code taxonomy incl. defense codes | fully enumerable, annual refresh | WS1, WS7 |
| NICE Framework (NIST CPRT) | yes, public JSON | cyber and IT skill backbone (roles, competencies, TKS) | pin a version | WS1 |
| DoD DCWF | partial, open PDFs | cleared and IC cyber roles plus NICE crosswalk | KSAT detail is CAC gated, use crosswalk | WS1 |
| O*NET Web Services v2.0 | KEY NEEDED (free) | civilian SOC skills, knowledge, abilities, tasks | manual approval, 5/sec, 50k/day, attribution | WS1 |
| GSA CALC ceiling rates | yes, no auth | federal labor category vocabulary | no catalog, sweep and dedupe | WS1, WS7 |
| FPDS-NG ATOM | yes, public | award transactions tagged by PSC and UEI | 10 records/request, paginate | WS7 |
| USASpending | yes, keyless | incumbents by UEI, PSC and NAICS hierarchy | approx 10k/query, blurb text only | WS7 |
| SAM.gov opportunities | yes, SAM_API_KEY held | the high value mine: PWS and SOW attachments carry real labor categories, clearances, certs, mission terms | 1000/day entity tier, 429 Retry-After | WS1, WS7 |
| Our retained corpus | yes, in hand | already holds SAM and award raw text, mined locally | none external, deterministic, auditable | WS1, WS7 |
| Curated IC mission spine | author in repo | SIGINT, GEOINT, Satellite C2, CDS, COMSEC vocabulary | not scrapeable, see decision 1 | WS1, WS2 |
| BLS OEWS | yes, BLS_API_KEY held | wage baseline by SOC and area | widen beyond the 5 hardcoded rows | WS7 |
## 10. Schema and migration plan
New global reference tables: mission_areas, skill_aliases, skill_relationships, clearance_levels.
Enriched columns on skills (source, soc_code, mission_area, last_verified_at) and on the award and
opportunity tables (incumbent mix, mission_area). All as additive goose migrations continuing from the
current production head (v19 on the brain branch), with exact numbers assigned at implementation to avoid
collision with the unmerged per tenant branch (which already claims 0020). Every new global table grants
SELECT to the app role and INSERT and UPDATE to the migrator only, RLS not applicable (global), the same
pattern as skills. Each migration ships a tested down.
## 11. Sequencing and dependencies
1. WS1 ontology is the root, everything matches against it, build first.
2. WS2 alias and relationship layer and WS3 clearance modeling depend on WS1, build next, in parallel.
3. WS4 benchmark and WS5 adverse impact depend on WS1 to WS3 (they measure them), build third. WS4 is the
gate that proves Phase 1 worked.
4. WS6 retrieval, WS7 federal signal, WS9 bench ingestion depend on the grounded ontology and can run in
parallel after Phase 1 is proven.
5. WS8 feedback loop is last in build order because its curation proposals target the WS2 and WS3 tables
and its evidence feeds the WS4 recalibration, so those must exist first.
Each workstream is its own branch, its own migration where needed, its own tests, reviewed and validated
on M4 staging before any production step, mirroring the brain cutover discipline. Nothing in this program
requires a production cutover except, optionally, deploying the enriched ontology and binary the same way
the brain was deployed, gated and rollback ready.
## 12. Acceptance for the program
The AI is considered grounded for go live when: every Galapagos mission lane is expressible and matchable
in the ontology, the load bearing acronyms resolve through the alias layer at similarity 1.0, clearance
and compartment rules are correct and explainable, the WS4 benchmark runs green with a published confusion
matrix and an evidence backed threshold, a four fifths dry run exists, the brain answers mission scoped
questions over RRF retrieval with incumbent intelligence, and a reviewer action produces a privacy scrubbed
curation proposal for human approval. The deterministic engine is unchanged throughout and the EEO
isolation tripwires stay green.
## 13. Out of scope (deferred)
GraphRAG teaming graphs and the capture and foresight features (win probability, price to win, clearance
timing) stay deferred. They return ErrScaffold today and need labeled historical outcome data this program
does not generate. They become viable after the customer accrues real decisions, and get their own spec.
## 14. Open decisions for owner review
1. Ontology sourcing: RESOLVED 2026-06-29 by live source verification. We auto pull the breadth from
five working no friction adapters (psc, nice, dcwf, calc, corpus) plus O*NET once its free key lands,
and we CURATE the IC mission spine. The spine is not scrapeable: the terms live only as prose across
three competing authorities (DoD Dictionary and Joint Pubs, ODNI, CNSSI 4009), the one machine readable
IC artifact (the CVE/XSD enumerations) carries classification markings not mission terms, the target is
tiny (roughly 150 to 400 terms, about a half day of curation), it barely changes (multi year doctrine
cycles), and choosing the governing authority for a contested term needs a human. So scraping it would
be more work, less reliable, and would still need hand reconciliation. Confirm this resolution.
2. Benchmark ground truth: pre customer labels are constructed by us from domain rules, not real hire
outcomes, and the model card will state that limit. Confirm this is acceptable as the interim proof.
3. Teaching loop target: aggregated reviewer signals become human approved curation proposals and
calibration evidence, never an automatic score or threshold change. Confirm this stays human in the loop
by design even once federated learning is enabled.