{
  "schema_version":"0.1",
  "control_id":"MNT08",
  "reviewed_on":"2026-09-16",
  "status":"implemented_change_impact_routing",
  "rules":[
    {"id":"application_surface","selectors":[{"prefix":"app/"}],"hooks":["navigation.inventory.changed","accessibility.expectation.changed","usability.interaction.changed"],"checks":["SITE01","UX06B1","MNT03","MNT06","BUILD"],"update_surfaces":["public/route-lifecycle-registry.json","public/feature-interconnections.json","public/usability-evidence.json"],"stage_gate":"Recheck route, navigation, accessibility, journey, privacy, and interaction boundaries before release.","limitations":"Source coverage does not replace browser, device, assistive-technology, or representative-user evidence."},
    {"id":"external_destination_source","selectors":[{"exact_in":["app/chatgpt-auth.ts","app/page.tsx","app/investigate/Investigator.tsx","app/investigate/grants/GrantPromptBuilder.tsx","app/investigate/grants/page.tsx","app/investigate/research-data.ts","app/investigate/student-workspace/page.tsx","public/minor-interaction-safety-fixtures.json","public/resources/START_HERE_Substrate_Cosmology.md"]}],"hooks":["student.external_link.changed","funding.opportunity.changed","research.parent.changed","platform.access.changed"],"checks":["SITE01","EDU01S2A","MNT09","MNT12A","MNT12B","MNT12CP","MNT12CV","BUILD"],"update_surfaces":["public/external-dependency-registry.json","public/external-network-observations.json","public/external-human-review-worklist.json","public/external-human-review-fixtures.json","public/external-review-protocol.json","public/external-review-fixtures.json","public/artifact-lifecycle-registry.json","app/investigate/change-register/page.tsx"],"stage_gate":"Classify each literal destination, preserve test-only quarantine, review audience and privacy boundaries, and require capable network or human review before claiming availability, authority, safeguarding, or funding currency.","limitations":"Source inventory detects reference drift but does not fetch destinations or validate external ownership, content, terms, safety, or uptime."},
    {"id":"shared_ui","selectors":[{"prefix":"components/"},{"prefix":"hooks/"},{"prefix":"lib/"}],"hooks":["accessibility.expectation.changed","usability.interaction.changed","dependency.major.changed"],"checks":["SITE01","UX06B1","MNT02","BUILD"],"update_surfaces":["public/platform-compatibility.json","public/usability-evidence.json"],"stage_gate":"Retest semantics, keyboard, touch, enlargement, reduced motion, and every affected task journey.","limitations":"Reusable component presence does not prove that every call site remains accessible."},
    {"id":"public_contract","selectors":[{"prefix":"public/","suffix":".json"}],"hooks":["research.parent.changed","feature.deprecated","development.priority.changed"],"checks":["SITE01","MNT03","MNT04","MNT05","MNT07","MNT10","MNT11","MNT12A","MNT12B","MNT12CP","MNT12CV"],"update_surfaces":["public/artifact-lifecycle-registry.json","public/feature-interconnections.json","public/maintenance-cadence-registry.json","public/recoverability-evidence.json","public/external-network-observations.json","public/external-human-review-worklist.json","public/external-human-review-fixtures.json","public/external-review-protocol.json","public/external-review-fixtures.json","public/site-maintenance.json"],"stage_gate":"Update schema version, dependencies, consumers, limitations, replacement path, review cadence, evidence lineage, and change register in the same release.","limitations":"Schema validity does not establish scientific validity, evidence freshness, recoverability outside the tested boundary, or external operating readiness."},
    {"id":"research_archive","selectors":[{"prefix":"public/resources/"}],"hooks":["research.parent.changed","research.term.changed","prompt.registry.changed"],"checks":["SITE01","MNT03","BUILD"],"update_surfaces":["public/feature-interconnections.json","app/site-continuity/page.tsx"],"stage_gate":"Preserve immutable recovery points, citations, lineage, nulls, conflicts, prompts, and compatible readers.","limitations":"Archive availability does not validate the claims contained in an artifact."},
    {"id":"public_asset","selectors":[{"exact":"public/favicon.svg"}],"hooks":["platform.hosting.changed","accessibility.expectation.changed"],"checks":["SITE01","MNT03","BUILD"],"update_surfaces":["app/layout.tsx","public/feature-interconnections.json"],"stage_gate":"Verify references, dimensions, contrast where relevant, build inclusion, and a replacement path.","limitations":"A successful build does not prove every external cache has refreshed."},
    {"id":"verification_control","selectors":[{"prefix":"scripts/check-","suffix":".mjs"}],"hooks":["development.priority.changed","limit.compute.changed","feature.deprecated"],"checks":["MNT07","BUILD"],"update_surfaces":["public/verification-control-registry.json","package.json"],"stage_gate":"Keep old and new controls together until parity, limitations, ordering, and failure behavior are demonstrated.","limitations":"A checker may validate only its declared evidence class; it cannot silently widen its authority."},
    {"id":"runtime_tooling","selectors":[{"prefix":"scripts/"}],"hooks":["platform.hosting.changed","dependency.major.changed","limit.compute.changed"],"checks":["MNT02","MNT07","BUILD"],"update_surfaces":["public/platform-compatibility.json","public/verification-control-registry.json"],"stage_gate":"Revalidate runtime compatibility, compute ceilings, packaging, rollback, and the production build.","limitations":"Local tool success does not prove hosted runtime equivalence."},
    {"id":"storage_schema","selectors":[{"prefix":"db/"},{"prefix":"drizzle/"},{"exact":"drizzle.config.ts"}],"hooks":["storage.schema.changed","platform.access.changed","privacy.expectation.changed","retention.schedule.changed"],"checks":["SITE01","MNT02","BUILD"],"update_surfaces":["public/platform-compatibility.json","public/site-maintenance.json"],"stage_gate":"Require migration review, old-record read, new-write, privacy, retention, rollback, and access tests before activation.","limitations":"Schema files do not prove that a hosted migration ran or that access enforcement is correct."},
    {"id":"hosting_manifest","selectors":[{"exact":".openai/hosting.json"}],"hooks":["platform.hosting.changed","platform.access.changed","storage.schema.changed"],"checks":["MNT02","MNT03","BUILD"],"update_surfaces":["public/platform-compatibility.json","public/site-maintenance.json"],"stage_gate":"Verify project identity, declared bindings, access audience, build output, migration state, rollback, and deployment status.","limitations":"The source manifest does not prove current external audience or service availability."},
    {"id":"dependency_configuration","selectors":[{"exact_in":[".gitignore",".npmrc","package.json","pnpm-lock.yaml","pnpm-workspace.yaml","components.json","cloudflare-env.d.ts","eslint.config.mjs","next.config.ts","postcss.config.mjs","tsconfig.json","vite.config.ts"]},{"prefix":"build/"},{"prefix":"vendor/"}],"hooks":["dependency.major.changed","platform.hosting.changed","limit.compute.changed"],"checks":["MNT02","MNT07","BUILD"],"update_surfaces":["public/platform-compatibility.json","public/verification-control-registry.json"],"stage_gate":"Review version, runtime, build, security, compatibility, compute, rollback, and replacement assumptions.","limitations":"Pinned dependencies and a passing build do not guarantee future vendor support."},
    {"id":"project_documentation","selectors":[{"exact_in":["README.md","MAINTENANCE.md"]}],"hooks":["prompt.registry.changed","feature.deprecated","development.priority.changed"],"checks":["SITE01","MNT07","MNT10","MNT11"],"update_surfaces":["public/site-maintenance.json","public/maintenance-cadence-registry.json","public/recoverability-evidence.json","app/investigate/change-register/page.tsx"],"stage_gate":"Keep continuation instructions, present limitations, successor paths, evidence freshness, recovery entrypoints, authority boundaries, and public change history consistent with executable controls.","limitations":"Documentation cannot override machine-readable gates or evidence."}
  ],
  "fixtures":[
    {"path":"app/api/contributions/route.ts","expects":["application_surface"]},
    {"path":"app/investigate/grants/page.tsx","expects":["application_surface","external_destination_source"]},
    {"path":"app/investigate/student-workspace/StudentProjectCoach.tsx","expects":["application_surface"]},
    {"path":"components/ui/button.tsx","expects":["shared_ui"]},
    {"path":"public/student-development-workspace.json","expects":["public_contract"]},
    {"path":"public/maintenance-cadence-registry.json","expects":["public_contract"]},
    {"path":"public/recoverability-evidence.json","expects":["public_contract"]},
    {"path":"public/external-review-protocol.json","expects":["public_contract"]},
    {"path":"public/external-review-fixtures.json","expects":["public_contract"]},
    {"path":"public/external-network-observations.json","expects":["public_contract"]},
    {"path":"public/external-human-review-worklist.json","expects":["public_contract"]},
    {"path":"public/external-human-review-fixtures.json","expects":["public_contract"]},
    {"path":"public/minor-interaction-safety-fixtures.json","expects":["external_destination_source","public_contract"]},
    {"path":"public/resources/START_HERE_Substrate_Cosmology.md","expects":["external_destination_source","research_archive"]},
    {"path":"scripts/check-route-lifecycle.mjs","expects":["verification_control","runtime_tooling"]},
    {"path":"db/schema.ts","expects":["storage_schema"]},
    {"path":".openai/hosting.json","expects":["hosting_manifest"]},
    {"path":"package.json","expects":["dependency_configuration"]},
    {"path":"MAINTENANCE.md","expects":["project_documentation"]}
  ],
  "change_rule":"Every tracked source file must match at least one impact rule. Adding or changing a rule requires its hooks, checks, update surfaces, stage gate, fixtures, limitations, and change-register entry in the same bounded release.",
  "global_stop_conditions":["unrouted changed file","unknown hook","unknown verification control","missing update surface","failed required check","unresolved access or protected-boundary impact"],
  "verification":{"checker":"scripts/check-change-impact.mjs","command":"pnpm check:site"}
}
