Data model — tech-agnostic-language-fallback-01M3NP53

Active project languages (catalog.languages, resolved by infer_repo_languages)

StateStored formMeaningAdmits language-scoped artifactsContext
no signalfield absent / nullnothing declaredall (legacy behaviour)no Languages line, no advisory
admit none[] (hand-edited only)explicit emptynoneunchanged
recognised[python, …]recognised languagesoverlapping onlyLanguages: …
unknown (new)[unknown]declared but unrecognisednone (unscoped still load)Languages: unknown + one advisory

Invariants:

  • unknown is never combined with a recognised language by the compiler (recognised wins).
  • unknown is reserved: an artifact may not declare applies_to_languages: [unknown] (validator rejects).
  • A hand-edited [python, unknown] resolves without error; python artifacts still load.
  • Transitions: only charter generate --from-interview may move a compiled value to a different state from the interview; runtime reads never do.

Dead-code gate outcome (mission review)

OutcomeGate resultFinding typeCodeVerdict effect
scanned, cleanpass——pass
scanned, unreferenced symbolsfail (as today)dead_code—pass_with_notes
undeterminable (git missing/failed, unreadable source, empty corpus)faildead_code_undeterminableMISSION_REVIEW_DEAD_CODE_UNDETERMINABLEfail
not applicable (new)skipdead_code_not_applicableMISSION_REVIEW_DEAD_CODE_NOT_APPLICABLEpass_with_notes

Not-applicable finding fields: type, diagnostic_code, unsupported_extensions (comma-joined, sorted), excluded_test_paths (count), reason, remediation.

Mixed change set: scanned outcome for the supported subset + a not-applicable note for the remainder (console note; the gate result follows the scan).