From 8b49b02dacf9fc622c2f69b0232412279413547f Mon Sep 17 00:00:00 2001
From: nateshpp <107772539+nateshpp@users.noreply.github.com>
Date: Mon, 27 Jul 2026 21:42:14 +0530
Subject: [PATCH 1/3] Add Risk Surface Guard, an execution and credential
blast-radius scanner (WI-055)
Adds a second, fully separate deterministic PR-diff scanner alongside the
anti-gaming ratchet: scripts/risk-surface-guard.mjs and its rule catalog
scripts/lib/risk-surface-rules.mjs (60 rules across 15 categories) flag diffs
that expand execution, credential, workflow, dataset/model-loading,
container, network, or sandbox risk, independent of whether any test gate
stays intact. See ADR-047 for the design rationale, including the two
self-reference safeguards required because this repo's own CI scans its own
PRs: content rules are scoped to real source/config extensions (so the
should-flag/should-allow fixtures under fixtures/risk-surface/ cannot trigger
the scanner shipped beside them), and the scanner's own implementation files
are exempt from content rules while remaining protected paths.
Ships warn-only by default (CLI --mode warn, action.yml's new risk-surface
input), registered as an advisory (non-blocking) entry in
check-self-application.mjs and base-pinned like the ratchet. Includes 52
tests, 45 fixtures, and full documentation (docs/risk-surface-guard.md,
README/SECURITY/CHANGELOG updates). Does not claim breach prevention and does
not replace SAST, secret scanning, dependency review, cloud security, or
sandboxing.
Known pre-existing, unrelated issue: scripts/check-repo-hygiene.mjs fails on
this branch's name (a model-identifier prefix assigned by the task dispatch
system), which also drops the passing-gate count reflected in
RELEASE-EVIDENCE.md and site/index.html. This is independent of branch
content and was confirmed present before any change in this commit.
---
.github/workflows/ci.yml | 29 +
.modonome/snapshot/badge.json | 2 +-
.modonome/snapshot/map.json | 2 +-
.modonome/snapshot/map.md | 175 ++--
.modonome/snapshot/signature.json | 2 +-
.../work-items/WI-055-risk-surface-guard.json | 44 +
CHANGELOG.md | 6 +
README.md | 6 +
RELEASE-EVIDENCE.md | 9 +-
SECURITY.md | 2 +-
action.yml | 25 +
docs/README.md | 1 +
docs/adr/ADR-047-risk-surface-guard.md | 108 ++
docs/risk-surface-guard.md | 121 +++
.../action-yml-sarif-permission-context.diff | 9 +
.../should-allow/comment-only-eval-js.diff | 8 +
.../comment-only-pull-request-target.diff | 8 +
.../doc-example-eval-no-code.diff | 7 +
.../should-allow/doc-example-in-readme.diff | 11 +
.../markdown-prose-curl-bash.diff | 6 +
.../should-allow/pinned-official-action.diff | 8 +
.../should-allow/removal-of-eval.diff | 8 +
.../removal-of-privileged-flag.diff | 8 +
.../sha-pinned-third-party-action.diff | 8 +
.../test-asserts-eval-blocked.diff | 7 +
.../should-flag/aws-credential-env-refs.diff | 8 +
.../bash-process-substitution.diff | 6 +
.../should-flag/curl-pipe-bash.diff | 6 +
.../docker-compose-privileged-true.diff | 8 +
.../should-flag/docker-privileged-flag.diff | 7 +
.../should-flag/docker-socket-mount.diff | 8 +
.../should-flag/gh-actions-actions-write.diff | 8 +
.../gh-actions-contents-write.diff | 9 +
.../gh-actions-id-token-write.diff | 8 +
.../gh-actions-permissions-write-all.diff | 8 +
.../gh-actions-pull-request-target.diff | 9 +
.../should-flag/gh-actions-secrets-usage.diff | 11 +
.../gh-actions-security-events-write.diff | 8 +
.../gh-actions-self-hosted-runner.diff | 9 +
...h-actions-unpinned-third-party-action.diff | 8 +
.../should-flag/gh-actions-workflow-run.diff | 8 +
.../should-flag/iam-wildcard-policy.diff | 13 +
.../risk-surface/should-flag/js-eval.diff | 8 +
.../k8s-allow-privilege-escalation.diff | 7 +
.../should-flag/k8s-host-network.diff | 7 +
.../should-flag/k8s-hostpath.diff | 10 +
.../should-flag/k8s-run-as-root.diff | 7 +
.../should-flag/metadata-service-access.diff | 7 +
.../should-flag/npm-install-http-url.diff | 6 +
.../should-flag/pip-install-unpinned-git.diff | 6 +
.../protected-path-touch-codeowners.diff | 6 +
.../protected-path-touch-security-md.diff | 6 +
.../python-subprocess-shell-true.diff | 7 +
.../should-flag/tls-curl-insecure.diff | 6 +
.../should-flag/tls-node-env-disable.diff | 6 +
.../should-flag/tls-python-verify-false.diff | 7 +
.../tls-reject-unauthorized-false.diff | 8 +
.../should-flag/trust-remote-code.diff | 7 +
.../should-flag/wget-pipe-sh.diff | 6 +
package.json | 1 +
schemas/gate-graph.json | 2 +-
scripts/check-gate-dag.mjs | 1 +
scripts/check-self-application.mjs | 7 +
.../gate/risk-surface-guard.mjs | 67 ++
scripts/lib/message-catalog/index.mjs | 2 +
scripts/lib/risk-surface-rules.mjs | 955 ++++++++++++++++++
scripts/risk-surface-guard.mjs | 355 +++++++
site/index.html | 2 +-
tests/risk-surface-guard.test.mjs | 470 +++++++++
tests/self-application.test.mjs | 3 +
70 files changed, 2674 insertions(+), 70 deletions(-)
create mode 100644 .modonome/work-items/WI-055-risk-surface-guard.json
create mode 100644 docs/adr/ADR-047-risk-surface-guard.md
create mode 100644 docs/risk-surface-guard.md
create mode 100644 fixtures/risk-surface/should-allow/action-yml-sarif-permission-context.diff
create mode 100644 fixtures/risk-surface/should-allow/comment-only-eval-js.diff
create mode 100644 fixtures/risk-surface/should-allow/comment-only-pull-request-target.diff
create mode 100644 fixtures/risk-surface/should-allow/doc-example-eval-no-code.diff
create mode 100644 fixtures/risk-surface/should-allow/doc-example-in-readme.diff
create mode 100644 fixtures/risk-surface/should-allow/markdown-prose-curl-bash.diff
create mode 100644 fixtures/risk-surface/should-allow/pinned-official-action.diff
create mode 100644 fixtures/risk-surface/should-allow/removal-of-eval.diff
create mode 100644 fixtures/risk-surface/should-allow/removal-of-privileged-flag.diff
create mode 100644 fixtures/risk-surface/should-allow/sha-pinned-third-party-action.diff
create mode 100644 fixtures/risk-surface/should-allow/test-asserts-eval-blocked.diff
create mode 100644 fixtures/risk-surface/should-flag/aws-credential-env-refs.diff
create mode 100644 fixtures/risk-surface/should-flag/bash-process-substitution.diff
create mode 100644 fixtures/risk-surface/should-flag/curl-pipe-bash.diff
create mode 100644 fixtures/risk-surface/should-flag/docker-compose-privileged-true.diff
create mode 100644 fixtures/risk-surface/should-flag/docker-privileged-flag.diff
create mode 100644 fixtures/risk-surface/should-flag/docker-socket-mount.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-actions-write.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-contents-write.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-id-token-write.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-permissions-write-all.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-pull-request-target.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-secrets-usage.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-security-events-write.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-self-hosted-runner.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-unpinned-third-party-action.diff
create mode 100644 fixtures/risk-surface/should-flag/gh-actions-workflow-run.diff
create mode 100644 fixtures/risk-surface/should-flag/iam-wildcard-policy.diff
create mode 100644 fixtures/risk-surface/should-flag/js-eval.diff
create mode 100644 fixtures/risk-surface/should-flag/k8s-allow-privilege-escalation.diff
create mode 100644 fixtures/risk-surface/should-flag/k8s-host-network.diff
create mode 100644 fixtures/risk-surface/should-flag/k8s-hostpath.diff
create mode 100644 fixtures/risk-surface/should-flag/k8s-run-as-root.diff
create mode 100644 fixtures/risk-surface/should-flag/metadata-service-access.diff
create mode 100644 fixtures/risk-surface/should-flag/npm-install-http-url.diff
create mode 100644 fixtures/risk-surface/should-flag/pip-install-unpinned-git.diff
create mode 100644 fixtures/risk-surface/should-flag/protected-path-touch-codeowners.diff
create mode 100644 fixtures/risk-surface/should-flag/protected-path-touch-security-md.diff
create mode 100644 fixtures/risk-surface/should-flag/python-subprocess-shell-true.diff
create mode 100644 fixtures/risk-surface/should-flag/tls-curl-insecure.diff
create mode 100644 fixtures/risk-surface/should-flag/tls-node-env-disable.diff
create mode 100644 fixtures/risk-surface/should-flag/tls-python-verify-false.diff
create mode 100644 fixtures/risk-surface/should-flag/tls-reject-unauthorized-false.diff
create mode 100644 fixtures/risk-surface/should-flag/trust-remote-code.diff
create mode 100644 fixtures/risk-surface/should-flag/wget-pipe-sh.diff
create mode 100644 scripts/lib/message-catalog/gate/risk-surface-guard.mjs
create mode 100644 scripts/lib/risk-surface-rules.mjs
create mode 100644 scripts/risk-surface-guard.mjs
create mode 100644 tests/risk-surface-guard.test.mjs
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6c74d18d..760d1398 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -124,6 +124,35 @@ jobs:
echo "scripts/check-decisions-authority.mjs not yet on base branch; skipping trust-isolation checkout (first introduction)."
fi
+ # Risk Surface Guard (ADR-047): base-pinned like guard-ratchet.mjs, so a PR
+ # cannot weaken the detector in the same diff that adds the risky pattern. This
+ # step, and the run step right after it, must both happen BEFORE "Load message
+ # catalog and its integrity gate from the base branch" below: that step's own
+ # bootstrap condition is already true today (check-message-catalog-integrity.mjs
+ # pre-exists on main), so on the PR that first introduces this gate it would
+ # unconditionally revert scripts/lib/message-catalog/index.mjs to the base copy,
+ # which does not yet import this gate's new catalog partial -- crashing this
+ # advisory step with "Unknown message id" on its own introducing PR if it ran
+ # any later. Running here avoids that; every PR after this one merges gets full,
+ # correct trust isolation either way.
+ - name: Load risk-surface-guard.mjs and its message catalog entry from the base branch
+ if: github.event_name == 'pull_request'
+ run: |
+ if git cat-file -e "origin/${{ github.base_ref }}:scripts/risk-surface-guard.mjs" 2>/dev/null; then
+ git checkout "origin/${{ github.base_ref }}" -- scripts/risk-surface-guard.mjs
+ git checkout "origin/${{ github.base_ref }}" -- scripts/lib/risk-surface-rules.mjs
+ git checkout "origin/${{ github.base_ref }}" -- scripts/lib/message-catalog/gate/risk-surface-guard.mjs
+ git checkout "origin/${{ github.base_ref }}" -- scripts/lib/message-catalog/index.mjs
+ else
+ echo "scripts/risk-surface-guard.mjs not yet on base branch; skipping trust-isolation checkout (first introduction)."
+ fi
+
+ # Advisory only: proves the gate is wired into CI (REQUIRED_GATES in
+ # check-self-application.mjs). Runs in --mode warn, which is contractually
+ # exit 0 regardless of findings, so it never fails this repository's own build.
+ - name: Run Risk Surface Guard scan (advisory)
+ run: node scripts/risk-surface-guard.mjs origin/main --mode warn
+
# Like check-decisions-authority.mjs above, this gate and the message
# catalog files that define its severity floors are new: the first PR
# that introduces them has no prior version on the base branch to load,
diff --git a/.modonome/snapshot/badge.json b/.modonome/snapshot/badge.json
index 7470760e..ba2f397e 100644
--- a/.modonome/snapshot/badge.json
+++ b/.modonome/snapshot/badge.json
@@ -1 +1 @@
-{"color":"blue","label":"snapshot","message":"1029 files, 135721 tok","schemaVersion":1}
+{"color":"blue","label":"snapshot","message":"1081 files, 138602 tok","schemaVersion":1}
diff --git a/.modonome/snapshot/map.json b/.modonome/snapshot/map.json
index 4019a10e..141afe47 100644
--- a/.modonome/snapshot/map.json
+++ b/.modonome/snapshot/map.json
@@ -1 +1 @@
-{"api":[{"anchor":"S:c5854b8940","doc":"Recursively snapshot path -> \"size:sha-like(content)\" for every file.","kind":"function","line":27,"name":"snapshot","path_id":"F:0103cf3d56","signature":"async function snapshot(dir)"},{"anchor":"S:44e7188c1d","doc":"Tiny content hash (FNV-1a): avoids a crypto import and is deterministic.","kind":"function","line":50,"name":"hash","path_id":"F:0103cf3d56","signature":"function hash(buf)"},{"anchor":"S:4ee042ed06","kind":"function","line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56","signature":"async function makeHostRepo()"},{"anchor":"S:08df8d7472","kind":"function","line":70,"name":"runPreflight","path_id":"F:0103cf3d56","signature":"function runPreflight(target)"},{"anchor":"S:c47beeac78","doc":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\".","kind":"function","line":11,"name":"normalizeRelative","path_id":"F:015261eab0","signature":"function normalizeRelative(fromPath, module)"},{"anchor":"S:0d7b0da50a","doc":"Resolve a relative import to a repo file, trying common extensions and index files. External and bare imports return null and become no edge.","kind":"function","line":24,"name":"resolveImport","path_id":"F:015261eab0","signature":"function resolveImport(fromPath, module, fileSet)"},{"anchor":"S:c732826ee5","doc":"Build an adjacency map { relPath -> [relPath, ...] } from per-file imports. Only edges that resolve to another repo file are kept.","kind":"function","line":41,"name":"buildImportGraph","path_id":"F:015261eab0","signature":"export function buildImportGraph(perFile, fileSet)"},{"anchor":"S:79144070a6","doc":"Degree centrality: out-edges of a node plus in-edges pointing at it.","kind":"function","line":55,"name":"centrality","path_id":"F:015261eab0","signature":"export function centrality(adj)"},{"anchor":"S:bb578790a3","doc":"PageRank over the import graph. Fixed iteration count keeps it deterministic. Dangling nodes (no out-edges) redistribute their rank uniformly.","kind":"function","line":67,"name":"pagerank","path_id":"F:015261eab0","signature":"export function pagerank(adj, { damping = 0.85, iterations = 40 } = {})"},{"anchor":"S:4d0bae812e","kind":"function","line":91,"name":"round","path_id":"F:015261eab0","signature":"function round(n, places = 6)"},{"anchor":"S:b88ce47ede","doc":"Rank files by a normalized composite of churn, centrality, and PageRank. Returns a sorted list of { path, churn, centrality, pagerank, score }, highest first.","kind":"function","line":98,"name":"attentionRank","path_id":"F:015261eab0","signature":"export function attentionRank(paths, { churn = new Map(), centralityMap = new Map(), pagerankMap = new Map() } = {})"},{"anchor":"S:5ad0c942a1","doc":"Report whether the import graph has a cycle and one example cycle, reusing the shared cycle detector so the snapshot can warn about circular dependencies.","kind":"function","line":117,"name":"findCycle","path_id":"F:015261eab0","signature":"export function findCycle(adj)"},{"anchor":"S:1e6749f65a","kind":"function","line":31,"name":"run","path_id":"F:02a5f8fc55","signature":"function run(env)"},{"anchor":"S:c932c7339f","doc":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under test can make the run fail or pass.","kind":"function","line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249","signature":"function makeMinimalRepo()"},{"anchor":"S:0ab594146c","kind":"function","line":33,"name":"runScript","path_id":"F:0391f3b249","signature":"function runScript(tmp)"},{"anchor":"S:689125598d","doc":"A git-init'd variant of makeMinimalRepo(), for the staleness check, which shells out to `git log` and needs a real repository to query.","kind":"function","line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249","signature":"function makeMinimalGitRepo()"},{"anchor":"S:bac2ebbef5","kind":"function","line":53,"name":"gitCommit","path_id":"F:0391f3b249","signature":"function gitCommit(tmp, message)"},{"anchor":"S:cd2e7eba8f","doc":"Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as ","kind":"function","line":61,"name":"gitCommitAt","path_id":"F:0391f3b249","signature":"function gitCommitAt(tmp, message, isoDate)"},{"anchor":"S:405ee38bbe","kind":"const","line":65,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e","signature":"export const CATALOG_PARTIALS = ["},{"anchor":"S:949f988c9e","kind":"function","line":10,"name":"makeDb","path_id":"F:044b762a79","signature":"function makeDb(orders = new Map())"},{"anchor":"S:e96fb86528","doc":"Catalog entries for scripts/check-edit-set-compliance.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5","signature":"export const MESSAGES ="},{"anchor":"S:f8524caefc","kind":"const","line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9","signature":"export const SEVERITY_RANK = { ok: 0, info: 1, attention: 2, blocked: 3 };"},{"anchor":"S:c12913d4da","kind":"function","line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9","signature":"function mergeCatalog(sources)"},{"anchor":"S:4bea381dfd","kind":"const","line":33,"name":"MESSAGES","path_id":"F:05bffc70e9","signature":"export const MESSAGES = mergeCatalog(CATALOG_SOURCES);"},{"anchor":"S:81c9c1291a","kind":"function","line":35,"name":"interpolate","path_id":"F:05bffc70e9","signature":"function interpolate(template, params)"},{"anchor":"S:db0bb71f37","doc":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries.","kind":"function","line":41,"name":"clampSeverity","path_id":"F:05bffc70e9","signature":"function clampSeverity(entry, requestedSeverity)"},{"anchor":"S:a79dad6e97","kind":"function","line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9","signature":"export function loadMessageOverrides(modonomeDir)"},{"anchor":"S:0044d1a126","doc":"Validate an overrides document (the parsed contents of messages.yaml) against both the JSON schema and the severity-floor rule. Shared by scripts/check-message-catalog-integrity.mjs (CI) and the contr","kind":"function","line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9","signature":"export function checkOverridesIntegrity(overridesDoc, schema)"},{"anchor":"S:8282a0b575","doc":"Look up a message by id, apply any operator override (clamped to the floor for non_suppressible entries), interpolate {param} tokens, and return the resolved { id, severity, suppressed, message } read","kind":"function","line":85,"name":"formatMessage","path_id":"F:05bffc70e9","signature":"export function formatMessage(id, params = {}, overrides = {})"},{"anchor":"S:6dde857e83","doc":"List every catalog entry with its resolved (override-applied) state, for the control panel's Messages tab.","kind":"function","line":104,"name":"listMessages","path_id":"F:05bffc70e9","signature":"export function listMessages(overrides = {})"},{"anchor":"S:ab3548c3d0","kind":"function","line":16,"name":"baseCfg","path_id":"F:06b982f5a2","signature":"function baseCfg(extra = {})"},{"anchor":"S:0a11409d06","doc":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens the * item: identities, lease, allowed e","kind":"interface","line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53","signature":"export interface WorkItemDetail extends WorkItemSummary"},{"anchor":"S:6a4d8aa30d","kind":"interface","line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53","signature":"export interface WorkItemDrawerProps"},{"anchor":"S:1e67af68fc","kind":"function","line":52,"name":"Section","path_id":"F:08064e0c53","signature":"function Section({ label, children }: { label: string; children: ReactNode })"},{"anchor":"S:fff471613b","doc":"A read-only inspector for a single work item, presented in the shared `Drawer` * primitive. Lays out status, the maker and checker identities, lease and branch * info, attempt count, the allowed edit ","kind":"function","line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53","signature":"export function WorkItemDrawer({ item, open, onClose }: WorkItemDrawerProps)"},{"anchor":"S:9f9c07db7d","kind":"function","line":10,"name":"Model","path_id":"F:08577063d4","signature":"export const Model = () => ("},{"anchor":"S:d3f17c584a","kind":"function","line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86","signature":"function isSelfGovernance(dir)"},{"anchor":"S:02e2e85572","kind":"function","line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86","signature":"function resolveModonomeDir(rawMode, dirParam)"},{"anchor":"S:8097fe47fc","kind":"function","line":40,"name":"readBody","path_id":"F:08b7435c86","signature":"function readBody(req)"},{"anchor":"S:a10a756308","kind":"function","line":59,"name":"sendJson","path_id":"F:08b7435c86","signature":"function sendJson(res, status, body)"},{"anchor":"S:0e6240f5b7","doc":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the base flag first (off => nothing is writa","kind":"function","line":70,"name":"writeGate","path_id":"F:08b7435c86","signature":"function writeGate(baseWritable, dir)"},{"anchor":"S:b06f3444be","kind":"function","line":86,"name":"stateWithSource","path_id":"F:08b7435c86","signature":"function stateWithSource(baseWritable, dir, mode)"},{"anchor":"S:62210684b4","doc":"Best-effort reachability probe for an OpenAI-compatible endpoint (LM Studio, Ollama, a gateway). Read-only and network-only: it never touches config.yaml, so it needs no write guard. Always resolves (","kind":"function","line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86","signature":"function buildModelsUrl(baseUrl)"},{"anchor":"S:3f9e6b3a7b","kind":"function","line":104,"name":"testConnection","path_id":"F:08b7435c86","signature":"async function testConnection(baseUrl)"},{"anchor":"S:5092562c12","kind":"function","line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86","signature":"export function modonomeApiPlugin()"},{"anchor":"S:9b40c124ce","kind":"function","line":17,"name":"baseCfg","path_id":"F:093689bb8e","signature":"function baseCfg(extra = {})"},{"anchor":"S:7078ce1661","kind":"function","line":40,"name":"today","path_id":"F:09ba331878","signature":"function today()"},{"anchor":"S:735c642c3a","doc":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch.","kind":"function","line":46,"name":"collectNearMisses","path_id":"F:09ba331878","signature":"export function collectNearMisses({ branch, commits })"},{"anchor":"S:4358d9c393","doc":"A denylist proposal is per unique (tier, surface, token): the widener proposes adding a token, not fixing N occurrences. Keep the first occurrence as evidence.","kind":"function","line":67,"name":"proposalsFrom","path_id":"F:09ba331878","signature":"export function proposalsFrom(findings)"},{"anchor":"S:b89188d9e3","kind":"function","line":76,"name":"main","path_id":"F:09ba331878","signature":"function main(argv)"},{"anchor":"S:79997ba94d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:09ea014068","signature":"export const MESSAGES ="},{"anchor":"S:b29fc4b0d5","kind":"function","line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d","signature":"export const ArmEngine = () => ("},{"anchor":"S:8cd25e6f09","kind":"type","line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:40a4170626","kind":"type","line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5","signature":"export type ArmingMode = \"disabled\" | \"dry-run\" | \"armed\";"},{"anchor":"S:49f97badd7","kind":"type","line":12,"name":"WorkState","path_id":"F:0a85f3b8e5","signature":"export type WorkState ="},{"anchor":"S:3e9158c80b","kind":"type","line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5","signature":"export type RiskTier = 1 | 2 | 3 | 4;"},{"anchor":"S:86cb290127","doc":"The subject a mode points at: which repo the panel is reading.","kind":"interface","line":25,"name":"Subject","path_id":"F:0a85f3b8e5","signature":"export interface Subject"},{"anchor":"S:a337ae8f0b","doc":"The engine configuration (schemas/config.schema.json), the levers the panel edits.","kind":"interface","line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5","signature":"export interface ModonomeConfig"},{"anchor":"S:577a1daeb3","kind":"type","line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5","signature":"export type MessageSeverity = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:6605365375","doc":"One entry of the built-in message catalog (scripts/lib/messages.mjs), with * this subject's .modonome/messages.yaml overrides already resolved. A * non_suppressible entry's severity/suppressed always ","kind":"interface","line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5","signature":"export interface MessageCatalogEntryVM"},{"anchor":"S:d22e005d52","doc":"A patch to one message's override, as sent to onSaveMessages. Omitted * fields reset to the catalog default; severity/suppressed are rejected * server-side for a non_suppressible id.","kind":"interface","line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5","signature":"export interface MessageOverridePatch"},{"anchor":"S:d56c1854d7","doc":"One prerequisite in the armed-mode gate checklist.","kind":"interface","line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5","signature":"export interface ArmingCheck"},{"anchor":"S:6bc87187a8","kind":"interface","line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5","signature":"export interface ArmingStatus"},{"anchor":"S:a4a9a79fbe","kind":"type","line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5","signature":"export type WorkItemType = \"fix-issue\" | \"develop-feature\" | \"create-article\" | \"create-plan\" | \"update-docs\" | \"chore\";"},{"anchor":"S:3f93aaa307","doc":"True for any state where a real actor could be actively working the item: * mutating it destructively (delete) needs the lease released first.","kind":"const","line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5","signature":"export const IN_FLIGHT_STATES: WorkState[] = [\"claimed\", \"making\", \"checking\", \"rework\", \"merge_ready\", \"merging\"];"},{"anchor":"S:5a49db2766","kind":"interface","line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemVM"},{"anchor":"S:f3e5c99141","kind":"interface","line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5","signature":"export interface LeaseVM"},{"anchor":"S:dddb39652d","kind":"type","line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:9bc07de53c","kind":"interface","line":181,"name":"GateVM","path_id":"F:0a85f3b8e5","signature":"export interface GateVM"},{"anchor":"S:126357e421","kind":"interface","line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5","signature":"export interface CostByModel"},{"anchor":"S:ebe2964819","kind":"interface","line":198,"name":"CostVM","path_id":"F:0a85f3b8e5","signature":"export interface CostVM"},{"anchor":"S:72a5c214ac","kind":"interface","line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5","signature":"export interface LearningVM"},{"anchor":"S:e03cf612ca","kind":"interface","line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5","signature":"export interface DecisionVM"},{"anchor":"S:6ef3b2f2e5","doc":"One commit the metadata-only remediator would rewrite, and why.","kind":"interface","line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationProposalVM"},{"anchor":"S:b41535d6e7","doc":"The armed metadata-only remediator (ADR-035) as a read-only surface plus one owner * lever. `applyEnabled` mirrors the config flag; `ready` is true only when every arming * condition is met, and `bloc","kind":"interface","line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationVM"},{"anchor":"S:3ad2d564a8","kind":"type","line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5","signature":"export type AuditKind ="},{"anchor":"S:7c6ba2a644","kind":"interface","line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5","signature":"export interface AuditEventVM"},{"anchor":"S:19226d4902","kind":"interface","line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5","signature":"export interface ProtectedPathVM"},{"anchor":"S:61e677ae40","kind":"interface","line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5","signature":"export interface TrendPoint"},{"anchor":"S:cefb8c3f64","doc":"Where a loaded PanelState actually came from, so the UI never presents demo data as real.","kind":"interface","line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5","signature":"export interface PanelSource"},{"anchor":"S:4a0171ecb5","kind":"interface","line":295,"name":"PanelState","path_id":"F:0a85f3b8e5","signature":"export interface PanelState"},{"anchor":"S:6dcad3cdf1","doc":"Fields a new work item is created with. Always starts in state \"queued\".","kind":"interface","line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5","signature":"export interface NewWorkItemInput"},{"anchor":"S:7934857ce3","doc":"Safe-to-edit-anytime fields: never state, owner, or lease, since those change only * through the existing lease/transition machinery, never a generic metadata edit.","kind":"interface","line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemPatch"},{"anchor":"S:a2d9480f78","kind":"interface","line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5","signature":"export interface WriteActions"},{"anchor":"S:6dd199eea1","doc":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads itself","kind":"function","line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9","signature":"export function resolveActiveKey(peerKeys, alias, now = new Date(), overrides = {})"},{"anchor":"S:f3b8628cdb","doc":"Full ordered verification. options.skipContentGate runs only the signature checks (steps 3 to 5), used when the caller already ran the schema and redaction gate.","kind":"function","line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9","signature":"export function verifyPacket(packet, peerKeys, { now = new Date(), skipContentGate = false, overrides = {} } = {})"},{"anchor":"S:0af608ade0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:0c731e3460","signature":"export const MESSAGES ="},{"anchor":"S:ee5246d16c","kind":"function","line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b","signature":"export function generateKeypair()"},{"anchor":"S:842e875c5a","doc":"Raw 32-byte public key as base64, accepting either a public or private KeyObject.","kind":"function","line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyB64(keyObject)"},{"anchor":"S:8a971e3c54","doc":"Public KeyObject from a raw 32-byte base64 public key.","kind":"function","line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyFromB64(b64)"},{"anchor":"S:380b82547c","doc":"Private KeyObject from base64 PKCS8 DER (the env-secret format).","kind":"function","line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyFromB64Pkcs8(b64)"},{"anchor":"S:19e5ddb185","kind":"function","line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyToB64Pkcs8(keyObject)"},{"anchor":"S:1c7919b4ea","kind":"function","line":40,"name":"signMessage","path_id":"F:0cacf66a3b","signature":"export function signMessage(message, privateKeyObject)"},{"anchor":"S:fb81ef11a3","kind":"function","line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b","signature":"export function verifyMessage(message, sigB64, publicKeyObject)"},{"anchor":"S:4a08c48993","doc":"Short fingerprint for out-of-band key comparison (ADR-017 enrollment): the first 16 hex characters of sha256 over the raw public key bytes.","kind":"function","line":54,"name":"fingerprint","path_id":"F:0cacf66a3b","signature":"export function fingerprint(pubB64)"},{"anchor":"S:f2e1ea8458","kind":"function","line":16,"name":"deriveMode","path_id":"F:0da05a2a05","signature":"export function deriveMode(config: ModonomeConfig, envArmed: boolean): ArmingMode"},{"anchor":"S:97bc3f0eb4","kind":"function","line":22,"name":"deriveArming","path_id":"F:0da05a2a05","signature":"export function deriveArming("},{"anchor":"S:a3fb13b441","kind":"function","line":4,"name":"Tones","path_id":"F:10e76cfcd3","signature":"export const Tones = () => ("},{"anchor":"S:14ef0a45e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1127892e72","signature":"export const MESSAGES ="},{"anchor":"S:a1d4334d94","kind":"function","line":44,"name":"App","path_id":"F:113387361d","signature":"export function App()"},{"anchor":"S:670e55d75a","kind":"const","line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce","signature":"export const CACHE_SCHEMA_VERSION = 1;"},{"anchor":"S:31032f0509","doc":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option (some git options can read or write fil","kind":"function","line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce","signature":"export function isPlausibleRevision(value)"},{"anchor":"S:7762c6d861","kind":"function","line":21,"name":"cachePath","path_id":"F:119e3c0fce","signature":"function cachePath(root)"},{"anchor":"S:59b9039619","doc":"Load the cache for a repo, or null when absent, unreadable, or a different version.","kind":"function","line":28,"name":"loadCache","path_id":"F:119e3c0fce","signature":"export function loadCache(root)"},{"anchor":"S:ba5f7d1ffe","doc":"Persist the cache. entries is { relPath: { hash, symbols, imports, purposeRaw } }.","kind":"function","line":41,"name":"saveCache","path_id":"F:119e3c0fce","signature":"export function saveCache(root, { built_at_head = null, entries = {} })"},{"anchor":"S:ed24428ce0","doc":"The current git HEAD sha for the repo, or null when unavailable.","kind":"function","line":50,"name":"gitHead","path_id":"F:119e3c0fce","signature":"export function gitHead(root)"},{"anchor":"S:236237bc1b","doc":"Strip git's optional quoting from a porcelain path.","kind":"function","line":56,"name":"unquote","path_id":"F:119e3c0fce","signature":"function unquote(p)"},{"anchor":"S:93d0a78f18","doc":"The set of paths that changed since the cache was built: uncommitted work (git status) plus commits since cache.built_at_head. Returns null when git is not usable, which forces a full rebuild.","kind":"function","line":65,"name":"changedPaths","path_id":"F:119e3c0fce","signature":"export function changedPaths(root, cache)"},{"anchor":"S:c3d94f0812","doc":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse.","kind":"function","line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a","signature":"export function parseRepoFromUrl(url)"},{"anchor":"S:d1b03afffb","doc":"Derive a stable repo label. The generator block credits the tool (generator.name is always \"modonome\"), so the per-repo identity lives in generator.repository. Prefer that, then fall back to the filen","kind":"function","line":41,"name":"deriveRepoName","path_id":"F:128b647d9a","signature":"export function deriveRepoName(att, filename)"},{"anchor":"S:3a57c07db5","doc":"Three-way posture from the attestation posture block.","kind":"function","line":48,"name":"derivePosture","path_id":"F:128b647d9a","signature":"export function derivePosture(posture)"},{"anchor":"S:26df582c22","doc":"Build one row from a filename and its raw text. A parse or shape problem is recorded on the row and reported as a table cell; it never throws, so one bad file cannot crash the whole run.","kind":"function","line":57,"name":"buildRow","path_id":"F:128b647d9a","signature":"export function buildRow(filename, text)"},{"anchor":"S:ba36fd17d6","doc":"Read every *.json file in dir and build a row for each. Files are read once with readFileSync (no separate stat then read, so there is no check-to-use race window). Returns unsorted rows.","kind":"function","line":100,"name":"collectRows","path_id":"F:128b647d9a","signature":"export function collectRows(dir)"},{"anchor":"S:c42dd60d39","doc":"Deterministic order: by repo label, then by filename as a tie-break.","kind":"function","line":126,"name":"sortRows","path_id":"F:128b647d9a","signature":"export function sortRows(rows)"},{"anchor":"S:7619cf060d","kind":"function","line":133,"name":"escapeHtml","path_id":"F:128b647d9a","signature":"function escapeHtml(s)"},{"anchor":"S:7bcf8115de","kind":"function","line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a","signature":"function capabilitiesCell(caps)"},{"anchor":"S:b366c411d2","doc":"Render the sorted rows to a self-contained HTML document. Pure: given the same rows and options it returns the same string.","kind":"function","line":150,"name":"renderHtml","path_id":"F:128b647d9a","signature":"export function renderHtml(rows, options = {})"},{"anchor":"S:5afb2ca954","doc":"Full pipeline: directory to HTML string. Exported for tests.","kind":"function","line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a","signature":"export function renderLedgerFromDir(dir, options = {})"},{"anchor":"S:0255163ba3","kind":"function","line":229,"name":"parseArgs","path_id":"F:128b647d9a","signature":"function parseArgs(argv)"},{"anchor":"S:cecb0a4a33","kind":"function","line":248,"name":"main","path_id":"F:128b647d9a","signature":"function main(argv)"},{"anchor":"S:3968554637","kind":"const","line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461","signature":"export const VOLATILE_FIELDS = ['id', 'signature'];"},{"anchor":"S:9f7fa8d585","kind":"function","line":10,"name":"packetContent","path_id":"F:12c7a4e461","signature":"export function packetContent(packet)"},{"anchor":"S:a0ea4d9d0f","kind":"function","line":18,"name":"computePacketId","path_id":"F:12c7a4e461","signature":"export function computePacketId(packet)"},{"anchor":"S:d2ef86c19f","kind":"function","line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461","signature":"export function packetIdMatches(packet)"},{"anchor":"S:4700befa2a","kind":"function","line":16,"name":"run","path_id":"F:137056535b","signature":"function run(args = [], env = {})"},{"anchor":"S:bc56c13940","doc":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind.","kind":"function","line":22,"name":"preservingArtifact","path_id":"F:137056535b","signature":"function preservingArtifact(fn)"},{"anchor":"S:2cd4d9571d","kind":"function","line":189,"name":"withTempFile","path_id":"F:137056535b","signature":"function withTempFile(name, content, fn)"},{"anchor":"S:5708b6bd2b","kind":"function","line":4,"name":"PendingApproval","path_id":"F:13d31b33ea","signature":"export const PendingApproval = () => ("},{"anchor":"S:4f265e8008","kind":"function","line":8,"name":"Approved","path_id":"F:13d31b33ea","signature":"export const Approved = () => ("},{"anchor":"S:93e0292f30","kind":"function","line":12,"name":"Protected","path_id":"F:13d31b33ea","signature":"export const Protected = () => ;"},{"anchor":"S:e80517f20b","kind":"interface","line":6,"name":"ActivationCheck","path_id":"F:14edab923f","signature":"export interface ActivationCheck"},{"anchor":"S:30eded078f","kind":"interface","line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f","signature":"export interface ActivationLadderProps"},{"anchor":"S:73a3da9f65","doc":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when every * prerequisite holds. Items marked o","kind":"function","line":46,"name":"ActivationLadder","path_id":"F:14edab923f","signature":"export function ActivationLadder("},{"anchor":"S:237d74cadf","kind":"function","line":21,"name":"parseScalar","path_id":"F:1575110130","signature":"function parseScalar(raw)"},{"anchor":"S:299c43d83e","kind":"function","line":40,"name":"stripQuotes","path_id":"F:1575110130","signature":"function stripQuotes(s)"},{"anchor":"S:0b7b39d873","doc":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string.","kind":"function","line":49,"name":"extractRawValue","path_id":"F:1575110130","signature":"function extractRawValue(afterColon)"},{"anchor":"S:b4a3093fe9","doc":"Count leading spaces to determine nesting depth.","kind":"function","line":66,"name":"indentOf","path_id":"F:1575110130","signature":"function indentOf(line)"},{"anchor":"S:bec355e18a","doc":"Parse an array of non-empty, non-comment lines into a nested object. Each entry is { indent, key, rawValue, isItem }, where a sequence-item line (\"- value\") has isItem: true and key: null.","kind":"function","line":75,"name":"parseEntries","path_id":"F:1575110130","signature":"function parseEntries(entries, start, minIndent)"},{"anchor":"S:8990e6571f","kind":"function","line":118,"name":"parseFlatYaml","path_id":"F:1575110130","signature":"export function parseFlatYaml(text)"},{"anchor":"S:5bac9ae6d5","kind":"function","line":151,"name":"formatScalarForYaml","path_id":"F:1575110130","signature":"function formatScalarForYaml(value)"},{"anchor":"S:efe9cb11d4","doc":"Patch one or more top-level (zero-indent) scalar keys in a config.yaml's raw text, line by line. Every other line, including every comment, is left untouched, so a hand-written config file survives an","kind":"function","line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130","signature":"export function patchTopLevelYaml(text, patch)"},{"anchor":"S:0b56ac32a5","kind":"const","line":1,"name":"MESSAGES","path_id":"F:179564da6f","signature":"export const MESSAGES ="},{"anchor":"S:1b14fa60f7","kind":"function","line":92,"name":"git","path_id":"F:18f569225a","signature":"function git(args, cwd)"},{"anchor":"S:34df99c630","kind":"function","line":98,"name":"makeGitFixture","path_id":"F:18f569225a","signature":"function makeGitFixture()"},{"anchor":"S:a3cae87964","kind":"function","line":109,"name":"makePlan","path_id":"F:18f569225a","signature":"function makePlan(role, roleDescriptor, transcriptSubdir, extra = {})"},{"anchor":"S:0eec918c49","kind":"function","line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a","signature":"function cleanupTranscripts()"},{"anchor":"S:0064b473e6","kind":"function","line":14,"name":"tmpQueue","path_id":"F:195e9217ca","signature":"function tmpQueue()"},{"anchor":"S:d240732a9d","kind":"function","line":18,"name":"sampleAction","path_id":"F:195e9217ca","signature":"function sampleAction(id, target = \"ci\")"},{"anchor":"S:05a5299b28","kind":"interface","line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae","signature":"export interface ConceptTileProps extends ButtonHTMLAttributes"},{"anchor":"S:14c08c7efc","doc":"A compact, focusable tile naming one engine concept: an icon, its name, and a short * category tag. Renders as a real button so it is keyboard-reachable on its own, meant * to be wrapped in a HoverCar","kind":"function","line":20,"name":"ConceptTile","path_id":"F:1a137480ae","signature":"export function ConceptTile({ icon, label, tag, className, ...rest }: ConceptTileProps)"},{"anchor":"S:76d7b21daf","doc":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary ceiling.","kind":"const","line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364","signature":"export const MAX_CONTROLS_PER_TAB = 10;"},{"anchor":"S:b840cddd67","kind":"function","line":20,"name":"readScreens","path_id":"F:1a19f02364","signature":"function readScreens(root)"},{"anchor":"S:7a05eaea5a","doc":"Every field in config.schema.json must resolve to either a literal reference in a screen (a real control, or read-only display) or a documented exemption in exposure.json. A plain substring search, no","kind":"function","line":34,"name":"auditCoverage","path_id":"F:1a19f02364","signature":"export function auditCoverage(root)"},{"anchor":"S:da2f845458","doc":"Splits a screen's source into one segment per tab (by source order, using the `{tab === \"id\" ?` marker this codebase's tabbed screens consistently use), or a single whole-file segment for screens with","kind":"function","line":57,"name":"splitByTabs","path_id":"F:1a19f02364","signature":"function splitByTabs(text)"},{"anchor":"S:6a7737bb57","kind":"function","line":66,"name":"extractTags","path_id":"F:1a19f02364","signature":"function extractTags(text, tagNames)"},{"anchor":"S:0ac24bec51","doc":"Two checks, both numeric: a screen/tab must not exceed the control-density budget, and every value-entry control (Toggle, NumberField, Slider, Select) must carry a hint. Input is excluded from the hin","kind":"function","line":76,"name":"auditCoherence","path_id":"F:1a19f02364","signature":"export function auditCoherence(root)"},{"anchor":"S:762b3eaf4a","kind":"function","line":17,"name":"Models","path_id":"F:1aa7cf650d","signature":"export const Models = () => ("},{"anchor":"S:8da618623d","kind":"function","line":18,"name":"headSha","path_id":"F:1bc6d1449f","signature":"function headSha()"},{"anchor":"S:fc01241f03","doc":"A config fixture with distinct maker/checker models and a models registry.","kind":"function","line":13,"name":"cfg","path_id":"F:1bcaaff9eb","signature":"function cfg(overrides = {})"},{"anchor":"S:55b15c0abb","doc":"A short, stable id from a string. Hex keeps it deterministic across platforms.","kind":"function","line":9,"name":"short","path_id":"F:1cf31c4792","signature":"function short(text, len = 10)"},{"anchor":"S:2e016b842d","kind":"function","line":13,"name":"fileAnchor","path_id":"F:1cf31c4792","signature":"export function fileAnchor(relPath)"},{"anchor":"S:00db09c5a8","kind":"function","line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792","signature":"export function symbolAnchor(relPath, name)"},{"anchor":"S:ab79b43633","doc":"Build the path dictionary from walked files. Returns { paths, pathIdByPath } where `paths` is the serializable { id -> relPath } map and `pathIdByPath` is the reverse lookup callers use to reference p","kind":"function","line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792","signature":"export function buildPathDictionary(relPaths)"},{"anchor":"S:63613c3a63","doc":"Build the symbol dictionary from API entries. Each entry carries its anchor, owning path id, name, and line, so an anchor resolves to an exact location.","kind":"function","line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792","signature":"export function buildSymbolDictionary(apiEntries)"},{"anchor":"S:a3ca73d34c","doc":"Lifecycle status of a learning: staged for review, or promoted into a permanent gate.","kind":"type","line":6,"name":"LearningStatus","path_id":"F:1d03291691","signature":"export type LearningStatus = \"staged\" | \"promoted\";"},{"anchor":"S:6cbed7ff26","doc":"Plain data shape for a single learning surfaced by the system. Components in this * package define their own shape rather than importing app-level types, so this * interface is the contract a host app","kind":"interface","line":13,"name":"LearningSummary","path_id":"F:1d03291691","signature":"export interface LearningSummary"},{"anchor":"S:8b9971d92a","kind":"interface","line":30,"name":"LearningCardProps","path_id":"F:1d03291691","signature":"export interface LearningCardProps"},{"anchor":"S:d293a69125","doc":"A card summarizing a single learning the system has surfaced: the lesson learned, * how old it is, what signal or evidence produced it, and its lifecycle status. * Staged learnings offer Promote and P","kind":"function","line":49,"name":"LearningCard","path_id":"F:1d03291691","signature":"export function LearningCard({ learning, onPromote, onPrune }: LearningCardProps)"},{"anchor":"S:14850052c8","kind":"interface","line":6,"name":"TabItem","path_id":"F:1db369d970","signature":"export interface TabItem"},{"anchor":"S:c68bb17ca2","kind":"interface","line":17,"name":"TabsProps","path_id":"F:1db369d970","signature":"export interface TabsProps"},{"anchor":"S:bd1a0a35f8","doc":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-selected`, and only the active tab is in th","kind":"function","line":35,"name":"Tabs","path_id":"F:1db369d970","signature":"export function Tabs({ tabs, active, onChange, className }: TabsProps)"},{"anchor":"S:d737cd7277","kind":"function","line":52,"name":"flagValue","path_id":"F:1e5ef6ba70","signature":"function flagValue(argv, name)"},{"anchor":"S:8f93f4689a","doc":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-024: even an armed engine will not rewri","kind":"function","line":60,"name":"armState","path_id":"F:1e5ef6ba70","signature":"function armState(root, env = process.env)"},{"anchor":"S:46d884501c","kind":"function","line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70","signature":"function armingBlockers(arm)"},{"anchor":"S:baa16abe42","kind":"function","line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70","signature":"function targetIdentity(argv)"},{"anchor":"S:6140d7ae56","kind":"function","line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70","signature":"function identityUsable(id)"},{"anchor":"S:edeb959111","doc":"Gather the branch-unique commit range oldest-first with the fields the applier needs: tree object, first parent, author and committer identity and dates, and raw message. Enforces the protected-histor","kind":"function","line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70","signature":"function gatherRange()"},{"anchor":"S:4bc9723575","doc":"Advisory range for `plan`: tolerant of a missing origin/main so the proposal works in a fresh clone. Newest-first from git log; reversed to oldest-first for stable output.","kind":"function","line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70","signature":"function advisoryRange()"},{"anchor":"S:59807c1a98","kind":"function","line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70","signature":"function buildPlan(branch, commits, identity)"},{"anchor":"S:2484ffb006","kind":"function","line":142,"name":"printPlan","path_id":"F:1e5ef6ba70","signature":"function printPlan(plan, identity)"},{"anchor":"S:e7f49cafe1","kind":"function","line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70","signature":"function isDirtyTracked()"},{"anchor":"S:e2861b1099","kind":"function","line":173,"name":"rollback","path_id":"F:1e5ef6ba70","signature":"function rollback(savedHead)"},{"anchor":"S:e8b27564c5","doc":"Replay the range from the first changed commit forward, reusing each original tree object so the rewrite is metadata-only. Verifies tree-SHA invariance per commit and rolls back on any failure. Return","kind":"function","line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70","signature":"function applyPlan(commits, plan)"},{"anchor":"S:b97efe3854","kind":"function","line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70","signature":"function cmdPlan(argv)"},{"anchor":"S:69db4ad7cc","kind":"function","line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70","signature":"function cmdApply(argv, root)"},{"anchor":"S:602e030d27","kind":"function","line":297,"name":"main","path_id":"F:1e5ef6ba70","signature":"function main(argv)"},{"anchor":"S:5a6c3aef24","kind":"class","line":7,"name":"OrderService","path_id":"F:1ecd18c4b9","signature":"export class OrderService"},{"anchor":"S:a2fef04067","kind":"function","line":4,"name":"Budget","path_id":"F:1f40b6eb6e","signature":"export const Budget = () => ("},{"anchor":"S:2ed4ecfad7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4","signature":"export const MESSAGES ="},{"anchor":"S:8c2cd9c54f","doc":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mjs.","kind":"function","line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca","signature":"export function buildProposalReviewPrompt(proposal, checkerModel, authorLabel)"},{"anchor":"S:ebd259dfef","doc":"Resolve the checker and plan its review of a proposal, without calling a model. * * @returns {{ checker: object, authorLabel: string, proposal: string, prompt: string }}","kind":"function","line":43,"name":"planProposalReview","path_id":"F:2127a8caca","signature":"export function planProposalReview(cfg, { proposal, authorLabel = \"an external author\" } = {})"},{"anchor":"S:a1cc5660fe","doc":"A garbled review, or one with no explicit marker, must NOT read as an approval: a proposal is admitted to the backlog only on an explicit APPROVE: yes. Fail closed.","kind":"function","line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca","signature":"export function parseProposalVerdict(text)"},{"anchor":"S:3fc87c5f7e","doc":"Plan the proposal review and, under execute:true, run the checker on its endpoint. * The live path supports the openai-http transport (a local or free/gateway model), * matching the local-first cost s","kind":"function","line":73,"name":"reviewProposal","path_id":"F:2127a8caca","signature":"export async function reviewProposal(cfg, { proposal, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:537ea4dfe0","kind":"type","line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4","signature":"export type ToggleTone = \"primary\" | \"info\" | \"owner\";"},{"anchor":"S:cd836c2fc7","kind":"interface","line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4","signature":"export interface ToggleProps"},{"anchor":"S:84b00e90de","doc":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a checkbox so the on/off semantics are anno","kind":"function","line":28,"name":"Toggle","path_id":"F:214cc0a5f4","signature":"export function Toggle("},{"anchor":"S:b919653baa","kind":"function","line":44,"name":"DryRun","path_id":"F:2207a6ebce","signature":"export const DryRun = () => ("},{"anchor":"S:ea5d04ea13","kind":"function","line":48,"name":"Armed","path_id":"F:2207a6ebce","signature":"export const Armed = () => ("},{"anchor":"S:e193570e9e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc","signature":"export const MESSAGES ="},{"anchor":"S:7cd45cbc03","kind":"function","line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e","signature":"function formatYamlScalar(value)"},{"anchor":"S:1c5d801590","doc":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent scalar or array keys are touched here; ","kind":"function","line":70,"name":"patchYamlText","path_id":"F:22566cb46e","signature":"function patchYamlText(text, patch)"},{"anchor":"S:15b3a95566","doc":"Locate a top-level `key:` block-opening line (a zero-indent key whose value is empty, meaning what follows is a nested map) and the half-open [start, end) line range it and its indented content occupy","kind":"function","line":100,"name":"findBlock","path_id":"F:22566cb46e","signature":"function findBlock(lines, key)"},{"anchor":"S:aa8f9a7b3d","doc":"Split a block's interior lines into ordered segments: a real entry (a line at exactly ENTRY_INDENT spaces naming a key, plus every following line indented deeper than that), or \"other\" (blank lines, a","kind":"function","line":122,"name":"captureSegments","path_id":"F:22566cb46e","signature":"function captureSegments(lines, start, end)"},{"anchor":"S:c3a1d0f1a7","kind":"function","line":151,"name":"serializeEntry","path_id":"F:22566cb46e","signature":"function serializeEntry(topKey, entryKey, value)"},{"anchor":"S:af28852c7f","kind":"function","line":169,"name":"deepEqualJson","path_id":"F:22566cb46e","signature":"function deepEqualJson(a, b)"},{"anchor":"S:2eef7d840d","doc":"Reconcile one nested map's block against its new value, entry by entry. An entry present in both, unchanged, is copied verbatim (comments and all); a changed entry is re-serialized (dropping any comme","kind":"function","line":180,"name":"rewriteBlock","path_id":"F:22566cb46e","signature":"function rewriteBlock(lines, topKey, oldValue, newValue)"},{"anchor":"S:b06714d9c5","kind":"function","line":225,"name":"patchConfig","path_id":"F:22566cb46e","signature":"export function patchConfig(modonomeDir, patch)"},{"anchor":"S:8b67ef3e8b","kind":"function","line":266,"name":"workItemFile","path_id":"F:22566cb46e","signature":"function workItemFile(modonomeDir, itemId)"},{"anchor":"S:fd9d32de9a","kind":"function","line":272,"name":"releaseLease","path_id":"F:22566cb46e","signature":"export function releaseLease(modonomeDir, itemId)"},{"anchor":"S:d7086f2a5b","kind":"function","line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e","signature":"function loadConfigForValidation(modonomeDir)"},{"anchor":"S:f22a53ac17","kind":"function","line":305,"name":"createWorkItem","path_id":"F:22566cb46e","signature":"export function createWorkItem(modonomeDir, input)"},{"anchor":"S:a4e623c70b","doc":"Metadata-only edit: type, assigned_role, allowed_edit_set, gates, max_attempts, and touches_protected_path are safe to change regardless of the item's current state, including in flight, since none of","kind":"function","line":354,"name":"updateWorkItem","path_id":"F:22566cb46e","signature":"export function updateWorkItem(modonomeDir, itemId, patch)"},{"anchor":"S:14cb0e8cbb","doc":"Refuses outright for any in-flight state, regardless of whether its lease has technically expired: an item past \"queued\" represents real record of what happened (a branch, a PR, attempts, a maker iden","kind":"function","line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e","signature":"export function deleteWorkItem(modonomeDir, itemId)"},{"anchor":"S:e152142e8c","doc":"Merge a patch of { id: { severity?, text?, suppressed? } } into .modonome/messages.yaml's overrides map, re-validate against both the schema and the severity-floor rule (the same checkOverridesIntegri","kind":"function","line":399,"name":"patchMessages","path_id":"F:22566cb46e","signature":"export function patchMessages(modonomeDir, patch)"},{"anchor":"S:5b0e153cfb","kind":"function","line":424,"name":"pruneLearning","path_id":"F:22566cb46e","signature":"export function pruneLearning(modonomeDir, lesson)"},{"anchor":"S:a931ad2e62","doc":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns {string} the concatenated committed prom","kind":"function","line":46,"name":"resolvePromptText","path_id":"F:23917c6197","signature":"export function resolvePromptText(root)"},{"anchor":"S:0a5fed1978","doc":"Load every fixture JSON file from a directory. * @param {string} dir directory holding fixture *.json files * @returns {Array} parsed fixture objects, sorted by file name for stable output","kind":"function","line":59,"name":"loadFixtures","path_id":"F:23917c6197","signature":"export function loadFixtures(dir)"},{"anchor":"S:407ded8730","doc":"Evaluate one fixture against the committed prompt text. A fixture is ok only when * every one of its anchors is present, meaning the governing rule that produces its * golden decision still exists in ","kind":"function","line":79,"name":"evaluateFixture","path_id":"F:23917c6197","signature":"export function evaluateFixture(fixture, promptText)"},{"anchor":"S:c2e641f1c8","doc":"Run the whole suite: load fixtures, resolve prompt text, evaluate each. * @param {string} root repository root * @param {string} fixturesDir directory holding fixtures * @returns {{ results: Array<{id","kind":"function","line":106,"name":"runSuite","path_id":"F:23917c6197","signature":"export function runSuite(root, fixturesDir)"},{"anchor":"S:87ceb91d57","kind":"const","line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76","signature":"export const MESSAGES ="},{"anchor":"S:b5883cd7f4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:240ace7a8f","signature":"export const MESSAGES ="},{"anchor":"S:76171943e3","kind":"function","line":7,"name":"canonicalize","path_id":"F:245efb551c","signature":"export function canonicalize(value)"},{"anchor":"S:781c4112a2","doc":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another.","kind":"const","line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c","signature":"export const PACKET_DOMAIN = 'modonome.knowledge-packet.v1\\n';"},{"anchor":"S:210b0c6999","doc":"The exact bytes a packet signature covers: the domain tag followed by the JCS of the packet with its signature object removed.","kind":"function","line":26,"name":"signedBytes","path_id":"F:245efb551c","signature":"export function signedBytes(packet)"},{"anchor":"S:c44da37a7d","kind":"function","line":12,"name":"Dashboard","path_id":"F:2470e60179","signature":"export const Dashboard = () => ("},{"anchor":"S:7d5af2fca1","kind":"function","line":22,"name":"Staged","path_id":"F:250c8a0d4a","signature":"export const Staged = () => ("},{"anchor":"S:dd05df51d3","kind":"function","line":26,"name":"Promoted","path_id":"F:250c8a0d4a","signature":"export const Promoted = () => ;"},{"anchor":"S:4df7a92e8e","kind":"function","line":15,"name":"registerAdapter","path_id":"F:2554ddd30c","signature":"export function registerAdapter(adapter)"},{"anchor":"S:a07487517b","doc":"Resolve the adapter for a path by extension, defaulting to the generic fallback.","kind":"function","line":25,"name":"getAdapter","path_id":"F:2554ddd30c","signature":"export function getAdapter(relPath)"},{"anchor":"S:ec18e42e1a","doc":"Extract from one file, guarding against any adapter error so a single bad file never aborts a whole snapshot.","kind":"function","line":32,"name":"extractFile","path_id":"F:2554ddd30c","signature":"export function extractFile(relPath, source)"},{"anchor":"S:2fbd29545b","kind":"function","line":42,"name":"nestedMapChanged","path_id":"F:25e649633c","signature":"function nestedMapChanged(a: Record | undefined, b: Record | undefined): boolean"},{"anchor":"S:ea841eb82d","kind":"function","line":49,"name":"diffConfig","path_id":"F:25e649633c","signature":"export function diffConfig(base: ModonomeConfig, edited: ModonomeConfig): Partial"},{"anchor":"S:4426823827","kind":"interface","line":5,"name":"NavItem","path_id":"F:268769c4a6","signature":"export interface NavItem"},{"anchor":"S:a4155f5067","kind":"interface","line":16,"name":"AppShellProps","path_id":"F:268769c4a6","signature":"export interface AppShellProps"},{"anchor":"S:24b854ce78","doc":"The Modonome brand mark: a teal ring with a check on the dark ground.","kind":"function","line":36,"name":"BrandMark","path_id":"F:268769c4a6","signature":"function BrandMark()"},{"anchor":"S:5154763a93","doc":"The application frame: a fixed sidebar of primary navigation, a sticky top bar for * the mode switch and arming status, and a scrollable content column. It establishes * the mdn-root wrapper (the dark","kind":"function","line":60,"name":"AppShell","path_id":"F:268769c4a6","signature":"export function AppShell("},{"anchor":"S:33dfee21e3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2715f09f24","signature":"export const MESSAGES ="},{"anchor":"S:df7e6c1db0","kind":"function","line":4,"name":"Disabled","path_id":"F:28b7af3c53","signature":"export const Disabled = () => ;"},{"anchor":"S:36be7c4ac5","kind":"function","line":6,"name":"DryRun","path_id":"F:28b7af3c53","signature":"export const DryRun = () => ;"},{"anchor":"S:813f68335e","kind":"function","line":8,"name":"Armed","path_id":"F:28b7af3c53","signature":"export const Armed = () => ;"},{"anchor":"S:28578fa81a","kind":"function","line":10,"name":"Large","path_id":"F:28b7af3c53","signature":"export const Large = () => ;"},{"anchor":"S:bd9f62784d","doc":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker that only reads the rationale and skims ","kind":"const","line":5,"name":"scenario","path_id":"F:28f278b1d9","signature":"export const scenario ="},{"anchor":"S:d595535449","kind":"function","line":9,"name":"names","path_id":"F:2a74ae3f05","signature":"function names(result)"},{"anchor":"S:a5baaff840","kind":"function","line":12,"name":"modules","path_id":"F:2a74ae3f05","signature":"function modules(result)"},{"anchor":"S:b9942b1651","kind":"function","line":11,"name":"runRatchet","path_id":"F:2b49c74e74","signature":"function runRatchet(diffFile)"},{"anchor":"S:015c572711","doc":"Hash raw file bytes (Buffer or string) into a prefixed digest.","kind":"function","line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca","signature":"export function hashFileContent(bytes)"},{"anchor":"S:b926c18911","doc":"Hash an arbitrary string, used for oversized or unreadable files where content is represented by a stable stand-in rather than its bytes.","kind":"function","line":15,"name":"hashString","path_id":"F:2b9c43b0ca","signature":"export function hashString(text)"},{"anchor":"S:a320bea4da","doc":"Build a Merkle tree from file leaves. `entries` is [{ relPath, hash }]. Returns { root, nodes } where nodes maps every directory path (root is \".\") to its hash.","kind":"function","line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca","signature":"export function buildMerkleTree(entries)"},{"anchor":"S:85c852fd1a","doc":"File-level diff between two { relPath -> hash } maps. Returns sorted lists of added, removed, and changed paths. Directory node hashes (from buildMerkleTree) let a caller skip re-extracting an unchang","kind":"function","line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca","signature":"export function diffMerkle(prevFiles, nextFiles)"},{"anchor":"S:ad4edf7e81","kind":"function","line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861","signature":"def test_total_sums_prices()"},{"anchor":"S:54d2db3f99","doc":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50%, etc.) to verify correct discount calc","kind":"function","line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861","signature":"def test_apply_discount_zero_percent()"},{"anchor":"S:93fa315ac7","kind":"function","line":48,"name":"fail","path_id":"F:2d4c555ba1","signature":"function fail(code, message)"},{"anchor":"S:8252cf2ba8","kind":"function","line":52,"name":"warn","path_id":"F:2d4c555ba1","signature":"function warn(code, message)"},{"anchor":"S:003e6c53c4","kind":"function","line":56,"name":"info","path_id":"F:2d4c555ba1","signature":"function info(code, message)"},{"anchor":"S:5ef7e9a80c","doc":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into approving itself (the new attack surface a","kind":"function","line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990","signature":"export function buildReviewPrompt(diff, checkerModel, authorLabel)"},{"anchor":"S:d5a9bb4227","kind":"function","line":47,"name":"capDiff","path_id":"F:2d6ef08990","signature":"function capDiff(diff)"},{"anchor":"S:fb6bf396bc","doc":"Resolve the checker and plan its review of a diff, without calling any model. * Enforces checker independence: when the change's maker model is known and distinct * models are required, the checker mu","kind":"function","line":61,"name":"planReview","path_id":"F:2d6ef08990","signature":"export function planReview(cfg, { diff, makerModel = null, authorLabel = \"an external author\" } = {})"},{"anchor":"S:9ab63d4bb2","doc":"Extract a coarse structured verdict from the checker's free text. Deliberately simple: the summary is the first line, REQUEST_CHANGES drives the requestChanges flag. A missing marker is treated as \"no","kind":"function","line":83,"name":"parseVerdict","path_id":"F:2d6ef08990","signature":"export function parseVerdict(text)"},{"anchor":"S:bca7722767","doc":"Plan the review and, under execute:true, run the checker on its configured endpoint. * The spike's live path supports the openai-http transport (a local or free/gateway * model, matching the local-fir","kind":"function","line":100,"name":"reviewDiff","path_id":"F:2d6ef08990","signature":"export async function reviewDiff(cfg, { diff, makerModel, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:568ac62670","doc":"--- CLI ---------------------------------------------------------------------","kind":"function","line":124,"name":"parseArgs","path_id":"F:2d6ef08990","signature":"function parseArgs(argv)"},{"anchor":"S:f12376c7b1","kind":"function","line":136,"name":"readDiff","path_id":"F:2d6ef08990","signature":"function readDiff(path)"},{"anchor":"S:2d24ebcbdf","doc":"A markdown block for a human, and for GitHub Actions the same block lands in the job summary when the workflow redirects stdout to $GITHUB_STEP_SUMMARY.","kind":"function","line":143,"name":"renderReport","path_id":"F:2d6ef08990","signature":"function renderReport({ plan, executed, review })"},{"anchor":"S:118e66be10","doc":"Minimal argv helper shared by scripts that take `--flag value` pairs.","kind":"function","line":2,"name":"flagValue","path_id":"F:2d93cea2d4","signature":"export function flagValue(argv, name)"},{"anchor":"S:4bacff1244","kind":"function","line":15,"name":"fileExists","path_id":"F:2e327963ed","signature":"function fileExists(root, ...candidates)"},{"anchor":"S:41050d03a4","kind":"function","line":19,"name":"readIfExists","path_id":"F:2e327963ed","signature":"function readIfExists(root, rel)"},{"anchor":"S:1be3814c77","kind":"function","line":24,"name":"listWorkflows","path_id":"F:2e327963ed","signature":"function listWorkflows(root)"},{"anchor":"S:8f1da92228","doc":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object.","kind":"function","line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed","signature":"export function detectRepoFacts(root)"},{"anchor":"S:74bea9ecdf","doc":"A criterion entry: a stable id, the framework and level, whether the observed facts satisfy it, and the evidence or remediation note.","kind":"function","line":59,"name":"criterion","path_id":"F:2e327963ed","signature":"function criterion(id, framework, level, met, evidence)"},{"anchor":"S:8e94f927e1","doc":"Map observed facts to criteria across the supported frameworks. Pure.","kind":"function","line":64,"name":"mapToCriteria","path_id":"F:2e327963ed","signature":"export function mapToCriteria(facts)"},{"anchor":"S:a0db477c6e","kind":"function","line":90,"name":"summarize","path_id":"F:2e327963ed","signature":"export function summarize(criteria)"},{"anchor":"S:f93b3b8c7c","kind":"function","line":95,"name":"buildEvidence","path_id":"F:2e327963ed","signature":"export function buildEvidence(root, generatedAt)"},{"anchor":"S:43f1c85009","kind":"function","line":108,"name":"renderMarkdown","path_id":"F:2e327963ed","signature":"export function renderMarkdown(evidence)"},{"anchor":"S:c504685956","kind":"interface","line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee","signature":"export interface EmptyStateProps"},{"anchor":"S:80e9a1f555","doc":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it","kind":"function","line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee","signature":"export function EmptyState({ title, message, icon = \"queue\", action }: EmptyStateProps)"},{"anchor":"S:baacff5701","kind":"interface","line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee","signature":"export interface LoadingStateProps"},{"anchor":"S:0a9b63cb4b","doc":"Centered spinner with a label, used while a screen or panel is fetching data. * The spinner is a decorative rotating ring; the label carries the accessible * status via `role=\"status\"` so assistive te","kind":"function","line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee","signature":"export function LoadingState({ label = \"Loading\" }: LoadingStateProps)"},{"anchor":"S:9382da6a24","kind":"interface","line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee","signature":"export interface ErrorStateProps"},{"anchor":"S:78e9af551d","doc":"Danger-toned placeholder for a screen or panel that failed to load. Pairs the * danger color with an alert icon and text so the failure is never color-only. * Use `role=\"alert\"` semantics are carried ","kind":"function","line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee","signature":"export function ErrorState({ title = \"Something went wrong\", message, action }: ErrorStateProps)"},{"anchor":"S:79676d74df","kind":"interface","line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee","signature":"export interface PermissionDeniedStateProps"},{"anchor":"S:3800b0c645","doc":"Owner-toned placeholder shown when the current actor lacks the role needed to * view or act on a screen. Pairs the owner color with a lock icon and text so the * restriction is never color-only.","kind":"function","line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee","signature":"export function PermissionDeniedState("},{"anchor":"S:fc6f0e771f","kind":"type","line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94","signature":"export type StatusPillTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:0518e5f603","kind":"type","line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94","signature":"export type StatusPillSize = \"sm\" | \"md\";"},{"anchor":"S:c850118bb2","kind":"interface","line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94","signature":"export interface StatusPillProps extends HTMLAttributes"},{"anchor":"S:eb647d4678","doc":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or dot) so * the status reads correctly even ","kind":"function","line":27,"name":"StatusPill","path_id":"F:2fc610bd94","signature":"export function StatusPill("},{"anchor":"S:35a01a919e","doc":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative when present preserves every existing confi","kind":"function","line":45,"name":"primaryModel","path_id":"F:304ce7b89d","signature":"function primaryModel(roleCfg, roleDefaults)"},{"anchor":"S:0713a27a1f","kind":"function","line":51,"name":"resolveRole","path_id":"F:304ce7b89d","signature":"export function resolveRole(cfg, role)"},{"anchor":"S:433f196465","doc":"Resolve a role's prioritized model list into an ordered array of fully-resolved model descriptors, highest priority first. Source is roleCfg.models when present, else the single primary model, so a ro","kind":"function","line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d","signature":"export function resolveRoleModelChain(cfg, role)"},{"anchor":"S:5aed523637","doc":"Pick the first model in a chain that is affordable under the daily budget, so a prioritized list falls back from a paid frontier choice to a free or local one when no budget is set. A local or free mo","kind":"function","line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d","signature":"export function selectUsableModel(chain, { budgetUsdPerDay = 0 } = {})"},{"anchor":"S:a2d5fcb920","doc":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duties * contract (distinct maker, checker, ","kind":"function","line":13,"name":"GatesScreen","path_id":"F:304fa8ef33","signature":"export function GatesScreen({ state }: { state: PanelState })"},{"anchor":"S:b6cbeed65d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:313bcfac46","signature":"export const MESSAGES ="},{"anchor":"S:6425f5a6c7","kind":"function","line":10,"name":"WithLeases","path_id":"F:31658eff0b","signature":"export const WithLeases = () => {}} />;"},{"anchor":"S:618d055a7c","doc":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and import edges. Bodies are never included. e","kind":"function","line":5,"name":"clean","path_id":"F:3213d03b72","signature":"function clean(text)"},{"anchor":"S:37c1996b57","kind":"function","line":10,"name":"signature","path_id":"F:3213d03b72","signature":"function signature(line)"},{"anchor":"S:1bafda617f","doc":"The docstring is the first triple-quoted string on the line(s) after a def/class.","kind":"function","line":15,"name":"docBelow","path_id":"F:3213d03b72","signature":"function docBelow(lines, defIndex)"},{"anchor":"S:82727ee8e7","kind":"function","line":35,"name":"collectImports","path_id":"F:3213d03b72","signature":"function collectImports(trimmed, lineNo, out)"},{"anchor":"S:aaa1eac555","kind":"const","line":47,"name":"adapter","path_id":"F:3213d03b72","signature":"export const adapter ="},{"anchor":"S:a63cef8ef8","kind":"function","line":4,"name":"Armed","path_id":"F:3319e5c923","signature":"export const Armed = () => ("},{"anchor":"S:e25d17a09c","kind":"function","line":17,"name":"SafeDefaults","path_id":"F:3319e5c923","signature":"export const SafeDefaults = () => ("},{"anchor":"S:457f8a5e17","doc":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi","kind":"const","line":4,"name":"MESSAGES","path_id":"F:33c4d744f3","signature":"export const MESSAGES ="},{"anchor":"S:4b38793395","doc":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal","kind":"const","line":8,"name":"scenario","path_id":"F:34ca4e55d1","signature":"export const scenario ="},{"anchor":"S:f794e6adf4","kind":"function","line":6,"name":"typeOf","path_id":"F:34cb2b6c48","signature":"function typeOf(value)"},{"anchor":"S:0768a4cf0f","kind":"function","line":13,"name":"matchesType","path_id":"F:34cb2b6c48","signature":"function matchesType(value, type)"},{"anchor":"S:52913852e3","kind":"function","line":22,"name":"validate","path_id":"F:34cb2b6c48","signature":"export function validate(schema, value, path = \"$\", errors = [])"},{"anchor":"S:4b7a72e608","kind":"type","line":4,"name":"Role","path_id":"F:35c6d59157","signature":"export type Role ="},{"anchor":"S:fdc2a33d21","kind":"type","line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157","signature":"export type RoleBadgeSize = \"sm\" | \"md\";"},{"anchor":"S:e3f95000e0","kind":"interface","line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157","signature":"export interface RoleBadgeProps"},{"anchor":"S:301cb496d5","doc":"A labeled chip identifying a governance actor or role, pairing an icon with the * human-readable name. The four core review actors (maker, checker, merge authority, * owner) get distinct accent colors","kind":"function","line":72,"name":"RoleBadge","path_id":"F:35c6d59157","signature":"export function RoleBadge({ role, size = \"md\" }: RoleBadgeProps)"},{"anchor":"S:35902c8cc1","kind":"const","line":1,"name":"MESSAGES","path_id":"F:35d4a12b63","signature":"export const MESSAGES ="},{"anchor":"S:61ec9209fc","kind":"function","line":22,"name":"matchSymbol","path_id":"F:36419aa427","signature":"function matchSymbol(trimmed)"},{"anchor":"S:500f4c1cd3","kind":"function","line":30,"name":"cleanSignature","path_id":"F:36419aa427","signature":"function cleanSignature(trimmed)"},{"anchor":"S:3602dcc44c","kind":"function","line":37,"name":"cleanDoc","path_id":"F:36419aa427","signature":"function cleanDoc(text)"},{"anchor":"S:df1472b647","kind":"function","line":47,"name":"docAbove","path_id":"F:36419aa427","signature":"function docAbove(lines, index)"},{"anchor":"S:ac015d1f81","kind":"function","line":67,"name":"collectImports","path_id":"F:36419aa427","signature":"function collectImports(trimmed, lineNo)"},{"anchor":"S:70c4ff437c","kind":"const","line":80,"name":"adapter","path_id":"F:36419aa427","signature":"export const adapter ="},{"anchor":"S:65d6e9b42e","kind":"function","line":112,"name":"dedupeImports","path_id":"F:36419aa427","signature":"function dedupeImports(imports)"},{"anchor":"S:442c9dff6c","kind":"function","line":5,"name":"makeGateway","path_id":"F:373a946d5c","signature":"function makeGateway()"},{"anchor":"S:af1450421c","doc":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the github-models provider (needs models:re","kind":"function","line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e","signature":"export function classifyEndpoint(role)"},{"anchor":"S:cbbe6a270b","doc":"A base_url points at a private/self-hosted host when its hostname is localhost, a loopback address, a *.local mDNS name, or an RFC1918 range.","kind":"function","line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e","signature":"function isPrivateHost(baseUrl)"},{"anchor":"S:ff45c441d1","doc":"Decide whether a runner target can reach a role's endpoint. A target declares * its reach with optional fields on its config entry: * reachable_providers: provider names it can call (for example [\"loc","kind":"function","line":67,"name":"canReach","path_id":"F:37f4a5c04e","signature":"export function canReach(target, roleEndpoint)"},{"anchor":"S:55ee648216","doc":"Resolve the required execution target (environment id) for a role's model * endpoint. Reads cfg.runners and returns the first target that both declares an * environment and can reach the endpoint, pre","kind":"function","line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e","signature":"export function resolveExecutionTarget(role, cfg, overrides = {})"},{"anchor":"S:2a28972ca4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3835919e8e","signature":"export const MESSAGES ="},{"anchor":"S:a9b3acb352","kind":"function","line":16,"name":"writeRunLog","path_id":"F:3b382f95c0","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:4118076b3e","kind":"function","line":29,"name":"pad","path_id":"F:3b382f95c0","signature":"function pad(s, n) { return String(s).padEnd(n); }"},{"anchor":"S:0ba2f17fcf","kind":"function","line":30,"name":"rpad","path_id":"F:3b382f95c0","signature":"function rpad(s, n) { return String(s).padStart(n); }"},{"anchor":"S:02e9b6beea","kind":"function","line":32,"name":"parseMetrics","path_id":"F:3b382f95c0","signature":"function parseMetrics()"},{"anchor":"S:5962011a99","kind":"function","line":41,"name":"summarize","path_id":"F:3b382f95c0","signature":"function summarize(events)"},{"anchor":"S:b288f69305","kind":"function","line":76,"name":"agentproofScore","path_id":"F:3b382f95c0","signature":"function agentproofScore()"},{"anchor":"S:145bc035b8","kind":"function","line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0","signature":"function listFilesRecursive(dir, matches, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:5967648d07","doc":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple heuristic, not a full doc-coverage analysi","kind":"function","line":116,"name":"isDocumented","path_id":"F:3b382f95c0","signature":"function isDocumented(filePath)"},{"anchor":"S:98d9caecec","doc":"Advisory, bounded heuristic: an exported symbol is a \"dead code suspect\" when its declared name never appears again (by plain text match) anywhere else under scripts/ or tests/. This is a name-collisi","kind":"function","line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0","signature":"function findExportedSymbols(filePath)"},{"anchor":"S:cab6ecab70","kind":"function","line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0","signature":"export function computeDeadCodeSuspects(sourceFiles, root, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:62f42e9591","doc":"Computes a deterministic, offline snapshot of repo-impact metrics rooted at `root` (a directory containing scripts/, tests/, docs/). Pure aside from filesystem reads; never writes anything.","kind":"function","line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function computeImpactSnapshot(root)"},{"anchor":"S:882efb23a5","doc":"Reads the newest run log under runsDir that carries an `impact` field. Returns null if none exists (first run, no baseline).","kind":"function","line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function findPriorImpactSnapshot(runsDir)"},{"anchor":"S:d444b209b8","doc":"Pure delta computation: current minus prior for each numeric field. When prior is null/undefined, returns a \"first run, no baseline\" marker instead of numeric deltas.","kind":"function","line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0","signature":"export function computeImpactDelta(current, prior)"},{"anchor":"S:bafcfbb33c","kind":"function","line":224,"name":"formatDelta","path_id":"F:3b382f95c0","signature":"function formatDelta(n)"},{"anchor":"S:b6eeacb415","kind":"function","line":4,"name":"Requirement","path_id":"F:3b4065b679","signature":"export const Requirement = () => ("},{"anchor":"S:35e362f448","kind":"function","line":79,"name":"emit","path_id":"F:3b96b6dfed","signature":"function emit(format, decision, reason)"},{"anchor":"S:073124e2d8","kind":"function","line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed","signature":"function extractFromClaudeToolInput(toolName, input, cwd)"},{"anchor":"S:40cce153df","doc":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor beforeShellExecution payload carries `comma","kind":"function","line":135,"name":"extractChange","path_id":"F:3b96b6dfed","signature":"function extractChange(payload)"},{"anchor":"S:f2e55d9b4a","kind":"function","line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed","signature":"function guessFileFromCommand(cmd)"},{"anchor":"S:209a48ca7f","doc":"Best-effort parse of a `sed 's/PATTERN/REPLACEMENT/'` (or `#`, `|`, `,`, `@` delimited) substitution. This is the one shell idiom common enough, and structured enough, to reliably recover a real befor","kind":"function","line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed","signature":"function parseSedReplacement(cmd)"},{"anchor":"S:485d7c5e96","kind":"function","line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed","signature":"function unescapeSed(s)"},{"anchor":"S:4214f7fa01","doc":"Best-effort parse of a shell redirect target (`> file`, `>> file`), which names the exact file the command is about to write, stronger than any token guess.","kind":"function","line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed","signature":"function parseRedirectTarget(cmd)"},{"anchor":"S:2305f3725a","kind":"function","line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed","signature":"function diffForCommand(cmd)"},{"anchor":"S:d761c7660a","kind":"function","line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed","signature":"function diffForReplace(filePath, oldText, newText)"},{"anchor":"S:2df1658785","kind":"function","line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed","signature":"function diffForMultiEdit(filePath, edits)"},{"anchor":"S:ae3c96ae84","kind":"function","line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed","signature":"function diffForWrite(filePath, content, cwd)"},{"anchor":"S:7d253ea6b0","kind":"function","line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed","signature":"function buildSyntheticDiff(change)"},{"anchor":"S:8761033dfb","kind":"function","line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed","signature":"function runGuardRatchet(diffText)"},{"anchor":"S:12c1e0f104","kind":"function","line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed","signature":"function formatDenyReason(findings)"},{"anchor":"S:745c98231d","kind":"function","line":338,"name":"main","path_id":"F:3b96b6dfed","signature":"function main()"},{"anchor":"S:efea80af4e","doc":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying the * control-panel requirement of a co","kind":"function","line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e","signature":"export function ConfirmProvider({ children }: { children: ReactNode })"},{"anchor":"S:7989466d34","kind":"function","line":59,"name":"useConfirm","path_id":"F:3c479cac6e","signature":"export function useConfirm(): ConfirmFn"},{"anchor":"S:b908c74a11","kind":"function","line":5,"name":"makeDb","path_id":"F:3c53926ecd","signature":"function makeDb()"},{"anchor":"S:225c7a7d84","kind":"function","line":21,"name":"Open","path_id":"F:3ce0fd77eb","signature":"export const Open = () => {}} />;"},{"anchor":"S:a2df9a5c24","kind":"function","line":23,"name":"Resolved","path_id":"F:3ce0fd77eb","signature":"export const Resolved = () => ;"},{"anchor":"S:7c44412e8a","kind":"function","line":4,"name":"WithHeader","path_id":"F:3d505706cd","signature":"export const WithHeader = () => ("},{"anchor":"S:72d4f657d5","kind":"function","line":91,"name":"setup","path_id":"F:3de9042953","signature":"function setup()"},{"anchor":"S:09a834e684","kind":"function","line":14,"name":"makeRepo","path_id":"F:3ea503e7c0","signature":"function makeRepo(spec)"},{"anchor":"S:64de4c98b6","doc":"Helper reused by the mapping test.","kind":"function","line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0","signature":"function makeRepoOnce()"},{"anchor":"S:fa6785fa4b","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3f1216fc11","signature":"export const MESSAGES ="},{"anchor":"S:91c42b4f27","kind":"function","line":23,"name":"read","path_id":"F:4096620673","signature":"function read(rel)"},{"anchor":"S:87c8d03eb8","doc":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that","kind":"function","line":119,"name":"dirsFromCodeowners","path_id":"F:4096620673","signature":"function dirsFromCodeowners()"},{"anchor":"S:4287ee7685","kind":"const","line":1,"name":"MESSAGES","path_id":"F:40d8f235fd","signature":"export const MESSAGES ="},{"anchor":"S:daac1f172a","kind":"function","line":12,"name":"cli","path_id":"F:40e4f39b59","signature":"function cli(...args)"},{"anchor":"S:1c82a73570","kind":"function","line":19,"name":"tmp","path_id":"F:40e4f39b59","signature":"function tmp()"},{"anchor":"S:586705c7a0","kind":"type","line":5,"name":"CardTone","path_id":"F:40eb542a82","signature":"export type CardTone = \"default\" | \"raised\";"},{"anchor":"S:1ae77ae47b","kind":"interface","line":7,"name":"CardProps","path_id":"F:40eb542a82","signature":"export interface CardProps extends HTMLAttributes"},{"anchor":"S:555c013724","doc":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, then the * body. When no title, eyebrow, ","kind":"function","line":31,"name":"Card","path_id":"F:40eb542a82","signature":"export function Card("},{"anchor":"S:b6fce3a5a9","kind":"function","line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a","signature":"export const ItemDetail = () => ("},{"anchor":"S:afe9763761","kind":"function","line":3,"name":"RaiseCap","path_id":"F:4387a44284","signature":"export const RaiseCap = () => ("},{"anchor":"S:24f0960624","kind":"function","line":29,"name":"runRemediate","path_id":"F:44a5987438","signature":"function runRemediate(args, { cwd, env = {} })"},{"anchor":"S:c8ee4f2e2e","doc":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commit.","kind":"function","line":40,"name":"makePollutedRepo","path_id":"F:44a5987438","signature":"function makePollutedRepo()"},{"anchor":"S:3e43134e83","kind":"function","line":69,"name":"arm","path_id":"F:44a5987438","signature":"function arm(dir, overrides = {})"},{"anchor":"S:48356203e2","kind":"function","line":13,"name":"repo","path_id":"F:4637e1fecb","signature":"function repo()"},{"anchor":"S:fd2e16186e","doc":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is ","kind":"function","line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0","signature":"function escapeRegExp(s)"},{"anchor":"S:e3c36060ec","doc":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).","kind":"function","line":92,"name":"makeMinimalRepo","path_id":"F:48355ccf4d","signature":"function makeMinimalRepo()"},{"anchor":"S:7c9eb8f22d","kind":"function","line":110,"name":"runScript","path_id":"F:48355ccf4d","signature":"function runScript(tmp)"},{"anchor":"S:43cc2b28a1","kind":"function","line":224,"name":"withStubRunner","path_id":"F:48355ccf4d","signature":"function withStubRunner(tmp, score, extendedScore, totalScore)"},{"anchor":"S:bb570e99d8","kind":"const","line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c","signature":"export const AI_SIGNATURE_RE = new RegExp(P, \"iu\");"},{"anchor":"S:ba4cb77f9c","doc":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions ","kind":"function","line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c","signature":"export function branchHasModelSegment(name)"},{"anchor":"S:4bfc88b9a8","doc":"Propose a compliant branch name by replacing any denylisted segment with a neutral * placeholder, preserving the rest of the path so the suggestion stays meaningful. * \"claude/fix-config\" -> \"change/f","kind":"function","line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c","signature":"export function suggestBranchName(name)"},{"anchor":"S:38e44b5fa7","doc":"Scan a branch name and return a finding if it carries a model identifier.","kind":"function","line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c","signature":"export function detectBranch(name)"},{"anchor":"S:e0f397f4e1","doc":"Scan commits for forbidden author/committer identity (reusing commit-identity.mjs) * AND for AI signatures inside commit-message bodies. The identity check and the body * check are complementary: the ","kind":"function","line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c","signature":"export function detectCommits(logOutput, bodies = [])"},{"anchor":"S:099c6ccde0","doc":"Scan a block of free text (PR body, a comment, a tracked file) for AI signatures. * Returns one finding per matching line so the remedy can point at the exact spot.","kind":"function","line":132,"name":"detectText","path_id":"F:4a7eaceb5c","signature":"export function detectText(kind, where, text)"},{"anchor":"S:6c21b6660b","kind":"function","line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c","signature":"function firstMatch(text)"},{"anchor":"S:af6abeace9","doc":"Render a precomputed, actionable remedy so a blocked violation is never a dead end. * The message names the exact fix and, where applicable, the literal git commands to * apply it, so a reviewer paste","kind":"function","line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c","signature":"export function formatRemedy(findings)"},{"anchor":"S:3ef15e4c1b","doc":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked.","kind":"function","line":13,"name":"redactText","path_id":"F:4b91a9f65b","signature":"export function redactText(text, { strict = false } = {})"},{"anchor":"S:7379962c7e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:4d08d5472f","signature":"export const MESSAGES ="},{"anchor":"S:5e08a11ce4","doc":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @param {Array} [options.comments] -","kind":"function","line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df","signature":"export function startMockGitHubServer(options = {})"},{"anchor":"S:2ea6241ebd","kind":"function","line":68,"name":"writeJson","path_id":"F:4dabd020df","signature":"function writeJson(res, status, body)"},{"anchor":"S:a76a61b560","doc":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored copy cannot silently drop credit to mod","kind":"const","line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024","signature":"export const MANIFEST_VERSION = 2;"},{"anchor":"S:d4ed2d5fe7","kind":"const","line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024","signature":"export const ATTESTATION_KIND = \"policy-attestation\";"},{"anchor":"S:78dd5bd63d","kind":"function","line":52,"name":"sha256Hex","path_id":"F:4db1101024","signature":"function sha256Hex(bytes)"},{"anchor":"S:fc880b17bd","kind":"function","line":56,"name":"readOrNull","path_id":"F:4db1101024","signature":"function readOrNull(root, rel)"},{"anchor":"S:262e039096","doc":"Extract a Markdown section body: the heading whose text matches `heading` (case-insensitive) and the lines beneath it, up to the next heading of the same or higher level. Returns null when no such hea","kind":"function","line":68,"name":"extractSection","path_id":"F:4db1101024","signature":"export function extractSection(markdown, heading)"},{"anchor":"S:e6c1406727","kind":"function","line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024","signature":"function fingerprintDisclosureSources(root)"},{"anchor":"S:41514ae74b","kind":"function","line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024","signature":"function fingerprintPolicyFiles(root)"},{"anchor":"S:cf9af1e29c","doc":"The disclosed gate set is derived from the actual `verify` npm script so it cannot drift from what the project runs. One level of `npm run ` / `npm test` aliases is flattened so gates hidden beh","kind":"function","line":112,"name":"gatesFromVerify","path_id":"F:4db1101024","signature":"export function gatesFromVerify(pkgJson)"},{"anchor":"S:5f317ed26b","kind":"function","line":127,"name":"capabilities","path_id":"F:4db1101024","signature":"function capabilities(config)"},{"anchor":"S:44c14f3d19","doc":"The credit block (ADR-037). Populated from package.json, never hardcoded twice, so a rename in package.json is what moves this, not a second literal to keep in sync. The repository URL is stripped of ","kind":"function","line":135,"name":"generator","path_id":"F:4db1101024","signature":"function generator(pkgJson)"},{"anchor":"S:f51dd29844","kind":"function","line":145,"name":"normalizePaths","path_id":"F:4db1101024","signature":"function normalizePaths(list)"},{"anchor":"S:a92333a9ea","doc":"Build the deterministic manifest body (without the content_digest) from repo state.","kind":"function","line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024","signature":"export function buildPolicyManifestBody({ root, config, pkgJson })"},{"anchor":"S:c4e4845bcc","doc":"Content digest over the canonical (RFC 8785 JCS) serialization of the body, so a re-serialized or key-reordered file yields the same digest and only a real policy change moves it.","kind":"function","line":181,"name":"manifestDigest","path_id":"F:4db1101024","signature":"export function manifestDigest(body)"},{"anchor":"S:b29d404deb","doc":"The full manifest: the body plus its self-describing content_digest.","kind":"function","line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024","signature":"export function buildPolicyManifest({ root, config, pkgJson })"},{"anchor":"S:72cb0b7406","kind":"const","line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0","signature":"export const REQUIRED_FIELDS = ["},{"anchor":"S:005abb5200","doc":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evict.\" Until now nothing enforced it; appen","kind":"const","line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0","signature":"export const MAX_STAGED_ENTRIES = 20;"},{"anchor":"S:2064ebd573","doc":"A staged line, per LESSONS.md's own \"Staged format\": - [YYYY-MM-DD] (signal: gate|review|incident|rework) lesson - evidence: ref","kind":"const","line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0","signature":"export const STAGED_LINE_RE ="},{"anchor":"S:391a920cca","kind":"function","line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0","signature":"function learningsPath(root)"},{"anchor":"S:6831eb78e0","doc":"Extract the first fenced json block that appears after the \"## Promoted\" heading.","kind":"function","line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0","signature":"export function readPromotedLearnings(root)"},{"anchor":"S:dab0af7046","doc":"Return the staged bullet lines (the \"- [date] ...\" entries) between the \"## Staged\" and \"## Promoted\" headings. Lines that do not begin a bullet are ignored, so surrounding prose does not count agains","kind":"function","line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0","signature":"export function readStagedEntries(root)"},{"anchor":"S:30e8b022de","doc":"Append one staged candidate line to LESSONS.md, enforcing the format and the cap. Never evicts: a full section throws so a human promotes or prunes first. Idempotent on an exact-duplicate line. Return","kind":"function","line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0","signature":"export function appendStagedEntry(root, line)"},{"anchor":"S:2ca5ab6d7f","kind":"function","line":18,"name":"previewText","path_id":"F:4ebf08705b","signature":"function previewText(template: string)"},{"anchor":"S:d49b633132","kind":"function","line":67,"name":"isValidUrl","path_id":"F:4ebf08705b","signature":"function isValidUrl(value: string): boolean"},{"anchor":"S:6d2334f815","doc":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-","kind":"function","line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b","signature":"export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:d439b00c59","doc":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rule.","kind":"function","line":73,"name":"writeRunLog","path_id":"F:522efae76d","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:76dbb025c9","kind":"function","line":116,"name":"removeFirstMatch","path_id":"F:522efae76d","signature":"function removeFirstMatch(text, re)"},{"anchor":"S:4316722ab5","kind":"function","line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d","signature":"function insertBeforeFirst(text, re, render)"},{"anchor":"S:0ed808bd36","kind":"function","line":132,"name":"insertAfterFirst","path_id":"F:522efae76d","signature":"function insertAfterFirst(text, re, render)"},{"anchor":"S:49ad410798","kind":"function","line":140,"name":"replaceFirst","path_id":"F:522efae76d","signature":"function replaceFirst(text, findRe, replaceRe, replacement)"},{"anchor":"S:47c5321a5f","doc":"--------------------------------------------------------------------------- Target-repo file listing. Prefer git (fast, respects .gitignore, skips node_modules) and fall back to a bounded manual walk ","kind":"function","line":264,"name":"listFiles","path_id":"F:522efae76d","signature":"function listFiles(target)"},{"anchor":"S:474ceb514b","doc":"Opens the file once and sizes/reads it through that one file descriptor, rather than statSync(path) followed by a separate readFileSync(path): a path-based check-then-use leaves a window where the pat","kind":"function","line":289,"name":"readCapped","path_id":"F:522efae76d","signature":"function readCapped(abs)"},{"anchor":"S:a8f75707be","doc":"A minimal single-hunk unified diff for a localized edit, headed with the file's REAL repo-relative path so guard-ratchet classifies it as the real file, not a temp path.","kind":"function","line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d","signature":"function makeUnifiedDiff(relPath, before, after)"},{"anchor":"S:33d286d62d","doc":"Run a guard-ratchet at `scriptPath` against a saved diff. `json` asks for the machine format (used for the oracle, to read the MR code); the graded host run only needs the exit code. --diff mode reads","kind":"function","line":330,"name":"runRatchet","path_id":"F:522efae76d","signature":"function runRatchet(scriptPath, diffFile, json)"},{"anchor":"S:867db3037b","doc":"--------------------------------------------------------------------------- Decide what gate the target actually has configured. -----------------------------------------------------------------------","kind":"function","line":343,"name":"resolveGate","path_id":"F:522efae76d","signature":"function resolveGate(target)"},{"anchor":"S:4e5c54ea09","doc":"--------------------------------------------------------------------------- Run one category: find a real file, synthesize a weakening on a scratch copy, confirm it with the oracle, then grade it agai","kind":"function","line":369,"name":"runCategory","path_id":"F:522efae76d","signature":"function runCategory(cat, target, files, gate, scratchRoot)"},{"anchor":"S:c2e502ad5e","doc":"--------------------------------------------------------------------------- Level from the applicable (tested) categories only. N/A categories are excluded from both numerator and denominator so a rep","kind":"function","line":409,"name":"levelFor","path_id":"F:522efae76d","signature":"function levelFor(pass, applicable, gateConfigured)"},{"anchor":"S:086ff230f0","kind":"function","line":417,"name":"main","path_id":"F:522efae76d","signature":"function main(argv)"},{"anchor":"S:ad302fbf54","kind":"function","line":5,"name":"makeCartService","path_id":"F:52caf3b287","signature":"function makeCartService(cart)"},{"anchor":"S:8d10c3ed6e","kind":"function","line":13,"name":"makeOrderService","path_id":"F:52caf3b287","signature":"function makeOrderService()"},{"anchor":"S:6c21f00789","doc":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves the assertion's expected value to match ","kind":"const","line":7,"name":"scenario","path_id":"F:5376e86470","signature":"export const scenario ="},{"anchor":"S:2a04172292","kind":"function","line":4,"name":"HostSelected","path_id":"F:545c0ccfeb","signature":"export const HostSelected = () => {}} />;"},{"anchor":"S:2bd0a26c48","kind":"function","line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb","signature":"export const ProductSelected = () => {}} />;"},{"anchor":"S:5e3d6fa91f","kind":"function","line":20,"name":"run","path_id":"F:54a3c626d9","signature":"function run(script, args = [], env = {})"},{"anchor":"S:2f1892a712","kind":"function","line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9","signature":"function makeStagedFixture(stagedLines = [])"},{"anchor":"S:5ea90f5e50","kind":"class","line":3,"name":"CheckoutService","path_id":"F:54c6928de9","signature":"export class CheckoutService"},{"anchor":"S:712330cf3e","kind":"function","line":6,"name":"parseStagedLine","path_id":"F:54df44aadd","signature":"export function parseStagedLine(line)"},{"anchor":"S:041a6b87af","kind":"function","line":14,"name":"tmp","path_id":"F:55b3a4e2c0","signature":"function tmp()"},{"anchor":"S:32c99a4337","kind":"function","line":18,"name":"run","path_id":"F:55b3a4e2c0","signature":"function run(...args)"},{"anchor":"S:05af4c96a8","kind":"function","line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0","signature":"function seedLearnings(dir)"},{"anchor":"S:d8edda2d76","kind":"function","line":12,"name":"makeMinimalRepo","path_id":"F:564b053598","signature":"function makeMinimalRepo()"},{"anchor":"S:7cd6925ad6","kind":"function","line":19,"name":"runScript","path_id":"F:564b053598","signature":"function runScript(tmp)"},{"anchor":"S:634b7012be","doc":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals.","kind":"function","line":17,"name":"makeAtt","path_id":"F:571aa2f3ae","signature":"function makeAtt(repoUrl, autonomyEnabled, dryRun, caps, digest)"},{"anchor":"S:bbdb581d9d","kind":"interface","line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716","signature":"export interface SafetyStripProps"},{"anchor":"S:3f2874e2ce","doc":"A horizontal, wrapping strip of small labeled cells summarizing the safety-relevant * levers for a project at a glance: whether autonomy and auto-merge are on, dry-run * status, merge and budget caps,","kind":"function","line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716","signature":"export function SafetyStrip("},{"anchor":"S:42b8608c58","kind":"function","line":92,"name":"Cell","path_id":"F:57ca5f1716","signature":"function Cell({ label, help, children }: CellProps)"},{"anchor":"S:0f004d17fa","kind":"function","line":24,"name":"git","path_id":"F:580d11b514","signature":"function git(args, cwd)"},{"anchor":"S:4b391a8eee","doc":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be well-formed and to apply cleanly against","kind":"function","line":34,"name":"makeGitFixture","path_id":"F:580d11b514","signature":"function makeGitFixture()"},{"anchor":"S:fd58589dfa","doc":"Build a minimal plan shape invokeRoleOpenAI needs: plan[role] (a resolved role descriptor) plus runId/transcriptDir. transcriptDir is deliberately kept under the repo's gitignored runs/ prefix (see .g","kind":"function","line":127,"name":"makePlan","path_id":"F:580d11b514","signature":"function makePlan(role, roleDescriptor, transcriptSubdir)"},{"anchor":"S:b7db5f4d64","kind":"function","line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514","signature":"function cleanupTranscripts()"},{"anchor":"S:47cde5f81f","doc":"Lifecycle status of a decision: still open for input, or already resolved.","kind":"type","line":6,"name":"DecisionStatus","path_id":"F:583edef643","signature":"export type DecisionStatus = \"open\" | \"resolved\";"},{"anchor":"S:707883a645","doc":"Plain data shape for a single decision awaiting (or having received) human input. * Components in this package define their own shape rather than importing app-level * types, so this interface is the ","kind":"interface","line":14,"name":"DecisionSummary","path_id":"F:583edef643","signature":"export interface DecisionSummary"},{"anchor":"S:6e1dfe647a","kind":"interface","line":29,"name":"DecisionCardProps","path_id":"F:583edef643","signature":"export interface DecisionCardProps"},{"anchor":"S:5c69e2b109","doc":"A card summarizing a single decision the system is asking a human to make: the * question, an optional recommendation in an info-tinted inset, and its lifecycle * status. Open decisions with a hold-by","kind":"function","line":45,"name":"DecisionCard","path_id":"F:583edef643","signature":"export function DecisionCard({ decision, onResolve }: DecisionCardProps)"},{"anchor":"S:bd63b1e408","kind":"function","line":15,"name":"cleanSignature","path_id":"F:594f505f11","signature":"function cleanSignature(line)"},{"anchor":"S:21635cbeda","kind":"const","line":19,"name":"adapter","path_id":"F:594f505f11","signature":"export const adapter ="},{"anchor":"S:cf88d1486b","kind":"function","line":16,"name":"run","path_id":"F:5956278014","signature":"function run(...args)"},{"anchor":"S:06c0c85d92","kind":"function","line":20,"name":"tmp","path_id":"F:5956278014","signature":"function tmp()"},{"anchor":"S:069ca5f436","doc":"Catalog entries for scripts/check-repo-hygiene.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:597cc7ae15","signature":"export const MESSAGES ="},{"anchor":"S:7d89fd8d95","kind":"function","line":13,"name":"run","path_id":"F:5994385869","signature":"function run(script, args = [], env = {})"},{"anchor":"S:1ef7d0ea53","kind":"class","line":3,"name":"CartService","path_id":"F:599f5b2f28","signature":"export class CartService"},{"anchor":"S:bb5d1b5426","kind":"const","line":1,"name":"MESSAGES","path_id":"F:59b2499e4e","signature":"export const MESSAGES ="},{"anchor":"S:e99608caf1","doc":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word.","kind":"const","line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b","signature":"export const SAFE_BRANCH_NAMES = ["},{"anchor":"S:59dcca7090","doc":"Commit identities no layer may flag. dependabot is ordinary automation, allowed.","kind":"const","line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b","signature":"export const SAFE_IDENTITIES = ["},{"anchor":"S:7bfb1bf049","doc":"Free-text snippets (PR-body/commit-body shaped) no layer may flag. These exercise the ordinary-English and in-repo-vocabulary collisions that bare-word or substring matching would trip on.","kind":"const","line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b","signature":"export const SAFE_TEXT_SNIPPETS = ["},{"anchor":"S:9ef12b47d5","doc":"Inputs the STRICT detector intentionally flags today. This is a documented, deliberate over-block, not a false positive: the corpus locks the current behavior so any future change to it is a conscious","kind":"const","line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b","signature":"export const DOCUMENTED_STRICT_OVERBLOCKS = ["},{"anchor":"S:bfb04089fa","kind":"const","line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914","signature":"export const DEFAULT_QUEUE_DIR = join(root, \".modonome\", \"queue\");"},{"anchor":"S:04f5060b44","kind":"const","line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914","signature":"export const DEFAULT_LEASE_MINUTES = 30;"},{"anchor":"S:7bc320f853","doc":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued.","kind":"function","line":27,"name":"assertValid","path_id":"F:5b113a0914","signature":"function assertValid(record)"},{"anchor":"S:556ab0a4ef","kind":"function","line":34,"name":"recordPath","path_id":"F:5b113a0914","signature":"function recordPath(dir, id)"},{"anchor":"S:29fd3ef66c","doc":"Atomic write: serialize to a temp file in the same directory, then rename over the destination. Rename is atomic on the same filesystem, so a reader never observes a partial record.","kind":"function","line":41,"name":"writeAtomic","path_id":"F:5b113a0914","signature":"function writeAtomic(dir, id, record)"},{"anchor":"S:2102bdee1c","kind":"function","line":49,"name":"readRecord","path_id":"F:5b113a0914","signature":"function readRecord(dir, file)"},{"anchor":"S:a364864213","kind":"function","line":53,"name":"listRecords","path_id":"F:5b113a0914","signature":"function listRecords(dir)"},{"anchor":"S:96b040bf38","doc":"Enqueue an action. Fills schema_version, state, and created_at when omitted, * validates the record, and writes it atomically. Returns the stored record. * * @param {object} action - At least id, targ","kind":"function","line":76,"name":"enqueue","path_id":"F:5b113a0914","signature":"export function enqueue(action, dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:852d083fcb","doc":"List queued (not claimed/done/failed) actions, oldest first by created_at. * * @param {string} [dir] * @returns {object[]}","kind":"function","line":97,"name":"listQueued","path_id":"F:5b113a0914","signature":"export function listQueued(dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:ba017108fd","doc":"A lease is live if the record is claimed and its expiry is strictly in the future.","kind":"function","line":104,"name":"leaseIsLive","path_id":"F:5b113a0914","signature":"function leaseIsLive(record, now)"},{"anchor":"S:6b0614bdf6","doc":"Atomically lease the oldest queued action this worker environment can serve. * A record is servable when its target equals the worker env or appears in the * worker env's served set. Sets state to cla","kind":"function","line":127,"name":"claim","path_id":"F:5b113a0914","signature":"export function claim(workerEnv, dir = DEFAULT_QUEUE_DIR, now = new Date(), leaseMinutes = DEFAULT_LEASE_MINUTES)"},{"anchor":"S:194e854c70","doc":"Mark a claimed action done or failed, attaching an optional result object. * * @param {string} id * @param {object|null} result * @param {string} [dir] * @param {boolean} [ok] - true marks done, false","kind":"function","line":156,"name":"complete","path_id":"F:5b113a0914","signature":"export function complete(id, result, dir = DEFAULT_QUEUE_DIR, ok = true)"},{"anchor":"S:ed1db0b6bb","doc":"Revert every claimed record whose lease has expired back to queued, clearing * its owner and expiry. Returns the list of reclaimed records. * * @param {string} [dir] * @param {Date} [now] * @returns {","kind":"function","line":176,"name":"reclaimStale","path_id":"F:5b113a0914","signature":"export function reclaimStale(dir = DEFAULT_QUEUE_DIR, now = new Date())"},{"anchor":"S:26ee7911e3","doc":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (agentproof, CI log scraping), not a human-f","kind":"const","line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae","signature":"export const MESSAGES ="},{"anchor":"S:64ebce69bf","kind":"const","line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a","signature":"export const MESSAGES ="},{"anchor":"S:f36d6a8da6","kind":"function","line":12,"name":"buildRemediationView","path_id":"F:5daab9894d","signature":"export function buildRemediationView({ config = {}, envArmed = false, commits = [], identity = { name: \"\", email: \"\" } } = {})"},{"anchor":"S:ddfea151e8","kind":"function","line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7","signature":"export const TrustedAuthor = () => ("},{"anchor":"S:ea76c925e2","doc":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipped with --no-snapshot. Never overwrites ","kind":"function","line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c","signature":"function enableSnapshot(target, here)"},{"anchor":"S:8c6ccd3e8b","kind":"function","line":64,"name":"listTemplate","path_id":"F:5e450ff82c","signature":"function listTemplate(dir, base = \"\")"},{"anchor":"S:6dcbe228c5","kind":"function","line":75,"name":"scaffold","path_id":"F:5e450ff82c","signature":"export function scaffold(target, write)"},{"anchor":"S:950b7153af","doc":"Install the Tripwires editor hook packs into a target repo: the two hook config templates (.claude/settings.json, .cursor/hooks.json) plus the shared kernel and the detector it shells out to, so a hos","kind":"function","line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c","signature":"function scaffoldTripwires(target, here)"},{"anchor":"S:1856df868b","kind":"function","line":163,"name":"writeRunLog","path_id":"F:5e450ff82c","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:d6cf821403","doc":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`.","kind":"function","line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0","signature":"function keysFromDeclaration(source, declName)"},{"anchor":"S:da40a0864b","kind":"function","line":33,"name":"assertSameSet","path_id":"F:5eff4122c0","signature":"function assertSameSet(a, b, label)"},{"anchor":"S:0a677c2e37","kind":"function","line":19,"name":"msg","path_id":"F:5f7910375b","signature":"function msg(id, params)"},{"anchor":"S:397210a79e","kind":"function","line":24,"name":"pass","path_id":"F:5f7910375b","signature":"function pass(msg)"},{"anchor":"S:4bd4d449f1","kind":"function","line":27,"name":"fail","path_id":"F:5f7910375b","signature":"function fail(msg)"},{"anchor":"S:5d58defc25","kind":"function","line":14,"name":"tmpRepo","path_id":"F:60548316f5","signature":"function tmpRepo(configBody)"},{"anchor":"S:580f464240","kind":"function","line":23,"name":"runStatus","path_id":"F:60548316f5","signature":"function runStatus(dir, env)"},{"anchor":"S:0cfad6d2cf","kind":"function","line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c","signature":"function findSafeToDeleteFiles(dir)"},{"anchor":"S:17985dad90","doc":"Helper","kind":"function","line":245,"name":"execSync","path_id":"F:61296e720c","signature":"function execSync(cmd, opts)"},{"anchor":"S:2441bf3938","kind":"function","line":17,"name":"run","path_id":"F:61c2a29876","signature":"function run(format, payload)"},{"anchor":"S:581a43b877","kind":"function","line":26,"name":"parseJsonLine","path_id":"F:61c2a29876","signature":"function parseJsonLine(stdout)"},{"anchor":"S:5a2d3d98ce","kind":"type","line":6,"name":"ModalSize","path_id":"F:63351e350b","signature":"export type ModalSize = \"sm\" | \"md\";"},{"anchor":"S:b5d72ba60f","kind":"interface","line":8,"name":"ModalProps","path_id":"F:63351e350b","signature":"export interface ModalProps"},{"anchor":"S:5d9d040e28","doc":"The generic centered dialog: a panel over a scrim, closable by Escape, a scrim * click, or its own close button. Moves focus into the dialog on open. This is the * base primitive that composed dialogs","kind":"function","line":30,"name":"Modal","path_id":"F:63351e350b","signature":"export function Modal({ open, onClose, title, children, footer, size = \"md\" }: ModalProps)"},{"anchor":"S:1f19b07227","kind":"interface","line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb","signature":"export interface ConfirmDialogProps"},{"anchor":"S:0a9885ca9d","doc":"A confirmation dialog for destructive or high-consequence controls. Every control * that arms the engine, releases a lease, approves a protected path, or prunes a * learning routes through this so an ","kind":"function","line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb","signature":"export function ConfirmDialog("},{"anchor":"S:4abcc2a45b","kind":"function","line":21,"name":"redactionErrors","path_id":"F:65193a9799","signature":"export function redactionErrors(packet)"},{"anchor":"S:a8a643fda8","kind":"function","line":55,"name":"validatePacket","path_id":"F:65193a9799","signature":"export function validatePacket(packet)"},{"anchor":"S:489fa8bc67","kind":"type","line":14,"name":"HoverCardSide","path_id":"F:66264a042c","signature":"export type HoverCardSide = \"top\" | \"bottom\";"},{"anchor":"S:551c7477f2","kind":"interface","line":16,"name":"HoverCardSource","path_id":"F:66264a042c","signature":"export interface HoverCardSource"},{"anchor":"S:5ed8ee5c0a","kind":"interface","line":23,"name":"HoverCardProps","path_id":"F:66264a042c","signature":"export interface HoverCardProps"},{"anchor":"S:312c004ac1","doc":"A richer sibling of Tooltip: a small card (heading, body copy, source citation) for * reference content pulled from real documentation, rather than a one-line hint. Unlike * Tooltip, its content accep","kind":"function","line":46,"name":"HoverCard","path_id":"F:66264a042c","signature":"export function HoverCard({ title, body, source, children, side = \"bottom\" }: HoverCardProps)"},{"anchor":"S:050ec6eff9","doc":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent activity.","kind":"function","line":26,"name":"OverviewScreen","path_id":"F:6627655633","signature":"export function OverviewScreen("},{"anchor":"S:e95e85f904","kind":"const","line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8","signature":"export const SECRET_PATTERNS = ["},{"anchor":"S:9c4deaa396","doc":"Returns an array of { name } objects for every pattern that matches text.","kind":"function","line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8","signature":"export function scanForSecrets(text)"},{"anchor":"S:8b7542071f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:6a86908a3e","signature":"export const MESSAGES ="},{"anchor":"S:4eb76c8a83","kind":"function","line":9,"name":"Set","path_id":"F:6bef3f93ab","signature":"export const Set = () => ("},{"anchor":"S:c16b3b7bbf","kind":"function","line":10,"name":"Board","path_id":"F:6c0919b64e","signature":"export const Board = () => {}} />;"},{"anchor":"S:96ffd586d6","kind":"function","line":19,"name":"tmp","path_id":"F:6da7bd8294","signature":"function tmp()"},{"anchor":"S:0f77533ed4","kind":"function","line":23,"name":"run","path_id":"F:6da7bd8294","signature":"function run(...args)"},{"anchor":"S:4adffc8b06","kind":"function","line":27,"name":"seedJsTest","path_id":"F:6da7bd8294","signature":"function seedJsTest(dir)"},{"anchor":"S:354e31ec69","kind":"function","line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294","signature":"function snapshotFiles(dir)"},{"anchor":"S:7698d9efeb","doc":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first segment is \"feature\"; only a leading \"a","kind":"function","line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3","signature":"export function isModelIdentifierBranch(name)"},{"anchor":"S:99c574f83d","doc":"Resolve the branch under review from CI environment variables. Prefers the * pull request head ref, then the push ref name. Returns an empty string when * neither is set so callers can fall back to a ","kind":"function","line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3","signature":"export function resolveBranchName(env = process.env)"},{"anchor":"S:bb800288d9","kind":"function","line":12,"name":"writeRunLog","path_id":"F:6f247eb514","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:002c9f1daa","kind":"function","line":25,"name":"slug","path_id":"F:6f247eb514","signature":"function slug(text)"},{"anchor":"S:3d6f7980b3","kind":"function","line":33,"name":"proposeWork","path_id":"F:6f247eb514","signature":"function proposeWork(stack, hotFiles)"},{"anchor":"S:e099520832","doc":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing otherwise), so this stays safe and inert","kind":"function","line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514","signature":"function proposeControlPanelWork(targetDir)"},{"anchor":"S:24407449b3","doc":"Order proposals by descending deterministic priority score (highest-value, lowest-risk first). Signals are derived heuristically from each proposal's text and the hot-file churn count for the file it ","kind":"function","line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514","signature":"export function orderProposalsByScore(proposals, hotFiles)"},{"anchor":"S:7fb0e9b59c","kind":"function","line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514","signature":"export function proposalToWorkItem(proposal, opts = {})"},{"anchor":"S:ab8d34f24a","doc":"Run stack/protected-path/instruction/hot-file detection and score the resulting proposals for a target directory. Read-only: writes nothing. Shared by the CLI printer below, `--emit-work-item`, and `q","kind":"function","line":119,"name":"sweepTarget","path_id":"F:6f247eb514","signature":"export function sweepTarget(target)"},{"anchor":"S:19ecd8efbf","kind":"function","line":134,"name":"main","path_id":"F:6f247eb514","signature":"function main(args)"},{"anchor":"S:5fe0061772","kind":"function","line":4,"name":"Maker","path_id":"F:7008a20b1c","signature":"export const Maker = () => ("},{"anchor":"S:93ab3c1c15","kind":"function","line":8,"name":"Checker","path_id":"F:7008a20b1c","signature":"export const Checker = () => ("},{"anchor":"S:d4fd7f4ad3","kind":"function","line":12,"name":"Pair","path_id":"F:7008a20b1c","signature":"export const Pair = () => ("},{"anchor":"S:ba7fe0b6d3","doc":"A config where each runner declares its environment and reach.","kind":"function","line":10,"name":"routedConfig","path_id":"F:704e42d42b","signature":"function routedConfig()"},{"anchor":"S:435432f041","kind":"interface","line":6,"name":"CheckboxProps","path_id":"F:7054844360","signature":"export interface CheckboxProps"},{"anchor":"S:0b453b55b9","doc":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` visually replaced by a styl","kind":"function","line":25,"name":"Checkbox","path_id":"F:7054844360","signature":"export function Checkbox({ checked, onCheckedChange, label, hint, disabled }: CheckboxProps)"},{"anchor":"S:145586915d","kind":"interface","line":5,"name":"DrawerProps","path_id":"F:71f0bfb455","signature":"export interface DrawerProps"},{"anchor":"S:eb4b11fdf2","doc":"A right-side sheet that slides in over a scrim, for focused tasks that need more * room than a popover but should not leave the current page's context (inspecting a * work item, editing a policy). Tra","kind":"function","line":25,"name":"Drawer","path_id":"F:71f0bfb455","signature":"export function Drawer({ open, onClose, title, width = 480, children }: DrawerProps)"},{"anchor":"S:eaba90daa0","kind":"function","line":101,"name":"exists","path_id":"F:7232ada2da","signature":"async function exists(p)"},{"anchor":"S:7b87285e6c","kind":"function","line":110,"name":"readTextSafe","path_id":"F:7232ada2da","signature":"async function readTextSafe(p)"},{"anchor":"S:934c97a052","kind":"function","line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da","signature":"async function listFilesRecursive(dir, { maxDepth = 5 } = {})"},{"anchor":"S:7048bb8a3d","doc":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`.","kind":"function","line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da","signature":"function parseCiJobNames(yamlText)"},{"anchor":"S:fc6086da9e","doc":"Extremely small YAML-ish key:value reader for flat config files. Good enough to inspect schema_version and the boolean arming levers without a YAML dep.","kind":"function","line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da","signature":"function parseFlatYaml(yamlText)"},{"anchor":"S:c275cb33da","doc":"(a) Schema collision: target has .modonome/ with incompatible config.","kind":"function","line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da","signature":"export async function checkSchemaCollision(targetDir)"},{"anchor":"S:8660e770ea","doc":"(b) CI job name conflict: target's CI files use Modonome job names.","kind":"function","line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da","signature":"export async function checkCiJobConflict(targetDir)"},{"anchor":"S:ee4deb809d","doc":"(c) Script shadowing: target has scripts/ that shadow Modonome scripts.","kind":"function","line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da","signature":"export async function checkScriptShadowing(targetDir)"},{"anchor":"S:f5a168e2ff","doc":"(d) Env var pollution: MODONOME_* env vars set that override safe defaults. Reads from the current process environment (the shell preparing to embed) AND statically inspects, read-only, the target's `","kind":"function","line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da","signature":"export async function checkEnvPollution(targetDir, env = process.env)"},{"anchor":"S:8a6e48a119","doc":"(e) Dependency conflict: target has deps that conflict with Modonome requirements.","kind":"function","line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da","signature":"export async function checkDependencyConflict(targetDir)"},{"anchor":"S:22ac6bb569","doc":"(f) Prompt injection risk: governance-override patterns in the target. Trusted locations (.modonome/, schemas/, CI dirs) are scanned exhaustively; for the rest of the repo we scan source-bearing files","kind":"function","line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da","signature":"export async function checkPromptInjection(targetDir)"},{"anchor":"S:522a86b0ed","doc":"(g) Node version incompatibility: target requires Node < 18.","kind":"function","line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da","signature":"export async function checkNodeVersion(targetDir)"},{"anchor":"S:03145d5ec3","kind":"const","line":519,"name":"CHECKS","path_id":"F:7232ada2da","signature":"export const CHECKS = ["},{"anchor":"S:0dd1d1c53a","kind":"function","line":529,"name":"runPreflight","path_id":"F:7232ada2da","signature":"export async function runPreflight(targetDir)"},{"anchor":"S:80ded7ba90","kind":"function","line":542,"name":"renderHuman","path_id":"F:7232ada2da","signature":"function renderHuman(report)"},{"anchor":"S:1ba042e0cf","kind":"function","line":565,"name":"main","path_id":"F:7232ada2da","signature":"async function main()"},{"anchor":"S:4514b4c1f0","doc":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the lessons * the engine has staged from repea","kind":"function","line":19,"name":"LearningsScreen","path_id":"F:757a70680a","signature":"export function LearningsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:e9fcedbe8f","kind":"interface","line":7,"name":"InputProps","path_id":"F:763efdd51c","signature":"export interface InputProps extends InputHTMLAttributes"},{"anchor":"S:6981533501","doc":"A labeled single-line text input. Shares the labeled-field frame used by every * form control in the panel: an optional label, an optional hint bubble, and an * optional error message below. Use for f","kind":"function","line":24,"name":"Input","path_id":"F:763efdd51c","signature":"export function Input("},{"anchor":"S:b4b12fd408","doc":"The kind of event recorded in the audit trail.","kind":"type","line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7","signature":"export type AuditEventKind ="},{"anchor":"S:ee3edffdff","doc":"Plain data shape for a single audit-trail event. Components in this package define * their own shape rather than importing app-level types, so this interface is the * contract a host app maps its own ","kind":"interface","line":25,"name":"AuditEvent","path_id":"F:76da13a8f7","signature":"export interface AuditEvent"},{"anchor":"S:62d1cf1f06","kind":"interface","line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7","signature":"export interface AuditTimelineProps"},{"anchor":"S:35ac020356","doc":"A vertical audit trail with a connecting line down the left edge. Each event shows a * colored node carrying an icon for its kind (so the event type is never carried by * color alone), the relative ti","kind":"function","line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7","signature":"export function AuditTimeline({ events, limit }: AuditTimelineProps)"},{"anchor":"S:e15045d8a4","kind":"function","line":13,"name":"dryRun","path_id":"F:778c33cdc0","signature":"function dryRun(dir)"},{"anchor":"S:f88498de73","doc":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure.","kind":"const","line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407","signature":"export const ATTESTATION_DOMAIN = \"modonome.policy-attestation.v1\\n\";"},{"anchor":"S:b455c897cf","doc":"Relative-to-root display path. Safe on any input: a path outside root (e.g. under ADOPT_ROOT when MODONOME_ADOPT_ROOT points elsewhere) is returned unchanged rather than sliced by a bare string-prefix","kind":"function","line":66,"name":"rel","path_id":"F:780c791407","signature":"function rel(p)"},{"anchor":"S:5b8a5996df","kind":"function","line":70,"name":"fail","path_id":"F:780c791407","signature":"function fail(msg)"},{"anchor":"S:87013bd4c3","kind":"function","line":75,"name":"loadInputs","path_id":"F:780c791407","signature":"export function loadInputs(r = root)"},{"anchor":"S:aacff6bc1c","doc":"The exact bytes a signature covers: the domain tag followed by the JCS of the manifest with its signature and content_digest removed (the content_digest is itself derived from that body, so signing th","kind":"function","line":84,"name":"attestationBytes","path_id":"F:780c791407","signature":"export function attestationBytes(manifest)"},{"anchor":"S:120830c7dd","kind":"function","line":91,"name":"maybeSign","path_id":"F:780c791407","signature":"function maybeSign(manifest, env)"},{"anchor":"S:5aff27256c","kind":"function","line":109,"name":"schema","path_id":"F:780c791407","signature":"function schema()"},{"anchor":"S:cf413b97c8","kind":"function","line":113,"name":"write","path_id":"F:780c791407","signature":"function write(env)"},{"anchor":"S:de8e4d5857","doc":"Recomputes a manifest body's digest and compares it to its own recorded content_digest. Shared by check(), verifyCmd(), and adoptCmd() so this self-consistency test is defined once; each caller still ","kind":"function","line":128,"name":"digestMismatch","path_id":"F:780c791407","signature":"function digestMismatch(m)"},{"anchor":"S:53158831f9","kind":"function","line":135,"name":"check","path_id":"F:780c791407","signature":"function check()"},{"anchor":"S:5ef4400e5e","doc":"The generator credit line, tolerant of a foreign pack that predates manifest_version 2: such a pack is shown honestly as claiming no credit rather than crashing on a missing field. homepage is guarded","kind":"function","line":169,"name":"generatorLine","path_id":"F:780c791407","signature":"function generatorLine(m)"},{"anchor":"S:2d4876abe2","kind":"function","line":174,"name":"readPack","path_id":"F:780c791407","signature":"function readPack(path)"},{"anchor":"S:ddc69b10ca","doc":"Reads and parses a caller-supplied pack file, failing with the tool's normal clean error instead of an uncaught exception. Every command that accepts a user-supplied path (--show, --verify, --diff, --","kind":"function","line":182,"name":"readForeignPack","path_id":"F:780c791407","signature":"function readForeignPack(path)"},{"anchor":"S:e476893b3b","kind":"function","line":190,"name":"show","path_id":"F:780c791407","signature":"function show(path)"},{"anchor":"S:acc91dc6fe","kind":"function","line":210,"name":"verifyCmd","path_id":"F:780c791407","signature":"function verifyCmd(path)"},{"anchor":"S:b9d44c6996","doc":"Set-valued policy fields (denylist, protected paths, gates): report what the foreign pack adds and what it is missing relative to this repo's live policy.","kind":"function","line":230,"name":"diffSet","path_id":"F:780c791407","signature":"function diffSet(label, local, foreign)"},{"anchor":"S:0be1a2cd09","kind":"function","line":244,"name":"diffCapabilities","path_id":"F:780c791407","signature":"function diffCapabilities(local, foreign)"},{"anchor":"S:90b2cf611f","kind":"function","line":255,"name":"diffPosture","path_id":"F:780c791407","signature":"function diffPosture(local, foreign)"},{"anchor":"S:d2a299acb3","doc":"Read-only comparison of a foreign pack's disclosed policy against this repo's own live policy. Always succeeds (never a pass/fail gate); a human uses this to decide whether to adopt. The foreign pack'","kind":"function","line":266,"name":"diffCmd","path_id":"F:780c791407","signature":"function diffCmd(path)"},{"anchor":"S:8735f37dad","doc":"Vendor a foreign policy pack into this repo, refusing on any integrity or credit failure. Order matters: schema validation catches a pack whose generator block was stripped outright (manifest_version ","kind":"function","line":288,"name":"adoptCmd","path_id":"F:780c791407","signature":"function adoptCmd(path, alias)"},{"anchor":"S:67852685cf","kind":"function","line":4,"name":"Info","path_id":"F:7832db450f","signature":"export const Info = () => ;"},{"anchor":"S:96c461f8cd","kind":"function","line":6,"name":"Success","path_id":"F:7832db450f","signature":"export const Success = () => ;"},{"anchor":"S:21a4872ace","kind":"function","line":8,"name":"Blocked","path_id":"F:7832db450f","signature":"export const Blocked = () => ;"},{"anchor":"S:59617d720e","doc":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which keeps the utility portable. It is used ","kind":"function","line":5,"name":"estimateTokens","path_id":"F:7944059823","signature":"export function estimateTokens(text)"},{"anchor":"S:a48d9e0b16","doc":"Greedily keep pre-ranked items until the token budget is spent. `sizeFn` returns the token cost of an item. A falsy or non-finite budget keeps everything. Returns { kept, dropped, tokens } so the call","kind":"function","line":13,"name":"budgetTier","path_id":"F:7944059823","signature":"export function budgetTier(items, maxTokens, sizeFn)"},{"anchor":"S:3ed1d37c7b","kind":"function","line":3,"name":"Unreachable","path_id":"F:79467a3153","signature":"export const Unreachable = () => ("},{"anchor":"S:cec6405a03","kind":"interface","line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b","signature":"export interface ArmingStateBadgeProps"},{"anchor":"S:3bae21fee6","doc":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, armed is * teal. The mode label always ren","kind":"function","line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b","signature":"export function ArmingStateBadge({ mode, envArmed, size = \"md\" }: ArmingStateBadgeProps)"},{"anchor":"S:130202d7f0","kind":"function","line":3,"name":"Queue","path_id":"F:7a43bf4ce5","signature":"export const Queue = () => ("},{"anchor":"S:8ec4bd5dec","doc":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads it","kind":"function","line":25,"name":"signPacket","path_id":"F:7b3e38c9a6","signature":"export function signPacket(packet, privateKeyObject, { keyAlias, signedAt }, overrides = {})"},{"anchor":"S:d732af6be5","doc":"Join class names, dropping falsy values. A tiny classnames helper.","kind":"type","line":2,"name":"ClassValue","path_id":"F:7c8d518693","signature":"export type ClassValue = string | false | null | undefined;"},{"anchor":"S:deea6aabbd","kind":"function","line":4,"name":"cx","path_id":"F:7c8d518693","signature":"export function cx(...values: ClassValue[]): string"},{"anchor":"S:41443bba10","kind":"function","line":1,"name":"total","path_id":"F:7ccad64380","signature":"def total(items)"},{"anchor":"S:05fcfe1c5b","doc":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after discount","kind":"function","line":5,"name":"apply_discount","path_id":"F:7ccad64380","signature":"def apply_discount(items, discount_percent)"},{"anchor":"S:90f1a56d4e","kind":"const","line":180,"name":"hostState","path_id":"F:7d236c9aa6","signature":"export const hostState: PanelState ="},{"anchor":"S:64376e38db","kind":"interface","line":6,"name":"SelectOption","path_id":"F:819f72edf6","signature":"export interface SelectOption"},{"anchor":"S:8af9c33a76","kind":"interface","line":13,"name":"SelectProps","path_id":"F:819f72edf6","signature":"export interface SelectProps"},{"anchor":"S:0b0e197734","doc":"A styled native `` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * surface treatment of the other form control","kind":"function","line":35,"name":"Select","path_id":"F:819f72edf6","signature":"export function Select("},{"anchor":"S:66cd7b74c6","kind":"interface","line":5,"name":"SliderProps","path_id":"F:81c495717c","signature":"export interface SliderProps"},{"anchor":"S:a91334a377","doc":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announcements) while the track and thumb pick ","kind":"function","line":32,"name":"Slider","path_id":"F:81c495717c","signature":"export function Slider("},{"anchor":"S:74e8f23a0b","kind":"function","line":4,"name":"MergeCap","path_id":"F:84a5c32a4c","signature":"export const MergeCap = () => ("},{"anchor":"S:14b57397ed","kind":"function","line":14,"name":"Budget","path_id":"F:84a5c32a4c","signature":"export const Budget = () => ("},{"anchor":"S:88bc43a62b","doc":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true.","kind":"const","line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227","signature":"export const CHANGE_REQUEST_SIGNALS = ["},{"anchor":"S:90b86b1f26","doc":"True when the transcript contains any documented change-request signal * phrase (case-insensitive). Pure string search: no partial-word surprises * beyond what the phrase itself implies. * * @param {s","kind":"function","line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227","signature":"export function hasChangeRequestSignal(transcript)"},{"anchor":"S:328dcdf4cc","doc":"Count distinct raised concerns/questions in the transcript. * * Heuristic (documented, approximate, not semantic): * - Any line ending in \"?\" counts once. * - Any line starting with \"concern:\", \"quest","kind":"function","line":76,"name":"countRaisedQuestions","path_id":"F:851f776227","signature":"export function countRaisedQuestions(transcript)"},{"anchor":"S:cfe87f9141","doc":"Derive checker-engagement telemetry from a checker transcript. * * @param {string|undefined|null} transcript - Full checker transcript text. * @returns {{checker_requested_changes: boolean, checker_qu","kind":"function","line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227","signature":"export function parseCheckerTelemetry(transcript)"},{"anchor":"S:6c778494b3","doc":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\".","kind":"function","line":7,"name":"relativeTime","path_id":"F:86838d35ac","signature":"export function relativeTime(iso: string, now: number = Date.parse(\"2026-07-01T09:45:00Z\")): string"},{"anchor":"S:8641765bb2","doc":"Format a duration in milliseconds as a compact string, for example \"1.2s\" or \"9s\".","kind":"function","line":34,"name":"formatDuration","path_id":"F:86838d35ac","signature":"export function formatDuration(ms?: number): string"},{"anchor":"S:6cb93e992c","doc":"Format a USD amount with two decimals.","kind":"function","line":45,"name":"formatUsd","path_id":"F:86838d35ac","signature":"export function formatUsd(usd: number): string"},{"anchor":"S:0aee45c73e","doc":"Catalog entries for scripts/guard-ratchet.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:86fd2cf669","signature":"export const MESSAGES ="},{"anchor":"S:88426a3883","doc":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker.","kind":"function","line":12,"name":"looksLikeDiff","path_id":"F:872221b1da","signature":"function looksLikeDiff(body)"},{"anchor":"S:074c2b3c02","doc":"Pull a unified diff out of a model response. Prefers a fenced ```diff or * ```patch block; falls back to a bare fenced block whose body looks like a * diff; falls back to treating the whole text as a ","kind":"function","line":28,"name":"extractDiff","path_id":"F:872221b1da","signature":"export function extractDiff(text)"},{"anchor":"S:fe1a464205","doc":"Apply a unified diff to a working directory using the git binary. * Validates with `git apply --check` first; git apply is atomic, so a diff * that fails validation or application is never partially a","kind":"function","line":60,"name":"applyPatch","path_id":"F:872221b1da","signature":"export function applyPatch(diff, cwd, deps = {})"},{"anchor":"S:6b5288f35f","kind":"function","line":18,"name":"coreLevers","path_id":"F:87c30bdb4c","signature":"function coreLevers()"},{"anchor":"S:b4e887ed4f","kind":"function","line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c","signature":"function schemaLevers()"},{"anchor":"S:e09a554f44","kind":"function","line":32,"name":"templateLevers","path_id":"F:87c30bdb4c","signature":"function templateLevers()"},{"anchor":"S:5d118d4b60","kind":"function","line":3,"name":"Row","path_id":"F:8972d37045","signature":"export const Row = () => ("},{"anchor":"S:e89c164d25","kind":"function","line":54,"name":"titleFromId","path_id":"F:89aee72994","signature":"function titleFromId(id: string): string"},{"anchor":"S:f0db7341e7","kind":"const","line":89,"name":"productState","path_id":"F:89aee72994","signature":"export const productState: PanelState ="},{"anchor":"S:89e92655dd","kind":"function","line":57,"name":"normalizeLF","path_id":"F:8a10462927","signature":"function normalizeLF(s)"},{"anchor":"S:a34306cc67","kind":"function","line":61,"name":"getDiff","path_id":"F:8a10462927","signature":"function getDiff()"},{"anchor":"S:974654287c","kind":"function","line":304,"name":"count","path_id":"F:8a10462927","signature":"function count(lines, re)"},{"anchor":"S:fd230402e2","kind":"function","line":323,"name":"deconfuse","path_id":"F:8a10462927","signature":"function deconfuse(line)"},{"anchor":"S:457528354e","kind":"function","line":331,"name":"stripInlineComment","path_id":"F:8a10462927","signature":"function stripInlineComment(line)"},{"anchor":"S:d0c2835a28","doc":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote or that does not close on this line, or ","kind":"function","line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927","signature":"function stripLineLocalNoise(line)"},{"anchor":"S:a4c389d72a","kind":"function","line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927","signature":"function isVacuousAssertion(line)"},{"anchor":"S:17945c542e","kind":"function","line":393,"name":"countBareAsserts","path_id":"F:8a10462927","signature":"function countBareAsserts(lines)"},{"anchor":"S:4d3ac94b7c","kind":"function","line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927","signature":"function isVacuousPyAssert(line)"},{"anchor":"S:0b8ff85c9c","kind":"function","line":666,"name":"classifyCode","path_id":"F:8a10462927","signature":"function classifyCode(msg)"},{"anchor":"S:2358b05e12","doc":"Each problem message is \": \". Recover the file path for a location.","kind":"function","line":680,"name":"fileOf","path_id":"F:8a10462927","signature":"function fileOf(msg)"},{"anchor":"S:edb5058173","kind":"function","line":685,"name":"helpUri","path_id":"F:8a10462927","signature":"function helpUri(code)"},{"anchor":"S:eff02f504b","kind":"function","line":689,"name":"toFindings","path_id":"F:8a10462927","signature":"function toFindings(list)"},{"anchor":"S:42188b3bb9","kind":"function","line":696,"name":"emitJson","path_id":"F:8a10462927","signature":"function emitJson(findings)"},{"anchor":"S:1d0f5bc129","kind":"function","line":708,"name":"emitSarif","path_id":"F:8a10462927","signature":"function emitSarif(findings)"},{"anchor":"S:06700c1faf","doc":"Advisory-only, informational, never affects the exit code (see the comment where assertionTally is declared above). Printed in both outcomes so a reviewer sees the cross-file shape whether or not a sp","kind":"function","line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927","signature":"function printAssertionTallyAdvisory()"},{"anchor":"S:69f3537d3b","kind":"function","line":13,"name":"tmp","path_id":"F:8a3433b070","signature":"function tmp()"},{"anchor":"S:1fe8548dac","kind":"function","line":17,"name":"fixture","path_id":"F:8a3433b070","signature":"function fixture()"},{"anchor":"S:33534dd596","kind":"function","line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff","signature":"export function readModonomeState(modonomeDir, { mode })"},{"anchor":"S:895b1937bd","kind":"function","line":61,"name":"readConfig","path_id":"F:8a3dd6ccff","signature":"function readConfig(modonomeDir)"},{"anchor":"S:6044b46e0f","doc":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces in CI, so the panel can never display a","kind":"function","line":100,"name":"readMessages","path_id":"F:8a3dd6ccff","signature":"function readMessages(modonomeDir)"},{"anchor":"S:9287ce102a","kind":"function","line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff","signature":"function readWorkItems(modonomeDir)"},{"anchor":"S:064519e650","kind":"function","line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff","signature":"function titleFromId(id)"},{"anchor":"S:ac0d90ea9c","kind":"function","line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff","signature":"function toWorkItemVM(item)"},{"anchor":"S:23afcde4ab","doc":"A gate's status is implied by the state of every work item that declares it, never by a fabricated pass. A repo that has only ever run dry-run sweeps shows every declared gate as \"pending\", which is t","kind":"function","line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff","signature":"function impliedGateStatus(state)"},{"anchor":"S:639160c471","kind":"function","line":186,"name":"buildGates","path_id":"F:8a3dd6ccff","signature":"function buildGates(items)"},{"anchor":"S:e41c3f2d61","kind":"function","line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff","signature":"function buildProtectedPaths(config, items)"},{"anchor":"S:4741feecf9","doc":"modonome's own agent runner does not yet record a dollar cost per call (see scripts/agent/run-cycle.mjs), so real spend is honestly zero until that lands. Calls are still counted from the real maker_r","kind":"function","line":234,"name":"buildCost","path_id":"F:8a3dd6ccff","signature":"function buildCost(config, metrics)"},{"anchor":"S:77031e48f4","kind":"function","line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff","signature":"function readLearnings(modonomeDir)"},{"anchor":"S:783d91f2ed","kind":"function","line":319,"name":"extractSection","path_id":"F:8a3dd6ccff","signature":"function extractSection(text, heading)"},{"anchor":"S:b02fc1cd06","kind":"function","line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff","signature":"function readDecisions(modonomeDir)"},{"anchor":"S:4350272f8a","kind":"function","line":357,"name":"readRuns","path_id":"F:8a3dd6ccff","signature":"function readRuns(modonomeDir)"},{"anchor":"S:d9c2336e09","doc":"Real telemetry only. metrics.example.jsonl documents the schema and must never be read here: the promoted learning L-001 in this repo's own LESSONS.md exists specifically because sample telemetry was ","kind":"function","line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff","signature":"function readMetrics(modonomeDir)"},{"anchor":"S:409d8caf58","kind":"function","line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff","signature":"function describeMetric(m, kind)"},{"anchor":"S:b8469e1267","kind":"function","line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff","signature":"function buildAudit(runs, metrics)"},{"anchor":"S:a8971aba2c","kind":"function","line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff","signature":"function buildTrends(runs)"},{"anchor":"S:b81af2dbe4","kind":"function","line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff","signature":"function latestAgentProofScore(runs)"},{"anchor":"S:db7c5c1950","doc":"Mirrors latestAgentProofScore, but for `npx modonome gauntlet` runs (a distinct command, never conflated with `report`). Undefined (not 0) when the tool has never been run, since a 0 score and \"never ","kind":"function","line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff","signature":"function latestGauntletScore(runs)"},{"anchor":"S:baab120dbc","kind":"function","line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff","signature":"function gitInfo(repoRoot)"},{"anchor":"S:f40a6dfd1b","doc":"The unpublished commit range (origin/main..HEAD) with the identity and message fields the remediation planner reads. Bounded to origin/main so the panel only ever proposes over history that has not be","kind":"function","line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff","signature":"function gitCommits(repoRoot)"},{"anchor":"S:37268eb979","doc":"The repository's own git identity, the target a reauthor rewrite would use. Empty when unset, which the planner and the CLI both treat as \"not usable for apply\".","kind":"function","line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff","signature":"function gitIdentity(repoRoot)"},{"anchor":"S:4cd48cf92e","kind":"function","line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff","signature":"function buildSubject({ repoRoot, modonomeDir, mode, config, queue, runs })"},{"anchor":"S:77a4165d99","kind":"type","line":12,"name":"TooltipSide","path_id":"F:8a9aff1529","signature":"export type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";"},{"anchor":"S:0b70780ca5","kind":"interface","line":14,"name":"TooltipProps","path_id":"F:8a9aff1529","signature":"export interface TooltipProps"},{"anchor":"S:7bdca9af48","doc":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the same * information), and closes on blur","kind":"function","line":30,"name":"Tooltip","path_id":"F:8a9aff1529","signature":"export function Tooltip({ content, children, side = \"top\" }: TooltipProps)"},{"anchor":"S:55fc57e799","doc":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read where the file could be removed out from und","kind":"function","line":17,"name":"readIfExists","path_id":"F:8abf9e432a","signature":"function readIfExists(path)"},{"anchor":"S:c44c6a3e42","doc":"Parse RELEASE-EVIDENCE.md to extract gate counts and autonomy status","kind":"function","line":35,"name":"parseEvidence","path_id":"F:8abf9e432a","signature":"function parseEvidence()"},{"anchor":"S:208ce5b839","doc":"Count work items by state","kind":"function","line":65,"name":"countWorkItems","path_id":"F:8abf9e432a","signature":"function countWorkItems()"},{"anchor":"S:370b67baf2","doc":"Parse the product version from package.json. (.modonome/version holds a schema version, not the product version, so it must not be used here.)","kind":"function","line":90,"name":"readVersion","path_id":"F:8abf9e432a","signature":"function readVersion()"},{"anchor":"S:4afb276004","doc":"Parse the normative AgentProof score and level from agentproof/README.md.","kind":"function","line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a","signature":"function parseAgentproof()"},{"anchor":"S:172b08e199","doc":"Update the meta block in site/repo-data.js (version, score, level).","kind":"function","line":118,"name":"updateRepoData","path_id":"F:8abf9e432a","signature":"function updateRepoData(data)"},{"anchor":"S:ee17355d71","doc":"Update site/index.html with live data","kind":"function","line":133,"name":"updateSite","path_id":"F:8abf9e432a","signature":"function updateSite(data)"},{"anchor":"S:03b000e190","doc":"Verify site data matches evidence (used in CI gate)","kind":"function","line":153,"name":"verifySiteData","path_id":"F:8abf9e432a","signature":"function verifySiteData(data)"},{"anchor":"S:c0c2347579","kind":"type","line":5,"name":"ButtonVariant","path_id":"F:8b122c449e","signature":"export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";"},{"anchor":"S:05e617fb30","kind":"type","line":6,"name":"ButtonSize","path_id":"F:8b122c449e","signature":"export type ButtonSize = \"sm\" | \"md\" | \"lg\";"},{"anchor":"S:c928d805b5","kind":"interface","line":8,"name":"ButtonProps","path_id":"F:8b122c449e","signature":"export interface ButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:b1bbb81b82","doc":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and * `danger` for anything that arms, delete","kind":"function","line":30,"name":"Button","path_id":"F:8b122c449e","signature":"export function Button("},{"anchor":"S:6c4ca00b53","doc":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state.","kind":"function","line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba","signature":"function scratchModonomeDir(sourcePath = realConfigPath)"},{"anchor":"S:a57f8c1bdc","doc":"Lines present in the original file that are untouched by a given patch: every line outside the blocks the patch's keys live in. Used to assert a patch changes only what it says it changes.","kind":"function","line":39,"name":"otherLines","path_id":"F:8b2f3dbcba","signature":"function otherLines(originalText, touchedTopKeys)"},{"anchor":"S:542af83b15","doc":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here.","kind":"const","line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4","signature":"export const BUILTIN_PROVIDERS ="},{"anchor":"S:6ee308cae0","doc":"Resolve a provider descriptor by name. Built-ins are merged with an optional * config-provided override map (cfg.providers), so a host repo can redefine or * add providers without touching this file. ","kind":"function","line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4","signature":"export function resolveProvider(name, providersOverride)"},{"anchor":"S:bead992b70","doc":"A cost class is billable only when it is \"paid\". Free and local roles never require remote_model_budget_usd_per_day.","kind":"function","line":48,"name":"isBillable","path_id":"F:8b5a1f94c4","signature":"export function isBillable(costClass)"},{"anchor":"S:97a7516354","doc":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned bounded-retry escapes and must not count as ","kind":"function","line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3","signature":"function buildAdjacency(machine, { includeCapGuard })"},{"anchor":"S:a716bbdaa8","doc":"reaches(adjacency, start, targets) -> bool Whether any node in `targets` is reachable from `start` along the edges.","kind":"function","line":33,"name":"reaches","path_id":"F:8b8d3c46b3","signature":"function reaches(adjacency, start, targets)"},{"anchor":"S:982b9fa62d","kind":"function","line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3","signature":"export function stateMachineErrors(machine)"},{"anchor":"S:a1828ef829","kind":"function","line":59,"name":"main","path_id":"F:8bb1b57470","signature":"async function main()"},{"anchor":"S:796295afbe","kind":"type","line":6,"name":"GateStatus","path_id":"F:8c6234a8cb","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:0906a625c3","kind":"interface","line":8,"name":"GateRow","path_id":"F:8c6234a8cb","signature":"export interface GateRow"},{"anchor":"S:2db1222578","kind":"interface","line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb","signature":"export interface GatePanelProps"},{"anchor":"S:0d46d60d35","doc":"A vertical list of CI gate rows, used to visualize the merge-blocking checks and * the anti-gaming ratchet on a work item or pipeline. Each row pairs an icon, a color, * and a text label for its statu","kind":"function","line":63,"name":"GatePanel","path_id":"F:8c6234a8cb","signature":"export function GatePanel({ gates, title = \"CI gates\" }: GatePanelProps)"},{"anchor":"S:aecf05317d","doc":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUrl * @returns {string}","kind":"function","line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236","signature":"export function buildChatCompletionsUrl(baseUrl)"},{"anchor":"S:b9ed6b7b01","doc":"Build the request headers, including the Authorization header when a token * is supplied. No Authorization header is sent when authToken is falsy, which * suits local endpoints that need none. * * @pa","kind":"function","line":44,"name":"buildHeaders","path_id":"F:8d2cb93236","signature":"export function buildHeaders(authToken, authScheme = \"Bearer\")"},{"anchor":"S:403ac351dd","doc":"Build the JSON request body. max_tokens is omitted when maxTokens is * undefined, since some endpoints reject an explicit null/undefined field. * * @param {string} model * @param {Array} messa","kind":"function","line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236","signature":"export function buildRequestBody(model, messages, maxTokens)"},{"anchor":"S:37693a15d4","doc":"Normalize a parsed OpenAI chat-completions response into * { text, finishReason, usage }. Throws a clear error on a malformed body * (missing choices, missing message). * * @param {any} data * @return","kind":"function","line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236","signature":"export function normalizeResponse(data)"},{"anchor":"S:fd88bace68","doc":"Retry only on 429 (rate limit) and 5xx (server error). Any other non-2xx status is a caller error and must not be retried.","kind":"function","line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236","signature":"function isRetryableStatus(status)"},{"anchor":"S:969658a48c","kind":"function","line":91,"name":"sleep","path_id":"F:8d2cb93236","signature":"function sleep(ms)"},{"anchor":"S:705c285e25","doc":"POST a chat-completions request to an OpenAI-compatible endpoint and return * a normalized result. * * @param {object} opts * @param {string} opts.baseUrl - Endpoint base, e.g. \"https://api.example.co","kind":"function","line":112,"name":"chatCompletion","path_id":"F:8d2cb93236","signature":"export async function chatCompletion("},{"anchor":"S:8041c36b7b","doc":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure.","kind":"function","line":18,"name":"noThrow","path_id":"F:8fe56e5618","signature":"function noThrow(fn)"},{"anchor":"S:856f3a5bea","doc":"Wrap guard-ratchet call with a hard 5-second timeout.","kind":"function","line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618","signature":"function ratchetWithTimeout(content)"},{"anchor":"S:744cc47208","doc":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and deterministic. * * Never returns an empty message:","kind":"function","line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281","signature":"export function cleanCommitMessage(message)"},{"anchor":"S:bc4bff4faa","doc":"Decide the metadata-only rewrite for each commit in a range. Input `commits` is the * range oldest-first, each { sha, an, ae, cn, ce, message }. `identity` is the target * { name, email } that replace","kind":"function","line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281","signature":"export function planCommitRewrites(commits, identity)"},{"anchor":"S:792d313360","doc":"A deterministic fingerprint of a rewrite plan. Same findings and target identity * produce the same plan and therefore the same fingerprint, which is what lets an owner * approve a proposal and later ","kind":"function","line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281","signature":"export function remediationFingerprint(plan)"},{"anchor":"S:18ff6b9c89","doc":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {string} dir * @returns {{ patchPath: stri","kind":"function","line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a","signature":"export function loadSubmission(dir)"},{"anchor":"S:00452332a2","doc":"Run the ratchet against the submitted diff TEXT ONLY, via its existing * --diff mode. Never applies or executes the diff. Returns the ratchet's raw * exit status and output for the report. * @param {s","kind":"function","line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a","signature":"export function runRatchetAgainstSubmission(patchPath, deps = {})"},{"anchor":"S:4296da48b7","doc":"Combine the declaration and the ratchet's verdict into a judged result. * Pure. \"confirmed-break\" only when the submitter claimed the diff should be * blocked and the ratchet, in fact, did not block i","kind":"function","line":86,"name":"judge","path_id":"F:90cbb2cf6a","signature":"export function judge(declaration, ratchetResult)"},{"anchor":"S:c388580f86","kind":"function","line":114,"name":"main","path_id":"F:90cbb2cf6a","signature":"async function main(argv)"},{"anchor":"S:fc3bb4bc24","doc":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves).","kind":"function","line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9","signature":"function collectFindings()"},{"anchor":"S:400a8c02c3","kind":"function","line":61,"name":"applyFix","path_id":"F:90e1fd2fd9","signature":"function applyFix(branch, findings)"},{"anchor":"S:6fab505fa4","doc":"Parse an optional `--pr ` flag. Returns the positive integer PR number, or null when absent. Throws on a malformed value so the caller can report it.","kind":"function","line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9","signature":"function parsePrNumber(rest)"},{"anchor":"S:cde4a28e06","doc":"Fetch the PR title, body, and conversation comments and scan them with the strict detector. Uses the same AI_SIGNATURE_RE as every other surface, so this is a hard detection gate, not the advisory nea","kind":"function","line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9","signature":"async function collectPrFindings(prNumber, client = createGitHubClient())"},{"anchor":"S:c546f7913f","kind":"function","line":108,"name":"main","path_id":"F:90e1fd2fd9","signature":"async function main(argv)"},{"anchor":"S:d75c32ea9c","kind":"function","line":11,"name":"add","path_id":"F:90f0999521","signature":"export function add(a, b)"},{"anchor":"S:d7d594dd8d","kind":"function","line":15,"name":"multiply","path_id":"F:90f0999521","signature":"export function multiply(a, b)"},{"anchor":"S:7902cd38d0","kind":"interface","line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8","signature":"export interface MdnRootProps extends HTMLAttributes"},{"anchor":"S:f2642efdc2","doc":"The design-system root. Establishes the dark ground, the body font, and the token * scope that every component inherits. Wrap an app or a screen in this (AppShell already * does). It is also the wrapp","kind":"function","line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8","signature":"export function MdnRoot({ children, className, style, ...rest }: MdnRootProps)"},{"anchor":"S:2b6631cd33","kind":"const","line":1,"name":"MESSAGES","path_id":"F:91e24dcac0","signature":"export const MESSAGES ="},{"anchor":"S:3b092e9ab0","doc":"Parse DECISIONS.md text into heading violations and Resolved-section entries.","kind":"function","line":64,"name":"parseDecisions","path_id":"F:92d6903b5f","signature":"export function parseDecisions(text)"},{"anchor":"S:183f710a08","kind":"function","line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f","signature":"function readCodeownersUsers(rootDir)"},{"anchor":"S:fe27a88258","doc":"Given a PR's reviews (GitHub API shape: [{ user: { login }, state }]) and its author login, is there at least one APPROVED review from a CODEOWNERS-listed login that is not the author themselves? Self","kind":"function","line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f","signature":"export function hasEligibleApproval(reviews, prAuthorLogin, codeownersUsers)"},{"anchor":"S:890ccb5d6b","kind":"function","line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f","signature":"async function fetchPRReviews(repoSlug, prNumber, token)"},{"anchor":"S:9554538925","doc":"Read the current PR's number, author login, and repo slug from GitHub Actions' standard environment (or from MODONOME_PR_* overrides, for tests and manual runs against a specific PR). Returns null whe","kind":"function","line":196,"name":"readPRContext","path_id":"F:92d6903b5f","signature":"function readPRContext()"},{"anchor":"S:eb67f0edae","kind":"function","line":219,"name":"getFileAt","path_id":"F:92d6903b5f","signature":"function getFileAt(ref, rootDir)"},{"anchor":"S:e18ceff2c8","kind":"function","line":230,"name":"main","path_id":"F:92d6903b5f","signature":"async function main()"},{"anchor":"S:a8fe6446c0","kind":"function","line":17,"name":"headSha","path_id":"F:92dde817ee","signature":"function headSha()"},{"anchor":"S:342fb4655a","kind":"function","line":23,"name":"gate","path_id":"F:9344d335a6","signature":"function gate(script, args = [])"},{"anchor":"S:cb97c7b3fc","kind":"function","line":27,"name":"mark","path_id":"F:9344d335a6","signature":"function mark(ok) { return ok ? \"pass\" : \"FAIL\"; }"},{"anchor":"S:bcddbe684b","doc":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), so summarizing them stays reproducible fr","kind":"function","line":62,"name":"listCaptures","path_id":"F:9344d335a6","signature":"function listCaptures()"},{"anchor":"S:0bae1275b2","kind":"type","line":1,"name":"Card","path_id":"F:93f0f5d3de","signature":"export type Card = { number: string; expired: boolean };"},{"anchor":"S:94383b0aef","kind":"type","line":3,"name":"RefundResult","path_id":"F:93f0f5d3de","signature":"export type RefundResult ="},{"anchor":"S:16a3c28802","kind":"function","line":9,"name":"charge","path_id":"F:93f0f5d3de","signature":"export function charge(card: Card): \"ok\" | \"declined\""},{"anchor":"S:bf5cf69681","kind":"function","line":13,"name":"refund","path_id":"F:93f0f5d3de","signature":"export function refund(card: Card, amount: number): RefundResult"},{"anchor":"S:5cc853b5b1","doc":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output.","kind":"function","line":50,"name":"loadScenarios","path_id":"F:94050e680d","signature":"export async function loadScenarios(dir = join(here, \"scenarios\"))"},{"anchor":"S:8e586c7c13","kind":"function","line":60,"name":"commandOnPath","path_id":"F:94050e680d","signature":"function commandOnPath(command)"},{"anchor":"S:44432e7cb0","doc":"Run one scenario against the resolved checker role. Never throws: every * failure to reach a model (binary absent, spawn error, non-zero exit, no * base_url for an openai-http checker) resolves to a \"","kind":"function","line":75,"name":"runScenario","path_id":"F:94050e680d","signature":"export async function runScenario(scenario, checker, deps = {})"},{"anchor":"S:5607ca9508","kind":"function","line":116,"name":"main","path_id":"F:94050e680d","signature":"async function main(argv)"},{"anchor":"S:517ace9ff8","kind":"function","line":17,"name":"tmp","path_id":"F:940d5f4399","signature":"function tmp()"},{"anchor":"S:2fb48a9b04","kind":"function","line":21,"name":"run","path_id":"F:940d5f4399","signature":"function run(script, ...args)"},{"anchor":"S:f9a8f3309b","kind":"function","line":25,"name":"scaffold","path_id":"F:940d5f4399","signature":"function scaffold(dir)"},{"anchor":"S:e31656bc1d","kind":"function","line":33,"name":"readConfig","path_id":"F:940d5f4399","signature":"function readConfig(dir)"},{"anchor":"S:1b794f5743","kind":"function","line":21,"name":"getDiff","path_id":"F:9427d264e6","signature":"function getDiff(baseRef = \"origin/main\")"},{"anchor":"S:d47456131b","kind":"function","line":40,"name":"getChangedFiles","path_id":"F:9427d264e6","signature":"function getChangedFiles(diff)"},{"anchor":"S:2f0240b93f","kind":"function","line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6","signature":"function loadCurrentWorkItem()"},{"anchor":"S:56a4782fc2","kind":"function","line":77,"name":"matchesPattern","path_id":"F:9427d264e6","signature":"function matchesPattern(path, patterns)"},{"anchor":"S:636b7af50c","doc":"A single active claim lease on a work item, as shown in the lease table.","kind":"interface","line":10,"name":"LeaseRow","path_id":"F:956332d4b5","signature":"export interface LeaseRow"},{"anchor":"S:46ca0706e7","kind":"interface","line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5","signature":"export interface LeaseTableProps"},{"anchor":"S:5eba6876fa","doc":"A table of active claim leases: which work item, who holds it, when it expires * (relative and exact), and whether it has gone stale. When `onRelease` is provided, * each row gets a danger \"Release\" b","kind":"function","line":36,"name":"LeaseTable","path_id":"F:956332d4b5","signature":"export function LeaseTable({ leases, onRelease }: LeaseTableProps)"},{"anchor":"S:7b984e047b","kind":"function","line":18,"name":"finalizeState","path_id":"F:95d4304133","signature":"export function finalizeState(base: PanelState): PanelState"},{"anchor":"S:559455c526","kind":"function","line":25,"name":"loadPanelState","path_id":"F:95d4304133","signature":"export async function loadPanelState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:b8ed1c85bb","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9616513cb6","signature":"export const MESSAGES ="},{"anchor":"S:8fe737eaa0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:964f89b6cc","signature":"export const MESSAGES ="},{"anchor":"S:c38d35b211","kind":"function","line":4,"name":"Roles","path_id":"F:973aaa9d86","signature":"export const Roles = () => ("},{"anchor":"S:257f8f1622","kind":"const","line":1,"name":"MESSAGES","path_id":"F:973aca5f3e","signature":"export const MESSAGES ="},{"anchor":"S:d412af5fd3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9803feef4a","signature":"export const MESSAGES ="},{"anchor":"S:944e1f3b0b","doc":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/check-promotion-readiness.mjs), which fai","kind":"const","line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea","signature":"export const CAPABILITY_FLAGS = ["},{"anchor":"S:2bba65c029","kind":"const","line":1,"name":"MESSAGES","path_id":"F:99251bc045","signature":"export const MESSAGES ="},{"anchor":"S:1dc2770ace","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9a32917e56","signature":"export const MESSAGES ="},{"anchor":"S:5a7bfc5a1b","doc":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identities is safe. The existing strict tokens a","kind":"const","line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER1_TOKENS = ["},{"anchor":"S:f650b22681","doc":"Tier 2: generic or ambiguous words that would explode with false positives under substring or free-text matching (\"assistant professor\", \"once you grok this\", \"the argument doesn't cohere\"). Matched O","kind":"const","line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER2_TOKENS = [\"assistant\", \"grok\", \"cohere\"];"},{"anchor":"S:0c9de67184","doc":"Free text (commit bodies, PR text) is the noisiest surface: this repo legitimately names \"claude\"/\"gpt\" in prose, and \"grok\"/\"cohere\" are ordinary words there. So free-text scanning is limited to the ","kind":"const","line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TEXT_TOKENS = [\"mistral\", \"deepseek\", \"qwen\"];"},{"anchor":"S:680cec9dbd","kind":"function","line":64,"name":"clamp","path_id":"F:9a3e8ed7d2","signature":"function clamp(s)"},{"anchor":"S:25a03d4ee2","doc":"Lowercase and strip separators (`/ - _ .` and whitespace) so \"claude-code\", * \"claude_code\", and \"Claude Code\" all normalize to a form containing \"claudecode\". * Used for Tier-1 substring matching on ","kind":"function","line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2","signature":"export function normalizeForMatch(s)"},{"anchor":"S:7b7ddcaa20","doc":"Split a branch name or identity into its bare word segments for exact Tier-2 matching: \"feature/grok-adapter\" -> [\"feature\", \"grok\", \"adapter\"].","kind":"function","line":79,"name":"segments","path_id":"F:9a3e8ed7d2","signature":"function segments(s)"},{"anchor":"S:89065c6f4b","kind":"function","line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2","signature":"function tier1Hit(normalized)"},{"anchor":"S:7910b636e8","kind":"function","line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2","signature":"function tier2Hit(segs)"},{"anchor":"S:a657233cd5","doc":"Near-miss on a branch name. Returns a finding, or null when clean or when the * strict segment check already catches it (so the widener never duplicates strict).","kind":"function","line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissBranch(name)"},{"anchor":"S:d92119a484","doc":"Near-miss on a commit author/committer identity. Checks the name (Tier 1 substring * and Tier 2 exact word) and the email (Tier 1 substring, catching vendor domains * such as \"@mistral.ai\"). Returns n","kind":"function","line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissIdentity(name, email)"},{"anchor":"S:b121dfe1ec","doc":"Near-miss on free text, scanned line by line. A line is a candidate only when it * both names a distinctive new-vendor TEXT_TOKEN (as a whole word) AND carries an * attribution cue, and the strict AI_","kind":"function","line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissText(where, text)"},{"anchor":"S:fa71aef711","doc":"Render one LESSONS.md Staged line from a finding. The line is a PROPOSED denylist * addition for human review, never an applied change. The (signal: review) tag marks * it as a review-surfaced candida","kind":"function","line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2","signature":"export function formatStagedLine(finding, { date, evidence })"},{"anchor":"S:cf3414acc5","doc":"Test files: any language.","kind":"const","line":10,"name":"TEST_FILE","path_id":"F:9a72895a04","signature":"export const TEST_FILE = new RegExp(["},{"anchor":"S:1c6f22237b","doc":"Python test files: pytest uses the bare `assert` statement (no call parens), which a call-site-only assertion counter cannot see. These need language-aware handling for the removal check and a vacuous","kind":"const","line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04","signature":"export const PYTHON_TEST = /(?:^|\\/)(?:test_[^/]*|[^/]*_test)\\.py$/;"},{"anchor":"S:2e1baab2ff","doc":"Source files by language (for non-test type-escape checks).","kind":"const","line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04","signature":"export const JAVA_SRC = /\\.java$/;"},{"anchor":"S:7ad858b9a2","kind":"const","line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04","signature":"export const DOTNET_SRC = /\\.cs$/;"},{"anchor":"S:e0b068ef78","kind":"const","line":31,"name":"TS_SRC","path_id":"F:9a72895a04","signature":"export const TS_SRC = /\\.(c|m)?[jt]sx?$/;"},{"anchor":"S:4d36cf3d1c","doc":"JaCoCo / Gradle / Coverlet config files.","kind":"const","line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04","signature":"export const JAVA_BUILD = /^(pom\\.xml|build\\.gradle(\\.kts)?)$/;"},{"anchor":"S:edd792ec6d","kind":"const","line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04","signature":"export const DOTNET_BUILD = /\\.(runsettings|csproj|props)$/;"},{"anchor":"S:d0478605fa","kind":"const","line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04","signature":"export const TS_CONFIG = /tsconfig.*\\.json$/;"},{"anchor":"S:4c9526df5f","kind":"const","line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04","signature":"export const COVERAGE_CONFIG = /(?:jest|vitest)\\.config\\.(js|ts|mjs|cjs)$|pyproject\\.toml$/;"},{"anchor":"S:f43dc8ad19","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d","signature":"export const MESSAGES ="},{"anchor":"S:4a7db1c0d0","kind":"function","line":45,"name":"emptyDraft","path_id":"F:9b3f18856e","signature":"function emptyDraft(defaultRole: string): WorkItemDraft"},{"anchor":"S:84220fc054","doc":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-only * inspector drawer with the item's i","kind":"function","line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e","signature":"export function WorkQueueScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:700d752004","kind":"function","line":11,"name":"cli","path_id":"F:9bb94e1b40","signature":"function cli(...args)"},{"anchor":"S:46d90cc86e","kind":"function","line":13,"name":"Timeline","path_id":"F:9c9edea0c9","signature":"export const Timeline = () => ;"},{"anchor":"S:a1107105c3","kind":"function","line":26,"name":"tmp","path_id":"F:9cbe9238f8","signature":"function tmp()"},{"anchor":"S:641774928a","kind":"function","line":30,"name":"run","path_id":"F:9cbe9238f8","signature":"function run(script, ...args)"},{"anchor":"S:765b4574da","kind":"function","line":34,"name":"mcpCall","path_id":"F:9cbe9238f8","signature":"function mcpCall(method, params = {})"},{"anchor":"S:3fd1032067","kind":"const","line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766","signature":"export const CURRENT_SCHEMA_VERSION = 1;"},{"anchor":"S:18c9f379c0","doc":"Safe defaults for every lever. Migration fills any missing key from here.","kind":"const","line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766","signature":"export const SAFE_DEFAULTS ="},{"anchor":"S:b8cdbe3fd3","kind":"function","line":73,"name":"migrate","path_id":"F:9d69a6b766","signature":"export function migrate(cfg)"},{"anchor":"S:7803dea04b","doc":"Catalog entries for scripts/check-style.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e","signature":"export const MESSAGES ="},{"anchor":"S:8822b8498d","kind":"type","line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0","signature":"export type ProgressMeterTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:c1667b970b","kind":"interface","line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0","signature":"export interface ProgressMeterProps"},{"anchor":"S:8dfe0cf637","doc":"A horizontal meter for bounded quantities such as budget consumed or checker * coverage. Renders a label row (with a mono value/max readout) above a track, * with a filled bar sized to the current val","kind":"function","line":27,"name":"ProgressMeter","path_id":"F:9deac13db0","signature":"export function ProgressMeter("},{"anchor":"S:95871faa22","kind":"function","line":75,"name":"formatNumber","path_id":"F:9deac13db0","signature":"function formatNumber(n: number): string"},{"anchor":"S:5f8c0130c3","kind":"type","line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b","signature":"export type MetricTileTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:e15dbc7540","kind":"interface","line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b","signature":"export interface MetricTileProps"},{"anchor":"S:1beab0dc0c","doc":"A dashboard stat tile: an eyebrow label (with an optional HelpHint), a large value * with unit, and optional icon, trend slot, and sub text. This is the core building * block of the Overview screen's ","kind":"function","line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b","signature":"export function MetricTile({ label, value, unit, hint, tone = \"neutral\", icon, trend, sub }: MetricTileProps)"},{"anchor":"S:ad93bbf998","kind":"function","line":14,"name":"run","path_id":"F:9f36b3ef29","signature":"function run(args, cwd)"},{"anchor":"S:107eb40a1d","kind":"function","line":18,"name":"makeRepo","path_id":"F:9f36b3ef29","signature":"function makeRepo()"},{"anchor":"S:704fff1c43","kind":"function","line":15,"name":"tmp","path_id":"F:9f6dd5e5a3","signature":"function tmp()"},{"anchor":"S:13fdf696a0","kind":"function","line":19,"name":"run","path_id":"F:9f6dd5e5a3","signature":"function run(...args)"},{"anchor":"S:0a6b98d712","kind":"function","line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3","signature":"function scaffold(dir)"},{"anchor":"S:247c34d405","kind":"function","line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3","signature":"function itemsDir(dir)"},{"anchor":"S:e95adce358","kind":"function","line":4,"name":"DryRun","path_id":"F:a0068c8817","signature":"export const DryRun = () => ("},{"anchor":"S:9598b17b9e","kind":"function","line":14,"name":"AutoMerge","path_id":"F:a0068c8817","signature":"export const AutoMerge = () => ("},{"anchor":"S:c80f0936ea","kind":"function","line":4,"name":"Budget","path_id":"F:a0abaf6a25","signature":"export const Budget = () => ("},{"anchor":"S:5115891196","kind":"function","line":8,"name":"Coverage","path_id":"F:a0abaf6a25","signature":"export const Coverage = () => ;"},{"anchor":"S:996743005b","kind":"function","line":29,"name":"flagValue","path_id":"F:a0d489df6d","signature":"function flagValue(argv, name)"},{"anchor":"S:59ba63dbab","kind":"function","line":34,"name":"readConfig","path_id":"F:a0d489df6d","signature":"function readConfig(root)"},{"anchor":"S:3c2bad87be","kind":"function","line":40,"name":"snapshotDir","path_id":"F:a0d489df6d","signature":"function snapshotDir(root) { return join(root, \".modonome\", \"snapshot\"); }"},{"anchor":"S:5353762af1","kind":"function","line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d","signature":"function loadCommittedSignature(root)"},{"anchor":"S:d5719588cb","kind":"function","line":48,"name":"llmsText","path_id":"F:a0d489df6d","signature":"function llmsText(signature)"},{"anchor":"S:88bd705d3f","kind":"function","line":64,"name":"badgeJson","path_id":"F:a0d489df6d","signature":"function badgeJson(signature, map)"},{"anchor":"S:bc3262b829","kind":"function","line":73,"name":"writeArtifact","path_id":"F:a0d489df6d","signature":"function writeArtifact(root, built)"},{"anchor":"S:3466f40801","kind":"function","line":83,"name":"buildOptions","path_id":"F:a0d489df6d","signature":"function buildOptions(root, argv, now)"},{"anchor":"S:6584162247","kind":"function","line":97,"name":"nowIso","path_id":"F:a0d489df6d","signature":"function nowIso() { return new Date().toISOString(); }"},{"anchor":"S:383c03d511","doc":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yields a full rebuild that produces identical","kind":"function","line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d","signature":"function incrementalInputs(root, argv)"},{"anchor":"S:df5cb6eb12","doc":"Recompute file hashes and the Merkle root directly from disk. Used by --verify.","kind":"function","line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d","signature":"function recomputeMerkle(root)"},{"anchor":"S:8d131c2429","doc":"A --since ref is free-form git revision syntax (branch, tag, HEAD~N, a SHA), so it cannot be restricted to a fixed pattern the way a cache-internal SHA can. The one property that must hold is that it ","kind":"function","line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d","signature":"function isSafeGitRevision(value)"},{"anchor":"S:2a5511d42c","kind":"function","line":125,"name":"gitDelta","path_id":"F:a0d489df6d","signature":"function gitDelta(root, ref)"},{"anchor":"S:2ce7a5bbe7","kind":"function","line":146,"name":"positional","path_id":"F:a0d489df6d","signature":"function positional(argv)"},{"anchor":"S:ecd0da924a","doc":"Register the tree-sitter parser when requested via --parser or config, with a graceful fallback to the heuristic default when tree-sitter is not installed.","kind":"function","line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d","signature":"async function maybeRegisterParser(root, argv)"},{"anchor":"S:68308360b1","kind":"function","line":166,"name":"main","path_id":"F:a0d489df6d","signature":"async function main(argv)"},{"anchor":"S:f6264503e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a104667369","signature":"export const MESSAGES ="},{"anchor":"S:7369c62b84","kind":"class","line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423","signature":"export class OrderServiceBroken"},{"anchor":"S:07a58ff928","doc":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the stdin-close race in batch mode.","kind":"function","line":14,"name":"rpc","path_id":"F:a167609a41","signature":"function rpc(requests, expectedIds)"},{"anchor":"S:8e42d127b7","doc":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing out or parked for a human, so staleness d","kind":"const","line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d","signature":"export const OPEN_STATES = [\"queued\", \"claimed\", \"making\", \"checking\", \"rework\"];"},{"anchor":"S:b3a28348ad","doc":"A lease is live when it has a holder and an unexpired expiry, mirroring transition-work-item.mjs's own leaseIsLive so the two files can never disagree about what \"actively claimed\" means.","kind":"function","line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d","signature":"export function hasLiveLease(item, now = new Date())"},{"anchor":"S:25139ebf6c","doc":"Every `tests.test.mjs` (or agentproof.test.mjs) path literally named in an item's gates array, deduplicated. Broad gates like \"npm run verify\" or \"node scripts/check-style.mjs .\" name no specific file","kind":"function","line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d","signature":"export function extractOwnTestFiles(gates = [])"},{"anchor":"S:87fa79bea3","doc":"Every allowed_edit_set entry that is not itself one of the item's own test files: the implementation surface the test files are supposed to prove exists.","kind":"function","line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d","signature":"export function implementationPaths(item)"},{"anchor":"S:3fac1340a4","doc":"Decide whether a single open-state item looks stale, without running anything. Returns a reason string when every static precondition holds (has a resolvable test file, every implementation path exist","kind":"function","line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d","signature":"export function staleCandidate(item, now = new Date())"},{"anchor":"S:098af8d3e8","doc":"Run one already-existing test file and report whether it passed. Spawned, not imported, so a crash or hang in the target test cannot take this checker down with it; `node --test` on a single file is f","kind":"function","line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d","signature":"export function testFilePasses(testFile, { spawn = spawnSync } = {})"},{"anchor":"S:980a6a0449","doc":"Full check across every work item. Returns the list of stale findings; each entry names the item, the state it is stuck in, and the evidence (which test files and implementation paths already exist an","kind":"function","line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d","signature":"export function findStaleWorkItems(items, { spawn = spawnSync, now = new Date() } = {})"},{"anchor":"S:dc4ac94e5b","kind":"type","line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed","signature":"export type TableColumnAlign = \"left\" | \"right\" | \"center\";"},{"anchor":"S:aabd2d1e55","kind":"interface","line":6,"name":"TableColumn","path_id":"F:a402d2f9ed","signature":"export interface TableColumn"},{"anchor":"S:1d4c8df8c0","kind":"interface","line":19,"name":"TableProps","path_id":"F:a402d2f9ed","signature":"export interface TableProps"},{"anchor":"S:9f9ed94a62","doc":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highlight on * hover; when `onRowClick` is set","kind":"function","line":42,"name":"Table","path_id":"F:a402d2f9ed","signature":"export function Table({ columns, rows, getRowKey, onRowClick, empty, dense }: TableProps)"},{"anchor":"S:396f1000ae","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a5822fdd03","signature":"export const MESSAGES ="},{"anchor":"S:cd1b84d7ff","doc":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised.","kind":"function","line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021","signature":"function makeMinimalRepo()"},{"anchor":"S:336ebe7ff5","kind":"function","line":52,"name":"run","path_id":"F:a6d2bd3021","signature":"function run(tmp)"},{"anchor":"S:0ca7d7cb9c","doc":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than by path, so it holds under a copied or ","kind":"function","line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452","signature":"export function isModonomeRepo(targetRoot)"},{"anchor":"S:2681abe2e5","doc":"Install the pre-commit hook into targetRoot. Returns \"installed\", \"kept\" (a host hook already existed and was preserved), or \"no-git\". self=true writes modonome's own dev hook and overwrites; a host i","kind":"function","line":60,"name":"installHooks","path_id":"F:a7ce0f6452","signature":"export function installHooks(targetRoot, { self = false, mode = \"snapshot\" } = {})"},{"anchor":"S:0126079093","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15","signature":"export const MESSAGES ="},{"anchor":"S:0b4b18fb8a","kind":"type","line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27","signature":"export type IconButtonVariant = \"ghost\" | \"secondary\" | \"danger\";"},{"anchor":"S:49158af5a6","kind":"type","line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27","signature":"export type IconButtonSize = \"sm\" | \"md\";"},{"anchor":"S:b4354229d8","kind":"interface","line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27","signature":"export interface IconButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:8c83339acb","doc":"A square, icon-only button. Always carries an `aria-label` built from the required * `label` prop so the control has an accessible name even though no text is visible. * Use for compact affordances su","kind":"function","line":25,"name":"IconButton","path_id":"F:a8cfe45d27","signature":"export function IconButton("},{"anchor":"S:d31fd4dafa","doc":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or downgrade a failed precondition.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:aa27d254da","signature":"export const MESSAGES ="},{"anchor":"S:170dcaab55","doc":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value is * a bare command name resolved agains","kind":"function","line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6","signature":"export function resolveAdapterCommand(adapterEntry)"},{"anchor":"S:d7a4f68100","doc":"Enforce ADR-009 path containment. The adapter's working directory must resolve * to exactly the target directory (resolve(root, plan.target)); a cwd outside the * target, reached via \"..\" or an absolu","kind":"function","line":52,"name":"containedCwd","path_id":"F:aa77f227a6","signature":"export function containedCwd(root, target)"},{"anchor":"S:5b2eae49a8","kind":"function","line":62,"name":"sep","path_id":"F:aa77f227a6","signature":"function sep()"},{"anchor":"S:7ed39c68da","doc":"Build the argument vector for the external CLI. Points it at the resolved * endpoint (base URL and model), forwards a bounded max-turns flag, and reads the * prompt from stdin (so no prompt text lands","kind":"function","line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6","signature":"export function buildAdapterArgs(endpoint, maxTurns, adapterEntry)"},{"anchor":"S:bd7f311fdb","doc":"Run the external agentic CLI for one role. Never throws on a bounded/expected * failure (spawn error, non-zero exit, timeout, cap hit): returns a clean status * object mirroring the single-shot path's","kind":"function","line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6","signature":"export async function runToolLoopAdapter("},{"anchor":"S:2cd9cbf595","kind":"type","line":4,"name":"ToastTone","path_id":"F:ab334f34df","signature":"export type ToastTone = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:00c956ccf3","kind":"interface","line":6,"name":"ToastProps","path_id":"F:ab334f34df","signature":"export interface ToastProps"},{"anchor":"S:5eb8ce722f","doc":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: mount * one `Toast` per visible notificat","kind":"function","line":31,"name":"Toast","path_id":"F:ab334f34df","signature":"export function Toast({ tone = \"info\", title, message, onDismiss }: ToastProps)"},{"anchor":"S:55a57d9fd6","kind":"function","line":168,"name":"toolRatchet","path_id":"F:ab5077147a","signature":"async function toolRatchet(args)"},{"anchor":"S:a4d0ce8fea","kind":"function","line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a","signature":"async function toolValidateConfig(args)"},{"anchor":"S:2d1eeb5346","kind":"function","line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a","signature":"async function toolValidateWorkItem(args)"},{"anchor":"S:6499fa18ee","kind":"function","line":264,"name":"toolStatus","path_id":"F:ab5077147a","signature":"async function toolStatus(args)"},{"anchor":"S:2d2b3ccfa2","kind":"function","line":318,"name":"toolCompliance","path_id":"F:ab5077147a","signature":"async function toolCompliance(args)"},{"anchor":"S:f613554429","kind":"function","line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a","signature":"async function toolVerifyAttestation(args)"},{"anchor":"S:521fca28ad","kind":"function","line":344,"name":"toolSnapshot","path_id":"F:ab5077147a","signature":"async function toolSnapshot(args)"},{"anchor":"S:16d8c02a8e","kind":"function","line":372,"name":"send","path_id":"F:ab5077147a","signature":"function send(obj)"},{"anchor":"S:2306976428","kind":"function","line":376,"name":"errorResponse","path_id":"F:ab5077147a","signature":"function errorResponse(id, code, message)"},{"anchor":"S:dd3b976184","kind":"function","line":380,"name":"handleRequest","path_id":"F:ab5077147a","signature":"async function handleRequest(req)"},{"anchor":"S:a6ff0bb6d7","doc":"Slugify a lesson into a deterministic ID.","kind":"function","line":28,"name":"slugifyId","path_id":"F:ac11b5379f","signature":"function slugifyId(lesson)"},{"anchor":"S:928743a069","doc":"Build a learning record from options.","kind":"function","line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f","signature":"export function buildLearningRecord(opts = {})"},{"anchor":"S:562052e079","doc":"Validate a learning record. Returns an array of error strings. Empty array means valid.","kind":"function","line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f","signature":"export function validateLearningRecord(record)"},{"anchor":"S:ba65eaae5b","doc":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advisory notice.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:acc3f6b466","signature":"export const MESSAGES ="},{"anchor":"S:e19487a8ae","doc":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync.","kind":"function","line":22,"name":"resolveFiles","path_id":"F:ace169adc4","signature":"function resolveFiles(argPath)"},{"anchor":"S:c79db45132","doc":"Build the small file helpers a detector needs, bound to one target directory.","kind":"function","line":11,"name":"helpers","path_id":"F:ae46bbab81","signature":"function helpers(target)"},{"anchor":"S:13fa2b4863","doc":"Detect the primary stack. Returns { name, pm, gates } exactly as the dry-run sweep expects, plus { entrypoints, commands } for the snapshot signature.","kind":"function","line":20,"name":"detectStack","path_id":"F:ae46bbab81","signature":"export function detectStack(target = \".\")"},{"anchor":"S:3575202801","doc":"Paths that must never be auto-merged. Same list the dry-run sweep reports.","kind":"function","line":57,"name":"detectProtected","path_id":"F:ae46bbab81","signature":"export function detectProtected(target = \".\")"},{"anchor":"S:9e9207d834","doc":"Repo instruction files an agent should read first.","kind":"function","line":67,"name":"detectInstructions","path_id":"F:ae46bbab81","signature":"export function detectInstructions(target = \".\")"},{"anchor":"S:7c716c856e","doc":"Rank files by how often they changed in recent git history. The dry-run sweep uses the default limit of 3; the snapshot passes a larger limit to score churn across the whole tree. Returns [] when git ","kind":"function","line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81","signature":"export function detectHotFiles(target = \".\", { commits = 200, limit = 3 } = {})"},{"anchor":"S:7fe7ee7f43","kind":"function","line":94,"name":"dedupe","path_id":"F:ae46bbab81","signature":"function dedupe(arr)"},{"anchor":"S:3d3f20848d","doc":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.yml). Both are excluded from the schedule ","kind":"const","line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca","signature":"export const CORE_ROLE_SEQUENCE = [\"maker\", \"checker\"];"},{"anchor":"S:96e9e4a020","doc":"Normalize a role's trigger field (string shorthand, object, or absent) into a stable shape. A bare string s becomes { type: s }. Absent becomes { type: null }. after and cron default to an empty list ","kind":"function","line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca","signature":"export function normalizeTrigger(trigger)"},{"anchor":"S:0427f639c4","doc":"Normalize a role's schedule field into { cron, timezone } or null when absent. Pure.","kind":"function","line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca","signature":"export function normalizeSchedule(schedule)"},{"anchor":"S:d15b7063e3","doc":"The cron expressions a role fires on: its schedule.cron plus a trigger.cron (or a trigger.type of schedule that carries a cron), de-duplicated and sorted for a stable render. Returns an empty array fo","kind":"function","line":76,"name":"roleCrons","path_id":"F:aea3c05bca","signature":"export function roleCrons(roleCfg)"},{"anchor":"S:afa2ffd4a2","doc":"The crew roles the schedule generator manages: every configured role that is not a reserved role (maker, checker, self-govern) and has a prompt to run. Sorted for a stable render. Pure aside from read","kind":"function","line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca","signature":"export function schedulableCrewRoles(cfg)"},{"anchor":"S:33846c9bba","doc":"Build the executed role order from after-role triggers. Returns null when no role declares trigger.after, so the caller keeps its existing default (a pure maker -> checker run) with zero behavior chan","kind":"function","line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca","signature":"export function deriveTriggerSequence(cfg)"},{"anchor":"S:73cbfa5a7d","doc":"Render one job for a scheduled crew role. It checks out, runs the role as a single dry-run invocation of run-cycle.mjs, and only executes behind an explicit repository variable. When the role carries ","kind":"function","line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca","signature":"function renderRoleJob(role, crons)"},{"anchor":"S:9cda312f51","doc":"Render the full scheduled-crew workflow as a deterministic YAML string. The trigger block is the sorted union of every managed role's crons plus workflow_dispatch, so a role always has a manual path a","kind":"function","line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca","signature":"export function renderScheduleWorkflow(cfg)"},{"anchor":"S:65004e9f74","doc":"Load the repo config through the same loader run-cycle uses, so the generator reads exactly what the loop reads. Falls back to an empty roles map when the file is absent.","kind":"function","line":215,"name":"loadCfg","path_id":"F:aea3c05bca","signature":"function loadCfg()"},{"anchor":"S:5327d3b72c","kind":"function","line":223,"name":"main","path_id":"F:aea3c05bca","signature":"function main()"},{"anchor":"S:e8f6de81b4","kind":"function","line":259,"name":"selfTest","path_id":"F:aea3c05bca","signature":"function selfTest()"},{"anchor":"S:52826c5034","kind":"class","line":768,"name":"Component","path_id":"F:aef9cf1e27","signature":"class Component extends DCLogic"},{"anchor":"S:52be3c746f","kind":"function","line":32,"name":"git","path_id":"F:af6de66499","signature":"function git(...a)"},{"anchor":"S:48102a3f37","kind":"function","line":37,"name":"parseFraction","path_id":"F:af6de66499","signature":"function parseFraction(s)"},{"anchor":"S:6122b96d0b","kind":"function","line":11,"name":"runGateCapped","path_id":"F:b014028f57","signature":"export function runGateCapped(cmdArray, { timeoutMs = 30000, maxBuffer = 67108864 } = {})"},{"anchor":"S:4fb0095605","doc":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":22,"name":"checkRegistry","path_id":"F:b16afebae9","signature":"export function checkRegistry(registry, schema)"},{"anchor":"S:837b5a8d1e","doc":"CLI: read the registry and schema from the repo root and report PASS/FAIL.","kind":"function","line":38,"name":"runCli","path_id":"F:b16afebae9","signature":"function runCli()"},{"anchor":"S:c6d0684785","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b25dcdad19","signature":"export const MESSAGES ="},{"anchor":"S:41ad75ea93","doc":"Build a synthetic 1000-line diff that is clean (no gaming patterns).","kind":"function","line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600","signature":"function buildLargeDiff(lines)"},{"anchor":"S:d0587dc399","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b2efd505ef","signature":"export const MESSAGES ="},{"anchor":"S:3e2d44a335","kind":"type","line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:0c7a33bcbe","kind":"interface","line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb","signature":"export interface ModeSwitcherProps"},{"anchor":"S:5b0828ff4b","doc":"The global context switch. Host mode reads the engine as installed in a customer * repo; product mode reads modonome governing its own repository (self-application). * The same screens serve either su","kind":"function","line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb","signature":"export function ModeSwitcher({ mode, onModeChange, hostLabel, productLabel }: ModeSwitcherProps)"},{"anchor":"S:4bfea4387c","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1","signature":"export const MESSAGES ="},{"anchor":"S:700c80e34d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b502a0fe75","signature":"export const MESSAGES ="},{"anchor":"S:ea113218d1","doc":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, so this * interface is the contract a hos","kind":"interface","line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133","signature":"export interface WorkItemSummary"},{"anchor":"S:42d33f191a","kind":"interface","line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133","signature":"export interface WorkItemCardProps"},{"anchor":"S:c7ef137e46","doc":"A compact, clickable summary card for a single work item: title with its id, * current-state pill, risk tier, a protected-path lock indicator, attempt count, and * pull request number. Used in queue b","kind":"function","line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133","signature":"export function WorkItemCard({ item, onClick }: WorkItemCardProps)"},{"anchor":"S:18da5ae581","doc":"Read all .mjs files in a directory (non-recursive by default).","kind":"function","line":13,"name":"listMjs","path_id":"F:b70824b13e","signature":"function listMjs(dir, recursive = false)"},{"anchor":"S:df7a91f366","doc":"Extract import specifiers from a file's source text. Only matches actual import statements (not comments or JSDoc).","kind":"function","line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e","signature":"function extractImportSpecifiers(source)"},{"anchor":"S:3702b2fefe","kind":"function","line":47,"name":"isAllowedImport","path_id":"F:b70824b13e","signature":"function isAllowedImport(specifier)"},{"anchor":"S:fedbb5f441","kind":"class","line":4,"name":"NotificationService","path_id":"F:b9d806ba4d","signature":"export class NotificationService"},{"anchor":"S:eb51a5641a","doc":"Base valid packet factory: returns a fresh object each call.","kind":"function","line":7,"name":"makePacket","path_id":"F:ba97282cf5","signature":"function makePacket(overrides = {})"},{"anchor":"S:ebb9dad93b","kind":"function","line":12,"name":"tmp","path_id":"F:baf7641a01","signature":"function tmp()"},{"anchor":"S:79a288a97f","kind":"function","line":16,"name":"runTick","path_id":"F:baf7641a01","signature":"function runTick(stateDir)"},{"anchor":"S:77054cfc82","kind":"function","line":23,"name":"makeItem","path_id":"F:baf7641a01","signature":"function makeItem(overrides = {})"},{"anchor":"S:028a668f8e","kind":"function","line":34,"name":"writeItem","path_id":"F:baf7641a01","signature":"function writeItem(itemsDir, name, item)"},{"anchor":"S:357942abbf","kind":"function","line":38,"name":"readItem","path_id":"F:baf7641a01","signature":"function readItem(itemsDir, name)"},{"anchor":"S:b01ec1a6ac","kind":"function","line":25,"name":"Gates","path_id":"F:bb6a874d58","signature":"export const Gates = () => ;"},{"anchor":"S:f5a71d2ca6","kind":"function","line":19,"name":"runScript","path_id":"F:bbb6476d71","signature":"function runScript(script, args = [], env = {})"},{"anchor":"S:c7db2cc29d","kind":"class","line":3,"name":"InventoryService","path_id":"F:bd02b28f17","signature":"export class InventoryService"},{"anchor":"S:0bf3d508cb","doc":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune their wording without a code change.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e","signature":"export const MESSAGES ="},{"anchor":"S:ac1ae69e0f","kind":"type","line":3,"name":"SparklineTone","path_id":"F:c0e80ca327","signature":"export type SparklineTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:b27476e527","kind":"interface","line":5,"name":"SparklineProps","path_id":"F:c0e80ca327","signature":"export interface SparklineProps"},{"anchor":"S:655f25fbed","doc":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inline * next to a metric (cost trend, throug","kind":"function","line":33,"name":"Sparkline","path_id":"F:c0e80ca327","signature":"export function Sparkline("},{"anchor":"S:a272c887e3","kind":"function","line":82,"name":"toPoints","path_id":"F:c0e80ca327","signature":"function toPoints(data: number[], innerW: number, innerH: number, padding: number): [number, number][]"},{"anchor":"S:686192f35d","kind":"function","line":97,"name":"toLinePath","path_id":"F:c0e80ca327","signature":"function toLinePath(points: [number, number][]): string"},{"anchor":"S:27005d8f20","kind":"function","line":27,"name":"buildBundle","path_id":"F:c4395c3023","signature":"function buildBundle()"},{"anchor":"S:3ad956fb93","kind":"function","line":36,"name":"configDefaults","path_id":"F:c5938c33fd","signature":"function configDefaults(rel)"},{"anchor":"S:1e5dabea9c","doc":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate.","kind":"function","line":43,"name":"hasHeading","path_id":"F:c5938c33fd","signature":"function hasHeading(text, section)"},{"anchor":"S:6b1894b02c","kind":"function","line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd","signature":"function findPromotionAdr(flag)"},{"anchor":"S:03b490fb81","kind":"function","line":7,"name":"clean","path_id":"F:c598a2d684","signature":"function clean(text)"},{"anchor":"S:ec2e53ab2e","kind":"function","line":12,"name":"signature","path_id":"F:c598a2d684","signature":"function signature(line)"},{"anchor":"S:ebdb053467","kind":"function","line":17,"name":"docAbove","path_id":"F:c598a2d684","signature":"function docAbove(lines, index)"},{"anchor":"S:df1c5c3628","kind":"const","line":33,"name":"adapter","path_id":"F:c598a2d684","signature":"export const adapter ="},{"anchor":"S:95e56b0a9c","kind":"function","line":27,"name":"Remote","path_id":"F:c63a71fb57","signature":"export const Remote = () => ;"},{"anchor":"S:e5772fff07","kind":"function","line":29,"name":"LocalOnly","path_id":"F:c63a71fb57","signature":"export const LocalOnly = () => ;"},{"anchor":"S:749446c25e","kind":"const","line":8,"name":"armingModes","path_id":"F:c64c042051","signature":"export const armingModes = [\"disabled\", \"dry-run\", \"armed\"] as const;"},{"anchor":"S:fc7eb05498","kind":"type","line":9,"name":"ArmingMode","path_id":"F:c64c042051","signature":"export type ArmingMode = (typeof armingModes)[number];"},{"anchor":"S:5465e6de42","kind":"const","line":11,"name":"workStates","path_id":"F:c64c042051","signature":"export const workStates = ["},{"anchor":"S:725b07739e","kind":"type","line":22,"name":"WorkState","path_id":"F:c64c042051","signature":"export type WorkState = (typeof workStates)[number];"},{"anchor":"S:544b9ce58e","kind":"const","line":24,"name":"riskTiers","path_id":"F:c64c042051","signature":"export const riskTiers = [1, 2, 3, 4] as const;"},{"anchor":"S:dab833b9a8","kind":"type","line":25,"name":"RiskTier","path_id":"F:c64c042051","signature":"export type RiskTier = (typeof riskTiers)[number];"},{"anchor":"S:8289602f81","doc":"CSS custom-property name for an arming mode color.","kind":"function","line":28,"name":"modeVar","path_id":"F:c64c042051","signature":"export function modeVar(mode: ArmingMode): string"},{"anchor":"S:583c8b60d3","doc":"CSS custom-property name for a work-item state color.","kind":"function","line":34,"name":"stateVar","path_id":"F:c64c042051","signature":"export function stateVar(state: WorkState): string"},{"anchor":"S:89566a4918","doc":"CSS custom-property name for a risk-tier color.","kind":"function","line":39,"name":"tierVar","path_id":"F:c64c042051","signature":"export function tierVar(tier: RiskTier): string"},{"anchor":"S:a26ee6eefd","doc":"Human labels for the work states, in flow order.","kind":"const","line":44,"name":"workStateLabels","path_id":"F:c64c042051","signature":"export const workStateLabels: Record ="},{"anchor":"S:644e7adeef","kind":"const","line":56,"name":"tokens","path_id":"F:c64c042051","signature":"export const tokens ="},{"anchor":"S:f80ff247d7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:c6bd51a324","signature":"export const MESSAGES ="},{"anchor":"S:d029f96a64","kind":"function","line":27,"name":"flagValue","path_id":"F:c72e6949b9","signature":"function flagValue(argv, name)"},{"anchor":"S:44a852f5e1","kind":"function","line":32,"name":"readStdin","path_id":"F:c72e6949b9","signature":"function readStdin()"},{"anchor":"S:276edd396a","kind":"function","line":45,"name":"postJson","path_id":"F:c72e6949b9","signature":"function postJson(url, body, apiKey)"},{"anchor":"S:301d436113","kind":"function","line":80,"name":"main","path_id":"F:c72e6949b9","signature":"async function main(argv)"},{"anchor":"S:29574da2e9","doc":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unrelated, low-value assertions are added to","kind":"const","line":7,"name":"scenario","path_id":"F:c7423b85cf","signature":"export const scenario ="},{"anchor":"S:9299cd9a70","kind":"function","line":31,"name":"matches","path_id":"F:c9493b5275","signature":"function matches(l)"},{"anchor":"S:00f913bfd8","kind":"function","line":11,"name":"tf","path_id":"F:ca05b6ba1c","signature":"function tf(name)"},{"anchor":"S:3696870ce9","doc":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase \"packet\".","kind":"function","line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73","signature":"function literalPhraseRe(phrase)"},{"anchor":"S:55eb1af9ca","doc":"docs/LEXICON.md explains the rationale; this loads the terms it documents. A grandfathered term (see lexicon.json) warns instead of failing, so an approved rename can ship before every pre-existing fi","kind":"function","line":32,"name":"loadLexicon","path_id":"F:ca0833ac73","signature":"function loadLexicon()"},{"anchor":"S:ee9b2c90d1","kind":"function","line":53,"name":"walk","path_id":"F:ca0833ac73","signature":"function walk(dir, out = [])"},{"anchor":"S:aa4de9995b","kind":"function","line":4,"name":"Trends","path_id":"F:ca13fe2a5b","signature":"export const Trends = () => ("},{"anchor":"S:66ac4b8d64","kind":"function","line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:039c3576c4","doc":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (they fall through the family check and are ","kind":"function","line":23,"name":"modelFamily","path_id":"F:cb3c5f7715","signature":"export function modelFamily(model)"},{"anchor":"S:b128b3a196","doc":"Governance rules that JSON Schema cannot express (cross-field invariants).","kind":"function","line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715","signature":"export function governanceErrors(item, config = {})"},{"anchor":"S:16267c791e","kind":"function","line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715","signature":"export function validateWorkItem(item, config = {})"},{"anchor":"S:7c5c3a31a4","doc":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), * (within a segment), ** (across segments","kind":"function","line":41,"name":"compilePattern","path_id":"F:cb66095cb4","signature":"function compilePattern(pattern)"},{"anchor":"S:531cf59eb3","doc":"Build an ignore predicate for a repo root. The predicate takes a posix relative path and returns true when the path should be excluded. Later patterns win, so a negation can re-include a path a broad ","kind":"function","line":86,"name":"loadIgnore","path_id":"F:cb66095cb4","signature":"export function loadIgnore(root)"},{"anchor":"S:d4e650f5ae","doc":"Walk a repository into a sorted list of files. Symlinks are skipped to avoid cycles and escapes. Returns [{ relPath, absPath, size }] ordered by relPath.","kind":"function","line":110,"name":"walkRepo","path_id":"F:cb66095cb4","signature":"export function walkRepo(root, { ignore = () => false, maxDepth = 12 } = {})"},{"anchor":"S:e6e23439bf","kind":"function","line":8,"name":"tempRepo","path_id":"F:cba8f1d03b","signature":"function tempRepo({ withGit = true, pkgName = \"some-host\" } = {})"},{"anchor":"S:25117f5b1d","kind":"function","line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a","signature":"function normalizeLicense(raw)"},{"anchor":"S:cb3211f3c2","doc":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":33,"name":"checkLicenses","path_id":"F:cc361bd05a","signature":"export function checkLicenses(pkg, manifest)"},{"anchor":"S:310e2149b2","doc":"CLI: read package.json and adapters.json from the repo root and report PASS/FAIL.","kind":"function","line":80,"name":"runCli","path_id":"F:cc361bd05a","signature":"function runCli()"},{"anchor":"S:298b204d13","doc":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into the env-pollution check.","kind":"function","line":22,"name":"runPreflight","path_id":"F:cc65dd1342","signature":"function runPreflight(fixtureName)"},{"anchor":"S:c73cab5b60","kind":"function","line":42,"name":"ids","path_id":"F:cc65dd1342","signature":"function ids(report)"},{"anchor":"S:2ca7aeeeaf","kind":"function","line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342","signature":"function findingsBySeverity(report, severity)"},{"anchor":"S:ee57130d72","doc":"Catalog entries for scripts/check-drift.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:ccb72910b3","signature":"export const MESSAGES ="},{"anchor":"S:83ad315769","doc":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin.","kind":"function","line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3","signature":"export function resolveRepo(env = process.env, originUrl = null, overrides = {})"},{"anchor":"S:4d35869e55","kind":"function","line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3","signature":"function readOriginUrl()"},{"anchor":"S:fc28898c78","doc":"The credential, from GITHUB_TOKEN or GH_TOKEN. Empty string means unauthenticated.","kind":"function","line":44,"name":"resolveToken","path_id":"F:cdbe769ed3","signature":"export function resolveToken(env = process.env)"},{"anchor":"S:a4e7d71500","kind":"function","line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3","signature":"function isRetryableStatus(status)"},{"anchor":"S:95e22729ee","kind":"function","line":52,"name":"sleep","path_id":"F:cdbe769ed3","signature":"function sleep(ms)"},{"anchor":"S:de0b2dc0df","doc":"Build a read-only client bound to one repository. All inputs are injectable so * tests drive it against a local mock server with no real network call.","kind":"function","line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3","signature":"export function createGitHubClient("},{"anchor":"S:66b4da1ed7","kind":"type","line":6,"name":"ModelCostClass","path_id":"F:ce1173e176","signature":"export type ModelCostClass = \"paid\" | \"free\" | \"local\";"},{"anchor":"S:2e3ac2ba9f","kind":"interface","line":8,"name":"ModelCostRow","path_id":"F:ce1173e176","signature":"export interface ModelCostRow"},{"anchor":"S:61579a6235","kind":"interface","line":21,"name":"CostSummary","path_id":"F:ce1173e176","signature":"export interface CostSummary"},{"anchor":"S:8cf2204c43","kind":"interface","line":36,"name":"CostPanelProps","path_id":"F:ce1173e176","signature":"export interface CostPanelProps"},{"anchor":"S:13f1b3c9c0","doc":"A summary of model spend and call volume for a period: a budget meter for remote * USD spend, a small stat row of local calls, remote calls, and cache saves (framed * positively as retries avoided), a","kind":"function","line":93,"name":"CostPanel","path_id":"F:ce1173e176","signature":"export function CostPanel({ cost }: CostPanelProps)"},{"anchor":"S:4ed98bc995","kind":"function","line":18,"name":"baseCfg","path_id":"F:ce41983a53","signature":"function baseCfg(extra = {})"},{"anchor":"S:ad7d7732a1","kind":"function","line":24,"name":"makeExtract","path_id":"F:cecdb96382","signature":"function makeExtract(Parser, grammar)"},{"anchor":"S:464c90cba5","doc":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered.","kind":"function","line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382","signature":"export async function registerTreeSitter(register)"},{"anchor":"S:7c0d389b98","kind":"function","line":17,"name":"runRatchet","path_id":"F:cede5f9fa2","signature":"function runRatchet(...args)"},{"anchor":"S:703e56c471","doc":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config.","kind":"function","line":45,"name":"scratchRepo","path_id":"F:d0da1cab80","signature":"function scratchRepo(codeowners)"},{"anchor":"S:fb4a6826d7","kind":"function","line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80","signature":"function fakeGitEmail(email)"},{"anchor":"S:8d1ca74a54","doc":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older items, the schema's `owner` field; either","kind":"function","line":29,"name":"leaseHolder","path_id":"F:d135cffeaa","signature":"function leaseHolder(item)"},{"anchor":"S:87ca9c146a","kind":"function","line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa","signature":"function leaseIsLive(item, now)"},{"anchor":"S:fd822bf451","doc":"tryTransition(item, fromState, toState, writerId, now) -> result { ok: true, item } swap succeeded; item is a fresh copy { ok: false, conflict: \"\" } swap refused; item is left untouched `now` ","kind":"function","line":45,"name":"tryTransition","path_id":"F:d135cffeaa","signature":"export function tryTransition(item, fromState, toState, writerId, now = new Date())"},{"anchor":"S:fa36ece453","kind":"interface","line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91","signature":"export interface CarouselProps"},{"anchor":"S:36acbff697","doc":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scrolls a * focused item into view automatic","kind":"function","line":21,"name":"Carousel","path_id":"F:d20e4b6b91","signature":"export function Carousel({ children, label, className }: CarouselProps)"},{"anchor":"S:19aab1f03f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d288a78085","signature":"export const MESSAGES ="},{"anchor":"S:3ae3f92415","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d328f97d94","signature":"export const MESSAGES ="},{"anchor":"S:ce2faa5c80","kind":"function","line":18,"name":"loadConfig","path_id":"F:d480e40c97","signature":"export function loadConfig(path)"},{"anchor":"S:75c48595da","doc":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers: config values such as autonomy_enabled ","kind":"function","line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97","signature":"function primaryRoleModel(roleCfg)"},{"anchor":"S:dce77ef3c3","kind":"function","line":42,"name":"safetyErrors","path_id":"F:d480e40c97","signature":"export function safetyErrors(cfg)"},{"anchor":"S:ea1469d710","kind":"function","line":70,"name":"validateConfig","path_id":"F:d480e40c97","signature":"export function validateConfig(cfg)"},{"anchor":"S:655cf75cf0","kind":"function","line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9","signature":"export const OwnerOnly = () => ("},{"anchor":"S:733f5fd096","kind":"interface","line":5,"name":"HelpHintProps","path_id":"F:d5b496b125","signature":"export interface HelpHintProps"},{"anchor":"S:e44c445050","doc":"A tiny circular help affordance: a `help` icon button that reveals its text in a * Tooltip on hover or keyboard focus. This is the pervasive \"hover for context\" * control placed next to section labels","kind":"function","line":21,"name":"HelpHint","path_id":"F:d5b496b125","signature":"export function HelpHint({ label, children, size = 13 }: HelpHintProps)"},{"anchor":"S:c1c63b1bf8","kind":"function","line":35,"name":"planFile","path_id":"F:d6401dd73e","signature":"function planFile(editor)"},{"anchor":"S:c9785dab7b","doc":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches provable tautologies like `expect(1).toBe(","kind":"const","line":6,"name":"scenario","path_id":"F:d744931e6a","signature":"export const scenario ="},{"anchor":"S:fe9c17eefa","kind":"function","line":12,"name":"tmp","path_id":"F:d7d4e8d2a9","signature":"function tmp()"},{"anchor":"S:37a0d721be","kind":"function","line":16,"name":"run","path_id":"F:d7d4e8d2a9","signature":"function run(script, ...args)"},{"anchor":"S:91108693ba","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d8e37c4449","signature":"export const MESSAGES ="},{"anchor":"S:4f19353e16","kind":"interface","line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce","signature":"export interface ProtectedPathRowProps"},{"anchor":"S:e0eb326a77","doc":"A single row describing one protected path's guard state: a lock icon, the path in * mono, and a status readout. When a change is awaiting approval, shows an * attention-toned pill, notes who touched ","kind":"function","line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce","signature":"export function ProtectedPathRow("},{"anchor":"S:1274d7cf4b","kind":"type","line":3,"name":"Tier","path_id":"F:da42f69531","signature":"export type Tier = 1 | 2 | 3 | 4;"},{"anchor":"S:fea88d42b6","kind":"interface","line":5,"name":"TierBadgeProps","path_id":"F:da42f69531","signature":"export interface TierBadgeProps"},{"anchor":"S:f3d272846b","doc":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, and * anywhere a change's review require","kind":"function","line":24,"name":"TierBadge","path_id":"F:da42f69531","signature":"export function TierBadge({ tier, showLabel = true }: TierBadgeProps)"},{"anchor":"S:7070a0d16e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:da9133a29d","signature":"export const MESSAGES ="},{"anchor":"S:4eb7e87341","kind":"interface","line":5,"name":"NumberFieldProps","path_id":"F:db651caf76","signature":"export interface NumberFieldProps"},{"anchor":"S:50b0879e24","kind":"function","line":28,"name":"clamp","path_id":"F:db651caf76","signature":"function clamp(n: number, min?: number, max?: number): number"},{"anchor":"S:cfdd1d8a7f","doc":"A numeric field with decrement and increment stepper buttons and an optional * unit suffix. Used for caps and budget editors such as max open PRs, max diff * lines, lease minutes, and the remote model","kind":"function","line":40,"name":"NumberField","path_id":"F:db651caf76","signature":"export function NumberField("},{"anchor":"S:8d30c800e7","kind":"const","line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1","signature":"export const SNAPSHOT_SCHEMA_VERSION = 1;"},{"anchor":"S:154918aa5a","doc":"Detect binary content by scanning a prefix for a null byte.","kind":"function","line":32,"name":"isBinary","path_id":"F:dbb9c92ca1","signature":"function isBinary(buffer)"},{"anchor":"S:3734794a77","kind":"function","line":38,"name":"extOf","path_id":"F:dbb9c92ca1","signature":"function extOf(relPath)"},{"anchor":"S:cbe5a2e179","kind":"function","line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1","signature":"function firstCommentLine(source)"},{"anchor":"S:05fa5077ed","doc":"Derive a module purpose from its symbols and source. Returns the raw (unredacted) string so it can be cached; redaction is applied at map assembly time.","kind":"function","line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1","signature":"function rawPurpose(relPath, symbols, source)"},{"anchor":"S:e9e4290005","doc":"Build the full snapshot for a repository root.","kind":"function","line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1","signature":"export function buildSnapshot(root, opts = {})"},{"anchor":"S:45b2f146f0","doc":"Resolve adjacency into a sorted edge list of dictionary path ids.","kind":"function","line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1","signature":"function buildEdgeList(adjacency, pathIdByPath)"},{"anchor":"S:dbf47f93d3","kind":"function","line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1","signature":"function renderMarkdown({ generatedFor, merkleRoot, files, totalBytes, map })"},{"anchor":"S:890a9e6691","doc":"Read a light governance posture from the target config and environment. It never arms anything; it only reports posture so a snapshot can double as a status probe.","kind":"function","line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1","signature":"function readGovernance(root)"},{"anchor":"S:73feb65706","kind":"function","line":4,"name":"OnLabel","path_id":"F:dca643f34b","signature":"export const OnLabel = () => ("},{"anchor":"S:bd8806c490","kind":"function","line":13,"name":"Board","path_id":"F:dd1be2cd7b","signature":"export const Board = () => ;"},{"anchor":"S:b815c12407","kind":"const","line":1,"name":"MESSAGES","path_id":"F:dd58ae3791","signature":"export const MESSAGES ="},{"anchor":"S:e0832e1baa","kind":"function","line":8,"name":"withRoot","path_id":"F:ddd82fc886","signature":"function withRoot(learningsBody)"},{"anchor":"S:1d6822da4e","doc":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the researcher (or any other subset) without ed","kind":"function","line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49","signature":"export function resolveRoleSequence(cfg, opts = {})"},{"anchor":"S:4b76f865fa","doc":"Resolve a role's execution mode from its model's config entry. The default is \"patch\" (the WI-029 single-shot-diff path) whenever exec_mode is absent, so existing configs behave exactly as before. Onl","kind":"function","line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49","signature":"export function resolveExecMode(cfg, model)"},{"anchor":"S:914d5cd317","doc":"Build a role's ordered runtime fallback chain: the resolved primary first (so a --maker-model/--checker-model CLI override always wins as chain[0]), then the rest of the role's configured `models` lis","kind":"function","line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49","signature":"export function buildFallbackChain(cfg, role, resolved, known)"},{"anchor":"S:4f138d4cbe","doc":"Conservative classifier: only a network-level failure (connection refused/reset, DNS failure, a request timeout) counts as \"unreachable\" and is safe to retry against the next model in a role's fallbac","kind":"function","line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49","signature":"export function isUnreachableError(err)"},{"anchor":"S:41689151ff","kind":"function","line":105,"name":"parseArgs","path_id":"F:ddeb486c49","signature":"export function parseArgs(argv)"},{"anchor":"S:15286656f4","doc":"The execution environment this process is running in. Routing compares each role's required target against this to decide inline vs enqueue. Precedence: an explicit --worker-env flag, then MODONOME_WO","kind":"function","line":127,"name":"localEnv","path_id":"F:ddeb486c49","signature":"function localEnv(opts, env)"},{"anchor":"S:959be959f7","doc":"Resolve and validate a full cycle plan without calling any model. Pure: it reads the passed config and runId and throws on any policy violation. This is the testable core of the harness; the execute p","kind":"function","line":134,"name":"planCycle","path_id":"F:ddeb486c49","signature":"export function planCycle(opts, cfg, runId)"},{"anchor":"S:a75126f856","doc":"Build the child-process environment for a role invocation. When the resolved model carries a base_url (a local, self-hosted, or gateway endpoint), route the CLI there by setting ANTHROPIC_BASE_URL, wh","kind":"function","line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49","signature":"export function buildRunnerEnv(baseEnv, role)"},{"anchor":"S:9b986c2d8a","doc":"Render the role prompt with the same variables regardless of transport: identity/model placeholders, the run branch, and promoted learnings.","kind":"function","line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49","signature":"function buildRolePrompt(plan, role, env)"},{"anchor":"S:9f59110fda","doc":"Write the transcript log and append the schema-conformant metric shared by every transport. `extra` merges additional fields into the metric record (for example whether an openai-http patch applied).","kind":"function","line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49","signature":"function writeTranscriptAndMetric(plan, role, r, transcriptText, extra = {})"},{"anchor":"S:693b8fedee","doc":"Build the argv for the CLI-transport maker/checker invocation. Exported and * pure (no spawn) so a test can assert on the exact flags without launching a * real binary or spending tokens. * @param {{ ","kind":"function","line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49","signature":"export function buildRoleCliArgs(r, plan, prompt)"},{"anchor":"S:fe41df17f9","kind":"function","line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49","signature":"function invokeRoleClaudeCli(plan, role, env, deps = {})"},{"anchor":"S:c028c053e3","doc":"Provider-native single-shot execution: render the same prompt, call an OpenAI-compatible chat-completions endpoint once, and turn the response into file changes deterministically by extracting a unifi","kind":"function","line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49","signature":"export async function invokeRoleOpenAI(plan, role, env, deps = {})"},{"anchor":"S:8f6d716f36","doc":"Load the single agentic-CLI adapter entry from adapters.json for the tool-loop path. Returns the first declared adapter, or null when the manifest is empty or absent (which makes tool-loop degrade to ","kind":"function","line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49","signature":"function loadAdapterEntry(deps = {})"},{"anchor":"S:83b3a2ab69","doc":"Agentic tool-loop execution: spawn the declared external coding CLI (adapt-first, ADR-032) pointed at the resolved OpenAI-compatible endpoint. Containment, the turn cap, and the wall-clock timeout are","kind":"function","line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49","signature":"export async function invokeRoleToolLoop(plan, role, env, deps = {})"},{"anchor":"S:f8004b7b76","kind":"function","line":475,"name":"invokeRole","path_id":"F:ddeb486c49","signature":"function invokeRole(plan, role, env, deps)"},{"anchor":"S:4f43d4e206","doc":"Execute a plan. Refuses a hosted run when the budget is zero. Runs the maker, then the checker, each as a distinct CLI invocation with its own model and identity. `deps` (chatCompletionImpl/applyPatch","kind":"function","line":489,"name":"runCycle","path_id":"F:ddeb486c49","signature":"export function runCycle(opts, { execute, cfg, runId, env = process.env, queueDir, deps })"},{"anchor":"S:d33c2c4d3e","doc":"Invoke each role in turn and produce the \"executed\" result. A role's transport decides whether invokeRole returns a status number synchronously (anthropic-cli) or a Promise (openai-http, which awaits ","kind":"function","line":534,"name":"runRoles","path_id":"F:ddeb486c49","signature":"function runRoles(plan, roles, env, deps)"},{"anchor":"S:f71a25079c","kind":"function","line":549,"name":"main","path_id":"F:ddeb486c49","signature":"async function main()"},{"anchor":"S:2bd83b1706","kind":"const","line":1,"name":"MESSAGES","path_id":"F:de188c1b79","signature":"export const MESSAGES ="},{"anchor":"S:fe07a3bcbc","kind":"function","line":13,"name":"gitRepo","path_id":"F:de5ebbf586","signature":"function gitRepo()"},{"anchor":"S:8579f519b1","kind":"function","line":25,"name":"scaffold","path_id":"F:de5ebbf586","signature":"function scaffold(dir, extra = [])"},{"anchor":"S:60070857ec","doc":"The curated Modonome icon set. Every glyph is a stroke path on a 24x24 grid and * inherits `currentColor`, so an icon takes the color of whatever text or control it * sits in. Icons are decorative by ","kind":"type","line":9,"name":"IconName","path_id":"F:deab644e60","signature":"export type IconName ="},{"anchor":"S:a0f5484b98","kind":"interface","line":77,"name":"IconProps","path_id":"F:deab644e60","signature":"export interface IconProps extends Omit, \"name\">"},{"anchor":"S:abe6a83201","kind":"function","line":88,"name":"Icon","path_id":"F:deab644e60","signature":"export function Icon({ name, size = 16, title, strokeWidth = 1.8, ...rest }: IconProps)"},{"anchor":"S:f2f7e716af","doc":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says.","kind":"function","line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef","signature":"function makeBoundaryFixture(daImports)"},{"anchor":"S:8a9e6199b3","doc":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory.","kind":"function","line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce","signature":"function scratchModonomeDir()"},{"anchor":"S:211cdf5f9d","kind":"function","line":17,"name":"readItem","path_id":"F:e00aec45ce","signature":"function readItem(dir, id)"},{"anchor":"S:73e4b1bbf9","kind":"const","line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba","signature":"export const SIGNAL_MIN = 0;"},{"anchor":"S:ad1b93bd0c","kind":"const","line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba","signature":"export const SIGNAL_MAX = 5;"},{"anchor":"S:d4349c402c","kind":"const","line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba","signature":"export const NEUTRAL_SIGNAL = 2.5;"},{"anchor":"S:81bb2e8cc4","kind":"function","line":39,"name":"clamp","path_id":"F:e11f907cba","signature":"function clamp(n)"},{"anchor":"S:fb06279d5d","doc":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.","kind":"function","line":48,"name":"normalizeSignals","path_id":"F:e11f907cba","signature":"export function normalizeSignals(signals = {})"},{"anchor":"S:574c990b3f","doc":"Pure scoring function. Higher score means higher priority: more value and safety for less effort, risk, and uncertainty.","kind":"function","line":59,"name":"scoreProposal","path_id":"F:e11f907cba","signature":"export function scoreProposal(signals = {})"},{"anchor":"S:c53d33aa2a","doc":"Sort proposals by descending score. Each entry may be a plain signals object or carry signals under an explicit `signals` key alongside other fields (for example `id` or `proposal` text), which are pr","kind":"function","line":71,"name":"scoreProposals","path_id":"F:e11f907cba","signature":"export function scoreProposals(proposalsWithSignals = [])"},{"anchor":"S:3cceb8dc09","doc":"Heuristic, deterministic signal derivation from a proposal string and a simple context object. This is a convenience default, not a source of truth: callers with better signals should pass them direct","kind":"function","line":96,"name":"deriveSignals","path_id":"F:e11f907cba","signature":"export function deriveSignals(proposalText, context = {})"},{"anchor":"S:ba347c9b77","kind":"function","line":4,"name":"Beside","path_id":"F:e19aab09cb","signature":"export const Beside = () => ("},{"anchor":"S:fdf5ba078f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c","signature":"export const MESSAGES ="},{"anchor":"S:e1813dcc71","doc":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are added by extending `roles`, `models`, an","kind":"function","line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07","signature":"function baseCfg(extra = {})"},{"anchor":"S:170d5cf4ef","kind":"function","line":18,"name":"tmp","path_id":"F:e359adb110","signature":"function tmp()"},{"anchor":"S:85083e2f79","kind":"function","line":22,"name":"run","path_id":"F:e359adb110","signature":"function run(dir)"},{"anchor":"S:8d5d2455bf","kind":"interface","line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72","signature":"export interface ResolvedPanelMessage"},{"anchor":"S:74b454ee62","kind":"function","line":56,"name":"interpolate","path_id":"F:e406ceab72","signature":"function interpolate(template: string, params: Record): string"},{"anchor":"S:72886ee448","doc":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to DEFAULTS, then to the raw id, so a miss","kind":"function","line":66,"name":"formatMessage","path_id":"F:e406ceab72","signature":"export function formatMessage("},{"anchor":"S:870a14c796","doc":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separation-of- * duties governance rules. The la","kind":"function","line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48","signature":"export function ArmingScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:d7029fdff9","doc":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendor identities are rejected.","kind":"function","line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2","signature":"export function isForbiddenIdentity(name, email)"},{"anchor":"S:5c7ed4ab16","doc":"Parse `git log` output where each commit is one line of * \"authorNameauthorEmailcommitterNamecommitterEmailshortSha\". * Returns the commits whose author or committer is a forbidden","kind":"function","line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2","signature":"export function findForbiddenCommits(logOutput)"},{"anchor":"S:f040dfb6c9","kind":"function","line":15,"name":"run","path_id":"F:e540f7b669","signature":"function run(script, args = [])"},{"anchor":"S:ce5e964e25","kind":"function","line":4,"name":"ArmingMode","path_id":"F:e5e519f441","signature":"export const ArmingMode = () => ("},{"anchor":"S:8c65a8b2a2","kind":"function","line":15,"name":"ActiveWork","path_id":"F:e5e519f441","signature":"export const ActiveWork = () => ("},{"anchor":"S:dd37641bec","kind":"function","line":27,"name":"Spend","path_id":"F:e5e519f441","signature":"export const Spend = () => ("},{"anchor":"S:2d541b3911","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e6677dcd37","signature":"export const MESSAGES ="},{"anchor":"S:17c9a6d377","doc":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped.","kind":"function","line":45,"name":"stripCharClasses","path_id":"F:e7380d1444","signature":"function stripCharClasses(src)"},{"anchor":"S:be897872b9","doc":"True when a group body contains a top-level unbounded quantifier.","kind":"function","line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444","signature":"function bodyHasUnbounded(body)"},{"anchor":"S:ca3e7d6f59","doc":"Detect nested quantifiers: a group (...) that is itself quantified by an unbounded quantifier (+, *, or {n,}) AND whose body contains an unbounded quantifier. This is the catastrophic-backtracking cla","kind":"function","line":72,"name":"redosFindings","path_id":"F:e7380d1444","signature":"export function redosFindings(source)"},{"anchor":"S:c52b041088","doc":"1. Runtime: exported RegExp sources (including RegExps inside an exported array).","kind":"function","line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444","signature":"async function exportedRegexSources(absFile)"},{"anchor":"S:dcc6653dc4","doc":"2/3. Static: new RegExp(\"...\"|`...`) string args (no interpolation) and /.../ literals.","kind":"function","line":114,"name":"staticPatternSources","path_id":"F:e7380d1444","signature":"function staticPatternSources(src)"},{"anchor":"S:979cd75d0e","doc":"Collect every regex-safety problem across the target files. Exported (not run at import time) so the gate can be exercised without triggering process.exit.","kind":"function","line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444","signature":"export async function regexSafetyProblems(rootDir = root)"},{"anchor":"S:42d4f014b5","doc":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (proving it * would catch a bad promotion). Eac","kind":"function","line":41,"name":"corpusProblems","path_id":"F:e8676a18b7","signature":"export function corpusProblems({ strictBranch, fuzzyBranch, strictId, fuzzyId, strictText, fuzzyText })"},{"anchor":"S:59f6d857da","doc":"The real detectors, wired to the injectable checker.","kind":"const","line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7","signature":"export const LIVE_DETECTORS ="},{"anchor":"S:ed0a2f8660","kind":"function","line":28,"name":"git","path_id":"F:e9479e1a3b","signature":"function git(...a)"},{"anchor":"S:b32b89125f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e948251d2b","signature":"export const MESSAGES ="},{"anchor":"S:98ca1b6552","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d","signature":"export const MESSAGES ="},{"anchor":"S:135fde5dfb","doc":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] * - \"success\": always returns a normal c","kind":"function","line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb","signature":"export function startMockServer(options = {})"},{"anchor":"S:b65916676a","kind":"function","line":98,"name":"successBody","path_id":"F:eb14a0bdeb","signature":"function successBody(overrides)"},{"anchor":"S:ac31df31c0","kind":"function","line":113,"name":"writeJson","path_id":"F:eb14a0bdeb","signature":"function writeJson(res, status, body)"},{"anchor":"S:153c85af26","kind":"const","line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a","signature":"export const MESSAGES ="},{"anchor":"S:38948fee1c","kind":"class","line":10,"name":"LiveApiError","path_id":"F:ec52ca3820","signature":"export class LiveApiError extends Error {}"},{"anchor":"S:819d9d37ff","kind":"function","line":12,"name":"call","path_id":"F:ec52ca3820","signature":"async function call(path: string, init?: RequestInit): Promise"},{"anchor":"S:cab56da046","kind":"function","line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820","signature":"export function fetchLiveState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:18fce60dc6","kind":"function","line":32,"name":"saveConfig","path_id":"F:ec52ca3820","signature":"export function saveConfig("},{"anchor":"S:4124b7df92","kind":"function","line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820","signature":"export function releaseLeaseLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:a4b6be1d49","kind":"function","line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820","signature":"export function pruneLearningLive(mode: PanelMode, lesson: string, dir?: string): Promise"},{"anchor":"S:699f2f623f","kind":"function","line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820","signature":"export function saveMessagesLive("},{"anchor":"S:92bb85bdff","kind":"interface","line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820","signature":"export interface ConnectionTestResult"},{"anchor":"S:cb81b7e05c","doc":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway).","kind":"function","line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820","signature":"export function testConnectionLive(baseUrl: string): Promise"},{"anchor":"S:69ef79b6f3","kind":"function","line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820","signature":"export function createWorkItemLive(mode: PanelMode, item: NewWorkItemInput, dir?: string): Promise"},{"anchor":"S:7a68bb8c0c","kind":"function","line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820","signature":"export function updateWorkItemLive(mode: PanelMode, itemId: string, patch: WorkItemPatch, dir?: string): Promise"},{"anchor":"S:f9a749a2b1","kind":"function","line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820","signature":"export function deleteWorkItemLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:b1e3e516c3","doc":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close).","kind":"function","line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:dd1940719c","doc":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name.","kind":"function","line":46,"name":"parseArgs","path_id":"F:edb11415f0","signature":"function parseArgs(argv)"},{"anchor":"S:e6654c6139","doc":"gateOrder(graph) -> [...] the gates in dependency-first topological order. topoSort orders a gate ahead of the gates it points to, so reverse to put each gate's dependencies before the gate itself.","kind":"function","line":59,"name":"gateOrder","path_id":"F:edb11415f0","signature":"export function gateOrder(graph)"},{"anchor":"S:6e6111c7dd","doc":"runPipeline(order, fixtures) -> [...] failures in topological order. Each failure is { gate, reason }. A missing fixture for a gate is itself a failure: the gate cannot be evaluated, so the pipeline m","kind":"function","line":70,"name":"runPipeline","path_id":"F:edb11415f0","signature":"export function runPipeline(order, fixtures)"},{"anchor":"S:66bb927095","kind":"function","line":11,"name":"run","path_id":"F:edf42fb1af","signature":"function run(cmd, opts = {})"},{"anchor":"S:c1e6062cfc","kind":"function","line":109,"name":"baseCfg","path_id":"F:ee02e563c6","signature":"function baseCfg(overrides = {})"},{"anchor":"S:5bad105043","kind":"function","line":3,"name":"Reading","path_id":"F:eecc78e7e8","signature":"export const Reading = () => ;"},{"anchor":"S:fd42584b25","kind":"const","line":1,"name":"MESSAGES","path_id":"F:efa02030ca","signature":"export const MESSAGES ="},{"anchor":"S:524aeb5cd6","kind":"function","line":23,"name":"Detail","path_id":"F:f0fbd8716f","signature":"export const Detail = () => {}} />;"},{"anchor":"S:2e93f745f3","kind":"function","line":17,"name":"ratchet","path_id":"F:f238d164c9","signature":"function ratchet(diffPath)"},{"anchor":"S:7ff08ea7a1","doc":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wording from the Messages tab too. None ar","kind":"const","line":5,"name":"MESSAGES","path_id":"F:f41378fed0","signature":"export const MESSAGES ="},{"anchor":"S:3c3cd672a7","doc":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the order they were detected via DFS (the f","kind":"function","line":11,"name":"isCyclic","path_id":"F:f51cba9beb","signature":"export function isCyclic(adjacency)"},{"anchor":"S:075e86ea7c","doc":"topoSort(adjacency, nodes) -> { order: [...], error?: string } Returns a topological ordering of `nodes` given the directed edges in `adjacency`. Nodes not present in `nodes` but reachable via edges a","kind":"function","line":48,"name":"topoSort","path_id":"F:f51cba9beb","signature":"export function topoSort(adjacency, nodes)"},{"anchor":"S:cb1a5f81e0","doc":"reachableFrom(adjacency, start) -> Set of nodes reachable from `start` by following directed edges (breadth-first). `start` itself is not included unless the graph has a path back to it. Used by the d","kind":"function","line":78,"name":"reachableFrom","path_id":"F:f51cba9beb","signature":"export function reachableFrom(adjacency, start)"},{"anchor":"S:9ec4198171","doc":"Collect every node mentioned either as a key or as a neighbour value.","kind":"function","line":93,"name":"collectNodes","path_id":"F:f51cba9beb","signature":"function collectNodes(adjacency)"},{"anchor":"S:c063b246d1","doc":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * where entry is undefined if `name` is no","kind":"function","line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1","signature":"export function loadAndValidateManifest(rootDir, name)"},{"anchor":"S:45bcd8bd18","doc":"Confirm the pure argv-construction helpers resolve without throwing and * produce a shape that never carries a prompt or a credential-like value. * Pure. Returns a list of problem strings (empty means","kind":"function","line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1","signature":"export function checkArgvSanity(entry)"},{"anchor":"S:753ca853b2","kind":"function","line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1","signature":"function commandOnPath(command)"},{"anchor":"S:59cd81d0e0","doc":"Minimal local OpenAI-compatible chat-completions mock. No real network, no cost, no external dependency. Scripted to echo back a fixed marker so a conforming adapter that forwards the model's reply in","kind":"function","line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1","signature":"function startProbeServer(replyContent)"},{"anchor":"S:781c2d6b40","doc":"Run the live conformance probe for one adapter entry. Returns * { status: \"pass\"|\"fail\"|\"skipped\", detail }. Never throws: every failure * mode (binary absent, timeout, non-zero exit, containment viol","kind":"function","line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1","signature":"export async function runLiveProbe(entry, opts = {})"},{"anchor":"S:c63f60f015","kind":"function","line":210,"name":"main","path_id":"F:f5d313e9f1","signature":"async function main(argv)"},{"anchor":"S:f988f356bd","kind":"function","line":4,"name":"Variants","path_id":"F:f6e100ab45","signature":"export const Variants = () => ("},{"anchor":"S:edacefac29","kind":"function","line":19,"name":"Sizes","path_id":"F:f6e100ab45","signature":"export const Sizes = () => ("},{"anchor":"S:af1e7a50ba","kind":"function","line":5,"name":"makeDb","path_id":"F:f8168b956f","signature":"function makeDb()"},{"anchor":"S:cb8cdfa49f","kind":"interface","line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9","signature":"export interface ConceptEntry"},{"anchor":"S:83deb081d9","kind":"const","line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9","signature":"export const CONCEPTS: ConceptEntry[] = ["},{"anchor":"S:a3bf9f1833","kind":"interface","line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b","signature":"export interface QueueBoardProps"},{"anchor":"S:16975f80af","doc":"The work queue as a board. Items are grouped into the columns of the durable state * machine (queued, claimed, making, checking, merge ready, done, escalated), with * rework folded into making and mer","kind":"function","line":18,"name":"QueueBoard","path_id":"F:f8609bae0b","signature":"export function QueueBoard({ items, onSelect }: QueueBoardProps)"},{"anchor":"S:5835c8b608","doc":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variable, which lives in CI or operator scope,","kind":"function","line":69,"name":"resolveArming","path_id":"F:f90930c3c3","signature":"export function resolveArming(targetDir, env = process.env)"},{"anchor":"S:53b9eda0f8","kind":"function","line":90,"name":"run","path_id":"F:f90930c3c3","signature":"function run(script, args)"},{"anchor":"S:214691c25d","kind":"function","line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3","signature":"function targetDirFrom(rest)"},{"anchor":"S:9249714b12","kind":"function","line":104,"name":"main","path_id":"F:f90930c3c3","signature":"function main(argv)"},{"anchor":"S:b1b5323930","kind":"function","line":77,"name":"runGate","path_id":"F:f921eecad7","signature":"function runGate(dir, args = [])"},{"anchor":"S:0b25fbc8fe","kind":"function","line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7","signature":"function plainDecisionsDir(content)"},{"anchor":"S:1ebb8bc1af","kind":"function","line":122,"name":"git","path_id":"F:f921eecad7","signature":"function git(args, cwd)"},{"anchor":"S:6ee06ecd24","doc":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }.","kind":"function","line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7","signature":"function repoWithNewEntry()"},{"anchor":"S:1b85e41391","doc":"The mock server has to run as its own OS process: the CLI-under-test is driven via spawnSync, which blocks this test's event loop for the duration of the child. An in-process HTTP server can't accept ","kind":"function","line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7","signature":"function startMockReviewServer(reviews)"},{"anchor":"S:45061132f3","kind":"function","line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7","signature":"function runGateWithPRContext(dir, baseSha, { apiBase, reviews, prAuthor = \"some-agent\" })"},{"anchor":"S:9b166b011e","kind":"type","line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f","signature":"export type IdentityChipRole = \"maker\" | \"checker\";"},{"anchor":"S:01b4ff4d73","kind":"type","line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f","signature":"export type IdentityChipSize = \"sm\" | \"md\";"},{"anchor":"S:a06feb4e68","kind":"interface","line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f","signature":"export interface IdentityChipProps"},{"anchor":"S:6797390adc","kind":"function","line":18,"name":"initialsFor","path_id":"F:f942e88a8f","signature":"function initialsFor(name: string): string"},{"anchor":"S:aaca852d2b","doc":"A compact identity marker: an initials avatar plus a name, with an optional model * string in muted mono beneath. When `role` is set the avatar ring is tinted (info for * maker, primary for checker) s","kind":"function","line":31,"name":"IdentityChip","path_id":"F:f942e88a8f","signature":"export function IdentityChip({ name, model, role, size = \"md\" }: IdentityChipProps)"},{"anchor":"S:e173063c31","kind":"function","line":4,"name":"Queued","path_id":"F:f9c98a8642","signature":"export const Queued = () => ("},{"anchor":"S:c7ebadadb9","kind":"function","line":19,"name":"Checking","path_id":"F:f9c98a8642","signature":"export const Checking = () => ("},{"anchor":"S:dff1725e3b","kind":"function","line":37,"name":"Escalated","path_id":"F:f9c98a8642","signature":"export const Escalated = () => ("},{"anchor":"S:13a8db3ab6","kind":"function","line":11,"name":"gitDiff","path_id":"F:fa49930755","signature":"function gitDiff(...args)"},{"anchor":"S:c176253e9c","kind":"function","line":12,"name":"tmp","path_id":"F:fadcf390da","signature":"function tmp()"},{"anchor":"S:8bff005013","kind":"function","line":16,"name":"runReport","path_id":"F:fadcf390da","signature":"function runReport(targetDir)"},{"anchor":"S:5919844321","doc":"Schema-conformant event line using \"event\" field (not \"type\").","kind":"function","line":24,"name":"makeEvent","path_id":"F:fadcf390da","signature":"function makeEvent(event, extra = {})"},{"anchor":"S:54a007aa57","doc":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no AST dependency) matches this repo's hous","kind":"function","line":49,"name":"relativeImportsOf","path_id":"F:fc21812307","signature":"function relativeImportsOf(absFile)"},{"anchor":"S:f99cb9f35c","doc":"Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro","kind":"function","line":62,"name":"determinismBoundaryErrors","path_id":"F:fc21812307","signature":"export function determinismBoundaryErrors(root = REPO_ROOT)"},{"anchor":"S:9d42aeefd9","doc":"gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen","kind":"function","line":105,"name":"gateGraphErrors","path_id":"F:fc21812307","signature":"export function gateGraphErrors(graph)"},{"anchor":"S:aa00911a72","kind":"function","line":25,"name":"readEvents","path_id":"F:fc5d887ff6","signature":"function readEvents(path)"},{"anchor":"S:99ae98a428","kind":"function","line":71,"name":"walkMd","path_id":"F:fd08562f92","signature":"function walkMd(dir, out = [])"},{"anchor":"S:575af01d8c","kind":"function","line":110,"name":"checkTarget","path_id":"F:fd08562f92","signature":"function checkTarget(fileDir, rawTarget, srcFile)"},{"anchor":"S:bc1fd2c5b3","doc":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research.","kind":"function","line":149,"name":"adrNumbers","path_id":"F:fd08562f92","signature":"function adrNumbers(dir)"},{"anchor":"S:24c6a3dc6c","doc":"Front-matter parsing for canonical uniqueness and advisory presence.","kind":"function","line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92","signature":"function parseFrontMatter(text)"},{"anchor":"S:6647a4e550","kind":"function","line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92","signature":"function extractCitedPaths(text)"},{"anchor":"S:38b734e681","doc":"Commits touching any of `paths` since `sinceDate` (a YYYY-MM-DD string already validated by the caller). Returns 0 (fail open, warn-free) if this is not a git checkout, e.g. an npm-installed copy of t","kind":"function","line":278,"name":"commitsSince","path_id":"F:fd08562f92","signature":"function commitsSince(paths, sinceDate)"},{"anchor":"S:9bcfb77bfa","doc":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ removed so it compares directly to a handle ","kind":"function","line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa","signature":"export function parseCodeowners(text)"},{"anchor":"S:7a464a2d86","doc":"GitHub CODEOWNERS is last-match-wins: the owners of the LAST rule whose pattern matches the path. Supports the common subset modonome's own CODEOWNERS uses (a \"*\" catchall and rooted dir/file prefixes","kind":"function","line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa","signature":"export function ownersForPath(rules, path)"},{"anchor":"S:857ab7696f","kind":"function","line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa","signature":"function matchesPattern(pattern, path)"},{"anchor":"S:a50812babf","doc":"Extract a GitHub handle from a commit email. Only the two GitHub noreply formats carry a handle deterministically; any other address returns null (fail closed), so an unmapped identity is treated as n","kind":"function","line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa","signature":"export function handleFromEmail(email)"},{"anchor":"S:b29e93fbc3","kind":"function","line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa","signature":"function localGitEmail(repoRoot, exec)"},{"anchor":"S:f99d630708","kind":"function","line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa","signature":"function pickCodeowners(repoRoot, exists)"},{"anchor":"S:c36223901c","doc":"Decide whether the local git identity is a code owner of the config at * configRelPath within repoRoot. Fail-closed everywhere it cannot prove ownership: * no CODEOWNERS file, no owner declared for th","kind":"function","line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa","signature":"export function selfGovernanceOwnership("},{"anchor":"S:22e3bba95f","doc":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read the map instead of scanning the whole tre","kind":"function","line":26,"name":"snapshotContext","path_id":"F:fd660a117b","signature":"export function snapshotContext(root = process.cwd())"},{"anchor":"S:2b5847c683","doc":"Substitute every ${VAR} from env. Throw if a referenced variable is unset, so a missing identity or branch fails loudly instead of rendering an empty value into a model prompt.","kind":"function","line":61,"name":"renderPrompt","path_id":"F:fd660a117b","signature":"export function renderPrompt(role, env = process.env)"},{"anchor":"S:cf03857559","doc":"Run validate-config.mjs against a given config path.","kind":"function","line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602","signature":"function runValidateConfig(configPath, opts = {})"},{"anchor":"S:5daa909048","doc":"Run guard-ratchet.mjs with a --diff fixture.","kind":"function","line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602","signature":"function runGuardRatchet(diffPath, opts = {})"},{"anchor":"S:cdac115f81","doc":"Run check-portability.mjs against a fixture directory.","kind":"function","line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602","signature":"function runPortabilityCheck(fixturePath, opts = {})"},{"anchor":"S:7d8d2691e2","kind":"function","line":4,"name":"Tiers","path_id":"F:fe5ec971f8","signature":"export const Tiers = () => ("},{"anchor":"S:23fbaa24ea","kind":"function","line":13,"name":"git","path_id":"F:ff2c4a08a4","signature":"export function git(args, opts = {})"},{"anchor":"S:a529342ccb","kind":"function","line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4","signature":"export function currentBranch()"},{"anchor":"S:79b048583f","doc":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo).","kind":"function","line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4","signature":"export function defaultRange()"},{"anchor":"S:7c3651a5ba","doc":"Commits in `range` as structured records: { an, ae, cn, ce, sha, body }. Returns * the raw tab-delimited identity table too (the shape commit-identity.mjs parses). * Bodies are fetched one commit at a","kind":"function","line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4","signature":"export function commitsInRange(range = defaultRange())"},{"anchor":"S:9dee57c7c2","kind":"class","line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f","signature":"export class PaymentProcessor"},{"anchor":"S:e7e0d4979a","doc":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding line comments, and import edges (single a","kind":"function","line":5,"name":"clean","path_id":"F:ffe5c1269b","signature":"function clean(text)"},{"anchor":"S:a9f138bd93","kind":"function","line":10,"name":"signature","path_id":"F:ffe5c1269b","signature":"function signature(line)"},{"anchor":"S:f9d6a590e4","kind":"function","line":14,"name":"docAbove","path_id":"F:ffe5c1269b","signature":"function docAbove(lines, index)"},{"anchor":"S:28d1266e44","kind":"const","line":24,"name":"adapter","path_id":"F:ffe5c1269b","signature":"export const adapter ="}],"attention":[{"centrality":63,"pagerank":0.039157,"path_id":"F:05bffc70e9"},{"centrality":58,"pagerank":0.011797,"path_id":"F:03f476958e"},{"centrality":32,"pagerank":0.026711,"path_id":"F:7c8d518693"},{"centrality":23,"pagerank":0.017316,"path_id":"F:deab644e60"},{"centrality":48,"pagerank":0.000702,"path_id":"F:add7add561"},{"centrality":21,"pagerank":0.016999,"path_id":"F:1575110130"},{"centrality":15,"pagerank":0.0198,"path_id":"F:34cb2b6c48"},{"centrality":25,"pagerank":0.00515,"path_id":"F:ddeb486c49"},{"centrality":16,"pagerank":0.004993,"path_id":"F:932d33be00"},{"centrality":13,"pagerank":0.006792,"path_id":"F:0a85f3b8e5"},{"centrality":12,"pagerank":0.005893,"path_id":"F:d5b496b125"},{"centrality":12,"pagerank":0.004201,"path_id":"F:2fc610bd94"},{"centrality":11,"pagerank":0.004619,"path_id":"F:4ebb5aa8a0"},{"centrality":11,"pagerank":0.003584,"path_id":"F:304ce7b89d"},{"centrality":10,"pagerank":0.003564,"path_id":"F:245efb551c"},{"centrality":13,"pagerank":0.001175,"path_id":"F:dbb9c92ca1"},{"centrality":9,"pagerank":0.003388,"path_id":"F:8b122c449e"},{"centrality":7,"pagerank":0.003857,"path_id":"F:4a7eaceb5c"},{"centrality":9,"pagerank":0.002613,"path_id":"F:f07f8ebca9"},{"centrality":7,"pagerank":0.003546,"path_id":"F:d480e40c97"},{"centrality":6,"pagerank":0.003931,"path_id":"F:a8cfe45d27"},{"centrality":8,"pagerank":0.002475,"path_id":"F:65193a9799"},{"centrality":10,"pagerank":0.001001,"path_id":"F:113387361d"},{"centrality":7,"pagerank":0.002758,"path_id":"F:fd660a117b"},{"centrality":8,"pagerank":0.002052,"path_id":"F:b5ae6ee133"},{"centrality":8,"pagerank":0.001787,"path_id":"F:22566cb46e"},{"centrality":6,"pagerank":0.002455,"path_id":"F:c64c042051"},{"centrality":8,"pagerank":0.001175,"path_id":"F:2554ddd30c"},{"centrality":3,"pagerank":0.004263,"path_id":"F:8b5a1f94c4"},{"centrality":5,"pagerank":0.002887,"path_id":"F:f51cba9beb"},{"centrality":4,"pagerank":0.003365,"path_id":"F:6e0bd62fa3"},{"centrality":3,"pagerank":0.003814,"path_id":"F:8a9aff1529"},{"centrality":8,"pagerank":0.000702,"path_id":"F:a0d489df6d"},{"centrality":7,"pagerank":0.00131,"path_id":"F:08064e0c53"},{"centrality":6,"pagerank":0.001779,"path_id":"F:3c479cac6e"},{"centrality":4,"pagerank":0.002981,"path_id":"F:68c4da7fe8"},{"centrality":6,"pagerank":0.001684,"path_id":"F:e406ceab72"},{"centrality":5,"pagerank":0.002052,"path_id":"F:40eb542a82"},{"centrality":5,"pagerank":0.002051,"path_id":"F:86838d35ac"},{"centrality":5,"pagerank":0.002022,"path_id":"F:8d2cb93236"},{"centrality":6,"pagerank":0.00131,"path_id":"F:956332d4b5"},{"centrality":3,"pagerank":0.003137,"path_id":"F:e4ff19bbe2"},{"centrality":5,"pagerank":0.001575,"path_id":"F:2d6ef08990"},{"centrality":4,"pagerank":0.002116,"path_id":"F:cb3c5f7715"},{"centrality":6,"pagerank":0.000797,"path_id":"F:4ebf08705b"},{"centrality":6,"pagerank":0.000797,"path_id":"F:95d4304133"},{"centrality":6,"pagerank":0.000702,"path_id":"F:8bb1b57470"},{"centrality":6,"pagerank":0.000702,"path_id":"F:780c791407"},{"centrality":5,"pagerank":0.00131,"path_id":"F:14edab923f"},{"centrality":5,"pagerank":0.00131,"path_id":"F:ce1173e176"}],"dictionary":{"paths":{"F:00a0cb4ee4":"docs/adr/ADR-009-mcp-tool-auth-scope.md","F:0103cf3d56":"tests/rollback.test.mjs","F:015261eab0":"scripts/lib/snapshot-graph.mjs","F:01a7edaeba":"docs/adr/ADR-037-policy-pack-adoption.md","F:02359d48d5":"prompts/modules/gates.md","F:02a5f8fc55":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","F:037178c793":"templates/.modonome/DECISIONS.md","F:0391f3b249":"tests/check-md-governance.test.mjs","F:03f476958e":"scripts/lib/message-catalog/index.mjs","F:044b762a79":"examples/demo-app/tests/OrderService.test.js","F:0526aab88e":"docs/adr/ADR-007-claim-atomicity.md","F:059f9a812c":"tests/check-licenses.test.mjs","F:05a0f0d5a5":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","F:05bffc70e9":"scripts/lib/messages.mjs","F:06572a96a5":"CHANGELOG.md","F:06b982f5a2":"tests/envisioner-role.test.mjs","F:08064e0c53":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","F:08441e59e8":"tests/packet.test.mjs","F:08577063d4":".design-sync/previews/Select.tsx","F:08b7435c86":"apps/control-panel/server/api.mjs","F:08baf2c1e2":"docs/ops/preflight.md","F:093689bb8e":"tests/marketresearcher-role.test.mjs","F:094efaca92":"docs/adr/ADR-026-learning-promotion-audit-trail.md","F:09ba331878":"scripts/detect-near-miss.mjs","F:09ea014068":"scripts/lib/message-catalog/advisory/verify-packet.mjs","F:0a1a9270a7":"design-system/src/components/DecisionCard/index.ts","F:0a640a72f9":"docs/research/README.md","F:0a6a758e7d":".design-sync/previews/ConfirmDialog.tsx","F:0a6b452f14":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","F:0a85f3b8e5":"apps/control-panel/src/state/types.ts","F:0b5ca119d2":"docs/README.md","F:0c07096c4e":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","F:0c1c5ad5d9":"scripts/verify-packet.mjs","F:0c731e3460":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","F:0cacf66a3b":"scripts/lib/ed25519.mjs","F:0cc3e727ed":"design-system/src/components/Input/index.ts","F:0da05a2a05":"apps/control-panel/src/state/arming.ts","F:0e78eb22ec":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","F:0e9e38f100":"design-system/src/components/Toast/index.ts","F:0f284c134c":".modonome/LESSONS.md","F:10e76cfcd3":".design-sync/previews/StatusPill.tsx","F:1127892e72":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","F:113387361d":"apps/control-panel/src/App.tsx","F:114d351bdc":"tests/config.test.mjs","F:1174d7e2ba":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","F:119e3c0fce":"scripts/lib/snapshot-cache.mjs","F:128b647d9a":"scripts/fleet-ledger.mjs","F:12c7a4e461":"scripts/lib/packet-id.mjs","F:1339474d8c":"docs/ops/merge-governance-setup.md","F:137056535b":"tests/policy-attestation.test.mjs","F:13d31b33ea":".design-sync/previews/ProtectedPathRow.tsx","F:146a198c06":"design-system/src/components/Carousel/index.ts","F:147873af8b":"QUICKSTART.md","F:14812742da":"docs/adr/ADR-003-agentproof-portability.md","F:14edab923f":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","F:1575110130":"scripts/lib/yaml-lite.mjs","F:168fe4d371":"tests/detect-near-miss.test.mjs","F:1714946cc1":"scripts/check-control-panel-coverage.mjs","F:1716017e02":"design-system/src/components/MdnRoot/index.ts","F:179564da6f":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","F:182dcaa949":"design-system/src/components/LeaseTable/index.ts","F:18f569225a":"tests/agent-model-fallback.test.mjs","F:191a17b151":"docs/enterprise.md","F:195e9217ca":"tests/action-queue.test.mjs","F:1a137480ae":"design-system/src/components/ConceptTile/ConceptTile.tsx","F:1a19f02364":"scripts/lib/control-panel-audit.mjs","F:1a368a7935":"docs/adr/ADR-038-checker-as-review-service.md","F:1a58c06540":"docs/adr/ADR-014-knowledge-network-transport.md","F:1aa7cf650d":".design-sync/previews/Table.tsx","F:1bc04b108f":"tests/check-regex-safety.test.mjs","F:1bc6d1449f":"tests/agentproof-attestation.test.mjs","F:1bcaaff9eb":"tests/ws-b-harness.test.mjs","F:1c1d4f7335":"design-system/src/components/Select/index.ts","F:1c3b1b469e":"prompts/modonome.core.md","F:1cf31c4792":"scripts/lib/snapshot-anchors.mjs","F:1d03291691":"design-system/src/components/LearningCard/LearningCard.tsx","F:1db369d970":"design-system/src/components/Tabs/Tabs.tsx","F:1e15c1666f":"tests/github-api.test.mjs","F:1e5ef6ba70":"scripts/remediate.mjs","F:1ecd18c4b9":"examples/demo-app/src/OrderService.js","F:1f40b6eb6e":".design-sync/previews/Slider.tsx","F:1ff2bf39a4":"scripts/lib/message-catalog/advisory/github-api.mjs","F:2127a8caca":"scripts/agent/review-proposals.mjs","F:2148814594":"terraform/README.md","F:214cc0a5f4":"design-system/src/components/Toggle/Toggle.tsx","F:21752cf61a":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","F:2207a6ebce":".design-sync/previews/ActivationLadder.tsx","F:2215d0e1fc":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","F:22566cb46e":"apps/control-panel/server/modonomeWriter.mjs","F:22fab804b1":"tests/checkerproof.test.mjs","F:23917c6197":"scripts/test-prompt-behavior.mjs","F:23dbdd7e76":"scripts/lib/message-catalog/gate/check-portability.mjs","F:240ace7a8f":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","F:244a368695":"BREAK-THE-RATCHET.md","F:245efb551c":"scripts/lib/canonical-json.mjs","F:2470e60179":".design-sync/previews/AppShell.tsx","F:24f28ae0fa":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","F:250c8a0d4a":".design-sync/previews/LearningCard.tsx","F:2554ddd30c":"scripts/lib/lang-adapters/index.mjs","F:25e649633c":"apps/control-panel/src/state/configDiff.ts","F:25fdf1f8f6":"docs/adr/ADR-040-end-to-end-operating-model.md","F:268769c4a6":"design-system/src/components/AppShell/AppShell.tsx","F:26c8e3a19a":"templates/.modonome/LESSONS.md","F:27086b6de3":"docs/adr/ADR-042-agentproof-verified.md","F:2715f09f24":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","F:28b7af3c53":".design-sync/previews/ArmingStateBadge.tsx","F:28d4e1ad3d":"docs/adr/ADR-019-knowledge-network-execution-scope.md","F:28f278b1d9":"checkerproof/scenarios/cp-04-scope-creep.mjs","F:2a74ae3f05":"tests/snapshot-golden.test.mjs","F:2af556d595":"scripts/check-message-catalog-integrity.mjs","F:2b49c74e74":"tests/ws-e-ratchet-languages.test.mjs","F:2b9c43b0ca":"scripts/lib/merkle.mjs","F:2bfaa5759d":"docs/launch/x-thread.md","F:2c2cc77861":"examples/python-service/tests/test_orders.py","F:2d4c555ba1":"scripts/check-portability.mjs","F:2d6c10ab08":"scripts/check-control-panel-coherence.mjs","F:2d6ef08990":"scripts/agent/review-diff.mjs","F:2d93cea2d4":"scripts/lib/cli-args.mjs","F:2e327963ed":"scripts/build-compliance-evidence.mjs","F:2ec4f6540b":"agentproof/SPEC.md","F:2f41a784d9":"CODEX.md","F:2f6c42c5ee":"design-system/src/components/States/States.tsx","F:2fc610bd94":"design-system/src/components/StatusPill/StatusPill.tsx","F:304ce7b89d":"scripts/agent/resolve-role.mjs","F:304fa8ef33":"apps/control-panel/src/screens/GatesScreen.tsx","F:313bcfac46":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","F:31658eff0b":".design-sync/previews/LeaseTable.tsx","F:31d378932b":"scripts/check-learning-traceability.mjs","F:3211d524ad":"apps/control-panel/README.md","F:3213d03b72":"scripts/lib/lang-adapters/python.mjs","F:3319e5c923":".design-sync/previews/SafetyStrip.tsx","F:33c4d744f3":"scripts/lib/message-catalog/agent-run/remediate.mjs","F:34ca4e55d1":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","F:34cb2b6c48":"scripts/lib/jsonschema.mjs","F:35002ba3fe":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","F:35c6d59157":"design-system/src/components/RoleBadge/RoleBadge.tsx","F:35d4a12b63":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","F:36419aa427":"scripts/lib/lang-adapters/js-ts.mjs","F:36693b0d8b":"prompts/modules/control-panel.md","F:373a946d5c":"examples/demo-app/tests/PaymentProcessor.test.js","F:373fee03a1":"design-system/src/components/WorkItemDrawer/index.ts","F:37f4a5c04e":"scripts/agent/route-action.mjs","F:3835919e8e":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","F:398655650f":"tests/ws-h-config.test.mjs","F:3a2345f153":"tests/run-gate-capped-unit.test.mjs","F:3a70dc66ea":"docs/adr/ADR-032-oss-adapter-boundary.md","F:3b382f95c0":"scripts/report.mjs","F:3b4065b679":".design-sync/previews/Checkbox.tsx","F:3b96b6dfed":"scripts/tripwire-check.mjs","F:3c479cac6e":"apps/control-panel/src/lib/confirm.tsx","F:3c53926ecd":"examples/demo-app/tests/CartService.test.js","F:3ce0fd77eb":".design-sync/previews/DecisionCard.tsx","F:3d505706cd":".design-sync/previews/Card.tsx","F:3d95ec2ed5":"tests/secret-patterns-unit.test.mjs","F:3dcdfa18c0":"docs/autonomy-plan.md","F:3dd926c4de":"design-system/src/components/QueueBoard/index.ts","F:3de9042953":"tests/packet-signing.test.mjs","F:3ea503e7c0":"tests/compliance-evidence.test.mjs","F:3f1216fc11":"scripts/lib/message-catalog/gate/check-licenses.mjs","F:3fe6b95e07":"design-system/src/components/HoverCard/index.ts","F:40887a152e":"docs/adr/ADR-041-gauntlet-replay.md","F:4096620673":"scripts/check-self-application.mjs","F:40d8f235fd":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","F:40e4f39b59":"tests/cli-dispatch.test.mjs","F:40eb542a82":"design-system/src/components/Card/Card.tsx","F:41623f0bcd":"prompts/modules/adoption.md","F:41f5ffe77a":".design-sync/previews/Drawer.tsx","F:4377343f4f":"tests/runner-env.test.mjs","F:4387a44284":".design-sync/previews/Modal.tsx","F:44a5987438":"tests/remediate.test.mjs","F:4637e1fecb":"tests/snapshot-incremental.test.mjs","F:46c40327ad":"design-system/src/components/Card/index.ts","F:4749cc43a0":"scripts/check-architecture-drift.mjs","F:48355ccf4d":"tests/self-application.test.mjs","F:492786871a":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","F:4a6129eacb":"apps/control-panel/src/app.css","F:4a7eaceb5c":"scripts/lib/detect-attribution.mjs","F:4aaece5252":"docs/adr/ADR-020-prompt-complexity-budget.md","F:4b7eb18a4b":"design-system/src/components/TierBadge/index.ts","F:4b91a9f65b":"scripts/lib/snapshot-redact.mjs","F:4c741a5b06":"tests/branch-name.test.mjs","F:4d08d5472f":"scripts/lib/message-catalog/advisory/learnings.mjs","F:4d5cfa3611":"docs/specs/ratchet-spec.md","F:4dabd020df":"tests/helpers/mock-github-server.mjs","F:4db1101024":"scripts/lib/policy-manifest.mjs","F:4ebb5aa8a0":"scripts/lib/learnings.mjs","F:4ebf08705b":"apps/control-panel/src/screens/SettingsScreen.tsx","F:4fd28fc2ff":"scripts/disarm.mjs","F:500dd805f6":"design-system/src/components/RoleBadge/index.ts","F:514a79560d":"docs/adr/ADR-028-portability.md","F:515a65a35b":"templates/.modonome/NETWORK.md","F:522efae76d":"scripts/gauntlet.mjs","F:52338ea290":"tests/openai-client.test.mjs","F:5253743405":"design-system/README.md","F:52caf3b287":"examples/demo-app/tests/CheckoutService.test.js","F:52ef6ad4a1":"tests/near-miss.test.mjs","F:5376e86470":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","F:545c0ccfeb":".design-sync/previews/ModeSwitcher.tsx","F:54a3c626d9":"tests/learnings.test.mjs","F:54c6928de9":"examples/demo-app/src/CheckoutService.js","F:54df44aadd":"apps/control-panel/server/learningsFormat.mjs","F:55673172df":"docs/specs/governed-autonomy-spec.md","F:55b3a4e2c0":"tests/migrate-lessons-rename.test.mjs","F:5621bc51b3":"agentproof/README.md","F:564b053598":"tests/check-architecture-drift.test.mjs","F:56a132aaca":"docs/adr/ADR-039-agent-capability-profiles.md","F:571aa2f3ae":"tests/fleet-ledger.test.mjs","F:57ca5f1716":"design-system/src/components/SafetyStrip/SafetyStrip.tsx","F:580d11b514":"tests/run-cycle-openai.test.mjs","F:583edef643":"design-system/src/components/DecisionCard/DecisionCard.tsx","F:594f505f11":"scripts/lib/lang-adapters/generic.mjs","F:5956278014":"tests/connect.test.mjs","F:596687118c":"design-system/src/components/Modal/index.ts","F:597cc7ae15":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","F:5994385869":"tests/maker-checker.test.mjs","F:599f5b2f28":"examples/demo-app/src/CartService.js","F:59b2499e4e":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","F:5a04bfa7a4":"docs/adr/ADR-030-embedding-safety.md","F:5a3543606b":"scripts/lib/attribution-fp-corpus.mjs","F:5b113a0914":"scripts/agent/action-queue.mjs","F:5b5b4ddcae":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","F:5d2ce8ee7e":"checkerproof/README.md","F:5d52d97b8a":"scripts/lib/message-catalog/agent-run/queue.mjs","F:5daab9894d":"apps/control-panel/server/remediationView.mjs","F:5e207f73c7":".design-sync/previews/Input.tsx","F:5e450ff82c":"scripts/scaffold.mjs","F:5eff4122c0":"tests/config-key-parity.test.mjs","F:5f7910375b":"scripts/arm.mjs","F:5f88bf32ca":"design-system/src/components/LearningCard/index.ts","F:5fa0ad758b":"docs/compliance/eu-ai-act-classification.md","F:60548316f5":"tests/arming.test.mjs","F:61296e720c":"scripts/check-repo-hygiene.mjs","F:61486b1ec2":"docs/ops/add-control.md","F:61c2a29876":"tests/tripwire.test.mjs","F:627afb27fd":"docs/adr/ADR-031-markdown-governance.md","F:63351e350b":"design-system/src/components/Modal/Modal.tsx","F:63c1c23ccb":"design-system/src/components/ConfirmDialog/ConfirmDialog.tsx","F:64c5acf802":"docs/adr/ADR-002-shadow-mode.md","F:65193a9799":"scripts/validate-knowledge-packet.mjs","F:66264a042c":"design-system/src/components/HoverCard/HoverCard.tsx","F:6627655633":"apps/control-panel/src/screens/OverviewScreen.tsx","F:667ef091ca":"design-system/src/components/ActivationLadder/index.ts","F:669d2a51f4":"site/README.md","F:683343bdf9":"ROADMAP.md","F:686a544e0e":"tests/review-diff.test.mjs","F:68c4da7fe8":"scripts/lib/secret-patterns.mjs","F:698ea4b2e9":"tests/triggers.test.mjs","F:69ddfa4ff4":"agentproof/CONTRIBUTING.md","F:6a3a98df8c":"docs/audits/claims-audit-2026-07-01.md","F:6a5934a79d":"templates/.github/copilot-instructions.md","F:6a86908a3e":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","F:6bee8a97f3":"docs/launch/article-seeds.md","F:6bef3f93ab":".design-sync/previews/Icon.tsx","F:6bfa4389b5":"design-system/src/components/StatusPill/index.ts","F:6c0919b64e":".design-sync/previews/Tabs.tsx","F:6da7bd8294":"tests/gauntlet.test.mjs","F:6dd88cde1c":"docs/adr/ADR-004-arming-isolation-enforcement.md","F:6e0bd62fa3":"scripts/lib/branch-name.mjs","F:6e4723a45d":"docs/adapters.md","F:6e4b629d3c":"docs/adr/ADR-001-self-governance-pipeline.md","F:6ebdb617a8":"CLAUDE.md","F:6f247eb514":"scripts/dry-run-sweep.mjs","F:6f5b5f0bc4":"docs/adr/ADR-012-harness-prompt-integrity.md","F:6fdd929a92":"fixtures/portability/prompt-injection-host/docs/guide.md","F:7008a20b1c":".design-sync/previews/IdentityChip.tsx","F:704e42d42b":"tests/route-action.test.mjs","F:7054844360":"design-system/src/components/Checkbox/Checkbox.tsx","F:705a3ca9b3":"RELEASE-EVIDENCE.md","F:70d12a92c6":"design-system/src/components/ArmingStateBadge/index.ts","F:71f0bfb455":"design-system/src/components/Drawer/Drawer.tsx","F:7232ada2da":"scripts/preflight-embedding.mjs","F:72b7ab4c3e":"docs/adr/ADR-017-knowledge-network-packet-signing.md","F:7479c14986":"ADOPTION-GUIDE.md","F:750436d8c1":"docs/adr/ADR-036-policy-attestation.md","F:757a70680a":"apps/control-panel/src/screens/LearningsScreen.tsx","F:758ab56395":"tests/check-attribution-fp-corpus.test.mjs","F:75c1125713":"templates/.modonome/control-panel.md","F:763efdd51c":"design-system/src/components/Input/Input.tsx","F:76da13a8f7":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","F:76f802c3ce":".modonome/control-panel.md","F:778c33cdc0":"tests/dry-run.test.mjs","F:780c791407":"scripts/build-policy-attestation.mjs","F:7832db450f":".design-sync/previews/Toast.tsx","F:7944059823":"scripts/lib/token-estimate.mjs","F:79467a3153":".design-sync/previews/ErrorState.tsx","F:7983a5dd39":"docs/compliance/openssf-badge-evidence.md","F:79cec3a152":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","F:7a1f7d680b":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","F:7a43bf4ce5":".design-sync/previews/EmptyState.tsx","F:7b3e38c9a6":"scripts/sign-packet.mjs","F:7c8d518693":"design-system/src/lib/cx.ts","F:7ccad64380":"examples/python-service/app/orders.py","F:7d236c9aa6":"apps/control-panel/src/state/fixtures/host.ts","F:7fcbf6b32d":"fixtures/portability/schema-collision/README.md","F:815abebda1":"design-system/src/components/ConfirmDialog/index.ts","F:819f72edf6":"design-system/src/components/Select/Select.tsx","F:81c495717c":"design-system/src/components/Slider/Slider.tsx","F:828cf970bc":"tests/resolve-role.test.mjs","F:83d4d07afc":"docs/control-panel-modes.md","F:83ecac7524":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","F:849bc0a60f":"design-system/src/components/Table/index.ts","F:84a5c32a4c":".design-sync/previews/NumberField.tsx","F:851f776227":"scripts/agent/parse-checker-telemetry.mjs","F:85e076f56b":"design-system/src/components/Icon/index.ts","F:868321590c":"scripts/check-work-items.mjs","F:86838d35ac":"design-system/src/lib/format.ts","F:86fd2cf669":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","F:872221b1da":"scripts/agent/apply-patch.mjs","F:87c30bdb4c":"scripts/check-drift.mjs","F:88244532e4":"docs/vscode-workflow.md","F:885187507a":"apps/control-panel/src/main.tsx","F:88c38fbc0f":".modonome/DECISIONS.md","F:8930a72be2":".modonome/NETWORK.md","F:8972d37045":".design-sync/previews/IconButton.tsx","F:89aee72994":"apps/control-panel/src/state/fixtures/product.ts","F:89f25e2f3d":"design-system/src/components/Tabs/index.ts","F:8a10462927":"scripts/guard-ratchet.mjs","F:8a3433b070":"tests/report-impact.test.mjs","F:8a3dd6ccff":"apps/control-panel/server/modonomeReader.mjs","F:8a7591db62":"docs/audits/claims-audit-2026-06-25.md","F:8a9aff1529":"design-system/src/components/Tooltip/Tooltip.tsx","F:8aa9ba4dcb":"tests/transition-work-item-unit.test.mjs","F:8abf9e432a":"scripts/sync-site-data.mjs","F:8b122c449e":"design-system/src/components/Button/Button.tsx","F:8b2f3dbcba":"tests/control-panel-writer-nested.test.mjs","F:8b5a1f94c4":"scripts/agent/providers.mjs","F:8b7ee49cdd":"scripts/check-trust-boundary.mjs","F:8b8d3c46b3":"scripts/check-state-machine-acyclic.mjs","F:8bb1b57470":"examples/demo-app/src/index.js","F:8c2e08ed12":"docs/adr/ADR-008-trusted-author-allowlist.md","F:8c6234a8cb":"design-system/src/components/GatePanel/GatePanel.tsx","F:8d2cb93236":"scripts/agent/openai-client.mjs","F:8f62475ebe":"prompts/modules/roles.md","F:8f6366fd8e":"ARCHITECTURE.md","F:8fe56e5618":"tests/chaos.test.mjs","F:8ffb11f281":"scripts/lib/remediate.mjs","F:9040e0c030":"design-system/src/components/States/index.ts","F:90cbb2cf6a":"challenge/judge.mjs","F:90e1fd2fd9":"scripts/hygiene.mjs","F:90f0999521":"fixtures/portability/prompt-injection-host/src/main.js","F:90fc20ddd8":"design-system/src/components/MdnRoot/MdnRoot.tsx","F:91a7efa0ba":"docs/workflow-fixes.md","F:91e24dcac0":"scripts/lib/message-catalog/advisory/build-prompt.mjs","F:9204ee9f08":"design-system/src/components/MetricTile/index.ts","F:92d6903b5f":"scripts/check-decisions-authority.mjs","F:92dde817ee":"tests/ratchet-attestation.test.mjs","F:930bc5297d":"docs/launch/show-hn.md","F:932d33be00":"scripts/validate-config.mjs","F:933d506be9":"tests/policy-manifest.test.mjs","F:9344d335a6":"scripts/build-release-evidence.mjs","F:93f0f5d3de":"examples/node-typescript/src/checkout.ts","F:94050e680d":"checkerproof/runner.mjs","F:940d5f4399":"tests/arm-disarm.test.mjs","F:9427d264e6":"scripts/check-edit-set-compliance.mjs","F:9444435647":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","F:94b941cbd6":".design-sync/NOTES.md","F:94c9bc6065":"tests/schedule-trigger-schema.test.mjs","F:956332d4b5":"design-system/src/components/LeaseTable/LeaseTable.tsx","F:95d4304133":"apps/control-panel/src/state/adapter.ts","F:95e51a604d":"docs/compliance/compliance.md","F:9616513cb6":"scripts/lib/message-catalog/agent-run/disarm.mjs","F:964f89b6cc":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","F:9666ca7f0d":"examples/demo-app/WALKTHROUGH.md","F:973aaa9d86":".design-sync/previews/RoleBadge.tsx","F:973aca5f3e":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","F:97fc86d7a3":"docs/adr/ADR-045-scope-focus.md","F:9803feef4a":"scripts/lib/message-catalog/agent-run/openai-client.mjs","F:98529ba7ea":"scripts/lib/capability-flags.mjs","F:99251bc045":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","F:9a28b4e90e":"prompts/modules/state-machine.md","F:9a32917e56":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","F:9a3e8ed7d2":"scripts/lib/near-miss.mjs","F:9a72895a04":"scripts/lib/file-classifiers.mjs","F:9b01a5cd4d":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","F:9b3f18856e":"apps/control-panel/src/screens/WorkQueueScreen.tsx","F:9bb94e1b40":"tests/hygiene.test.mjs","F:9c9edea0c9":".design-sync/previews/AuditTimeline.tsx","F:9cbe9238f8":"tests/e2e.test.mjs","F:9d53df2290":"docs/ops/add-gate.md","F:9d69a6b766":"scripts/migrate-config.mjs","F:9dbf431d3e":"scripts/lib/message-catalog/gate/check-style.mjs","F:9dc816763b":"tests/agentproof-registry.test.mjs","F:9deac13db0":"design-system/src/components/ProgressMeter/ProgressMeter.tsx","F:9f0fb6ed8b":"design-system/src/components/MetricTile/MetricTile.tsx","F:9f36b3ef29":"tests/snapshot-cli.test.mjs","F:9f6dd5e5a3":"tests/queue.test.mjs","F:a0068c8817":".design-sync/previews/Toggle.tsx","F:a0abaf6a25":".design-sync/previews/ProgressMeter.tsx","F:a0d489df6d":"scripts/snapshot.mjs","F:a104667369":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","F:a1411f1423":"fixtures/negative-controls/app-syntax-error.js","F:a167609a41":"tests/mcp-compliance.test.mjs","F:a1baa3f01d":"scripts/lib/work-item-staleness.mjs","F:a37ab631dc":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","F:a384388adc":"docs/agents.md","F:a402d2f9ed":"design-system/src/components/Table/Table.tsx","F:a42da90970":"design-system/src/components/ModeSwitcher/index.ts","F:a52954a167":"apps/control-panel/vite.config.ts","F:a54ff182c7":"AGENTS.md","F:a5822fdd03":"scripts/lib/message-catalog/agent-run/release.mjs","F:a6d2bd3021":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","F:a70145dc77":"docs/adr/ADR-024-capability-promotion-gate.md","F:a7ce0f6452":"scripts/install-hooks.mjs","F:a862b1c3b6":"design-system/src/components/ConceptTile/index.ts","F:a8c32b8f15":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","F:a8cfe45d27":"design-system/src/components/IconButton/IconButton.tsx","F:aa27d254da":"scripts/lib/message-catalog/agent-run/arm.mjs","F:aa77f227a6":"scripts/agent/tool-loop-adapter.mjs","F:ab334f34df":"design-system/src/components/Toast/Toast.tsx","F:ab5077147a":"scripts/mcp-server.mjs","F:ac11b5379f":"scripts/promote-learning.mjs","F:acc3f6b466":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","F:acd892d4a0":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","F:ace169adc4":"scripts/check-evidence-secrets.mjs","F:add7add561":"design-system/src/index.ts","F:ae227d695d":"examples/python-service/README.md","F:ae46bbab81":"scripts/lib/repo-detect.mjs","F:aea3c05bca":"scripts/agent/triggers.mjs","F:aecebb26be":"tests/remediation-view.test.mjs","F:aef9cf1e27":"site/index.html","F:af6de66499":"scripts/agentproof-attestation.mjs","F:b014028f57":"scripts/lib/run-gate-capped.mjs","F:b1598d4449":"tests/snapshot-security.test.mjs","F:b16afebae9":"scripts/check-agentproof-registry.mjs","F:b2496e8029":".github/pull_request_template.md","F:b25dcdad19":"scripts/lib/message-catalog/gate/check-md-governance.mjs","F:b28f13b600":"tests/performance.test.mjs","F:b2efd505ef":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","F:b335630551":"README.md","F:b39c90fbe6":"design-system/src/components/ProgressMeter/index.ts","F:b3a2ad52bb":"design-system/src/components/ModeSwitcher/ModeSwitcher.tsx","F:b4279e0af6":"docs/adr/ADR-023-config-schema-migration-contract.md","F:b4f4e16ca1":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","F:b502a0fe75":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","F:b51ccbe79a":"design-system/src/components/WorkItemCard/index.ts","F:b5ae6ee133":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","F:b5f5700e4d":"docs/adr/ADR-033-repo-snapshot.md","F:b60c6a93e9":"GOVERNANCE.md","F:b677f38b10":"design-system/src/components/Checkbox/index.ts","F:b70824b13e":"tests/dependency.test.mjs","F:b806994000":"scripts/queue.mjs","F:b81cf7567f":"docs/guidelines/markdown-governance.md","F:b9d806ba4d":"examples/demo-app/src/NotificationService.js","F:ba97282cf5":"tests/provenance.test.mjs","F:baf7641a01":"tests/tick.test.mjs","F:bb0ec91260":"scripts/check-evidence-integrity.mjs","F:bb2d98fca6":"design-system/src/components/IdentityChip/index.ts","F:bb6a874d58":".design-sync/previews/GatePanel.tsx","F:bbb6476d71":"tests/ws-e-negative-controls.test.mjs","F:bcd1c88877":"docs/research/knowledge-network-architecture.md","F:bd02b28f17":"examples/demo-app/src/InventoryService.js","F:bf3dae9563":"tests/sweep-to-work-item.test.mjs","F:bf4e255c6e":"scripts/lib/message-catalog/gate/validate-work-item.mjs","F:c0714e4bf0":"prompts/modonome.bundle.md","F:c077d16aeb":"docs/adr/ADR-016-knowledge-network-packet-identity.md","F:c0e80ca327":"design-system/src/components/Sparkline/Sparkline.tsx","F:c14dd92bce":"design-system/src/components/Button/index.ts","F:c1a96ec6e2":"scripts/check-work-item-staleness.mjs","F:c1cc304e56":"docs/versioning.md","F:c2ff3fda15":"design-system/src/components/AppShell/index.ts","F:c324fab0cc":"prompts/modules/snapshot.md","F:c3588d683e":"docs/adr/ADR-035-metadata-remediator.md","F:c3b2fcfb69":"docs/agent-org.md","F:c3cd2dc5c9":"tests/messages.test.mjs","F:c412f056b4":"design-system/src/components/SafetyStrip/index.ts","F:c4395c3023":"scripts/build-prompt.mjs","F:c54a514860":"docs/ops/work-item.md","F:c5938c33fd":"scripts/check-promotion-readiness.mjs","F:c598a2d684":"scripts/lib/lang-adapters/java.mjs","F:c5da07872e":"design-system/src/components/Sparkline/index.ts","F:c5fe610b02":"SUPPORT.md","F:c63a71fb57":".design-sync/previews/CostPanel.tsx","F:c64c042051":"design-system/src/tokens/tokens.ts","F:c6bd51a324":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","F:c72e6949b9":"fixtures/adapters/reference-adapter.mjs","F:c7326495ec":"docs/adr/ADR-043-terraform-module.md","F:c7423b85cf":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","F:c9493b5275":"scripts/audit-learnings.mjs","F:c97cb4d123":"OWNER-ACTIONS.md","F:c98f6b55e3":"prompts/modules/network.md","F:ca05b6ba1c":"tests/terraform-module-shape.test.mjs","F:ca0833ac73":"scripts/check-style.mjs","F:ca13fe2a5b":".design-sync/previews/Sparkline.tsx","F:cac320dd97":".modonome/STATUS.md","F:cacaab56e1":"tests/adapter-verify.test.mjs","F:cb3c5f7715":"scripts/lib/work-item-validate.mjs","F:cb66095cb4":"scripts/lib/snapshot-walk.mjs","F:cb8c4aadaf":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","F:cba8f1d03b":"tests/install-hooks.test.mjs","F:cbaff08a46":"docs/adr/ADR-015-knowledge-network-catalog.md","F:cc361bd05a":"scripts/check-licenses.mjs","F:cc65dd1342":"tests/embedding-safety.test.mjs","F:ccb72910b3":"scripts/lib/message-catalog/gate/check-drift.mjs","F:cdbe769ed3":"scripts/lib/github-api.mjs","F:ce1173e176":"design-system/src/components/CostPanel/CostPanel.tsx","F:ce41983a53":"tests/researcher-role.test.mjs","F:cecdb96382":"scripts/lib/lang-adapters/tree-sitter.mjs","F:cede5f9fa2":"tests/ratchet-format.test.mjs","F:cf2908e0f2":"agentproof/CONFORMANCE-INTERFACE.md","F:d01156348d":"design-system/src/components/Drawer/index.ts","F:d05701e1ab":"design-system/src/components/GatePanel/index.ts","F:d0d703a4e0":"design-system/src/components/HelpHint/index.ts","F:d0da1cab80":"tests/control-panel-ownership.test.mjs","F:d135cffeaa":"scripts/transition-work-item.mjs","F:d1b898f17f":"examples/demo-app/tests/NotificationService.test.js","F:d20e4b6b91":"design-system/src/components/Carousel/Carousel.tsx","F:d288a78085":"scripts/lib/message-catalog/advisory/sign-packet.mjs","F:d2b14b5b34":"docs/adr/ADR-011-ci-env-var-trust-scope.md","F:d328f97d94":"scripts/lib/message-catalog/advisory/hygiene.mjs","F:d480e40c97":"scripts/lib/config-validate.mjs","F:d4ead22b1b":"docs/adr/ADR-005-run-observability.md","F:d52b08ebeb":"examples/node-typescript/README.md","F:d590ca62b9":".design-sync/previews/PermissionDeniedState.tsx","F:d5b496b125":"design-system/src/components/HelpHint/HelpHint.tsx","F:d6401dd73e":"scripts/connect.mjs","F:d66f93d7b7":"docs/adr/ADR-029-adversarial-test-design.md","F:d744931e6a":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","F:d754b827f4":"tests/render-prompt-unit.test.mjs","F:d783999e16":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","F:d7d4e8d2a9":"tests/run-log.test.mjs","F:d8e37c4449":"scripts/lib/message-catalog/advisory/migrate-config.mjs","F:d8fb8339ce":"design-system/src/components/ProtectedPathRow/ProtectedPathRow.tsx","F:da42f69531":"design-system/src/components/TierBadge/TierBadge.tsx","F:da9133a29d":"scripts/lib/message-catalog/agent-run/action-queue.mjs","F:db651caf76":"design-system/src/components/NumberField/NumberField.tsx","F:dbb9c92ca1":"scripts/lib/snapshot-core.mjs","F:dc00dfe394":"docs/adr/ADR-006-checker-independence.md","F:dc0cc6d551":"docs/adr/ADR-025-self-application-conformance.md","F:dca643f34b":".design-sync/previews/Tooltip.tsx","F:dd1be2cd7b":".design-sync/previews/QueueBoard.tsx","F:dd58ae3791":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","F:ddd82fc886":"tests/promoted-learnings.test.mjs","F:ddeb486c49":"scripts/agent/run-cycle.mjs","F:de188c1b79":"scripts/lib/message-catalog/gate/check-self-application.mjs","F:de4538fe53":"docs/adr/ADR-010-knowledge-packet-trust.md","F:de5ebbf586":"tests/scaffold-adoption.test.mjs","F:de988f64d4":"design-system/src/components/AuditTimeline/index.ts","F:deab644e60":"design-system/src/components/Icon/Icon.tsx","F:df4b55ecef":"tests/check-gate-dag.test.mjs","F:e00aec45ce":"tests/control-panel-work-item-writer.test.mjs","F:e053923067":"tests/run-cycle-cli-permissions.test.mjs","F:e11f907cba":"scripts/score-proposals.mjs","F:e146bc5acb":".design-sync/conventions.md","F:e19aab09cb":".design-sync/previews/HelpHint.tsx","F:e2025a4e0c":"scripts/lib/message-catalog/agent-run/route-action.mjs","F:e27748d089":"templates/.modonome/STATUS.md","F:e2f1b5ac07":"tests/role-registry.test.mjs","F:e359adb110":"tests/check-style-lexicon.test.mjs","F:e406ceab72":"apps/control-panel/src/lib/messages.ts","F:e40ce1af48":"apps/control-panel/src/screens/ArmingScreen.tsx","F:e4e18d0b80":"tests/agent-capability-profile.test.mjs","F:e4ff19bbe2":"scripts/lib/commit-identity.mjs","F:e540f7b669":"tests/promote-learning.test.mjs","F:e5e519f441":".design-sync/previews/MetricTile.tsx","F:e5e9ec402f":"docs/LEXICON.md","F:e6677dcd37":"scripts/lib/message-catalog/gate/check-work-items.mjs","F:e7380d1444":"scripts/check-regex-safety.mjs","F:e844676be4":"docs/adr/ADR-013-config-downgrade-and-migration.md","F:e8676a18b7":"scripts/check-attribution-fp-corpus.mjs","F:e9479e1a3b":"scripts/ratchet-attestation.mjs","F:e948251d2b":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","F:e9701967b3":"docs/adr/ADR-046-ship-the-deferred-features.md","F:e9f1cc1e5d":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","F:ea9e0801d5":"design-system/src/components/NumberField/index.ts","F:eb14a0bdeb":"tests/helpers/mock-openai-server.mjs","F:ec3aa9930a":"scripts/lib/message-catalog/gate/validate-config.mjs","F:ec52ca3820":"apps/control-panel/src/state/liveClient.ts","F:eca12c0a30":"CONTRIBUTING.md","F:ed9c47feb2":"tests/tool-loop-adapter.test.mjs","F:edb11415f0":"scripts/run-gate-pipeline.mjs","F:edf42fb1af":"scripts/release.mjs","F:ee02e563c6":"tests/providers.test.mjs","F:ee21289902":"tests/commit-identity.test.mjs","F:eecc78e7e8":".design-sync/previews/LoadingState.tsx","F:efa02030ca":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","F:efd369884e":"docs/audits/claims-audit-2026-07-08.md","F:f00c212d41":"design-system/src/components/Tooltip/index.ts","F:f07f8ebca9":"scripts/validate-work-item.mjs","F:f0fbd8716f":".design-sync/previews/WorkItemDrawer.tsx","F:f13b76e6fd":"design-system/src/components/Toggle/index.ts","F:f1f2b57403":"docs/ops/runner-model-config.md","F:f238d164c9":"tests/ratchet.test.mjs","F:f41378fed0":"scripts/lib/message-catalog/panel/control-panel.mjs","F:f51cba9beb":"scripts/lib/graph.mjs","F:f57cf1a212":"design-system/src/components/CostPanel/index.ts","F:f5d313e9f1":"scripts/adapter-verify.mjs","F:f6abfc128a":"design-system/src/components/Slider/index.ts","F:f6e100ab45":".design-sync/previews/Button.tsx","F:f6ed156e4b":"SECURITY.md","F:f8168b956f":"examples/demo-app/tests/InventoryService.test.js","F:f83d1100e9":"apps/control-panel/src/content/concepts.ts","F:f8609bae0b":"design-system/src/components/QueueBoard/QueueBoard.tsx","F:f90930c3c3":"bin/modonome.mjs","F:f921eecad7":"tests/decisions-authority.test.mjs","F:f942e88a8f":"design-system/src/components/IdentityChip/IdentityChip.tsx","F:f9c98a8642":".design-sync/previews/WorkItemCard.tsx","F:fa49930755":"scripts/assert-governed-change.mjs","F:fa851dabe1":"tests/break-the-ratchet-judge.test.mjs","F:fadcf390da":"tests/metrics.test.mjs","F:fb5935daaf":"design-system/src/components/ProtectedPathRow/index.ts","F:fc21812307":"scripts/check-gate-dag.mjs","F:fc43ea4859":"design-system/src/components/IconButton/index.ts","F:fc5d887ff6":"scripts/check-checker-engagement.mjs","F:fcc5f4b906":"examples/demo-app/README.md","F:fd08562f92":"scripts/check-md-governance.mjs","F:fd4b8473fa":"apps/control-panel/server/ownership.mjs","F:fd660a117b":"scripts/agent/render-prompt.mjs","F:fd6ebce602":"tests/portability.test.mjs","F:fdaf1308e4":"fixtures/evidence-tampered.md","F:fe5ec971f8":".design-sync/previews/TierBadge.tsx","F:ff2c4a08a4":"scripts/lib/git-scope.mjs","F:ff3aef693f":"examples/demo-app/src/PaymentProcessor.js","F:ff644711e7":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","F:ffcad313b6":"docs/adr/ADR-044-agent-org-structure.md","F:ffdbe3a1e7":"CODE_OF_CONDUCT.md","F:ffe5c1269b":"scripts/lib/lang-adapters/go.mjs"},"symbols":{"S:002c9f1daa":{"line":25,"name":"slug","path_id":"F:6f247eb514"},"S:003e6c53c4":{"line":56,"name":"info","path_id":"F:2d4c555ba1"},"S:0044d1a126":{"line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9"},"S:00452332a2":{"line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a"},"S:005abb5200":{"line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0"},"S:0064b473e6":{"line":14,"name":"tmpQueue","path_id":"F:195e9217ca"},"S:00c956ccf3":{"line":6,"name":"ToastProps","path_id":"F:ab334f34df"},"S:00db09c5a8":{"line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792"},"S:00f913bfd8":{"line":11,"name":"tf","path_id":"F:ca05b6ba1c"},"S:0126079093":{"line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15"},"S:015c572711":{"line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca"},"S:01b4ff4d73":{"line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f"},"S:0255163ba3":{"line":229,"name":"parseArgs","path_id":"F:128b647d9a"},"S:028a668f8e":{"line":34,"name":"writeItem","path_id":"F:baf7641a01"},"S:02e2e85572":{"line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86"},"S:02e9b6beea":{"line":32,"name":"parseMetrics","path_id":"F:3b382f95c0"},"S:03145d5ec3":{"line":519,"name":"CHECKS","path_id":"F:7232ada2da"},"S:039c3576c4":{"line":23,"name":"modelFamily","path_id":"F:cb3c5f7715"},"S:03b000e190":{"line":153,"name":"verifySiteData","path_id":"F:8abf9e432a"},"S:03b490fb81":{"line":7,"name":"clean","path_id":"F:c598a2d684"},"S:041a6b87af":{"line":14,"name":"tmp","path_id":"F:55b3a4e2c0"},"S:0427f639c4":{"line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca"},"S:04f5060b44":{"line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914"},"S:050ec6eff9":{"line":26,"name":"OverviewScreen","path_id":"F:6627655633"},"S:0518e5f603":{"line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94"},"S:05a5299b28":{"line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae"},"S:05af4c96a8":{"line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0"},"S:05e617fb30":{"line":6,"name":"ButtonSize","path_id":"F:8b122c449e"},"S:05fa5077ed":{"line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1"},"S:05fcfe1c5b":{"line":5,"name":"apply_discount","path_id":"F:7ccad64380"},"S:064519e650":{"line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff"},"S:06700c1faf":{"line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927"},"S:069ca5f436":{"line":2,"name":"MESSAGES","path_id":"F:597cc7ae15"},"S:06c0c85d92":{"line":20,"name":"tmp","path_id":"F:5956278014"},"S:0713a27a1f":{"line":51,"name":"resolveRole","path_id":"F:304ce7b89d"},"S:073124e2d8":{"line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed"},"S:074c2b3c02":{"line":28,"name":"extractDiff","path_id":"F:872221b1da"},"S:075e86ea7c":{"line":48,"name":"topoSort","path_id":"F:f51cba9beb"},"S:0768a4cf0f":{"line":13,"name":"matchesType","path_id":"F:34cb2b6c48"},"S:07a58ff928":{"line":14,"name":"rpc","path_id":"F:a167609a41"},"S:086ff230f0":{"line":417,"name":"main","path_id":"F:522efae76d"},"S:08df8d7472":{"line":70,"name":"runPreflight","path_id":"F:0103cf3d56"},"S:0906a625c3":{"line":8,"name":"GateRow","path_id":"F:8c6234a8cb"},"S:098af8d3e8":{"line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d"},"S:099c6ccde0":{"line":132,"name":"detectText","path_id":"F:4a7eaceb5c"},"S:09a834e684":{"line":14,"name":"makeRepo","path_id":"F:3ea503e7c0"},"S:0a11409d06":{"line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53"},"S:0a5fed1978":{"line":59,"name":"loadFixtures","path_id":"F:23917c6197"},"S:0a677c2e37":{"line":19,"name":"msg","path_id":"F:5f7910375b"},"S:0a6b98d712":{"line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3"},"S:0a9885ca9d":{"line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb"},"S:0a9b63cb4b":{"line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee"},"S:0ab594146c":{"line":33,"name":"runScript","path_id":"F:0391f3b249"},"S:0ac24bec51":{"line":76,"name":"auditCoherence","path_id":"F:1a19f02364"},"S:0aee45c73e":{"line":2,"name":"MESSAGES","path_id":"F:86fd2cf669"},"S:0af608ade0":{"line":1,"name":"MESSAGES","path_id":"F:0c731e3460"},"S:0b0e197734":{"line":35,"name":"Select","path_id":"F:819f72edf6"},"S:0b25fbc8fe":{"line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7"},"S:0b453b55b9":{"line":25,"name":"Checkbox","path_id":"F:7054844360"},"S:0b4b18fb8a":{"line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27"},"S:0b56ac32a5":{"line":1,"name":"MESSAGES","path_id":"F:179564da6f"},"S:0b70780ca5":{"line":14,"name":"TooltipProps","path_id":"F:8a9aff1529"},"S:0b7b39d873":{"line":49,"name":"extractRawValue","path_id":"F:1575110130"},"S:0b8ff85c9c":{"line":666,"name":"classifyCode","path_id":"F:8a10462927"},"S:0ba2f17fcf":{"line":30,"name":"rpad","path_id":"F:3b382f95c0"},"S:0bae1275b2":{"line":1,"name":"Card","path_id":"F:93f0f5d3de"},"S:0be1a2cd09":{"line":244,"name":"diffCapabilities","path_id":"F:780c791407"},"S:0bf3d508cb":{"line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e"},"S:0c7a33bcbe":{"line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb"},"S:0c9de67184":{"line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2"},"S:0ca7d7cb9c":{"line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452"},"S:0cfad6d2cf":{"line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c"},"S:0d46d60d35":{"line":63,"name":"GatePanel","path_id":"F:8c6234a8cb"},"S:0d7b0da50a":{"line":24,"name":"resolveImport","path_id":"F:015261eab0"},"S:0dd1d1c53a":{"line":529,"name":"runPreflight","path_id":"F:7232ada2da"},"S:0e6240f5b7":{"line":70,"name":"writeGate","path_id":"F:08b7435c86"},"S:0ed808bd36":{"line":132,"name":"insertAfterFirst","path_id":"F:522efae76d"},"S:0eec918c49":{"line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a"},"S:0f004d17fa":{"line":24,"name":"git","path_id":"F:580d11b514"},"S:0f77533ed4":{"line":23,"name":"run","path_id":"F:6da7bd8294"},"S:107eb40a1d":{"line":18,"name":"makeRepo","path_id":"F:9f36b3ef29"},"S:118e66be10":{"line":2,"name":"flagValue","path_id":"F:2d93cea2d4"},"S:120830c7dd":{"line":91,"name":"maybeSign","path_id":"F:780c791407"},"S:126357e421":{"line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5"},"S:1274d7cf4b":{"line":3,"name":"Tier","path_id":"F:da42f69531"},"S:12c1e0f104":{"line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed"},"S:130202d7f0":{"line":3,"name":"Queue","path_id":"F:7a43bf4ce5"},"S:135fde5dfb":{"line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb"},"S:13a8db3ab6":{"line":11,"name":"gitDiff","path_id":"F:fa49930755"},"S:13f1b3c9c0":{"line":93,"name":"CostPanel","path_id":"F:ce1173e176"},"S:13fa2b4863":{"line":20,"name":"detectStack","path_id":"F:ae46bbab81"},"S:13fdf696a0":{"line":19,"name":"run","path_id":"F:9f6dd5e5a3"},"S:145586915d":{"line":5,"name":"DrawerProps","path_id":"F:71f0bfb455"},"S:145bc035b8":{"line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0"},"S:14850052c8":{"line":6,"name":"TabItem","path_id":"F:1db369d970"},"S:14b57397ed":{"line":14,"name":"Budget","path_id":"F:84a5c32a4c"},"S:14c08c7efc":{"line":20,"name":"ConceptTile","path_id":"F:1a137480ae"},"S:14cb0e8cbb":{"line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e"},"S:14ef0a45e8":{"line":1,"name":"MESSAGES","path_id":"F:1127892e72"},"S:15286656f4":{"line":127,"name":"localEnv","path_id":"F:ddeb486c49"},"S:153c85af26":{"line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a"},"S:154918aa5a":{"line":32,"name":"isBinary","path_id":"F:dbb9c92ca1"},"S:15b3a95566":{"line":100,"name":"findBlock","path_id":"F:22566cb46e"},"S:16267c791e":{"line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715"},"S:16975f80af":{"line":18,"name":"QueueBoard","path_id":"F:f8609bae0b"},"S:16a3c28802":{"line":9,"name":"charge","path_id":"F:93f0f5d3de"},"S:16d8c02a8e":{"line":372,"name":"send","path_id":"F:ab5077147a"},"S:170d5cf4ef":{"line":18,"name":"tmp","path_id":"F:e359adb110"},"S:170dcaab55":{"line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6"},"S:172b08e199":{"line":118,"name":"updateRepoData","path_id":"F:8abf9e432a"},"S:17945c542e":{"line":393,"name":"countBareAsserts","path_id":"F:8a10462927"},"S:17985dad90":{"line":245,"name":"execSync","path_id":"F:61296e720c"},"S:17c9a6d377":{"line":45,"name":"stripCharClasses","path_id":"F:e7380d1444"},"S:183f710a08":{"line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f"},"S:1856df868b":{"line":163,"name":"writeRunLog","path_id":"F:5e450ff82c"},"S:18c9f379c0":{"line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766"},"S:18da5ae581":{"line":13,"name":"listMjs","path_id":"F:b70824b13e"},"S:18fce60dc6":{"line":32,"name":"saveConfig","path_id":"F:ec52ca3820"},"S:18ff6b9c89":{"line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a"},"S:19226d4902":{"line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5"},"S:194e854c70":{"line":156,"name":"complete","path_id":"F:5b113a0914"},"S:19aab1f03f":{"line":1,"name":"MESSAGES","path_id":"F:d288a78085"},"S:19e5ddb185":{"line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b"},"S:19ecd8efbf":{"line":134,"name":"main","path_id":"F:6f247eb514"},"S:1ae77ae47b":{"line":7,"name":"CardProps","path_id":"F:40eb542a82"},"S:1b14fa60f7":{"line":92,"name":"git","path_id":"F:18f569225a"},"S:1b794f5743":{"line":21,"name":"getDiff","path_id":"F:9427d264e6"},"S:1b85e41391":{"line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7"},"S:1ba042e0cf":{"line":565,"name":"main","path_id":"F:7232ada2da"},"S:1bafda617f":{"line":15,"name":"docBelow","path_id":"F:3213d03b72"},"S:1be3814c77":{"line":24,"name":"listWorkflows","path_id":"F:2e327963ed"},"S:1beab0dc0c":{"line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b"},"S:1c5d801590":{"line":70,"name":"patchYamlText","path_id":"F:22566cb46e"},"S:1c6f22237b":{"line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04"},"S:1c7919b4ea":{"line":40,"name":"signMessage","path_id":"F:0cacf66a3b"},"S:1c82a73570":{"line":19,"name":"tmp","path_id":"F:40e4f39b59"},"S:1d0f5bc129":{"line":708,"name":"emitSarif","path_id":"F:8a10462927"},"S:1d4c8df8c0":{"line":19,"name":"TableProps","path_id":"F:a402d2f9ed"},"S:1d6822da4e":{"line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49"},"S:1dc2770ace":{"line":1,"name":"MESSAGES","path_id":"F:9a32917e56"},"S:1e5dabea9c":{"line":43,"name":"hasHeading","path_id":"F:c5938c33fd"},"S:1e6749f65a":{"line":31,"name":"run","path_id":"F:02a5f8fc55"},"S:1e67af68fc":{"line":52,"name":"Section","path_id":"F:08064e0c53"},"S:1ebb8bc1af":{"line":122,"name":"git","path_id":"F:f921eecad7"},"S:1ef7d0ea53":{"line":3,"name":"CartService","path_id":"F:599f5b2f28"},"S:1f19b07227":{"line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb"},"S:1fe8548dac":{"line":17,"name":"fixture","path_id":"F:8a3433b070"},"S:2064ebd573":{"line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0"},"S:208ce5b839":{"line":65,"name":"countWorkItems","path_id":"F:8abf9e432a"},"S:209a48ca7f":{"line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed"},"S:2102bdee1c":{"line":49,"name":"readRecord","path_id":"F:5b113a0914"},"S:210b0c6999":{"line":26,"name":"signedBytes","path_id":"F:245efb551c"},"S:211cdf5f9d":{"line":17,"name":"readItem","path_id":"F:e00aec45ce"},"S:214691c25d":{"line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3"},"S:21635cbeda":{"line":19,"name":"adapter","path_id":"F:594f505f11"},"S:21a4872ace":{"line":8,"name":"Blocked","path_id":"F:7832db450f"},"S:225c7a7d84":{"line":21,"name":"Open","path_id":"F:3ce0fd77eb"},"S:22ac6bb569":{"line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da"},"S:22e3bba95f":{"line":26,"name":"snapshotContext","path_id":"F:fd660a117b"},"S:2305f3725a":{"line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed"},"S:2306976428":{"line":376,"name":"errorResponse","path_id":"F:ab5077147a"},"S:2358b05e12":{"line":680,"name":"fileOf","path_id":"F:8a10462927"},"S:236237bc1b":{"line":56,"name":"unquote","path_id":"F:119e3c0fce"},"S:237d74cadf":{"line":21,"name":"parseScalar","path_id":"F:1575110130"},"S:23afcde4ab":{"line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff"},"S:23fbaa24ea":{"line":13,"name":"git","path_id":"F:ff2c4a08a4"},"S:24407449b3":{"line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514"},"S:2441bf3938":{"line":17,"name":"run","path_id":"F:61c2a29876"},"S:247c34d405":{"line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3"},"S:2484ffb006":{"line":142,"name":"printPlan","path_id":"F:1e5ef6ba70"},"S:24b854ce78":{"line":36,"name":"BrandMark","path_id":"F:268769c4a6"},"S:24c6a3dc6c":{"line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92"},"S:24f0960624":{"line":29,"name":"runRemediate","path_id":"F:44a5987438"},"S:25117f5b1d":{"line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a"},"S:25139ebf6c":{"line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d"},"S:257f8f1622":{"line":1,"name":"MESSAGES","path_id":"F:973aca5f3e"},"S:25a03d4ee2":{"line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2"},"S:262e039096":{"line":68,"name":"extractSection","path_id":"F:4db1101024"},"S:2681abe2e5":{"line":60,"name":"installHooks","path_id":"F:a7ce0f6452"},"S:26df582c22":{"line":57,"name":"buildRow","path_id":"F:128b647d9a"},"S:26ee7911e3":{"line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae"},"S:27005d8f20":{"line":27,"name":"buildBundle","path_id":"F:c4395c3023"},"S:276edd396a":{"line":45,"name":"postJson","path_id":"F:c72e6949b9"},"S:28578fa81a":{"line":10,"name":"Large","path_id":"F:28b7af3c53"},"S:28d1266e44":{"line":24,"name":"adapter","path_id":"F:ffe5c1269b"},"S:29574da2e9":{"line":7,"name":"scenario","path_id":"F:c7423b85cf"},"S:298b204d13":{"line":22,"name":"runPreflight","path_id":"F:cc65dd1342"},"S:299c43d83e":{"line":40,"name":"stripQuotes","path_id":"F:1575110130"},"S:29fd3ef66c":{"line":41,"name":"writeAtomic","path_id":"F:5b113a0914"},"S:2a04172292":{"line":4,"name":"HostSelected","path_id":"F:545c0ccfeb"},"S:2a28972ca4":{"line":1,"name":"MESSAGES","path_id":"F:3835919e8e"},"S:2a5511d42c":{"line":125,"name":"gitDelta","path_id":"F:a0d489df6d"},"S:2b5847c683":{"line":61,"name":"renderPrompt","path_id":"F:fd660a117b"},"S:2b6631cd33":{"line":1,"name":"MESSAGES","path_id":"F:91e24dcac0"},"S:2bba65c029":{"line":1,"name":"MESSAGES","path_id":"F:99251bc045"},"S:2bd0a26c48":{"line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb"},"S:2bd83b1706":{"line":1,"name":"MESSAGES","path_id":"F:de188c1b79"},"S:2ca5ab6d7f":{"line":18,"name":"previewText","path_id":"F:4ebf08705b"},"S:2ca7aeeeaf":{"line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342"},"S:2cd4d9571d":{"line":189,"name":"withTempFile","path_id":"F:137056535b"},"S:2cd9cbf595":{"line":4,"name":"ToastTone","path_id":"F:ab334f34df"},"S:2ce7a5bbe7":{"line":146,"name":"positional","path_id":"F:a0d489df6d"},"S:2d1eeb5346":{"line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a"},"S:2d24ebcbdf":{"line":143,"name":"renderReport","path_id":"F:2d6ef08990"},"S:2d2b3ccfa2":{"line":318,"name":"toolCompliance","path_id":"F:ab5077147a"},"S:2d4876abe2":{"line":174,"name":"readPack","path_id":"F:780c791407"},"S:2d541b3911":{"line":1,"name":"MESSAGES","path_id":"F:e6677dcd37"},"S:2db1222578":{"line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb"},"S:2df1658785":{"line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed"},"S:2e016b842d":{"line":13,"name":"fileAnchor","path_id":"F:1cf31c4792"},"S:2e1baab2ff":{"line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04"},"S:2e3ac2ba9f":{"line":8,"name":"ModelCostRow","path_id":"F:ce1173e176"},"S:2e93f745f3":{"line":17,"name":"ratchet","path_id":"F:f238d164c9"},"S:2ea6241ebd":{"line":68,"name":"writeJson","path_id":"F:4dabd020df"},"S:2ed4ecfad7":{"line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4"},"S:2eef7d840d":{"line":180,"name":"rewriteBlock","path_id":"F:22566cb46e"},"S:2f0240b93f":{"line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6"},"S:2f1892a712":{"line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9"},"S:2fb48a9b04":{"line":21,"name":"run","path_id":"F:940d5f4399"},"S:2fbd29545b":{"line":42,"name":"nestedMapChanged","path_id":"F:25e649633c"},"S:301cb496d5":{"line":72,"name":"RoleBadge","path_id":"F:35c6d59157"},"S:301d436113":{"line":80,"name":"main","path_id":"F:c72e6949b9"},"S:30e8b022de":{"line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0"},"S:30eded078f":{"line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f"},"S:31032f0509":{"line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce"},"S:310e2149b2":{"line":80,"name":"runCli","path_id":"F:cc361bd05a"},"S:312c004ac1":{"line":46,"name":"HoverCard","path_id":"F:66264a042c"},"S:328dcdf4cc":{"line":76,"name":"countRaisedQuestions","path_id":"F:851f776227"},"S:32c99a4337":{"line":18,"name":"run","path_id":"F:55b3a4e2c0"},"S:33534dd596":{"line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff"},"S:336ebe7ff5":{"line":52,"name":"run","path_id":"F:a6d2bd3021"},"S:33846c9bba":{"line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca"},"S:33d286d62d":{"line":330,"name":"runRatchet","path_id":"F:522efae76d"},"S:33dfee21e3":{"line":1,"name":"MESSAGES","path_id":"F:2715f09f24"},"S:342fb4655a":{"line":23,"name":"gate","path_id":"F:9344d335a6"},"S:3466f40801":{"line":83,"name":"buildOptions","path_id":"F:a0d489df6d"},"S:34df99c630":{"line":98,"name":"makeGitFixture","path_id":"F:18f569225a"},"S:354e31ec69":{"line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294"},"S:3575202801":{"line":57,"name":"detectProtected","path_id":"F:ae46bbab81"},"S:357942abbf":{"line":38,"name":"readItem","path_id":"F:baf7641a01"},"S:35902c8cc1":{"line":1,"name":"MESSAGES","path_id":"F:35d4a12b63"},"S:35a01a919e":{"line":45,"name":"primaryModel","path_id":"F:304ce7b89d"},"S:35ac020356":{"line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7"},"S:35e362f448":{"line":79,"name":"emit","path_id":"F:3b96b6dfed"},"S:3602dcc44c":{"line":37,"name":"cleanDoc","path_id":"F:36419aa427"},"S:3696870ce9":{"line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73"},"S:36acbff697":{"line":21,"name":"Carousel","path_id":"F:d20e4b6b91"},"S:36be7c4ac5":{"line":6,"name":"DryRun","path_id":"F:28b7af3c53"},"S:3702b2fefe":{"line":47,"name":"isAllowedImport","path_id":"F:b70824b13e"},"S:370b67baf2":{"line":90,"name":"readVersion","path_id":"F:8abf9e432a"},"S:37268eb979":{"line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff"},"S:3734794a77":{"line":38,"name":"extOf","path_id":"F:dbb9c92ca1"},"S:37693a15d4":{"line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236"},"S:37a0d721be":{"line":16,"name":"run","path_id":"F:d7d4e8d2a9"},"S:37c1996b57":{"line":10,"name":"signature","path_id":"F:3213d03b72"},"S:3800b0c645":{"line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee"},"S:380b82547c":{"line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b"},"S:383c03d511":{"line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d"},"S:38948fee1c":{"line":10,"name":"LiveApiError","path_id":"F:ec52ca3820"},"S:38b734e681":{"line":278,"name":"commitsSince","path_id":"F:fd08562f92"},"S:38e44b5fa7":{"line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c"},"S:391a920cca":{"line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0"},"S:3968554637":{"line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461"},"S:396f1000ae":{"line":1,"name":"MESSAGES","path_id":"F:a5822fdd03"},"S:397210a79e":{"line":24,"name":"pass","path_id":"F:5f7910375b"},"S:3a57c07db5":{"line":48,"name":"derivePosture","path_id":"F:128b647d9a"},"S:3ad2d564a8":{"line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5"},"S:3ad956fb93":{"line":36,"name":"configDefaults","path_id":"F:c5938c33fd"},"S:3ae3f92415":{"line":1,"name":"MESSAGES","path_id":"F:d328f97d94"},"S:3b092e9ab0":{"line":64,"name":"parseDecisions","path_id":"F:92d6903b5f"},"S:3bae21fee6":{"line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b"},"S:3c2bad87be":{"line":40,"name":"snapshotDir","path_id":"F:a0d489df6d"},"S:3c3cd672a7":{"line":11,"name":"isCyclic","path_id":"F:f51cba9beb"},"S:3cceb8dc09":{"line":96,"name":"deriveSignals","path_id":"F:e11f907cba"},"S:3d3f20848d":{"line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca"},"S:3d6f7980b3":{"line":33,"name":"proposeWork","path_id":"F:6f247eb514"},"S:3e2d44a335":{"line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb"},"S:3e43134e83":{"line":69,"name":"arm","path_id":"F:44a5987438"},"S:3e9158c80b":{"line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5"},"S:3ed1d37c7b":{"line":3,"name":"Unreachable","path_id":"F:79467a3153"},"S:3ef15e4c1b":{"line":13,"name":"redactText","path_id":"F:4b91a9f65b"},"S:3f2874e2ce":{"line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716"},"S:3f93aaa307":{"line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5"},"S:3f9e6b3a7b":{"line":104,"name":"testConnection","path_id":"F:08b7435c86"},"S:3fac1340a4":{"line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d"},"S:3fc87c5f7e":{"line":73,"name":"reviewProposal","path_id":"F:2127a8caca"},"S:3fd1032067":{"line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766"},"S:400a8c02c3":{"line":61,"name":"applyFix","path_id":"F:90e1fd2fd9"},"S:403ac351dd":{"line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236"},"S:405ee38bbe":{"line":65,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e"},"S:407ded8730":{"line":79,"name":"evaluateFixture","path_id":"F:23917c6197"},"S:409d8caf58":{"line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff"},"S:40a4170626":{"line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5"},"S:40cce153df":{"line":135,"name":"extractChange","path_id":"F:3b96b6dfed"},"S:41050d03a4":{"line":19,"name":"readIfExists","path_id":"F:2e327963ed"},"S:4118076b3e":{"line":29,"name":"pad","path_id":"F:3b382f95c0"},"S:4124b7df92":{"line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820"},"S:41443bba10":{"line":1,"name":"total","path_id":"F:7ccad64380"},"S:41514ae74b":{"line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024"},"S:41689151ff":{"line":105,"name":"parseArgs","path_id":"F:ddeb486c49"},"S:41ad75ea93":{"line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600"},"S:4214f7fa01":{"line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed"},"S:42188b3bb9":{"line":696,"name":"emitJson","path_id":"F:8a10462927"},"S:4287ee7685":{"line":1,"name":"MESSAGES","path_id":"F:40d8f235fd"},"S:4296da48b7":{"line":86,"name":"judge","path_id":"F:90cbb2cf6a"},"S:42b8608c58":{"line":92,"name":"Cell","path_id":"F:57ca5f1716"},"S:42d33f191a":{"line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133"},"S:42d4f014b5":{"line":41,"name":"corpusProblems","path_id":"F:e8676a18b7"},"S:4316722ab5":{"line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d"},"S:433f196465":{"line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d"},"S:4350272f8a":{"line":357,"name":"readRuns","path_id":"F:8a3dd6ccff"},"S:435432f041":{"line":6,"name":"CheckboxProps","path_id":"F:7054844360"},"S:4358d9c393":{"line":67,"name":"proposalsFrom","path_id":"F:09ba331878"},"S:43cc2b28a1":{"line":224,"name":"withStubRunner","path_id":"F:48355ccf4d"},"S:43f1c85009":{"line":108,"name":"renderMarkdown","path_id":"F:2e327963ed"},"S:4426823827":{"line":5,"name":"NavItem","path_id":"F:268769c4a6"},"S:442c9dff6c":{"line":5,"name":"makeGateway","path_id":"F:373a946d5c"},"S:44432e7cb0":{"line":75,"name":"runScenario","path_id":"F:94050e680d"},"S:44a852f5e1":{"line":32,"name":"readStdin","path_id":"F:c72e6949b9"},"S:44c14f3d19":{"line":135,"name":"generator","path_id":"F:4db1101024"},"S:44e7188c1d":{"line":50,"name":"hash","path_id":"F:0103cf3d56"},"S:45061132f3":{"line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7"},"S:4514b4c1f0":{"line":19,"name":"LearningsScreen","path_id":"F:757a70680a"},"S:457528354e":{"line":331,"name":"stripInlineComment","path_id":"F:8a10462927"},"S:457f8a5e17":{"line":4,"name":"MESSAGES","path_id":"F:33c4d744f3"},"S:45b2f146f0":{"line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1"},"S:45bcd8bd18":{"line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1"},"S:464c90cba5":{"line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382"},"S:46ca0706e7":{"line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5"},"S:46d884501c":{"line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70"},"S:46d90cc86e":{"line":13,"name":"Timeline","path_id":"F:9c9edea0c9"},"S:4700befa2a":{"line":16,"name":"run","path_id":"F:137056535b"},"S:4741feecf9":{"line":234,"name":"buildCost","path_id":"F:8a3dd6ccff"},"S:474ceb514b":{"line":289,"name":"readCapped","path_id":"F:522efae76d"},"S:47c5321a5f":{"line":264,"name":"listFiles","path_id":"F:522efae76d"},"S:47cde5f81f":{"line":6,"name":"DecisionStatus","path_id":"F:583edef643"},"S:48102a3f37":{"line":37,"name":"parseFraction","path_id":"F:af6de66499"},"S:48356203e2":{"line":13,"name":"repo","path_id":"F:4637e1fecb"},"S:485d7c5e96":{"line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed"},"S:489fa8bc67":{"line":14,"name":"HoverCardSide","path_id":"F:66264a042c"},"S:49158af5a6":{"line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27"},"S:49ad410798":{"line":140,"name":"replaceFirst","path_id":"F:522efae76d"},"S:49f97badd7":{"line":12,"name":"WorkState","path_id":"F:0a85f3b8e5"},"S:4a0171ecb5":{"line":295,"name":"PanelState","path_id":"F:0a85f3b8e5"},"S:4a08c48993":{"line":54,"name":"fingerprint","path_id":"F:0cacf66a3b"},"S:4a7db1c0d0":{"line":45,"name":"emptyDraft","path_id":"F:9b3f18856e"},"S:4abcc2a45b":{"line":21,"name":"redactionErrors","path_id":"F:65193a9799"},"S:4adffc8b06":{"line":27,"name":"seedJsTest","path_id":"F:6da7bd8294"},"S:4afb276004":{"line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a"},"S:4b38793395":{"line":8,"name":"scenario","path_id":"F:34ca4e55d1"},"S:4b391a8eee":{"line":34,"name":"makeGitFixture","path_id":"F:580d11b514"},"S:4b76f865fa":{"line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49"},"S:4b7a72e608":{"line":4,"name":"Role","path_id":"F:35c6d59157"},"S:4bacff1244":{"line":15,"name":"fileExists","path_id":"F:2e327963ed"},"S:4bc9723575":{"line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70"},"S:4bd4d449f1":{"line":27,"name":"fail","path_id":"F:5f7910375b"},"S:4bea381dfd":{"line":33,"name":"MESSAGES","path_id":"F:05bffc70e9"},"S:4bfc88b9a8":{"line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c"},"S:4bfea4387c":{"line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1"},"S:4c9526df5f":{"line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04"},"S:4cd48cf92e":{"line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff"},"S:4d0bae812e":{"line":91,"name":"round","path_id":"F:015261eab0"},"S:4d35869e55":{"line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3"},"S:4d36cf3d1c":{"line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04"},"S:4d3ac94b7c":{"line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927"},"S:4df7a92e8e":{"line":15,"name":"registerAdapter","path_id":"F:2554ddd30c"},"S:4e5c54ea09":{"line":369,"name":"runCategory","path_id":"F:522efae76d"},"S:4eb76c8a83":{"line":9,"name":"Set","path_id":"F:6bef3f93ab"},"S:4eb7e87341":{"line":5,"name":"NumberFieldProps","path_id":"F:db651caf76"},"S:4ed98bc995":{"line":18,"name":"baseCfg","path_id":"F:ce41983a53"},"S:4ee042ed06":{"line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56"},"S:4f138d4cbe":{"line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49"},"S:4f19353e16":{"line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce"},"S:4f265e8008":{"line":8,"name":"Approved","path_id":"F:13d31b33ea"},"S:4f43d4e206":{"line":489,"name":"runCycle","path_id":"F:ddeb486c49"},"S:4fb0095605":{"line":22,"name":"checkRegistry","path_id":"F:b16afebae9"},"S:500f4c1cd3":{"line":30,"name":"cleanSignature","path_id":"F:36419aa427"},"S:5092562c12":{"line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86"},"S:50b0879e24":{"line":28,"name":"clamp","path_id":"F:db651caf76"},"S:5115891196":{"line":8,"name":"Coverage","path_id":"F:a0abaf6a25"},"S:5154763a93":{"line":60,"name":"AppShell","path_id":"F:268769c4a6"},"S:517ace9ff8":{"line":17,"name":"tmp","path_id":"F:940d5f4399"},"S:521fca28ad":{"line":344,"name":"toolSnapshot","path_id":"F:ab5077147a"},"S:522a86b0ed":{"line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da"},"S:524aeb5cd6":{"line":23,"name":"Detail","path_id":"F:f0fbd8716f"},"S:52826c5034":{"line":768,"name":"Component","path_id":"F:aef9cf1e27"},"S:52913852e3":{"line":22,"name":"validate","path_id":"F:34cb2b6c48"},"S:52be3c746f":{"line":32,"name":"git","path_id":"F:af6de66499"},"S:53158831f9":{"line":135,"name":"check","path_id":"F:780c791407"},"S:531cf59eb3":{"line":86,"name":"loadIgnore","path_id":"F:cb66095cb4"},"S:5327d3b72c":{"line":223,"name":"main","path_id":"F:aea3c05bca"},"S:5353762af1":{"line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d"},"S:537ea4dfe0":{"line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4"},"S:53b9eda0f8":{"line":90,"name":"run","path_id":"F:f90930c3c3"},"S:542af83b15":{"line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4"},"S:544b9ce58e":{"line":24,"name":"riskTiers","path_id":"F:c64c042051"},"S:5465e6de42":{"line":11,"name":"workStates","path_id":"F:c64c042051"},"S:54a007aa57":{"line":49,"name":"relativeImportsOf","path_id":"F:fc21812307"},"S:54d2db3f99":{"line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861"},"S:551c7477f2":{"line":16,"name":"HoverCardSource","path_id":"F:66264a042c"},"S:555c013724":{"line":31,"name":"Card","path_id":"F:40eb542a82"},"S:556ab0a4ef":{"line":34,"name":"recordPath","path_id":"F:5b113a0914"},"S:559455c526":{"line":25,"name":"loadPanelState","path_id":"F:95d4304133"},"S:55a57d9fd6":{"line":168,"name":"toolRatchet","path_id":"F:ab5077147a"},"S:55b15c0abb":{"line":9,"name":"short","path_id":"F:1cf31c4792"},"S:55eb1af9ca":{"line":32,"name":"loadLexicon","path_id":"F:ca0833ac73"},"S:55ee648216":{"line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e"},"S:55fc57e799":{"line":17,"name":"readIfExists","path_id":"F:8abf9e432a"},"S:5607ca9508":{"line":116,"name":"main","path_id":"F:94050e680d"},"S:562052e079":{"line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f"},"S:568ac62670":{"line":124,"name":"parseArgs","path_id":"F:2d6ef08990"},"S:56a4782fc2":{"line":77,"name":"matchesPattern","path_id":"F:9427d264e6"},"S:5708b6bd2b":{"line":4,"name":"PendingApproval","path_id":"F:13d31b33ea"},"S:574c990b3f":{"line":59,"name":"scoreProposal","path_id":"F:e11f907cba"},"S:575af01d8c":{"line":110,"name":"checkTarget","path_id":"F:fd08562f92"},"S:577a1daeb3":{"line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5"},"S:580f464240":{"line":23,"name":"runStatus","path_id":"F:60548316f5"},"S:581a43b877":{"line":26,"name":"parseJsonLine","path_id":"F:61c2a29876"},"S:5835c8b608":{"line":69,"name":"resolveArming","path_id":"F:f90930c3c3"},"S:583c8b60d3":{"line":34,"name":"stateVar","path_id":"F:c64c042051"},"S:586705c7a0":{"line":5,"name":"CardTone","path_id":"F:40eb542a82"},"S:5919844321":{"line":24,"name":"makeEvent","path_id":"F:fadcf390da"},"S:59617d720e":{"line":5,"name":"estimateTokens","path_id":"F:7944059823"},"S:5962011a99":{"line":41,"name":"summarize","path_id":"F:3b382f95c0"},"S:5967648d07":{"line":116,"name":"isDocumented","path_id":"F:3b382f95c0"},"S:59807c1a98":{"line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70"},"S:59b9039619":{"line":28,"name":"loadCache","path_id":"F:119e3c0fce"},"S:59ba63dbab":{"line":34,"name":"readConfig","path_id":"F:a0d489df6d"},"S:59cd81d0e0":{"line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1"},"S:59dcca7090":{"line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b"},"S:59f6d857da":{"line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7"},"S:5a2d3d98ce":{"line":6,"name":"ModalSize","path_id":"F:63351e350b"},"S:5a49db2766":{"line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5"},"S:5a6c3aef24":{"line":7,"name":"OrderService","path_id":"F:1ecd18c4b9"},"S:5a7bfc5a1b":{"line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2"},"S:5ad0c942a1":{"line":117,"name":"findCycle","path_id":"F:015261eab0"},"S:5aed523637":{"line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d"},"S:5afb2ca954":{"line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a"},"S:5aff27256c":{"line":109,"name":"schema","path_id":"F:780c791407"},"S:5b0828ff4b":{"line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb"},"S:5b0e153cfb":{"line":424,"name":"pruneLearning","path_id":"F:22566cb46e"},"S:5b2eae49a8":{"line":62,"name":"sep","path_id":"F:aa77f227a6"},"S:5b8a5996df":{"line":70,"name":"fail","path_id":"F:780c791407"},"S:5bac9ae6d5":{"line":151,"name":"formatScalarForYaml","path_id":"F:1575110130"},"S:5bad105043":{"line":3,"name":"Reading","path_id":"F:eecc78e7e8"},"S:5c69e2b109":{"line":45,"name":"DecisionCard","path_id":"F:583edef643"},"S:5c7ed4ab16":{"line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2"},"S:5cc853b5b1":{"line":50,"name":"loadScenarios","path_id":"F:94050e680d"},"S:5d118d4b60":{"line":3,"name":"Row","path_id":"F:8972d37045"},"S:5d58defc25":{"line":14,"name":"tmpRepo","path_id":"F:60548316f5"},"S:5d9d040e28":{"line":30,"name":"Modal","path_id":"F:63351e350b"},"S:5daa909048":{"line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602"},"S:5e08a11ce4":{"line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df"},"S:5e3d6fa91f":{"line":20,"name":"run","path_id":"F:54a3c626d9"},"S:5ea90f5e50":{"line":3,"name":"CheckoutService","path_id":"F:54c6928de9"},"S:5eb8ce722f":{"line":31,"name":"Toast","path_id":"F:ab334f34df"},"S:5eba6876fa":{"line":36,"name":"LeaseTable","path_id":"F:956332d4b5"},"S:5ed8ee5c0a":{"line":23,"name":"HoverCardProps","path_id":"F:66264a042c"},"S:5ef4400e5e":{"line":169,"name":"generatorLine","path_id":"F:780c791407"},"S:5ef7e9a80c":{"line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990"},"S:5f317ed26b":{"line":127,"name":"capabilities","path_id":"F:4db1101024"},"S:5f8c0130c3":{"line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b"},"S:5fe0061772":{"line":4,"name":"Maker","path_id":"F:7008a20b1c"},"S:60070857ec":{"line":9,"name":"IconName","path_id":"F:deab644e60"},"S:602e030d27":{"line":297,"name":"main","path_id":"F:1e5ef6ba70"},"S:6044b46e0f":{"line":100,"name":"readMessages","path_id":"F:8a3dd6ccff"},"S:6122b96d0b":{"line":11,"name":"runGateCapped","path_id":"F:b014028f57"},"S:6140d7ae56":{"line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70"},"S:61579a6235":{"line":21,"name":"CostSummary","path_id":"F:ce1173e176"},"S:618d055a7c":{"line":5,"name":"clean","path_id":"F:3213d03b72"},"S:61e677ae40":{"line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5"},"S:61ec9209fc":{"line":22,"name":"matchSymbol","path_id":"F:36419aa427"},"S:62210684b4":{"line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86"},"S:62d1cf1f06":{"line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7"},"S:62f42e9591":{"line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0"},"S:634b7012be":{"line":17,"name":"makeAtt","path_id":"F:571aa2f3ae"},"S:63613c3a63":{"line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792"},"S:636b7af50c":{"line":10,"name":"LeaseRow","path_id":"F:956332d4b5"},"S:639160c471":{"line":186,"name":"buildGates","path_id":"F:8a3dd6ccff"},"S:641774928a":{"line":30,"name":"run","path_id":"F:9cbe9238f8"},"S:6425f5a6c7":{"line":10,"name":"WithLeases","path_id":"F:31658eff0b"},"S:64376e38db":{"line":6,"name":"SelectOption","path_id":"F:819f72edf6"},"S:644e7adeef":{"line":56,"name":"tokens","path_id":"F:c64c042051"},"S:6499fa18ee":{"line":264,"name":"toolStatus","path_id":"F:ab5077147a"},"S:64de4c98b6":{"line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0"},"S:64ebce69bf":{"line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a"},"S:65004e9f74":{"line":215,"name":"loadCfg","path_id":"F:aea3c05bca"},"S:655cf75cf0":{"line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9"},"S:655f25fbed":{"line":33,"name":"Sparkline","path_id":"F:c0e80ca327"},"S:6584162247":{"line":97,"name":"nowIso","path_id":"F:a0d489df6d"},"S:65d6e9b42e":{"line":112,"name":"dedupeImports","path_id":"F:36419aa427"},"S:6605365375":{"line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5"},"S:6647a4e550":{"line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92"},"S:66ac4b8d64":{"line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1"},"S:66b4da1ed7":{"line":6,"name":"ModelCostClass","path_id":"F:ce1173e176"},"S:66bb927095":{"line":11,"name":"run","path_id":"F:edf42fb1af"},"S:66cd7b74c6":{"line":5,"name":"SliderProps","path_id":"F:81c495717c"},"S:670e55d75a":{"line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce"},"S:67852685cf":{"line":4,"name":"Info","path_id":"F:7832db450f"},"S:6797390adc":{"line":18,"name":"initialsFor","path_id":"F:f942e88a8f"},"S:680cec9dbd":{"line":64,"name":"clamp","path_id":"F:9a3e8ed7d2"},"S:68308360b1":{"line":166,"name":"main","path_id":"F:a0d489df6d"},"S:6831eb78e0":{"line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0"},"S:686192f35d":{"line":97,"name":"toLinePath","path_id":"F:c0e80ca327"},"S:689125598d":{"line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249"},"S:693b8fedee":{"line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49"},"S:6981533501":{"line":24,"name":"Input","path_id":"F:763efdd51c"},"S:699f2f623f":{"line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820"},"S:69db4ad7cc":{"line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70"},"S:69ef79b6f3":{"line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820"},"S:69f3537d3b":{"line":13,"name":"tmp","path_id":"F:8a3433b070"},"S:6a4d8aa30d":{"line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53"},"S:6a7737bb57":{"line":66,"name":"extractTags","path_id":"F:1a19f02364"},"S:6b0614bdf6":{"line":127,"name":"claim","path_id":"F:5b113a0914"},"S:6b1894b02c":{"line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd"},"S:6b5288f35f":{"line":18,"name":"coreLevers","path_id":"F:87c30bdb4c"},"S:6bc87187a8":{"line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5"},"S:6c21b6660b":{"line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c"},"S:6c21f00789":{"line":7,"name":"scenario","path_id":"F:5376e86470"},"S:6c4ca00b53":{"line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba"},"S:6c778494b3":{"line":7,"name":"relativeTime","path_id":"F:86838d35ac"},"S:6cb93e992c":{"line":45,"name":"formatUsd","path_id":"F:86838d35ac"},"S:6cbed7ff26":{"line":13,"name":"LearningSummary","path_id":"F:1d03291691"},"S:6d2334f815":{"line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b"},"S:6dcad3cdf1":{"line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5"},"S:6dcbe228c5":{"line":75,"name":"scaffold","path_id":"F:5e450ff82c"},"S:6dd199eea1":{"line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9"},"S:6dde857e83":{"line":104,"name":"listMessages","path_id":"F:05bffc70e9"},"S:6e1dfe647a":{"line":29,"name":"DecisionCardProps","path_id":"F:583edef643"},"S:6e6111c7dd":{"line":70,"name":"runPipeline","path_id":"F:edb11415f0"},"S:6ee06ecd24":{"line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7"},"S:6ee308cae0":{"line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4"},"S:6ef3b2f2e5":{"line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5"},"S:6fab505fa4":{"line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9"},"S:700c80e34d":{"line":1,"name":"MESSAGES","path_id":"F:b502a0fe75"},"S:700d752004":{"line":11,"name":"cli","path_id":"F:9bb94e1b40"},"S:703e56c471":{"line":45,"name":"scratchRepo","path_id":"F:d0da1cab80"},"S:7048bb8a3d":{"line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da"},"S:704fff1c43":{"line":15,"name":"tmp","path_id":"F:9f6dd5e5a3"},"S:705c285e25":{"line":112,"name":"chatCompletion","path_id":"F:8d2cb93236"},"S:7070a0d16e":{"line":1,"name":"MESSAGES","path_id":"F:da9133a29d"},"S:707883a645":{"line":14,"name":"DecisionSummary","path_id":"F:583edef643"},"S:7078ce1661":{"line":40,"name":"today","path_id":"F:09ba331878"},"S:70c4ff437c":{"line":80,"name":"adapter","path_id":"F:36419aa427"},"S:712330cf3e":{"line":6,"name":"parseStagedLine","path_id":"F:54df44aadd"},"S:725b07739e":{"line":22,"name":"WorkState","path_id":"F:c64c042051"},"S:72886ee448":{"line":66,"name":"formatMessage","path_id":"F:e406ceab72"},"S:72a5c214ac":{"line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5"},"S:72cb0b7406":{"line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0"},"S:72d4f657d5":{"line":91,"name":"setup","path_id":"F:3de9042953"},"S:733f5fd096":{"line":5,"name":"HelpHintProps","path_id":"F:d5b496b125"},"S:735c642c3a":{"line":46,"name":"collectNearMisses","path_id":"F:09ba331878"},"S:7369c62b84":{"line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423"},"S:7379962c7e":{"line":1,"name":"MESSAGES","path_id":"F:4d08d5472f"},"S:73a3da9f65":{"line":46,"name":"ActivationLadder","path_id":"F:14edab923f"},"S:73cbfa5a7d":{"line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca"},"S:73e4b1bbf9":{"line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba"},"S:73feb65706":{"line":4,"name":"OnLabel","path_id":"F:dca643f34b"},"S:744cc47208":{"line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281"},"S:745c98231d":{"line":338,"name":"main","path_id":"F:3b96b6dfed"},"S:749446c25e":{"line":8,"name":"armingModes","path_id":"F:c64c042051"},"S:74b454ee62":{"line":56,"name":"interpolate","path_id":"F:e406ceab72"},"S:74bea9ecdf":{"line":59,"name":"criterion","path_id":"F:2e327963ed"},"S:74e8f23a0b":{"line":4,"name":"MergeCap","path_id":"F:84a5c32a4c"},"S:753ca853b2":{"line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1"},"S:75c48595da":{"line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97"},"S:76171943e3":{"line":7,"name":"canonicalize","path_id":"F:245efb551c"},"S:7619cf060d":{"line":133,"name":"escapeHtml","path_id":"F:128b647d9a"},"S:762b3eaf4a":{"line":17,"name":"Models","path_id":"F:1aa7cf650d"},"S:765b4574da":{"line":34,"name":"mcpCall","path_id":"F:9cbe9238f8"},"S:7698d9efeb":{"line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3"},"S:76d7b21daf":{"line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364"},"S:76dbb025c9":{"line":116,"name":"removeFirstMatch","path_id":"F:522efae76d"},"S:77031e48f4":{"line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff"},"S:77054cfc82":{"line":23,"name":"makeItem","path_id":"F:baf7641a01"},"S:7762c6d861":{"line":21,"name":"cachePath","path_id":"F:119e3c0fce"},"S:77a4165d99":{"line":12,"name":"TooltipSide","path_id":"F:8a9aff1529"},"S:7803dea04b":{"line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e"},"S:781c2d6b40":{"line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1"},"S:781c4112a2":{"line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c"},"S:783d91f2ed":{"line":319,"name":"extractSection","path_id":"F:8a3dd6ccff"},"S:78dd5bd63d":{"line":52,"name":"sha256Hex","path_id":"F:4db1101024"},"S:78e9af551d":{"line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee"},"S:7902cd38d0":{"line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8"},"S:7910b636e8":{"line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2"},"S:79144070a6":{"line":55,"name":"centrality","path_id":"F:015261eab0"},"S:792d313360":{"line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281"},"S:7934857ce3":{"line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5"},"S:796295afbe":{"line":6,"name":"GateStatus","path_id":"F:8c6234a8cb"},"S:79676d74df":{"line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee"},"S:7989466d34":{"line":59,"name":"useConfirm","path_id":"F:3c479cac6e"},"S:79997ba94d":{"line":1,"name":"MESSAGES","path_id":"F:09ea014068"},"S:79a288a97f":{"line":16,"name":"runTick","path_id":"F:baf7641a01"},"S:79b048583f":{"line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4"},"S:7a05eaea5a":{"line":34,"name":"auditCoverage","path_id":"F:1a19f02364"},"S:7a464a2d86":{"line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa"},"S:7a68bb8c0c":{"line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820"},"S:7ad858b9a2":{"line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04"},"S:7b7ddcaa20":{"line":79,"name":"segments","path_id":"F:9a3e8ed7d2"},"S:7b87285e6c":{"line":110,"name":"readTextSafe","path_id":"F:7232ada2da"},"S:7b984e047b":{"line":18,"name":"finalizeState","path_id":"F:95d4304133"},"S:7bc320f853":{"line":27,"name":"assertValid","path_id":"F:5b113a0914"},"S:7bcf8115de":{"line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a"},"S:7bdca9af48":{"line":30,"name":"Tooltip","path_id":"F:8a9aff1529"},"S:7bfb1bf049":{"line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b"},"S:7c0d389b98":{"line":17,"name":"runRatchet","path_id":"F:cede5f9fa2"},"S:7c3651a5ba":{"line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4"},"S:7c44412e8a":{"line":4,"name":"WithHeader","path_id":"F:3d505706cd"},"S:7c5c3a31a4":{"line":41,"name":"compilePattern","path_id":"F:cb66095cb4"},"S:7c6ba2a644":{"line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5"},"S:7c716c856e":{"line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81"},"S:7c9eb8f22d":{"line":110,"name":"runScript","path_id":"F:48355ccf4d"},"S:7cd45cbc03":{"line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e"},"S:7cd6925ad6":{"line":19,"name":"runScript","path_id":"F:564b053598"},"S:7d253ea6b0":{"line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed"},"S:7d5af2fca1":{"line":22,"name":"Staged","path_id":"F:250c8a0d4a"},"S:7d89fd8d95":{"line":13,"name":"run","path_id":"F:5994385869"},"S:7d8d2691e2":{"line":4,"name":"Tiers","path_id":"F:fe5ec971f8"},"S:7ed39c68da":{"line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6"},"S:7fb0e9b59c":{"line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514"},"S:7fe7ee7f43":{"line":94,"name":"dedupe","path_id":"F:ae46bbab81"},"S:7ff08ea7a1":{"line":5,"name":"MESSAGES","path_id":"F:f41378fed0"},"S:8041c36b7b":{"line":18,"name":"noThrow","path_id":"F:8fe56e5618"},"S:8097fe47fc":{"line":40,"name":"readBody","path_id":"F:08b7435c86"},"S:80ded7ba90":{"line":542,"name":"renderHuman","path_id":"F:7232ada2da"},"S:80e9a1f555":{"line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee"},"S:813f68335e":{"line":8,"name":"Armed","path_id":"F:28b7af3c53"},"S:819d9d37ff":{"line":12,"name":"call","path_id":"F:ec52ca3820"},"S:81bb2e8cc4":{"line":39,"name":"clamp","path_id":"F:e11f907cba"},"S:81c9c1291a":{"line":35,"name":"interpolate","path_id":"F:05bffc70e9"},"S:8252cf2ba8":{"line":52,"name":"warn","path_id":"F:2d4c555ba1"},"S:82727ee8e7":{"line":35,"name":"collectImports","path_id":"F:3213d03b72"},"S:8282a0b575":{"line":85,"name":"formatMessage","path_id":"F:05bffc70e9"},"S:8289602f81":{"line":28,"name":"modeVar","path_id":"F:c64c042051"},"S:837b5a8d1e":{"line":38,"name":"runCli","path_id":"F:b16afebae9"},"S:83ad315769":{"line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3"},"S:83b3a2ab69":{"line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49"},"S:83deb081d9":{"line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9"},"S:84220fc054":{"line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e"},"S:842e875c5a":{"line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b"},"S:84b00e90de":{"line":28,"name":"Toggle","path_id":"F:214cc0a5f4"},"S:85083e2f79":{"line":22,"name":"run","path_id":"F:e359adb110"},"S:852d083fcb":{"line":97,"name":"listQueued","path_id":"F:5b113a0914"},"S:856f3a5bea":{"line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618"},"S:8579f519b1":{"line":25,"name":"scaffold","path_id":"F:de5ebbf586"},"S:857ab7696f":{"line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa"},"S:85c852fd1a":{"line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca"},"S:8641765bb2":{"line":34,"name":"formatDuration","path_id":"F:86838d35ac"},"S:8660e770ea":{"line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da"},"S:867db3037b":{"line":343,"name":"resolveGate","path_id":"F:522efae76d"},"S:86cb290127":{"line":25,"name":"Subject","path_id":"F:0a85f3b8e5"},"S:87013bd4c3":{"line":75,"name":"loadInputs","path_id":"F:780c791407"},"S:870a14c796":{"line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48"},"S:8735f37dad":{"line":288,"name":"adoptCmd","path_id":"F:780c791407"},"S:8761033dfb":{"line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed"},"S:87c8d03eb8":{"line":119,"name":"dirsFromCodeowners","path_id":"F:4096620673"},"S:87ca9c146a":{"line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa"},"S:87ceb91d57":{"line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76"},"S:87fa79bea3":{"line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d"},"S:8822b8498d":{"line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0"},"S:882efb23a5":{"line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0"},"S:88426a3883":{"line":12,"name":"looksLikeDiff","path_id":"F:872221b1da"},"S:88bc43a62b":{"line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227"},"S:88bd705d3f":{"line":64,"name":"badgeJson","path_id":"F:a0d489df6d"},"S:89065c6f4b":{"line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2"},"S:890a9e6691":{"line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1"},"S:890ccb5d6b":{"line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f"},"S:89566a4918":{"line":39,"name":"tierVar","path_id":"F:c64c042051"},"S:895b1937bd":{"line":61,"name":"readConfig","path_id":"F:8a3dd6ccff"},"S:8990e6571f":{"line":118,"name":"parseFlatYaml","path_id":"F:1575110130"},"S:89e92655dd":{"line":57,"name":"normalizeLF","path_id":"F:8a10462927"},"S:8a6e48a119":{"line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da"},"S:8a971e3c54":{"line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b"},"S:8a9e6199b3":{"line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce"},"S:8af9c33a76":{"line":13,"name":"SelectProps","path_id":"F:819f72edf6"},"S:8b67ef3e8b":{"line":266,"name":"workItemFile","path_id":"F:22566cb46e"},"S:8b7542071f":{"line":1,"name":"MESSAGES","path_id":"F:6a86908a3e"},"S:8b9971d92a":{"line":30,"name":"LearningCardProps","path_id":"F:1d03291691"},"S:8bff005013":{"line":16,"name":"runReport","path_id":"F:fadcf390da"},"S:8c2cd9c54f":{"line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca"},"S:8c65a8b2a2":{"line":15,"name":"ActiveWork","path_id":"F:e5e519f441"},"S:8c6ccd3e8b":{"line":64,"name":"listTemplate","path_id":"F:5e450ff82c"},"S:8c83339acb":{"line":25,"name":"IconButton","path_id":"F:a8cfe45d27"},"S:8cd25e6f09":{"line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5"},"S:8cf2204c43":{"line":36,"name":"CostPanelProps","path_id":"F:ce1173e176"},"S:8d10c3ed6e":{"line":13,"name":"makeOrderService","path_id":"F:52caf3b287"},"S:8d131c2429":{"line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d"},"S:8d1ca74a54":{"line":29,"name":"leaseHolder","path_id":"F:d135cffeaa"},"S:8d30c800e7":{"line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1"},"S:8d5d2455bf":{"line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72"},"S:8da618623d":{"line":18,"name":"headSha","path_id":"F:1bc6d1449f"},"S:8dfe0cf637":{"line":27,"name":"ProgressMeter","path_id":"F:9deac13db0"},"S:8e42d127b7":{"line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d"},"S:8e586c7c13":{"line":60,"name":"commandOnPath","path_id":"F:94050e680d"},"S:8e94f927e1":{"line":64,"name":"mapToCriteria","path_id":"F:2e327963ed"},"S:8ec4bd5dec":{"line":25,"name":"signPacket","path_id":"F:7b3e38c9a6"},"S:8f1da92228":{"line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed"},"S:8f6d716f36":{"line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49"},"S:8f93f4689a":{"line":60,"name":"armState","path_id":"F:1e5ef6ba70"},"S:8fe737eaa0":{"line":1,"name":"MESSAGES","path_id":"F:964f89b6cc"},"S:90b2cf611f":{"line":255,"name":"diffPosture","path_id":"F:780c791407"},"S:90b86b1f26":{"line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227"},"S:90f1a56d4e":{"line":180,"name":"hostState","path_id":"F:7d236c9aa6"},"S:91108693ba":{"line":1,"name":"MESSAGES","path_id":"F:d8e37c4449"},"S:914d5cd317":{"line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49"},"S:91c42b4f27":{"line":23,"name":"read","path_id":"F:4096620673"},"S:9249714b12":{"line":104,"name":"main","path_id":"F:f90930c3c3"},"S:928743a069":{"line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f"},"S:9287ce102a":{"line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff"},"S:9299cd9a70":{"line":31,"name":"matches","path_id":"F:c9493b5275"},"S:92bb85bdff":{"line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820"},"S:934c97a052":{"line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da"},"S:9382da6a24":{"line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee"},"S:93ab3c1c15":{"line":8,"name":"Checker","path_id":"F:7008a20b1c"},"S:93d0a78f18":{"line":65,"name":"changedPaths","path_id":"F:119e3c0fce"},"S:93e0292f30":{"line":12,"name":"Protected","path_id":"F:13d31b33ea"},"S:93fa315ac7":{"line":48,"name":"fail","path_id":"F:2d4c555ba1"},"S:94383b0aef":{"line":3,"name":"RefundResult","path_id":"F:93f0f5d3de"},"S:944e1f3b0b":{"line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea"},"S:949f988c9e":{"line":10,"name":"makeDb","path_id":"F:044b762a79"},"S:950b7153af":{"line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c"},"S:9554538925":{"line":196,"name":"readPRContext","path_id":"F:92d6903b5f"},"S:95871faa22":{"line":75,"name":"formatNumber","path_id":"F:9deac13db0"},"S:9598b17b9e":{"line":14,"name":"AutoMerge","path_id":"F:a0068c8817"},"S:959be959f7":{"line":134,"name":"planCycle","path_id":"F:ddeb486c49"},"S:95e22729ee":{"line":52,"name":"sleep","path_id":"F:cdbe769ed3"},"S:95e56b0a9c":{"line":27,"name":"Remote","path_id":"F:c63a71fb57"},"S:969658a48c":{"line":91,"name":"sleep","path_id":"F:8d2cb93236"},"S:96b040bf38":{"line":76,"name":"enqueue","path_id":"F:5b113a0914"},"S:96c461f8cd":{"line":6,"name":"Success","path_id":"F:7832db450f"},"S:96e9e4a020":{"line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca"},"S:96ffd586d6":{"line":19,"name":"tmp","path_id":"F:6da7bd8294"},"S:974654287c":{"line":304,"name":"count","path_id":"F:8a10462927"},"S:979cd75d0e":{"line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444"},"S:97a7516354":{"line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3"},"S:97bc3f0eb4":{"line":22,"name":"deriveArming","path_id":"F:0da05a2a05"},"S:980a6a0449":{"line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d"},"S:982b9fa62d":{"line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3"},"S:98ca1b6552":{"line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d"},"S:98d9caecec":{"line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0"},"S:996743005b":{"line":29,"name":"flagValue","path_id":"F:a0d489df6d"},"S:99ae98a428":{"line":71,"name":"walkMd","path_id":"F:fd08562f92"},"S:99c574f83d":{"line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3"},"S:9ab63d4bb2":{"line":83,"name":"parseVerdict","path_id":"F:2d6ef08990"},"S:9b166b011e":{"line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f"},"S:9b40c124ce":{"line":17,"name":"baseCfg","path_id":"F:093689bb8e"},"S:9b986c2d8a":{"line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49"},"S:9bc07de53c":{"line":181,"name":"GateVM","path_id":"F:0a85f3b8e5"},"S:9bcfb77bfa":{"line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa"},"S:9c4deaa396":{"line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8"},"S:9cda312f51":{"line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca"},"S:9d42aeefd9":{"line":105,"name":"gateGraphErrors","path_id":"F:fc21812307"},"S:9dee57c7c2":{"line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f"},"S:9e9207d834":{"line":67,"name":"detectInstructions","path_id":"F:ae46bbab81"},"S:9ec4198171":{"line":93,"name":"collectNodes","path_id":"F:f51cba9beb"},"S:9ef12b47d5":{"line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b"},"S:9f59110fda":{"line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49"},"S:9f7fa8d585":{"line":10,"name":"packetContent","path_id":"F:12c7a4e461"},"S:9f9c07db7d":{"line":10,"name":"Model","path_id":"F:08577063d4"},"S:9f9ed94a62":{"line":42,"name":"Table","path_id":"F:a402d2f9ed"},"S:a06feb4e68":{"line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f"},"S:a07487517b":{"line":25,"name":"getAdapter","path_id":"F:2554ddd30c"},"S:a0db477c6e":{"line":90,"name":"summarize","path_id":"F:2e327963ed"},"S:a0ea4d9d0f":{"line":18,"name":"computePacketId","path_id":"F:12c7a4e461"},"S:a0f5484b98":{"line":77,"name":"IconProps","path_id":"F:deab644e60"},"S:a10a756308":{"line":59,"name":"sendJson","path_id":"F:08b7435c86"},"S:a1107105c3":{"line":26,"name":"tmp","path_id":"F:9cbe9238f8"},"S:a1828ef829":{"line":59,"name":"main","path_id":"F:8bb1b57470"},"S:a1cc5660fe":{"line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca"},"S:a1d4334d94":{"line":44,"name":"App","path_id":"F:113387361d"},"S:a26ee6eefd":{"line":44,"name":"workStateLabels","path_id":"F:c64c042051"},"S:a272c887e3":{"line":82,"name":"toPoints","path_id":"F:c0e80ca327"},"S:a2d5fcb920":{"line":13,"name":"GatesScreen","path_id":"F:304fa8ef33"},"S:a2d9480f78":{"line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5"},"S:a2df9a5c24":{"line":23,"name":"Resolved","path_id":"F:3ce0fd77eb"},"S:a2fef04067":{"line":4,"name":"Budget","path_id":"F:1f40b6eb6e"},"S:a320bea4da":{"line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca"},"S:a337ae8f0b":{"line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5"},"S:a34306cc67":{"line":61,"name":"getDiff","path_id":"F:8a10462927"},"S:a364864213":{"line":53,"name":"listRecords","path_id":"F:5b113a0914"},"S:a3bf9f1833":{"line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b"},"S:a3ca73d34c":{"line":6,"name":"LearningStatus","path_id":"F:1d03291691"},"S:a3cae87964":{"line":109,"name":"makePlan","path_id":"F:18f569225a"},"S:a3fb13b441":{"line":4,"name":"Tones","path_id":"F:10e76cfcd3"},"S:a4155f5067":{"line":16,"name":"AppShellProps","path_id":"F:268769c4a6"},"S:a48d9e0b16":{"line":13,"name":"budgetTier","path_id":"F:7944059823"},"S:a4a9a79fbe":{"line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5"},"S:a4b6be1d49":{"line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820"},"S:a4c389d72a":{"line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927"},"S:a4d0ce8fea":{"line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a"},"S:a4e623c70b":{"line":354,"name":"updateWorkItem","path_id":"F:22566cb46e"},"S:a4e7d71500":{"line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3"},"S:a50812babf":{"line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa"},"S:a529342ccb":{"line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4"},"S:a57f8c1bdc":{"line":39,"name":"otherLines","path_id":"F:8b2f3dbcba"},"S:a5baaff840":{"line":12,"name":"modules","path_id":"F:2a74ae3f05"},"S:a63cef8ef8":{"line":4,"name":"Armed","path_id":"F:3319e5c923"},"S:a657233cd5":{"line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2"},"S:a6ff0bb6d7":{"line":28,"name":"slugifyId","path_id":"F:ac11b5379f"},"S:a716bbdaa8":{"line":33,"name":"reaches","path_id":"F:8b8d3c46b3"},"S:a75126f856":{"line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49"},"S:a76a61b560":{"line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024"},"S:a79dad6e97":{"line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9"},"S:a8971aba2c":{"line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff"},"S:a8a643fda8":{"line":55,"name":"validatePacket","path_id":"F:65193a9799"},"S:a8f75707be":{"line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d"},"S:a8fe6446c0":{"line":17,"name":"headSha","path_id":"F:92dde817ee"},"S:a91334a377":{"line":32,"name":"Slider","path_id":"F:81c495717c"},"S:a92333a9ea":{"line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024"},"S:a931ad2e62":{"line":46,"name":"resolvePromptText","path_id":"F:23917c6197"},"S:a9b3acb352":{"line":16,"name":"writeRunLog","path_id":"F:3b382f95c0"},"S:a9f138bd93":{"line":10,"name":"signature","path_id":"F:ffe5c1269b"},"S:aa00911a72":{"line":25,"name":"readEvents","path_id":"F:fc5d887ff6"},"S:aa4de9995b":{"line":4,"name":"Trends","path_id":"F:ca13fe2a5b"},"S:aa8f9a7b3d":{"line":122,"name":"captureSegments","path_id":"F:22566cb46e"},"S:aaa1eac555":{"line":47,"name":"adapter","path_id":"F:3213d03b72"},"S:aabd2d1e55":{"line":6,"name":"TableColumn","path_id":"F:a402d2f9ed"},"S:aaca852d2b":{"line":31,"name":"IdentityChip","path_id":"F:f942e88a8f"},"S:aacff6bc1c":{"line":84,"name":"attestationBytes","path_id":"F:780c791407"},"S:ab3548c3d0":{"line":16,"name":"baseCfg","path_id":"F:06b982f5a2"},"S:ab79b43633":{"line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792"},"S:ab8d34f24a":{"line":119,"name":"sweepTarget","path_id":"F:6f247eb514"},"S:abe6a83201":{"line":88,"name":"Icon","path_id":"F:deab644e60"},"S:ac015d1f81":{"line":67,"name":"collectImports","path_id":"F:36419aa427"},"S:ac0d90ea9c":{"line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff"},"S:ac1ae69e0f":{"line":3,"name":"SparklineTone","path_id":"F:c0e80ca327"},"S:ac31df31c0":{"line":113,"name":"writeJson","path_id":"F:eb14a0bdeb"},"S:acc91dc6fe":{"line":210,"name":"verifyCmd","path_id":"F:780c791407"},"S:ad1b93bd0c":{"line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba"},"S:ad302fbf54":{"line":5,"name":"makeCartService","path_id":"F:52caf3b287"},"S:ad4edf7e81":{"line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861"},"S:ad7d7732a1":{"line":24,"name":"makeExtract","path_id":"F:cecdb96382"},"S:ad93bbf998":{"line":14,"name":"run","path_id":"F:9f36b3ef29"},"S:ae3c96ae84":{"line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed"},"S:aecf05317d":{"line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236"},"S:af1450421c":{"line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e"},"S:af1e7a50ba":{"line":5,"name":"makeDb","path_id":"F:f8168b956f"},"S:af28852c7f":{"line":169,"name":"deepEqualJson","path_id":"F:22566cb46e"},"S:af6abeace9":{"line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c"},"S:afa2ffd4a2":{"line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca"},"S:afe9763761":{"line":3,"name":"RaiseCap","path_id":"F:4387a44284"},"S:b01ec1a6ac":{"line":25,"name":"Gates","path_id":"F:bb6a874d58"},"S:b02fc1cd06":{"line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff"},"S:b06714d9c5":{"line":225,"name":"patchConfig","path_id":"F:22566cb46e"},"S:b06f3444be":{"line":86,"name":"stateWithSource","path_id":"F:08b7435c86"},"S:b121dfe1ec":{"line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2"},"S:b128b3a196":{"line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715"},"S:b1b5323930":{"line":77,"name":"runGate","path_id":"F:f921eecad7"},"S:b1bbb81b82":{"line":30,"name":"Button","path_id":"F:8b122c449e"},"S:b1e3e516c3":{"line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2"},"S:b27476e527":{"line":5,"name":"SparklineProps","path_id":"F:c0e80ca327"},"S:b288f69305":{"line":76,"name":"agentproofScore","path_id":"F:3b382f95c0"},"S:b29d404deb":{"line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024"},"S:b29e93fbc3":{"line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa"},"S:b29fc4b0d5":{"line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d"},"S:b32b89125f":{"line":1,"name":"MESSAGES","path_id":"F:e948251d2b"},"S:b366c411d2":{"line":150,"name":"renderHtml","path_id":"F:128b647d9a"},"S:b3a28348ad":{"line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d"},"S:b41535d6e7":{"line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5"},"S:b4354229d8":{"line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27"},"S:b455c897cf":{"line":66,"name":"rel","path_id":"F:780c791407"},"S:b4a3093fe9":{"line":66,"name":"indentOf","path_id":"F:1575110130"},"S:b4b12fd408":{"line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7"},"S:b4e887ed4f":{"line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c"},"S:b5883cd7f4":{"line":1,"name":"MESSAGES","path_id":"F:240ace7a8f"},"S:b5d72ba60f":{"line":8,"name":"ModalProps","path_id":"F:63351e350b"},"S:b65916676a":{"line":98,"name":"successBody","path_id":"F:eb14a0bdeb"},"S:b6cbeed65d":{"line":1,"name":"MESSAGES","path_id":"F:313bcfac46"},"S:b6eeacb415":{"line":4,"name":"Requirement","path_id":"F:3b4065b679"},"S:b6fce3a5a9":{"line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a"},"S:b7db5f4d64":{"line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514"},"S:b815c12407":{"line":1,"name":"MESSAGES","path_id":"F:dd58ae3791"},"S:b81af2dbe4":{"line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff"},"S:b840cddd67":{"line":20,"name":"readScreens","path_id":"F:1a19f02364"},"S:b8469e1267":{"line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff"},"S:b88ce47ede":{"line":98,"name":"attentionRank","path_id":"F:015261eab0"},"S:b89188d9e3":{"line":76,"name":"main","path_id":"F:09ba331878"},"S:b8cdbe3fd3":{"line":73,"name":"migrate","path_id":"F:9d69a6b766"},"S:b8ed1c85bb":{"line":1,"name":"MESSAGES","path_id":"F:9616513cb6"},"S:b908c74a11":{"line":5,"name":"makeDb","path_id":"F:3c53926ecd"},"S:b919653baa":{"line":44,"name":"DryRun","path_id":"F:2207a6ebce"},"S:b926c18911":{"line":15,"name":"hashString","path_id":"F:2b9c43b0ca"},"S:b97efe3854":{"line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70"},"S:b9942b1651":{"line":11,"name":"runRatchet","path_id":"F:2b49c74e74"},"S:b9d44c6996":{"line":230,"name":"diffSet","path_id":"F:780c791407"},"S:b9ed6b7b01":{"line":44,"name":"buildHeaders","path_id":"F:8d2cb93236"},"S:ba017108fd":{"line":104,"name":"leaseIsLive","path_id":"F:5b113a0914"},"S:ba347c9b77":{"line":4,"name":"Beside","path_id":"F:e19aab09cb"},"S:ba36fd17d6":{"line":100,"name":"collectRows","path_id":"F:128b647d9a"},"S:ba4cb77f9c":{"line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c"},"S:ba5f7d1ffe":{"line":41,"name":"saveCache","path_id":"F:119e3c0fce"},"S:ba65eaae5b":{"line":4,"name":"MESSAGES","path_id":"F:acc3f6b466"},"S:ba7fe0b6d3":{"line":10,"name":"routedConfig","path_id":"F:704e42d42b"},"S:baa16abe42":{"line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70"},"S:baab120dbc":{"line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff"},"S:baacff5701":{"line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee"},"S:bac2ebbef5":{"line":53,"name":"gitCommit","path_id":"F:0391f3b249"},"S:bafcfbb33c":{"line":224,"name":"formatDelta","path_id":"F:3b382f95c0"},"S:bb570e99d8":{"line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c"},"S:bb578790a3":{"line":67,"name":"pagerank","path_id":"F:015261eab0"},"S:bb5d1b5426":{"line":1,"name":"MESSAGES","path_id":"F:59b2499e4e"},"S:bb800288d9":{"line":12,"name":"writeRunLog","path_id":"F:6f247eb514"},"S:bbdb581d9d":{"line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716"},"S:bc1fd2c5b3":{"line":149,"name":"adrNumbers","path_id":"F:fd08562f92"},"S:bc3262b829":{"line":73,"name":"writeArtifact","path_id":"F:a0d489df6d"},"S:bc4bff4faa":{"line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281"},"S:bc56c13940":{"line":22,"name":"preservingArtifact","path_id":"F:137056535b"},"S:bca7722767":{"line":100,"name":"reviewDiff","path_id":"F:2d6ef08990"},"S:bcddbe684b":{"line":62,"name":"listCaptures","path_id":"F:9344d335a6"},"S:bd1a0a35f8":{"line":35,"name":"Tabs","path_id":"F:1db369d970"},"S:bd63b1e408":{"line":15,"name":"cleanSignature","path_id":"F:594f505f11"},"S:bd7f311fdb":{"line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6"},"S:bd8806c490":{"line":13,"name":"Board","path_id":"F:dd1be2cd7b"},"S:bd9f62784d":{"line":5,"name":"scenario","path_id":"F:28f278b1d9"},"S:be897872b9":{"line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444"},"S:bead992b70":{"line":48,"name":"isBillable","path_id":"F:8b5a1f94c4"},"S:bec355e18a":{"line":75,"name":"parseEntries","path_id":"F:1575110130"},"S:bf5cf69681":{"line":13,"name":"refund","path_id":"F:93f0f5d3de"},"S:bfb04089fa":{"line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914"},"S:c028c053e3":{"line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49"},"S:c063b246d1":{"line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1"},"S:c0c2347579":{"line":5,"name":"ButtonVariant","path_id":"F:8b122c449e"},"S:c12913d4da":{"line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9"},"S:c1667b970b":{"line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0"},"S:c16b3b7bbf":{"line":10,"name":"Board","path_id":"F:6c0919b64e"},"S:c176253e9c":{"line":12,"name":"tmp","path_id":"F:fadcf390da"},"S:c1c63b1bf8":{"line":35,"name":"planFile","path_id":"F:d6401dd73e"},"S:c1e6062cfc":{"line":109,"name":"baseCfg","path_id":"F:ee02e563c6"},"S:c275cb33da":{"line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da"},"S:c2e502ad5e":{"line":409,"name":"levelFor","path_id":"F:522efae76d"},"S:c2e641f1c8":{"line":106,"name":"runSuite","path_id":"F:23917c6197"},"S:c36223901c":{"line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa"},"S:c388580f86":{"line":114,"name":"main","path_id":"F:90cbb2cf6a"},"S:c38d35b211":{"line":4,"name":"Roles","path_id":"F:973aaa9d86"},"S:c3a1d0f1a7":{"line":151,"name":"serializeEntry","path_id":"F:22566cb46e"},"S:c3d94f0812":{"line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a"},"S:c42dd60d39":{"line":126,"name":"sortRows","path_id":"F:128b647d9a"},"S:c44c6a3e42":{"line":35,"name":"parseEvidence","path_id":"F:8abf9e432a"},"S:c44da37a7d":{"line":12,"name":"Dashboard","path_id":"F:2470e60179"},"S:c47beeac78":{"line":11,"name":"normalizeRelative","path_id":"F:015261eab0"},"S:c4e4845bcc":{"line":181,"name":"manifestDigest","path_id":"F:4db1101024"},"S:c504685956":{"line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee"},"S:c52b041088":{"line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444"},"S:c53d33aa2a":{"line":71,"name":"scoreProposals","path_id":"F:e11f907cba"},"S:c546f7913f":{"line":108,"name":"main","path_id":"F:90e1fd2fd9"},"S:c5854b8940":{"line":27,"name":"snapshot","path_id":"F:0103cf3d56"},"S:c63f60f015":{"line":210,"name":"main","path_id":"F:f5d313e9f1"},"S:c68bb17ca2":{"line":17,"name":"TabsProps","path_id":"F:1db369d970"},"S:c6d0684785":{"line":1,"name":"MESSAGES","path_id":"F:b25dcdad19"},"S:c732826ee5":{"line":41,"name":"buildImportGraph","path_id":"F:015261eab0"},"S:c73cab5b60":{"line":42,"name":"ids","path_id":"F:cc65dd1342"},"S:c79db45132":{"line":11,"name":"helpers","path_id":"F:ae46bbab81"},"S:c7db2cc29d":{"line":3,"name":"InventoryService","path_id":"F:bd02b28f17"},"S:c7ebadadb9":{"line":19,"name":"Checking","path_id":"F:f9c98a8642"},"S:c7ef137e46":{"line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133"},"S:c80f0936ea":{"line":4,"name":"Budget","path_id":"F:a0abaf6a25"},"S:c850118bb2":{"line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94"},"S:c8ee4f2e2e":{"line":40,"name":"makePollutedRepo","path_id":"F:44a5987438"},"S:c928d805b5":{"line":8,"name":"ButtonProps","path_id":"F:8b122c449e"},"S:c932c7339f":{"line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249"},"S:c9785dab7b":{"line":6,"name":"scenario","path_id":"F:d744931e6a"},"S:ca3e7d6f59":{"line":72,"name":"redosFindings","path_id":"F:e7380d1444"},"S:cab56da046":{"line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820"},"S:cab6ecab70":{"line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0"},"S:cb1a5f81e0":{"line":78,"name":"reachableFrom","path_id":"F:f51cba9beb"},"S:cb3211f3c2":{"line":33,"name":"checkLicenses","path_id":"F:cc361bd05a"},"S:cb81b7e05c":{"line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820"},"S:cb8cdfa49f":{"line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9"},"S:cb97c7b3fc":{"line":27,"name":"mark","path_id":"F:9344d335a6"},"S:cbbe6a270b":{"line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e"},"S:cbe5a2e179":{"line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1"},"S:cd1b84d7ff":{"line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021"},"S:cd2e7eba8f":{"line":61,"name":"gitCommitAt","path_id":"F:0391f3b249"},"S:cd836c2fc7":{"line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4"},"S:cdac115f81":{"line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602"},"S:cde4a28e06":{"line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9"},"S:ce2faa5c80":{"line":18,"name":"loadConfig","path_id":"F:d480e40c97"},"S:ce5e964e25":{"line":4,"name":"ArmingMode","path_id":"F:e5e519f441"},"S:cec6405a03":{"line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b"},"S:cecb0a4a33":{"line":248,"name":"main","path_id":"F:128b647d9a"},"S:cefb8c3f64":{"line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5"},"S:cf03857559":{"line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602"},"S:cf3414acc5":{"line":10,"name":"TEST_FILE","path_id":"F:9a72895a04"},"S:cf413b97c8":{"line":113,"name":"write","path_id":"F:780c791407"},"S:cf88d1486b":{"line":16,"name":"run","path_id":"F:5956278014"},"S:cf9af1e29c":{"line":112,"name":"gatesFromVerify","path_id":"F:4db1101024"},"S:cfdd1d8a7f":{"line":40,"name":"NumberField","path_id":"F:db651caf76"},"S:cfe87f9141":{"line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227"},"S:d029f96a64":{"line":27,"name":"flagValue","path_id":"F:c72e6949b9"},"S:d0478605fa":{"line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04"},"S:d0587dc399":{"line":1,"name":"MESSAGES","path_id":"F:b2efd505ef"},"S:d0c2835a28":{"line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927"},"S:d15b7063e3":{"line":76,"name":"roleCrons","path_id":"F:aea3c05bca"},"S:d1b03afffb":{"line":41,"name":"deriveRepoName","path_id":"F:128b647d9a"},"S:d22e005d52":{"line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5"},"S:d240732a9d":{"line":18,"name":"sampleAction","path_id":"F:195e9217ca"},"S:d293a69125":{"line":49,"name":"LearningCard","path_id":"F:1d03291691"},"S:d2a299acb3":{"line":266,"name":"diffCmd","path_id":"F:780c791407"},"S:d2ef86c19f":{"line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461"},"S:d31fd4dafa":{"line":4,"name":"MESSAGES","path_id":"F:aa27d254da"},"S:d33c2c4d3e":{"line":534,"name":"runRoles","path_id":"F:ddeb486c49"},"S:d3f17c584a":{"line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86"},"S:d412af5fd3":{"line":1,"name":"MESSAGES","path_id":"F:9803feef4a"},"S:d4349c402c":{"line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba"},"S:d439b00c59":{"line":73,"name":"writeRunLog","path_id":"F:522efae76d"},"S:d444b209b8":{"line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0"},"S:d47456131b":{"line":40,"name":"getChangedFiles","path_id":"F:9427d264e6"},"S:d49b633132":{"line":67,"name":"isValidUrl","path_id":"F:4ebf08705b"},"S:d4e650f5ae":{"line":110,"name":"walkRepo","path_id":"F:cb66095cb4"},"S:d4ed2d5fe7":{"line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024"},"S:d4fd7f4ad3":{"line":12,"name":"Pair","path_id":"F:7008a20b1c"},"S:d56c1854d7":{"line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5"},"S:d5719588cb":{"line":48,"name":"llmsText","path_id":"F:a0d489df6d"},"S:d595535449":{"line":9,"name":"names","path_id":"F:2a74ae3f05"},"S:d5a9bb4227":{"line":47,"name":"capDiff","path_id":"F:2d6ef08990"},"S:d6cf821403":{"line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0"},"S:d7029fdff9":{"line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2"},"S:d7086f2a5b":{"line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e"},"S:d732af6be5":{"line":2,"name":"ClassValue","path_id":"F:7c8d518693"},"S:d737cd7277":{"line":52,"name":"flagValue","path_id":"F:1e5ef6ba70"},"S:d75c32ea9c":{"line":11,"name":"add","path_id":"F:90f0999521"},"S:d761c7660a":{"line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed"},"S:d7a4f68100":{"line":52,"name":"containedCwd","path_id":"F:aa77f227a6"},"S:d7d594dd8d":{"line":15,"name":"multiply","path_id":"F:90f0999521"},"S:d8edda2d76":{"line":12,"name":"makeMinimalRepo","path_id":"F:564b053598"},"S:d92119a484":{"line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2"},"S:d9c2336e09":{"line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff"},"S:da2f845458":{"line":57,"name":"splitByTabs","path_id":"F:1a19f02364"},"S:da40a0864b":{"line":33,"name":"assertSameSet","path_id":"F:5eff4122c0"},"S:daac1f172a":{"line":12,"name":"cli","path_id":"F:40e4f39b59"},"S:dab0af7046":{"line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0"},"S:dab833b9a8":{"line":25,"name":"RiskTier","path_id":"F:c64c042051"},"S:db0bb71f37":{"line":41,"name":"clampSeverity","path_id":"F:05bffc70e9"},"S:db7c5c1950":{"line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff"},"S:dbf47f93d3":{"line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1"},"S:dc4ac94e5b":{"line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed"},"S:dcc6653dc4":{"line":114,"name":"staticPatternSources","path_id":"F:e7380d1444"},"S:dce77ef3c3":{"line":42,"name":"safetyErrors","path_id":"F:d480e40c97"},"S:dd05df51d3":{"line":26,"name":"Promoted","path_id":"F:250c8a0d4a"},"S:dd1940719c":{"line":46,"name":"parseArgs","path_id":"F:edb11415f0"},"S:dd37641bec":{"line":27,"name":"Spend","path_id":"F:e5e519f441"},"S:dd3b976184":{"line":380,"name":"handleRequest","path_id":"F:ab5077147a"},"S:ddc69b10ca":{"line":182,"name":"readForeignPack","path_id":"F:780c791407"},"S:dddb39652d":{"line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5"},"S:ddfea151e8":{"line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7"},"S:de0b2dc0df":{"line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3"},"S:de8e4d5857":{"line":128,"name":"digestMismatch","path_id":"F:780c791407"},"S:deea6aabbd":{"line":4,"name":"cx","path_id":"F:7c8d518693"},"S:df1472b647":{"line":47,"name":"docAbove","path_id":"F:36419aa427"},"S:df1c5c3628":{"line":33,"name":"adapter","path_id":"F:c598a2d684"},"S:df5cb6eb12":{"line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d"},"S:df7a91f366":{"line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e"},"S:df7e6c1db0":{"line":4,"name":"Disabled","path_id":"F:28b7af3c53"},"S:dff1725e3b":{"line":37,"name":"Escalated","path_id":"F:f9c98a8642"},"S:e03cf612ca":{"line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5"},"S:e0832e1baa":{"line":8,"name":"withRoot","path_id":"F:ddd82fc886"},"S:e099520832":{"line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514"},"S:e09a554f44":{"line":32,"name":"templateLevers","path_id":"F:87c30bdb4c"},"S:e0b068ef78":{"line":31,"name":"TS_SRC","path_id":"F:9a72895a04"},"S:e0eb326a77":{"line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce"},"S:e0f397f4e1":{"line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c"},"S:e15045d8a4":{"line":13,"name":"dryRun","path_id":"F:778c33cdc0"},"S:e152142e8c":{"line":399,"name":"patchMessages","path_id":"F:22566cb46e"},"S:e15dbc7540":{"line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b"},"S:e173063c31":{"line":4,"name":"Queued","path_id":"F:f9c98a8642"},"S:e1813dcc71":{"line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07"},"S:e18ceff2c8":{"line":230,"name":"main","path_id":"F:92d6903b5f"},"S:e193570e9e":{"line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc"},"S:e19487a8ae":{"line":22,"name":"resolveFiles","path_id":"F:ace169adc4"},"S:e25d17a09c":{"line":17,"name":"SafeDefaults","path_id":"F:3319e5c923"},"S:e2861b1099":{"line":173,"name":"rollback","path_id":"F:1e5ef6ba70"},"S:e31656bc1d":{"line":33,"name":"readConfig","path_id":"F:940d5f4399"},"S:e3c36060ec":{"line":92,"name":"makeMinimalRepo","path_id":"F:48355ccf4d"},"S:e3f95000e0":{"line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157"},"S:e41c3f2d61":{"line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff"},"S:e44c445050":{"line":21,"name":"HelpHint","path_id":"F:d5b496b125"},"S:e476893b3b":{"line":190,"name":"show","path_id":"F:780c791407"},"S:e5772fff07":{"line":29,"name":"LocalOnly","path_id":"F:c63a71fb57"},"S:e6654c6139":{"line":59,"name":"gateOrder","path_id":"F:edb11415f0"},"S:e6c1406727":{"line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024"},"S:e6e23439bf":{"line":8,"name":"tempRepo","path_id":"F:cba8f1d03b"},"S:e7e0d4979a":{"line":5,"name":"clean","path_id":"F:ffe5c1269b"},"S:e7f49cafe1":{"line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70"},"S:e80517f20b":{"line":6,"name":"ActivationCheck","path_id":"F:14edab923f"},"S:e89c164d25":{"line":54,"name":"titleFromId","path_id":"F:89aee72994"},"S:e8b27564c5":{"line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70"},"S:e8f6de81b4":{"line":259,"name":"selfTest","path_id":"F:aea3c05bca"},"S:e95adce358":{"line":4,"name":"DryRun","path_id":"F:a0068c8817"},"S:e95e85f904":{"line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8"},"S:e96fb86528":{"line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5"},"S:e99608caf1":{"line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b"},"S:e9e4290005":{"line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1"},"S:e9fcedbe8f":{"line":7,"name":"InputProps","path_id":"F:763efdd51c"},"S:ea113218d1":{"line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133"},"S:ea1469d710":{"line":70,"name":"validateConfig","path_id":"F:d480e40c97"},"S:ea5d04ea13":{"line":48,"name":"Armed","path_id":"F:2207a6ebce"},"S:ea76c925e2":{"line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c"},"S:ea841eb82d":{"line":49,"name":"diffConfig","path_id":"F:25e649633c"},"S:eaba90daa0":{"line":101,"name":"exists","path_id":"F:7232ada2da"},"S:eb4b11fdf2":{"line":25,"name":"Drawer","path_id":"F:71f0bfb455"},"S:eb51a5641a":{"line":7,"name":"makePacket","path_id":"F:ba97282cf5"},"S:eb647d4678":{"line":27,"name":"StatusPill","path_id":"F:2fc610bd94"},"S:eb67f0edae":{"line":219,"name":"getFileAt","path_id":"F:92d6903b5f"},"S:ebb9dad93b":{"line":12,"name":"tmp","path_id":"F:baf7641a01"},"S:ebd259dfef":{"line":43,"name":"planProposalReview","path_id":"F:2127a8caca"},"S:ebdb053467":{"line":17,"name":"docAbove","path_id":"F:c598a2d684"},"S:ebe2964819":{"line":198,"name":"CostVM","path_id":"F:0a85f3b8e5"},"S:ec18e42e1a":{"line":32,"name":"extractFile","path_id":"F:2554ddd30c"},"S:ec2e53ab2e":{"line":12,"name":"signature","path_id":"F:c598a2d684"},"S:ecd0da924a":{"line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d"},"S:ed0a2f8660":{"line":28,"name":"git","path_id":"F:e9479e1a3b"},"S:ed1db0b6bb":{"line":176,"name":"reclaimStale","path_id":"F:5b113a0914"},"S:ed24428ce0":{"line":50,"name":"gitHead","path_id":"F:119e3c0fce"},"S:edacefac29":{"line":19,"name":"Sizes","path_id":"F:f6e100ab45"},"S:edb5058173":{"line":685,"name":"helpUri","path_id":"F:8a10462927"},"S:edd792ec6d":{"line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04"},"S:edeb959111":{"line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70"},"S:ee17355d71":{"line":133,"name":"updateSite","path_id":"F:8abf9e432a"},"S:ee3edffdff":{"line":25,"name":"AuditEvent","path_id":"F:76da13a8f7"},"S:ee4deb809d":{"line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da"},"S:ee5246d16c":{"line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b"},"S:ee57130d72":{"line":2,"name":"MESSAGES","path_id":"F:ccb72910b3"},"S:ee9b2c90d1":{"line":53,"name":"walk","path_id":"F:ca0833ac73"},"S:efe9cb11d4":{"line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130"},"S:efea80af4e":{"line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e"},"S:eff02f504b":{"line":689,"name":"toFindings","path_id":"F:8a10462927"},"S:f040dfb6c9":{"line":15,"name":"run","path_id":"F:e540f7b669"},"S:f0db7341e7":{"line":89,"name":"productState","path_id":"F:89aee72994"},"S:f12376c7b1":{"line":136,"name":"readDiff","path_id":"F:2d6ef08990"},"S:f22a53ac17":{"line":305,"name":"createWorkItem","path_id":"F:22566cb46e"},"S:f2642efdc2":{"line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8"},"S:f2e1ea8458":{"line":16,"name":"deriveMode","path_id":"F:0da05a2a05"},"S:f2e55d9b4a":{"line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed"},"S:f2f7e716af":{"line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef"},"S:f36d6a8da6":{"line":12,"name":"buildRemediationView","path_id":"F:5daab9894d"},"S:f3b8628cdb":{"line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9"},"S:f3d272846b":{"line":24,"name":"TierBadge","path_id":"F:da42f69531"},"S:f3e5c99141":{"line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5"},"S:f40a6dfd1b":{"line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff"},"S:f43dc8ad19":{"line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d"},"S:f51dd29844":{"line":145,"name":"normalizePaths","path_id":"F:4db1101024"},"S:f5a168e2ff":{"line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da"},"S:f5a71d2ca6":{"line":19,"name":"runScript","path_id":"F:bbb6476d71"},"S:f613554429":{"line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a"},"S:f6264503e8":{"line":1,"name":"MESSAGES","path_id":"F:a104667369"},"S:f650b22681":{"line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2"},"S:f71a25079c":{"line":549,"name":"main","path_id":"F:ddeb486c49"},"S:f794e6adf4":{"line":6,"name":"typeOf","path_id":"F:34cb2b6c48"},"S:f8004b7b76":{"line":475,"name":"invokeRole","path_id":"F:ddeb486c49"},"S:f80ff247d7":{"line":1,"name":"MESSAGES","path_id":"F:c6bd51a324"},"S:f8524caefc":{"line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9"},"S:f88498de73":{"line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407"},"S:f93b3b8c7c":{"line":95,"name":"buildEvidence","path_id":"F:2e327963ed"},"S:f988f356bd":{"line":4,"name":"Variants","path_id":"F:f6e100ab45"},"S:f99cb9f35c":{"line":62,"name":"determinismBoundaryErrors","path_id":"F:fc21812307"},"S:f99d630708":{"line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa"},"S:f9a749a2b1":{"line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820"},"S:f9a8f3309b":{"line":25,"name":"scaffold","path_id":"F:940d5f4399"},"S:f9d6a590e4":{"line":14,"name":"docAbove","path_id":"F:ffe5c1269b"},"S:fa36ece453":{"line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91"},"S:fa6785fa4b":{"line":1,"name":"MESSAGES","path_id":"F:3f1216fc11"},"S:fa71aef711":{"line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2"},"S:fb06279d5d":{"line":48,"name":"normalizeSignals","path_id":"F:e11f907cba"},"S:fb4a6826d7":{"line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80"},"S:fb6bf396bc":{"line":61,"name":"planReview","path_id":"F:2d6ef08990"},"S:fb81ef11a3":{"line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b"},"S:fc01241f03":{"line":13,"name":"cfg","path_id":"F:1bcaaff9eb"},"S:fc28898c78":{"line":44,"name":"resolveToken","path_id":"F:cdbe769ed3"},"S:fc3bb4bc24":{"line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9"},"S:fc6086da9e":{"line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da"},"S:fc6f0e771f":{"line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94"},"S:fc7eb05498":{"line":9,"name":"ArmingMode","path_id":"F:c64c042051"},"S:fc880b17bd":{"line":56,"name":"readOrNull","path_id":"F:4db1101024"},"S:fd230402e2":{"line":323,"name":"deconfuse","path_id":"F:8a10462927"},"S:fd2e16186e":{"line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0"},"S:fd42584b25":{"line":1,"name":"MESSAGES","path_id":"F:efa02030ca"},"S:fd58589dfa":{"line":127,"name":"makePlan","path_id":"F:580d11b514"},"S:fd822bf451":{"line":45,"name":"tryTransition","path_id":"F:d135cffeaa"},"S:fd88bace68":{"line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236"},"S:fd9d32de9a":{"line":272,"name":"releaseLease","path_id":"F:22566cb46e"},"S:fdc2a33d21":{"line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157"},"S:fdf5ba078f":{"line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c"},"S:fe07a3bcbc":{"line":13,"name":"gitRepo","path_id":"F:de5ebbf586"},"S:fe1a464205":{"line":60,"name":"applyPatch","path_id":"F:872221b1da"},"S:fe27a88258":{"line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f"},"S:fe41df17f9":{"line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49"},"S:fe9c17eefa":{"line":12,"name":"tmp","path_id":"F:d7d4e8d2a9"},"S:fea88d42b6":{"line":5,"name":"TierBadgeProps","path_id":"F:da42f69531"},"S:fedbb5f441":{"line":4,"name":"NotificationService","path_id":"F:b9d806ba4d"},"S:ff45c441d1":{"line":67,"name":"canReach","path_id":"F:37f4a5c04e"},"S:fff471613b":{"line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53"}}},"edges":[{"from":"F:015261eab0","to":"F:f51cba9beb"},{"from":"F:03f476958e","to":"F:05a0f0d5a5"},{"from":"F:03f476958e","to":"F:09ea014068"},{"from":"F:03f476958e","to":"F:0c731e3460"},{"from":"F:03f476958e","to":"F:1127892e72"},{"from":"F:03f476958e","to":"F:179564da6f"},{"from":"F:03f476958e","to":"F:1ff2bf39a4"},{"from":"F:03f476958e","to":"F:2215d0e1fc"},{"from":"F:03f476958e","to":"F:23dbdd7e76"},{"from":"F:03f476958e","to":"F:240ace7a8f"},{"from":"F:03f476958e","to":"F:2715f09f24"},{"from":"F:03f476958e","to":"F:313bcfac46"},{"from":"F:03f476958e","to":"F:33c4d744f3"},{"from":"F:03f476958e","to":"F:35d4a12b63"},{"from":"F:03f476958e","to":"F:3835919e8e"},{"from":"F:03f476958e","to":"F:3f1216fc11"},{"from":"F:03f476958e","to":"F:40d8f235fd"},{"from":"F:03f476958e","to":"F:4d08d5472f"},{"from":"F:03f476958e","to":"F:597cc7ae15"},{"from":"F:03f476958e","to":"F:59b2499e4e"},{"from":"F:03f476958e","to":"F:5b5b4ddcae"},{"from":"F:03f476958e","to":"F:5d52d97b8a"},{"from":"F:03f476958e","to":"F:6a86908a3e"},{"from":"F:03f476958e","to":"F:86fd2cf669"},{"from":"F:03f476958e","to":"F:91e24dcac0"},{"from":"F:03f476958e","to":"F:9616513cb6"},{"from":"F:03f476958e","to":"F:964f89b6cc"},{"from":"F:03f476958e","to":"F:973aca5f3e"},{"from":"F:03f476958e","to":"F:9803feef4a"},{"from":"F:03f476958e","to":"F:99251bc045"},{"from":"F:03f476958e","to":"F:9a32917e56"},{"from":"F:03f476958e","to":"F:9b01a5cd4d"},{"from":"F:03f476958e","to":"F:9dbf431d3e"},{"from":"F:03f476958e","to":"F:a104667369"},{"from":"F:03f476958e","to":"F:a5822fdd03"},{"from":"F:03f476958e","to":"F:a8c32b8f15"},{"from":"F:03f476958e","to":"F:aa27d254da"},{"from":"F:03f476958e","to":"F:acc3f6b466"},{"from":"F:03f476958e","to":"F:b25dcdad19"},{"from":"F:03f476958e","to":"F:b2efd505ef"},{"from":"F:03f476958e","to":"F:b4f4e16ca1"},{"from":"F:03f476958e","to":"F:b502a0fe75"},{"from":"F:03f476958e","to":"F:bf4e255c6e"},{"from":"F:03f476958e","to":"F:c6bd51a324"},{"from":"F:03f476958e","to":"F:ccb72910b3"},{"from":"F:03f476958e","to":"F:d288a78085"},{"from":"F:03f476958e","to":"F:d328f97d94"},{"from":"F:03f476958e","to":"F:d8e37c4449"},{"from":"F:03f476958e","to":"F:da9133a29d"},{"from":"F:03f476958e","to":"F:dd58ae3791"},{"from":"F:03f476958e","to":"F:de188c1b79"},{"from":"F:03f476958e","to":"F:e2025a4e0c"},{"from":"F:03f476958e","to":"F:e6677dcd37"},{"from":"F:03f476958e","to":"F:e948251d2b"},{"from":"F:03f476958e","to":"F:e9f1cc1e5d"},{"from":"F:03f476958e","to":"F:ec3aa9930a"},{"from":"F:03f476958e","to":"F:efa02030ca"},{"from":"F:03f476958e","to":"F:f41378fed0"},{"from":"F:044b762a79","to":"F:1ecd18c4b9"},{"from":"F:059f9a812c","to":"F:cc361bd05a"},{"from":"F:05bffc70e9","to":"F:03f476958e"},{"from":"F:05bffc70e9","to":"F:1575110130"},{"from":"F:05bffc70e9","to":"F:34cb2b6c48"},{"from":"F:06b982f5a2","to":"F:ddeb486c49"},{"from":"F:06b982f5a2","to":"F:fd660a117b"},{"from":"F:08064e0c53","to":"F:2fc610bd94"},{"from":"F:08064e0c53","to":"F:71f0bfb455"},{"from":"F:08064e0c53","to":"F:b5ae6ee133"},{"from":"F:08064e0c53","to":"F:c64c042051"},{"from":"F:08064e0c53","to":"F:da42f69531"},{"from":"F:08064e0c53","to":"F:f942e88a8f"},{"from":"F:08441e59e8","to":"F:65193a9799"},{"from":"F:08b7435c86","to":"F:22566cb46e"},{"from":"F:08b7435c86","to":"F:8a3dd6ccff"},{"from":"F:08b7435c86","to":"F:fd4b8473fa"},{"from":"F:093689bb8e","to":"F:ddeb486c49"},{"from":"F:093689bb8e","to":"F:fd660a117b"},{"from":"F:09ba331878","to":"F:05bffc70e9"},{"from":"F:09ba331878","to":"F:4ebb5aa8a0"},{"from":"F:09ba331878","to":"F:ff2c4a08a4"},{"from":"F:0a1a9270a7","to":"F:583edef643"},{"from":"F:0c1c5ad5d9","to":"F:05bffc70e9"},{"from":"F:0c1c5ad5d9","to":"F:0cacf66a3b"},{"from":"F:0c1c5ad5d9","to":"F:245efb551c"},{"from":"F:0c1c5ad5d9","to":"F:65193a9799"},{"from":"F:0cc3e727ed","to":"F:763efdd51c"},{"from":"F:0e9e38f100","to":"F:ab334f34df"},{"from":"F:113387361d","to":"F:0a85f3b8e5"},{"from":"F:113387361d","to":"F:304fa8ef33"},{"from":"F:113387361d","to":"F:3c479cac6e"},{"from":"F:113387361d","to":"F:4ebf08705b"},{"from":"F:113387361d","to":"F:6627655633"},{"from":"F:113387361d","to":"F:757a70680a"},{"from":"F:113387361d","to":"F:95d4304133"},{"from":"F:113387361d","to":"F:9b3f18856e"},{"from":"F:113387361d","to":"F:e40ce1af48"},{"from":"F:114d351bdc","to":"F:1575110130"},{"from":"F:114d351bdc","to":"F:34cb2b6c48"},{"from":"F:114d351bdc","to":"F:932d33be00"},{"from":"F:114d351bdc","to":"F:9d69a6b766"},{"from":"F:12c7a4e461","to":"F:245efb551c"},{"from":"F:146a198c06","to":"F:d20e4b6b91"},{"from":"F:14edab923f","to":"F:7c8d518693"},{"from":"F:14edab923f","to":"F:8b122c449e"},{"from":"F:14edab923f","to":"F:c64c042051"},{"from":"F:14edab923f","to":"F:deab644e60"},{"from":"F:168fe4d371","to":"F:09ba331878"},{"from":"F:1714946cc1","to":"F:05bffc70e9"},{"from":"F:1714946cc1","to":"F:1a19f02364"},{"from":"F:1716017e02","to":"F:90fc20ddd8"},{"from":"F:182dcaa949","to":"F:956332d4b5"},{"from":"F:18f569225a","to":"F:ddeb486c49"},{"from":"F:18f569225a","to":"F:eb14a0bdeb"},{"from":"F:1a137480ae","to":"F:7c8d518693"},{"from":"F:1a137480ae","to":"F:deab644e60"},{"from":"F:1bc04b108f","to":"F:e7380d1444"},{"from":"F:1bcaaff9eb","to":"F:932d33be00"},{"from":"F:1bcaaff9eb","to":"F:ddeb486c49"},{"from":"F:1bcaaff9eb","to":"F:fd660a117b"},{"from":"F:1c1d4f7335","to":"F:819f72edf6"},{"from":"F:1d03291691","to":"F:2fc610bd94"},{"from":"F:1d03291691","to":"F:40eb542a82"},{"from":"F:1d03291691","to":"F:8b122c449e"},{"from":"F:1db369d970","to":"F:7c8d518693"},{"from":"F:1db369d970","to":"F:deab644e60"},{"from":"F:1e15c1666f","to":"F:4dabd020df"},{"from":"F:1e15c1666f","to":"F:cdbe769ed3"},{"from":"F:1e5ef6ba70","to":"F:05bffc70e9"},{"from":"F:1e5ef6ba70","to":"F:4a7eaceb5c"},{"from":"F:1e5ef6ba70","to":"F:8ffb11f281"},{"from":"F:1e5ef6ba70","to":"F:932d33be00"},{"from":"F:1e5ef6ba70","to":"F:ff2c4a08a4"},{"from":"F:2127a8caca","to":"F:304ce7b89d"},{"from":"F:2127a8caca","to":"F:8d2cb93236"},{"from":"F:2127a8caca","to":"F:932d33be00"},{"from":"F:214cc0a5f4","to":"F:7c8d518693"},{"from":"F:214cc0a5f4","to":"F:d5b496b125"},{"from":"F:22566cb46e","to":"F:05bffc70e9"},{"from":"F:22566cb46e","to":"F:1575110130"},{"from":"F:22566cb46e","to":"F:54df44aadd"},{"from":"F:22566cb46e","to":"F:cb3c5f7715"},{"from":"F:22566cb46e","to":"F:d480e40c97"},{"from":"F:22fab804b1","to":"F:94050e680d"},{"from":"F:23917c6197","to":"F:05bffc70e9"},{"from":"F:2554ddd30c","to":"F:3213d03b72"},{"from":"F:2554ddd30c","to":"F:36419aa427"},{"from":"F:2554ddd30c","to":"F:594f505f11"},{"from":"F:2554ddd30c","to":"F:c598a2d684"},{"from":"F:2554ddd30c","to":"F:ffe5c1269b"},{"from":"F:25e649633c","to":"F:0a85f3b8e5"},{"from":"F:268769c4a6","to":"F:7c8d518693"},{"from":"F:268769c4a6","to":"F:deab644e60"},{"from":"F:2a74ae3f05","to":"F:2554ddd30c"},{"from":"F:2a74ae3f05","to":"F:cecdb96382"},{"from":"F:2af556d595","to":"F:05bffc70e9"},{"from":"F:2af556d595","to":"F:1575110130"},{"from":"F:2b9c43b0ca","to":"F:245efb551c"},{"from":"F:2d4c555ba1","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:1a19f02364"},{"from":"F:2d6ef08990","to":"F:304ce7b89d"},{"from":"F:2d6ef08990","to":"F:8d2cb93236"},{"from":"F:2d6ef08990","to":"F:932d33be00"},{"from":"F:2f6c42c5ee","to":"F:deab644e60"},{"from":"F:2fc610bd94","to":"F:7c8d518693"},{"from":"F:2fc610bd94","to":"F:deab644e60"},{"from":"F:304ce7b89d","to":"F:8b5a1f94c4"},{"from":"F:304fa8ef33","to":"F:0a85f3b8e5"},{"from":"F:304fa8ef33","to":"F:3c479cac6e"},{"from":"F:304fa8ef33","to":"F:e406ceab72"},{"from":"F:31d378932b","to":"F:05bffc70e9"},{"from":"F:31d378932b","to":"F:4ebb5aa8a0"},{"from":"F:35c6d59157","to":"F:7c8d518693"},{"from":"F:35c6d59157","to":"F:deab644e60"},{"from":"F:373a946d5c","to":"F:ff3aef693f"},{"from":"F:373fee03a1","to":"F:08064e0c53"},{"from":"F:37f4a5c04e","to":"F:05bffc70e9"},{"from":"F:398655650f","to":"F:1575110130"},{"from":"F:398655650f","to":"F:304ce7b89d"},{"from":"F:398655650f","to":"F:932d33be00"},{"from":"F:3a2345f153","to":"F:b014028f57"},{"from":"F:3c53926ecd","to":"F:599f5b2f28"},{"from":"F:3d95ec2ed5","to":"F:68c4da7fe8"},{"from":"F:3dd926c4de","to":"F:f8609bae0b"},{"from":"F:3de9042953","to":"F:0c1c5ad5d9"},{"from":"F:3de9042953","to":"F:12c7a4e461"},{"from":"F:3de9042953","to":"F:245efb551c"},{"from":"F:3de9042953","to":"F:7b3e38c9a6"},{"from":"F:3fe6b95e07","to":"F:66264a042c"},{"from":"F:4096620673","to":"F:05bffc70e9"},{"from":"F:4096620673","to":"F:1575110130"},{"from":"F:4096620673","to":"F:34cb2b6c48"},{"from":"F:40eb542a82","to":"F:7c8d518693"},{"from":"F:40eb542a82","to":"F:d5b496b125"},{"from":"F:4377343f4f","to":"F:ddeb486c49"},{"from":"F:44a5987438","to":"F:4a7eaceb5c"},{"from":"F:4637e1fecb","to":"F:119e3c0fce"},{"from":"F:4637e1fecb","to":"F:245efb551c"},{"from":"F:4637e1fecb","to":"F:dbb9c92ca1"},{"from":"F:46c40327ad","to":"F:40eb542a82"},{"from":"F:4749cc43a0","to":"F:05bffc70e9"},{"from":"F:48355ccf4d","to":"F:34cb2b6c48"},{"from":"F:4a7eaceb5c","to":"F:6e0bd62fa3"},{"from":"F:4a7eaceb5c","to":"F:e4ff19bbe2"},{"from":"F:4b7eb18a4b","to":"F:da42f69531"},{"from":"F:4b91a9f65b","to":"F:68c4da7fe8"},{"from":"F:4c741a5b06","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:245efb551c"},{"from":"F:4db1101024","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:98529ba7ea"},{"from":"F:4ebb5aa8a0","to":"F:05bffc70e9"},{"from":"F:4ebf08705b","to":"F:0a85f3b8e5"},{"from":"F:4ebf08705b","to":"F:25e649633c"},{"from":"F:4ebf08705b","to":"F:3c479cac6e"},{"from":"F:4ebf08705b","to":"F:e406ceab72"},{"from":"F:4ebf08705b","to":"F:ec52ca3820"},{"from":"F:4fd28fc2ff","to":"F:05bffc70e9"},{"from":"F:4fd28fc2ff","to":"F:1575110130"},{"from":"F:500dd805f6","to":"F:35c6d59157"},{"from":"F:52338ea290","to":"F:eb14a0bdeb"},{"from":"F:52caf3b287","to":"F:54c6928de9"},{"from":"F:52ef6ad4a1","to":"F:4ebb5aa8a0"},{"from":"F:57ca5f1716","to":"F:2fc610bd94"},{"from":"F:57ca5f1716","to":"F:d5b496b125"},{"from":"F:580d11b514","to":"F:872221b1da"},{"from":"F:580d11b514","to":"F:ddeb486c49"},{"from":"F:580d11b514","to":"F:eb14a0bdeb"},{"from":"F:583edef643","to":"F:2fc610bd94"},{"from":"F:583edef643","to":"F:40eb542a82"},{"from":"F:583edef643","to":"F:8b122c449e"},{"from":"F:596687118c","to":"F:63351e350b"},{"from":"F:5994385869","to":"F:f07f8ebca9"},{"from":"F:5b113a0914","to":"F:05bffc70e9"},{"from":"F:5b113a0914","to":"F:34cb2b6c48"},{"from":"F:5daab9894d","to":"F:8ffb11f281"},{"from":"F:5e450ff82c","to":"F:a7ce0f6452"},{"from":"F:5f7910375b","to":"F:05bffc70e9"},{"from":"F:5f7910375b","to":"F:1575110130"},{"from":"F:5f7910375b","to":"F:f07f8ebca9"},{"from":"F:5f88bf32ca","to":"F:1d03291691"},{"from":"F:60548316f5","to":"F:f90930c3c3"},{"from":"F:61296e720c","to":"F:05bffc70e9"},{"from":"F:61296e720c","to":"F:6e0bd62fa3"},{"from":"F:61296e720c","to":"F:e4ff19bbe2"},{"from":"F:63351e350b","to":"F:7c8d518693"},{"from":"F:63351e350b","to":"F:a8cfe45d27"},{"from":"F:63c1c23ccb","to":"F:63351e350b"},{"from":"F:63c1c23ccb","to":"F:8b122c449e"},{"from":"F:65193a9799","to":"F:05bffc70e9"},{"from":"F:65193a9799","to":"F:34cb2b6c48"},{"from":"F:65193a9799","to":"F:68c4da7fe8"},{"from":"F:66264a042c","to":"F:7c8d518693"},{"from":"F:66264a042c","to":"F:deab644e60"},{"from":"F:6627655633","to":"F:0a85f3b8e5"},{"from":"F:6627655633","to":"F:f83d1100e9"},{"from":"F:667ef091ca","to":"F:14edab923f"},{"from":"F:686a544e0e","to":"F:2d6ef08990"},{"from":"F:698ea4b2e9","to":"F:ddeb486c49"},{"from":"F:6bfa4389b5","to":"F:2fc610bd94"},{"from":"F:6f247eb514","to":"F:1a19f02364"},{"from":"F:6f247eb514","to":"F:ae46bbab81"},{"from":"F:6f247eb514","to":"F:e11f907cba"},{"from":"F:7054844360","to":"F:7c8d518693"},{"from":"F:7054844360","to":"F:d5b496b125"},{"from":"F:7054844360","to":"F:deab644e60"},{"from":"F:70d12a92c6","to":"F:7a1f7d680b"},{"from":"F:71f0bfb455","to":"F:a8cfe45d27"},{"from":"F:7232ada2da","to":"F:05bffc70e9"},{"from":"F:757a70680a","to":"F:0a85f3b8e5"},{"from":"F:757a70680a","to":"F:3c479cac6e"},{"from":"F:757a70680a","to":"F:e406ceab72"},{"from":"F:758ab56395","to":"F:5a3543606b"},{"from":"F:758ab56395","to":"F:e8676a18b7"},{"from":"F:763efdd51c","to":"F:7c8d518693"},{"from":"F:763efdd51c","to":"F:d5b496b125"},{"from":"F:763efdd51c","to":"F:deab644e60"},{"from":"F:76da13a8f7","to":"F:86838d35ac"},{"from":"F:76da13a8f7","to":"F:deab644e60"},{"from":"F:780c791407","to":"F:05bffc70e9"},{"from":"F:780c791407","to":"F:1575110130"},{"from":"F:780c791407","to":"F:245efb551c"},{"from":"F:780c791407","to":"F:2d93cea2d4"},{"from":"F:780c791407","to":"F:34cb2b6c48"},{"from":"F:780c791407","to":"F:4db1101024"},{"from":"F:7a1f7d680b","to":"F:7c8d518693"},{"from":"F:7a1f7d680b","to":"F:c64c042051"},{"from":"F:7a1f7d680b","to":"F:deab644e60"},{"from":"F:7b3e38c9a6","to":"F:05bffc70e9"},{"from":"F:7b3e38c9a6","to":"F:245efb551c"},{"from":"F:7d236c9aa6","to":"F:0a85f3b8e5"},{"from":"F:815abebda1","to":"F:63c1c23ccb"},{"from":"F:819f72edf6","to":"F:7c8d518693"},{"from":"F:819f72edf6","to":"F:d5b496b125"},{"from":"F:819f72edf6","to":"F:deab644e60"},{"from":"F:81c495717c","to":"F:7c8d518693"},{"from":"F:81c495717c","to":"F:d5b496b125"},{"from":"F:828cf970bc","to":"F:304ce7b89d"},{"from":"F:849bc0a60f","to":"F:a402d2f9ed"},{"from":"F:85e076f56b","to":"F:deab644e60"},{"from":"F:868321590c","to":"F:05bffc70e9"},{"from":"F:868321590c","to":"F:1575110130"},{"from":"F:868321590c","to":"F:f07f8ebca9"},{"from":"F:87c30bdb4c","to":"F:05bffc70e9"},{"from":"F:87c30bdb4c","to":"F:1575110130"},{"from":"F:87c30bdb4c","to":"F:9d69a6b766"},{"from":"F:885187507a","to":"F:113387361d"},{"from":"F:885187507a","to":"F:4a6129eacb"},{"from":"F:89aee72994","to":"F:0a85f3b8e5"},{"from":"F:89f25e2f3d","to":"F:1db369d970"},{"from":"F:8a10462927","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:54df44aadd"},{"from":"F:8a3dd6ccff","to":"F:5daab9894d"},{"from":"F:8a9aff1529","to":"F:7c8d518693"},{"from":"F:8aa9ba4dcb","to":"F:d135cffeaa"},{"from":"F:8abf9e432a","to":"F:05bffc70e9"},{"from":"F:8b122c449e","to":"F:7c8d518693"},{"from":"F:8b122c449e","to":"F:deab644e60"},{"from":"F:8b2f3dbcba","to":"F:1575110130"},{"from":"F:8b2f3dbcba","to":"F:22566cb46e"},{"from":"F:8b2f3dbcba","to":"F:304ce7b89d"},{"from":"F:8b2f3dbcba","to":"F:d480e40c97"},{"from":"F:8b2f3dbcba","to":"F:ddeb486c49"},{"from":"F:8b7ee49cdd","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:f51cba9beb"},{"from":"F:8bb1b57470","to":"F:1ecd18c4b9"},{"from":"F:8bb1b57470","to":"F:54c6928de9"},{"from":"F:8bb1b57470","to":"F:599f5b2f28"},{"from":"F:8bb1b57470","to":"F:b9d806ba4d"},{"from":"F:8bb1b57470","to":"F:bd02b28f17"},{"from":"F:8bb1b57470","to":"F:ff3aef693f"},{"from":"F:8c6234a8cb","to":"F:2fc610bd94"},{"from":"F:8c6234a8cb","to":"F:7c8d518693"},{"from":"F:8c6234a8cb","to":"F:86838d35ac"},{"from":"F:8c6234a8cb","to":"F:deab644e60"},{"from":"F:8d2cb93236","to":"F:05bffc70e9"},{"from":"F:8fe56e5618","to":"F:1575110130"},{"from":"F:8fe56e5618","to":"F:65193a9799"},{"from":"F:8fe56e5618","to":"F:932d33be00"},{"from":"F:8ffb11f281","to":"F:4a7eaceb5c"},{"from":"F:9040e0c030","to":"F:2f6c42c5ee"},{"from":"F:90cbb2cf6a","to":"F:34cb2b6c48"},{"from":"F:90e1fd2fd9","to":"F:05bffc70e9"},{"from":"F:90e1fd2fd9","to":"F:cdbe769ed3"},{"from":"F:90e1fd2fd9","to":"F:ff2c4a08a4"},{"from":"F:90fc20ddd8","to":"F:7c8d518693"},{"from":"F:9204ee9f08","to":"F:9f0fb6ed8b"},{"from":"F:92d6903b5f","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:d480e40c97"},{"from":"F:933d506be9","to":"F:34cb2b6c48"},{"from":"F:933d506be9","to":"F:98529ba7ea"},{"from":"F:9344d335a6","to":"F:05bffc70e9"},{"from":"F:9344d335a6","to":"F:1575110130"},{"from":"F:9344d335a6","to":"F:4ebb5aa8a0"},{"from":"F:94050e680d","to":"F:2d6ef08990"},{"from":"F:94050e680d","to":"F:304ce7b89d"},{"from":"F:94050e680d","to":"F:8d2cb93236"},{"from":"F:94050e680d","to":"F:932d33be00"},{"from":"F:9427d264e6","to":"F:05bffc70e9"},{"from":"F:94c9bc6065","to":"F:34cb2b6c48"},{"from":"F:956332d4b5","to":"F:2fc610bd94"},{"from":"F:956332d4b5","to":"F:86838d35ac"},{"from":"F:956332d4b5","to":"F:8b122c449e"},{"from":"F:956332d4b5","to":"F:a402d2f9ed"},{"from":"F:956332d4b5","to":"F:f942e88a8f"},{"from":"F:95d4304133","to":"F:0a85f3b8e5"},{"from":"F:95d4304133","to":"F:0da05a2a05"},{"from":"F:95d4304133","to":"F:7d236c9aa6"},{"from":"F:95d4304133","to":"F:89aee72994"},{"from":"F:95d4304133","to":"F:ec52ca3820"},{"from":"F:9b3f18856e","to":"F:0a85f3b8e5"},{"from":"F:9b3f18856e","to":"F:3c479cac6e"},{"from":"F:9b3f18856e","to":"F:e406ceab72"},{"from":"F:9bb94e1b40","to":"F:90e1fd2fd9"},{"from":"F:9d69a6b766","to":"F:05bffc70e9"},{"from":"F:9d69a6b766","to":"F:1575110130"},{"from":"F:9dc816763b","to":"F:b16afebae9"},{"from":"F:9deac13db0","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:d5b496b125"},{"from":"F:9f0fb6ed8b","to":"F:deab644e60"},{"from":"F:9f36b3ef29","to":"F:34cb2b6c48"},{"from":"F:a0d489df6d","to":"F:119e3c0fce"},{"from":"F:a0d489df6d","to":"F:1575110130"},{"from":"F:a0d489df6d","to":"F:245efb551c"},{"from":"F:a0d489df6d","to":"F:2554ddd30c"},{"from":"F:a0d489df6d","to":"F:2b9c43b0ca"},{"from":"F:a0d489df6d","to":"F:cb66095cb4"},{"from":"F:a0d489df6d","to":"F:cecdb96382"},{"from":"F:a0d489df6d","to":"F:dbb9c92ca1"},{"from":"F:a402d2f9ed","to":"F:7c8d518693"},{"from":"F:a42da90970","to":"F:b3a2ad52bb"},{"from":"F:a52954a167","to":"F:08b7435c86"},{"from":"F:a862b1c3b6","to":"F:1a137480ae"},{"from":"F:a8cfe45d27","to":"F:7c8d518693"},{"from":"F:a8cfe45d27","to":"F:deab644e60"},{"from":"F:aa77f227a6","to":"F:05bffc70e9"},{"from":"F:ab334f34df","to":"F:7c8d518693"},{"from":"F:ab334f34df","to":"F:deab644e60"},{"from":"F:ac11b5379f","to":"F:05bffc70e9"},{"from":"F:ac11b5379f","to":"F:4ebb5aa8a0"},{"from":"F:ace169adc4","to":"F:05bffc70e9"},{"from":"F:ace169adc4","to":"F:68c4da7fe8"},{"from":"F:add7add561","to":"F:0a1a9270a7"},{"from":"F:add7add561","to":"F:0cc3e727ed"},{"from":"F:add7add561","to":"F:0e9e38f100"},{"from":"F:add7add561","to":"F:146a198c06"},{"from":"F:add7add561","to":"F:1716017e02"},{"from":"F:add7add561","to":"F:182dcaa949"},{"from":"F:add7add561","to":"F:1c1d4f7335"},{"from":"F:add7add561","to":"F:373fee03a1"},{"from":"F:add7add561","to":"F:3dd926c4de"},{"from":"F:add7add561","to":"F:3fe6b95e07"},{"from":"F:add7add561","to":"F:46c40327ad"},{"from":"F:add7add561","to":"F:4b7eb18a4b"},{"from":"F:add7add561","to":"F:500dd805f6"},{"from":"F:add7add561","to":"F:596687118c"},{"from":"F:add7add561","to":"F:5f88bf32ca"},{"from":"F:add7add561","to":"F:667ef091ca"},{"from":"F:add7add561","to":"F:6bfa4389b5"},{"from":"F:add7add561","to":"F:70d12a92c6"},{"from":"F:add7add561","to":"F:7c8d518693"},{"from":"F:add7add561","to":"F:815abebda1"},{"from":"F:add7add561","to":"F:849bc0a60f"},{"from":"F:add7add561","to":"F:85e076f56b"},{"from":"F:add7add561","to":"F:86838d35ac"},{"from":"F:add7add561","to":"F:89f25e2f3d"},{"from":"F:add7add561","to":"F:9040e0c030"},{"from":"F:add7add561","to":"F:9204ee9f08"},{"from":"F:add7add561","to":"F:a42da90970"},{"from":"F:add7add561","to":"F:a862b1c3b6"},{"from":"F:add7add561","to":"F:b39c90fbe6"},{"from":"F:add7add561","to":"F:b51ccbe79a"},{"from":"F:add7add561","to":"F:b677f38b10"},{"from":"F:add7add561","to":"F:bb2d98fca6"},{"from":"F:add7add561","to":"F:c14dd92bce"},{"from":"F:add7add561","to":"F:c2ff3fda15"},{"from":"F:add7add561","to":"F:c412f056b4"},{"from":"F:add7add561","to":"F:c5da07872e"},{"from":"F:add7add561","to":"F:c64c042051"},{"from":"F:add7add561","to":"F:d01156348d"},{"from":"F:add7add561","to":"F:d05701e1ab"},{"from":"F:add7add561","to":"F:d0d703a4e0"},{"from":"F:add7add561","to":"F:de988f64d4"},{"from":"F:add7add561","to":"F:ea9e0801d5"},{"from":"F:add7add561","to":"F:f00c212d41"},{"from":"F:add7add561","to":"F:f13b76e6fd"},{"from":"F:add7add561","to":"F:f57cf1a212"},{"from":"F:add7add561","to":"F:f6abfc128a"},{"from":"F:add7add561","to":"F:fb5935daaf"},{"from":"F:add7add561","to":"F:fc43ea4859"},{"from":"F:aea3c05bca","to":"F:932d33be00"},{"from":"F:aea3c05bca","to":"F:f51cba9beb"},{"from":"F:aecebb26be","to":"F:5daab9894d"},{"from":"F:b1598d4449","to":"F:119e3c0fce"},{"from":"F:b1598d4449","to":"F:cb66095cb4"},{"from":"F:b1598d4449","to":"F:dbb9c92ca1"},{"from":"F:b16afebae9","to":"F:34cb2b6c48"},{"from":"F:b28f13b600","to":"F:65193a9799"},{"from":"F:b28f13b600","to":"F:932d33be00"},{"from":"F:b28f13b600","to":"F:f07f8ebca9"},{"from":"F:b39c90fbe6","to":"F:9deac13db0"},{"from":"F:b3a2ad52bb","to":"F:7c8d518693"},{"from":"F:b3a2ad52bb","to":"F:deab644e60"},{"from":"F:b51ccbe79a","to":"F:b5ae6ee133"},{"from":"F:b5ae6ee133","to":"F:2fc610bd94"},{"from":"F:b5ae6ee133","to":"F:7c8d518693"},{"from":"F:b5ae6ee133","to":"F:c64c042051"},{"from":"F:b5ae6ee133","to":"F:da42f69531"},{"from":"F:b5ae6ee133","to":"F:deab644e60"},{"from":"F:b677f38b10","to":"F:7054844360"},{"from":"F:b806994000","to":"F:05bffc70e9"},{"from":"F:b806994000","to":"F:1575110130"},{"from":"F:b806994000","to":"F:2127a8caca"},{"from":"F:b806994000","to":"F:6f247eb514"},{"from":"F:b806994000","to":"F:f07f8ebca9"},{"from":"F:ba97282cf5","to":"F:65193a9799"},{"from":"F:bb0ec91260","to":"F:05bffc70e9"},{"from":"F:bb2d98fca6","to":"F:f942e88a8f"},{"from":"F:bbb6476d71","to":"F:4ebb5aa8a0"},{"from":"F:bbb6476d71","to":"F:f07f8ebca9"},{"from":"F:bf3dae9563","to":"F:6f247eb514"},{"from":"F:bf3dae9563","to":"F:f07f8ebca9"},{"from":"F:c14dd92bce","to":"F:8b122c449e"},{"from":"F:c1a96ec6e2","to":"F:a1baa3f01d"},{"from":"F:c2ff3fda15","to":"F:268769c4a6"},{"from":"F:c3cd2dc5c9","to":"F:1575110130"},{"from":"F:c412f056b4","to":"F:57ca5f1716"},{"from":"F:c4395c3023","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:1575110130"},{"from":"F:c5938c33fd","to":"F:98529ba7ea"},{"from":"F:c5da07872e","to":"F:c0e80ca327"},{"from":"F:c9493b5275","to":"F:05bffc70e9"},{"from":"F:c9493b5275","to":"F:4ebb5aa8a0"},{"from":"F:ca0833ac73","to":"F:05bffc70e9"},{"from":"F:ca0833ac73","to":"F:4a7eaceb5c"},{"from":"F:cb3c5f7715","to":"F:05bffc70e9"},{"from":"F:cb3c5f7715","to":"F:34cb2b6c48"},{"from":"F:cba8f1d03b","to":"F:a7ce0f6452"},{"from":"F:cc361bd05a","to":"F:05bffc70e9"},{"from":"F:cdbe769ed3","to":"F:05bffc70e9"},{"from":"F:ce1173e176","to":"F:2fc610bd94"},{"from":"F:ce1173e176","to":"F:86838d35ac"},{"from":"F:ce1173e176","to":"F:9deac13db0"},{"from":"F:ce1173e176","to":"F:a402d2f9ed"},{"from":"F:ce41983a53","to":"F:ddeb486c49"},{"from":"F:ce41983a53","to":"F:fd660a117b"},{"from":"F:d01156348d","to":"F:71f0bfb455"},{"from":"F:d05701e1ab","to":"F:8c6234a8cb"},{"from":"F:d0d703a4e0","to":"F:d5b496b125"},{"from":"F:d135cffeaa","to":"F:05bffc70e9"},{"from":"F:d1b898f17f","to":"F:b9d806ba4d"},{"from":"F:d20e4b6b91","to":"F:7c8d518693"},{"from":"F:d20e4b6b91","to":"F:a8cfe45d27"},{"from":"F:d480e40c97","to":"F:05bffc70e9"},{"from":"F:d480e40c97","to":"F:1575110130"},{"from":"F:d480e40c97","to":"F:34cb2b6c48"},{"from":"F:d5b496b125","to":"F:8a9aff1529"},{"from":"F:d5b496b125","to":"F:deab644e60"},{"from":"F:d754b827f4","to":"F:fd660a117b"},{"from":"F:d8fb8339ce","to":"F:2fc610bd94"},{"from":"F:d8fb8339ce","to":"F:7c8d518693"},{"from":"F:d8fb8339ce","to":"F:8b122c449e"},{"from":"F:d8fb8339ce","to":"F:deab644e60"},{"from":"F:da42f69531","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:d5b496b125"},{"from":"F:dbb9c92ca1","to":"F:015261eab0"},{"from":"F:dbb9c92ca1","to":"F:1575110130"},{"from":"F:dbb9c92ca1","to":"F:1cf31c4792"},{"from":"F:dbb9c92ca1","to":"F:245efb551c"},{"from":"F:dbb9c92ca1","to":"F:2554ddd30c"},{"from":"F:dbb9c92ca1","to":"F:2b9c43b0ca"},{"from":"F:dbb9c92ca1","to":"F:4b91a9f65b"},{"from":"F:dbb9c92ca1","to":"F:7944059823"},{"from":"F:dbb9c92ca1","to":"F:ae46bbab81"},{"from":"F:dbb9c92ca1","to":"F:cb66095cb4"},{"from":"F:ddd82fc886","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:304ce7b89d"},{"from":"F:ddeb486c49","to":"F:37f4a5c04e"},{"from":"F:ddeb486c49","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:5b113a0914"},{"from":"F:ddeb486c49","to":"F:851f776227"},{"from":"F:ddeb486c49","to":"F:872221b1da"},{"from":"F:ddeb486c49","to":"F:8b5a1f94c4"},{"from":"F:ddeb486c49","to":"F:8d2cb93236"},{"from":"F:ddeb486c49","to":"F:932d33be00"},{"from":"F:ddeb486c49","to":"F:aa77f227a6"},{"from":"F:ddeb486c49","to":"F:aea3c05bca"},{"from":"F:ddeb486c49","to":"F:fd660a117b"},{"from":"F:de988f64d4","to":"F:76da13a8f7"},{"from":"F:df4b55ecef","to":"F:fc21812307"},{"from":"F:e00aec45ce","to":"F:22566cb46e"},{"from":"F:e053923067","to":"F:ddeb486c49"},{"from":"F:e2f1b5ac07","to":"F:304ce7b89d"},{"from":"F:e2f1b5ac07","to":"F:932d33be00"},{"from":"F:e2f1b5ac07","to":"F:ddeb486c49"},{"from":"F:e406ceab72","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:25e649633c"},{"from":"F:e40ce1af48","to":"F:3c479cac6e"},{"from":"F:e40ce1af48","to":"F:e406ceab72"},{"from":"F:e4e18d0b80","to":"F:304ce7b89d"},{"from":"F:e4e18d0b80","to":"F:d480e40c97"},{"from":"F:e540f7b669","to":"F:4ebb5aa8a0"},{"from":"F:e7380d1444","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:4a7eaceb5c"},{"from":"F:e8676a18b7","to":"F:9a3e8ed7d2"},{"from":"F:ea9e0801d5","to":"F:db651caf76"},{"from":"F:ec52ca3820","to":"F:0a85f3b8e5"},{"from":"F:ed9c47feb2","to":"F:ddeb486c49"},{"from":"F:edb11415f0","to":"F:05bffc70e9"},{"from":"F:edb11415f0","to":"F:b014028f57"},{"from":"F:edb11415f0","to":"F:f51cba9beb"},{"from":"F:edf42fb1af","to":"F:05bffc70e9"},{"from":"F:ee02e563c6","to":"F:304ce7b89d"},{"from":"F:ee02e563c6","to":"F:8b5a1f94c4"},{"from":"F:ee02e563c6","to":"F:932d33be00"},{"from":"F:ee02e563c6","to":"F:ddeb486c49"},{"from":"F:ee21289902","to":"F:e4ff19bbe2"},{"from":"F:f00c212d41","to":"F:8a9aff1529"},{"from":"F:f07f8ebca9","to":"F:05bffc70e9"},{"from":"F:f07f8ebca9","to":"F:cb3c5f7715"},{"from":"F:f13b76e6fd","to":"F:214cc0a5f4"},{"from":"F:f57cf1a212","to":"F:ce1173e176"},{"from":"F:f5d313e9f1","to":"F:34cb2b6c48"},{"from":"F:f5d313e9f1","to":"F:aa77f227a6"},{"from":"F:f5d313e9f1","to":"F:cc361bd05a"},{"from":"F:f6abfc128a","to":"F:81c495717c"},{"from":"F:f8168b956f","to":"F:bd02b28f17"},{"from":"F:f8609bae0b","to":"F:b5ae6ee133"},{"from":"F:f8609bae0b","to":"F:c64c042051"},{"from":"F:f90930c3c3","to":"F:932d33be00"},{"from":"F:f921eecad7","to":"F:92d6903b5f"},{"from":"F:f942e88a8f","to":"F:7c8d518693"},{"from":"F:fa49930755","to":"F:05bffc70e9"},{"from":"F:fa851dabe1","to":"F:90cbb2cf6a"},{"from":"F:fb5935daaf","to":"F:d8fb8339ce"},{"from":"F:fc21812307","to":"F:05bffc70e9"},{"from":"F:fc21812307","to":"F:f51cba9beb"},{"from":"F:fc43ea4859","to":"F:a8cfe45d27"},{"from":"F:fc5d887ff6","to":"F:05bffc70e9"},{"from":"F:fd08562f92","to":"F:05bffc70e9"},{"from":"F:fd660a117b","to":"F:05bffc70e9"}],"merkle_root":"sha256:77f438f5f02372a26baf9b3f1e7ebccf8c303be25ed47f16122ccc4c80ee0f41","modules":[{"hash":"sha256:6dc63314489172db52e377b81586f4d971b3e8e8c97932bacbf1af2c6f8dfa34","id":"F:94b941cbd6","path":".design-sync/NOTES.md","purpose":"Design-sync notes for @modonome/design-system"},{"hash":"sha256:d388fef8f0ef810801a06a03ceb24df6cff996f52e1b83d795223e88e2fa3ac8","id":"F:e146bc5acb","path":".design-sync/conventions.md","purpose":"Modonome control-panel design system"},{"hash":"sha256:8ce50e2dd94a258eaa07c493d89f88ed31eb19fac52f66e263613f0a8189ab10","id":"F:2207a6ebce","path":".design-sync/previews/ActivationLadder.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:23d7645f8f2ae7d6d9f7d78bfd8124c24c32d7516226c992d45a1d71d6af83a0","id":"F:2470e60179","path":".design-sync/previews/AppShell.tsx","purpose":"function Dashboard"},{"hash":"sha256:cff8b3e50869d91ecf4e64d89b0bf46e06a0ac59b8f746500b0d29d942a0b72c","id":"F:28b7af3c53","path":".design-sync/previews/ArmingStateBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0b2ebe0d1c0ab726f746e4c802535c32113dcd0be638669fc2b6786d6a0fea55","id":"F:9c9edea0c9","path":".design-sync/previews/AuditTimeline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea473851738c286a9447e28999aca5834455f7d9cb18c34df8fd682e709ce18a","id":"F:f6e100ab45","path":".design-sync/previews/Button.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c31eb8ae99b2058922e089277497af5bab44f530b7a9cc92449594ddf26c61af","id":"F:3d505706cd","path":".design-sync/previews/Card.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:38c7bbf24e1e428bb1d6f81cb6298969901e21b3384c0dbe2480a4245f84862e","id":"F:3b4065b679","path":".design-sync/previews/Checkbox.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5966e42f7d9af4b42e3cf073e7021401a2df169bd1dd2b1798ab6e378d2fe928","id":"F:0a6a758e7d","path":".design-sync/previews/ConfirmDialog.tsx","purpose":"function ArmEngine"},{"hash":"sha256:c6090fad6e43e58babda80072cf2a6b49649eb3445a2f5ba7eee9b45d712eee7","id":"F:c63a71fb57","path":".design-sync/previews/CostPanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc1c2ec9b9f0017a6e607d532315276eea8db28cd99cac8594f37347ef8608ad","id":"F:3ce0fd77eb","path":".design-sync/previews/DecisionCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fae1e57fd27b44fe9f81dcbb786e712eb7fd2adad44ba559876a015489c63863","id":"F:41f5ffe77a","path":".design-sync/previews/Drawer.tsx","purpose":"function ItemDetail"},{"hash":"sha256:3038d7e248fc4717cd723d12c35a016302554050dd32154155539d037d181693","id":"F:7a43bf4ce5","path":".design-sync/previews/EmptyState.tsx","purpose":"function Queue"},{"hash":"sha256:e018db6be835e03424b38476f92e107a77b21f74d771329f961b45fe83f1ea29","id":"F:79467a3153","path":".design-sync/previews/ErrorState.tsx","purpose":"function Unreachable"},{"hash":"sha256:125b8b0930f89ffff0b4b79b27373e09c918f0b87540c4d50646044681d54d73","id":"F:bb6a874d58","path":".design-sync/previews/GatePanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2a40e8bb77149f133fea0da3eb37d69cd908fdf2f8b03f0e9414e7339175f7cc","id":"F:e19aab09cb","path":".design-sync/previews/HelpHint.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8cca0e33e7829d8f211b88580660e5eb88255beaa0eb350c3e5efa8d2b594d4f","id":"F:6bef3f93ab","path":".design-sync/previews/Icon.tsx","purpose":"function Set"},{"hash":"sha256:5c78ec1454886b9eb902dcb12f2959e0c7576329eb3b2a871eba20bf6ef7fd8d","id":"F:8972d37045","path":".design-sync/previews/IconButton.tsx","purpose":"function Row"},{"hash":"sha256:fc96c76182bca5d884808eac367770479920b0a26dd8589b05e67558c8aaea8e","id":"F:7008a20b1c","path":".design-sync/previews/IdentityChip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea7d6e9b5a0493031e4e3f6c4db5588f24e720447e26504b5bebdd074c4153b2","id":"F:5e207f73c7","path":".design-sync/previews/Input.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9ecceb08031c0dfb9aef94def837cc9323aee97400350cb6b081e27e25bc58fe","id":"F:250c8a0d4a","path":".design-sync/previews/LearningCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:336ba2dbb303f6d9cd43b74586e1a257f9558c2ecdc9d51133ea6b246f148d77","id":"F:31658eff0b","path":".design-sync/previews/LeaseTable.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e620053e7a3644efb9e55807fe283051e15a486fc2c14f5529e7368c01a5af99","id":"F:eecc78e7e8","path":".design-sync/previews/LoadingState.tsx","purpose":"function Reading"},{"hash":"sha256:418f59b1949eb49e0a691cc61ec16e66488904c2d8e10eff3df5a2f02ac86ff2","id":"F:e5e519f441","path":".design-sync/previews/MetricTile.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc59bdc51ec89727d6a6c8c93f47aa6c7bb7582d7fefb10bdaf328d3f6ce7a73","id":"F:4387a44284","path":".design-sync/previews/Modal.tsx","purpose":"function RaiseCap"},{"hash":"sha256:e0d0a49bad9e877cc356c787ffa0da6db285abd5c852588f04868584c774ebc3","id":"F:545c0ccfeb","path":".design-sync/previews/ModeSwitcher.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0d833fd549d8b4d5f442813338169460d362a2feb34e0b445b6bef6d096e325e","id":"F:84a5c32a4c","path":".design-sync/previews/NumberField.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fcf3376b833576255dbd3a04eb52a8a890dd86a72ac59e476dc6a23be31124b9","id":"F:d590ca62b9","path":".design-sync/previews/PermissionDeniedState.tsx","purpose":"function OwnerOnly"},{"hash":"sha256:4a78ba515e665d462f489516d0ab2a46a0bcc6b8534447ada6882f0e06d8c3f5","id":"F:a0abaf6a25","path":".design-sync/previews/ProgressMeter.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e071a9ba5ad50fe699a59d71534f1abd9a6cd1d8ee74028b03b8e8e303d1fbf5","id":"F:13d31b33ea","path":".design-sync/previews/ProtectedPathRow.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e481349dafae32464d94985ca42dcbbdd8a4269ab64003ca4360d9e3b56a72fd","id":"F:dd1be2cd7b","path":".design-sync/previews/QueueBoard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5b6f2c0cd438195208e8eef5115bdd969e0efab9a2eec99737e4b05232fa89ab","id":"F:973aaa9d86","path":".design-sync/previews/RoleBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2682007a94180ed7a815bd9396b26b2afb13349dcd07f9f7956cb16425ef6417","id":"F:3319e5c923","path":".design-sync/previews/SafetyStrip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:63be9d4779746eb6c05e1ef0d30a8642298979c377e8904416ec264a6c7e31a8","id":"F:08577063d4","path":".design-sync/previews/Select.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ebafef14ddabd45ded0276708625d66fc59f4e057ffb26231005e385e4b3681f","id":"F:1f40b6eb6e","path":".design-sync/previews/Slider.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:cb0ec11babc429a0a05100fe09f62f6dc9e3d0a4bb3066d24373d25c8ba7a458","id":"F:ca13fe2a5b","path":".design-sync/previews/Sparkline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ce4171194a1594c0faf6f8995b1c2090ce94ed85f019011f9047b023e37bd3f3","id":"F:10e76cfcd3","path":".design-sync/previews/StatusPill.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0c657cf2500f46881f17c88d45a343dd5eb5a12e5cf834bea56c633559beb857","id":"F:1aa7cf650d","path":".design-sync/previews/Table.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:a0075b8076d7d7273a92e39f26947d198feaf6178288edfaf909ae944543e77c","id":"F:6c0919b64e","path":".design-sync/previews/Tabs.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c80497f4fc76dfc93694a6e6a66493c37ca29bba5ae554ef0911318899fd29d7","id":"F:fe5ec971f8","path":".design-sync/previews/TierBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8e9e332a28ed3d1d95c08999f43bad01ec571eb1e1fd6340609763af2973d667","id":"F:7832db450f","path":".design-sync/previews/Toast.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:6611e0c1fe0f89d9896413183cd477107d3262a2e78eb9f60183a6a576da3ad3","id":"F:a0068c8817","path":".design-sync/previews/Toggle.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9e99851405022f58b67decb58571895fd3364ed5b5572255d1b205b4dc067a4b","id":"F:dca643f34b","path":".design-sync/previews/Tooltip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:db39ec6fae408a56c57a8057098117faa57d9c99e6a75dde16f20633369294ad","id":"F:f9c98a8642","path":".design-sync/previews/WorkItemCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:d1e58b99ee3bb38f608f1149ba9c91aec0b880efebfd39fa17ef86485c173d9a","id":"F:f0fbd8716f","path":".design-sync/previews/WorkItemDrawer.tsx","purpose":"function Detail"},{"hash":"sha256:98fa336aa591c02fa29e16ed588cf4b487cff2bd0b1af2281549198d5c2eff3d","id":"F:b2496e8029","path":".github/pull_request_template.md","purpose":"What this PR does"},{"hash":"sha256:b28f932a561debca1261a975b1372f34f7f65cab6b02540287e4dbf5f9f42bbd","id":"F:88c38fbc0f","path":".modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:8d72947d7df89abc064973db46ee441709345271e72590fe88fbac808ad102b9","id":"F:0f284c134c","path":".modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:8930a72be2","path":".modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:1091496939db093d5537491f17bfa0c6973389e9358351d459a7bd684c705a2d","id":"F:cac320dd97","path":".modonome/STATUS.md","purpose":"Modonome Status"},{"hash":"sha256:7612b8a03dec2d129e267e8d2388eb43b3fbb09491e5d645b63154ef2b0f3f28","id":"F:76f802c3ce","path":".modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:8d6bc8e18b55fc496653e39b579a6e78dd0f01963d4e067c193f040e3cc4e4b8","id":"F:7479c14986","path":"ADOPTION-GUIDE.md","purpose":"Adoption guide"},{"hash":"sha256:549f7b5474d361343fe50c72adcd71272c6d7ea9de671526312898108d339572","id":"F:a54ff182c7","path":"AGENTS.md","purpose":"Agent operating manual for modonome"},{"hash":"sha256:68959a7942b2071d37972af02218002fd5ed28e5f8424468a717556326bab99d","id":"F:8f6366fd8e","path":"ARCHITECTURE.md","purpose":"Architecture"},{"hash":"sha256:bf7540b3e98361366bd49f4425b5fea5fa031755c0e1fbb228fa9c09612a980b","id":"F:244a368695","path":"BREAK-THE-RATCHET.md","purpose":"Break the Ratchet"},{"hash":"sha256:2fa88b8a341b5c86bd63e903f2e4071cc72d6105181da7cbea2f557a643c85e5","id":"F:06572a96a5","path":"CHANGELOG.md","purpose":"Changelog"},{"hash":"sha256:579aac8dcce334ee66fe60c615dbb9eb6f2ccbc490927155683bbe1eebd4fb55","id":"F:6ebdb617a8","path":"CLAUDE.md","purpose":"Claude Code instructions for modonome"},{"hash":"sha256:4d727da51b5cd06505c3a5e6b5ad7c1a22c1bcefab642463bbd9af9c168eeb72","id":"F:2f41a784d9","path":"CODEX.md","purpose":"Codex instructions for modonome"},{"hash":"sha256:181625af6edfac7d6aec933f3b061d90ff82f197432aef15e7ce30a26fc3f800","id":"F:ffdbe3a1e7","path":"CODE_OF_CONDUCT.md","purpose":"Contributor Covenant Code of Conduct"},{"hash":"sha256:0c2aa53ee1a4c16fe977a05a53a2e5fc4b990fb75847109c67cd522d09d437f3","id":"F:eca12c0a30","path":"CONTRIBUTING.md","purpose":"Contributing to Modonome"},{"hash":"sha256:906963517f6ab1833ef5bd463ab4d5af9e1fca4b8d7c4f7a11c23f6b866d9324","id":"F:b60c6a93e9","path":"GOVERNANCE.md","purpose":"Governance"},{"hash":"sha256:7456d96e6a81d91da38daf2554bb2cd04b76a32fad3bb2b60496fd80b0c0f698","id":"F:c97cb4d123","path":"OWNER-ACTIONS.md","purpose":"Owner actions"},{"hash":"sha256:1aecab9188ddd263328850a7f1141dd9f9ed30df927d1a8502bb04a1c1671050","id":"F:147873af8b","path":"QUICKSTART.md","purpose":"Quickstart"},{"hash":"sha256:9cfd38d54f48dab4d39ddc9f34c45733ff89f7f13e54283a4da8efb1ceca32bf","id":"F:b335630551","path":"README.md","purpose":"Try it in 60 seconds (read-only)"},{"hash":"sha256:a88c4e5eedbb0616f44acc6d07caef87bf0b637bf89bdafba1a067d538504c43","id":"F:705a3ca9b3","path":"RELEASE-EVIDENCE.md","purpose":"Release evidence"},{"hash":"sha256:66624a1dc2eda1103b06fd62c6148bc69f1315250fd814e29cc0160d6cfdbc03","id":"F:683343bdf9","path":"ROADMAP.md","purpose":"Roadmap"},{"hash":"sha256:31d70ea3e20fdfddba1d7943ede88254b47fbd39a31eaa84c5aeabde4f13df6c","id":"F:f6ed156e4b","path":"SECURITY.md","purpose":"Security model"},{"hash":"sha256:13477e14ac1cce854455ced1d5b73ec311c0531937c72181bfa1f40714c020cb","id":"F:c5fe610b02","path":"SUPPORT.md","purpose":"Support"},{"hash":"sha256:e0123c5d471bb70a85c2817cd4149a7d2894cb03e5a154a9dcf48a0d222d2368","id":"F:cf2908e0f2","path":"agentproof/CONFORMANCE-INTERFACE.md","purpose":"AgentProof Conformance Interface"},{"hash":"sha256:351e5737e60cdb6dd71da251d46b0ba92883cc1a2f243cd6675cdc8dc9a9b600","id":"F:69ddfa4ff4","path":"agentproof/CONTRIBUTING.md","purpose":"Contributing to AgentProof"},{"hash":"sha256:1136550fe9dd1e28d6e35610417f02e781869050ef12b052941103a2b57b3357","id":"F:5621bc51b3","path":"agentproof/README.md","purpose":"AgentProof"},{"hash":"sha256:cec6a751469fad2823f03ef550ad5f2046e8b54aeb6e75028ba7d8247de128e2","id":"F:2ec4f6540b","path":"agentproof/SPEC.md","purpose":"AgentProof Specification"},{"hash":"sha256:f59a0beea3bd8744a2f6129af78d43fb5cafb5ed1f74e0242235bd9b9bd53f57","id":"F:02a5f8fc55","path":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:2e3364d087e95e36bb765de2eee6da2452b3a7bafb0a79a7fd63bd8f1d094db8","id":"F:a6d2bd3021","path":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","purpose":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised."},{"hash":"sha256:70221285edc659c839aaa46f647839ce1474b75c7832080f555c413b5e72b725","id":"F:3211d524ad","path":"apps/control-panel/README.md","purpose":"Modonome control panel"},{"hash":"sha256:d5a4aa57fa42de628b4471c5d83ce312f186f419dca82711b63b0d1ae0d7b724","id":"F:08b7435c86","path":"apps/control-panel/server/api.mjs","purpose":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the "},{"hash":"sha256:b3fc1a0f281280424df192b18996330aad770ec7b4f478d55a92739e39f17a84","id":"F:54df44aadd","path":"apps/control-panel/server/learningsFormat.mjs","purpose":"Shared parsing for the \"## Staged\" bullet lines in .modonome/LESSONS.md, so the"},{"hash":"sha256:228a98eb1b15ed2b88ee08a991cf28533a76b6e6915ff62903ced543efd19535","id":"F:8a3dd6ccff","path":"apps/control-panel/server/modonomeReader.mjs","purpose":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces"},{"hash":"sha256:974fef8a1f81a37bff27ba823e6628d4a3635fdb20e3ae7c641c22fa3430e579","id":"F:22566cb46e","path":"apps/control-panel/server/modonomeWriter.mjs","purpose":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent"},{"hash":"sha256:d3ade0ab81dcf1a4917ae08dbc212a45128eae37dd41a12e5c5c55224c419f8a","id":"F:fd4b8473fa","path":"apps/control-panel/server/ownership.mjs","purpose":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ remo"},{"hash":"sha256:009b188cdf39031d5ac114b143970b90ee5e0af27919c628ccf984f4c3b7599d","id":"F:5daab9894d","path":"apps/control-panel/server/remediationView.mjs","purpose":"Builds the read-only remediation view-model for the panel. Pure: it takes already"},{"hash":"sha256:6d2002d6c0e4d7c635579e95cb7f702b5557cd93ef9d495c2bdea0de888629ac","id":"F:113387361d","path":"apps/control-panel/src/App.tsx","purpose":"function App"},{"hash":"sha256:f4fbceb244e071e90647d343a88b4c0b8c9770a6a4b616d12afdfb1e9cedffcb","id":"F:f83d1100e9","path":"apps/control-panel/src/content/concepts.ts","purpose":"interface ConceptEntry"},{"hash":"sha256:3f26effc15065164e222f35c6afa4e14383abc81717ee9c82b4e4afc8cb227a0","id":"F:3c479cac6e","path":"apps/control-panel/src/lib/confirm.tsx","purpose":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying"},{"hash":"sha256:7c670d232646cedb62767ae274375ef101d1f0692207868dce3858f869fac18c","id":"F:e406ceab72","path":"apps/control-panel/src/lib/messages.ts","purpose":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to"},{"hash":"sha256:23ad78ee68f5ea7345ea24921f536f437550e368c05b57772bb4cd05ca13ea9d","id":"F:e40ce1af48","path":"apps/control-panel/src/screens/ArmingScreen.tsx","purpose":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separati"},{"hash":"sha256:e56fb3c60a9adcf8736b794dbe334b713a3b0f4a990ff27be97f35dd812fd33c","id":"F:304fa8ef33","path":"apps/control-panel/src/screens/GatesScreen.tsx","purpose":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duti"},{"hash":"sha256:4bd02344b5309e24886e004726a69625789261d1033fd4a56ffd81b9bf19db22","id":"F:757a70680a","path":"apps/control-panel/src/screens/LearningsScreen.tsx","purpose":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the le"},{"hash":"sha256:9b042842975fc785913060eba4c6d57051cc2731a5e94fbbd771925f61f1d3e4","id":"F:6627655633","path":"apps/control-panel/src/screens/OverviewScreen.tsx","purpose":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent act"},{"hash":"sha256:140a3167b9aef50622269cefaa249266db05395257e45ac4668418962e562dae","id":"F:4ebf08705b","path":"apps/control-panel/src/screens/SettingsScreen.tsx","purpose":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came fo"},{"hash":"sha256:a79197cd2a46b0c6aff0e216083609ba83f0968f235a1a1b92f741e24f870ff8","id":"F:9b3f18856e","path":"apps/control-panel/src/screens/WorkQueueScreen.tsx","purpose":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-o"},{"hash":"sha256:884d51c65ef17a85b1de66cbf069d6e1d7175821418c4e5b45942a97a710cc79","id":"F:95d4304133","path":"apps/control-panel/src/state/adapter.ts","purpose":"function finalizeState"},{"hash":"sha256:2aad779e74343b4f402fc303d1d8dfd21fe13949ea2a3928509a4c9cbd0fbee6","id":"F:0da05a2a05","path":"apps/control-panel/src/state/arming.ts","purpose":"function deriveMode"},{"hash":"sha256:94e47e65d592c6b417f883501a9aa9d5eee31af912800cc6b6c7d665b8231623","id":"F:25e649633c","path":"apps/control-panel/src/state/configDiff.ts","purpose":"function nestedMapChanged"},{"hash":"sha256:01e89e56bf70e21313d76809f34dfb3136f69e18b70663cc25a6cd7a66ea5925","id":"F:7d236c9aa6","path":"apps/control-panel/src/state/fixtures/host.ts","purpose":"const hostState"},{"hash":"sha256:5fae58196211667608e6b5aa19a2efb13369d01494d9e29ffbf0da6131428a23","id":"F:89aee72994","path":"apps/control-panel/src/state/fixtures/product.ts","purpose":"function titleFromId"},{"hash":"sha256:7f2f64711709f4e04e04ec8fcb7abdbf6c2182cd5ba512923fbd5ec4eefdc4ea","id":"F:ec52ca3820","path":"apps/control-panel/src/state/liveClient.ts","purpose":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway)."},{"hash":"sha256:d25e0a0d452ea3c90eddd7494e804239b14337a6282d043b32707e81a53deb09","id":"F:0a85f3b8e5","path":"apps/control-panel/src/state/types.ts","purpose":"The subject a mode points at: which repo the panel is reading."},{"hash":"sha256:43e8ac7af105c773703a9b6417945ec1746465970293ad9b9375840d6883b092","id":"F:f90930c3c3","path":"bin/modonome.mjs","purpose":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variab"},{"hash":"sha256:2e349c8b02be29e3512bc7eb25716062a4ed806d32990904b866d84ef41df9f4","id":"F:90cbb2cf6a","path":"challenge/judge.mjs","purpose":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {s"},{"hash":"sha256:e95a14ef3dbdb053d86c2199ef8ac89ddbb1e1a8b72032c7586ef31ab5943920","id":"F:5d2ce8ee7e","path":"checkerproof/README.md","purpose":"CheckerProof"},{"hash":"sha256:326f57c93fe3587633a56d23979ab4aa3d4e2397c059fcc10a43b681846578f4","id":"F:94050e680d","path":"checkerproof/runner.mjs","purpose":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output."},{"hash":"sha256:6414d67327b97282597ba13d4fe711331d1a96d6bdb0ad366626aedbe0848b04","id":"F:5376e86470","path":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","purpose":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves "},{"hash":"sha256:36a50a21ae88e90f3996e991501ff5133fe5dde362ea0635fc17bc123d5f01ba","id":"F:c7423b85cf","path":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","purpose":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unre"},{"hash":"sha256:4305f79d6b93ecb9d4211a358db37366621e7d542f655b45fca5fdb886cea192","id":"F:d744931e6a","path":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","purpose":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches pr"},{"hash":"sha256:0d704f6822c09c158318837fbe1507402d12fccac16861158c1490c4680ba5b0","id":"F:28f278b1d9","path":"checkerproof/scenarios/cp-04-scope-creep.mjs","purpose":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker "},{"hash":"sha256:a53be522971a73ada8bb992bdca820bc4a2d31addd30abfe133d13a2b37a3ac3","id":"F:34ca4e55d1","path":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","purpose":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, n"},{"hash":"sha256:93648a7d073062f5d92e5943903ce883ca68a951db56be4d45478ad630fc2989","id":"F:5253743405","path":"design-system/README.md","purpose":"@modonome/design-system"},{"hash":"sha256:cbcff3835f237d797f0c7ca291a991a0fd36dcb8b089ebcf744b05913d7a38a1","id":"F:14edab923f","path":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","purpose":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when ev"},{"hash":"sha256:57f80954a2d97a6a209b4475c07d16038fc6bba643f01328d4aff5fc794d5566","id":"F:268769c4a6","path":"design-system/src/components/AppShell/AppShell.tsx","purpose":"The Modonome brand mark: a teal ring with a check on the dark ground."},{"hash":"sha256:3993b916804f19ac4fa15d99e5a2b042607d43fc717c37d2617076c7ba25e0c1","id":"F:7a1f7d680b","path":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","purpose":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, ar"},{"hash":"sha256:f952f03815def29809be8f74ba31e88ce459b54a31cb4135688a030755eac1df","id":"F:76da13a8f7","path":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","purpose":"The kind of event recorded in the audit trail."},{"hash":"sha256:1c99d03bb6dd97a34c77c6752498ad51b9c1598b86316f7a7c336400a170967c","id":"F:8b122c449e","path":"design-system/src/components/Button/Button.tsx","purpose":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and *"},{"hash":"sha256:457c0d229b21452cd1ebbed360f195ff69dbfdbb14e231ecc10dc2bbbeec9279","id":"F:40eb542a82","path":"design-system/src/components/Card/Card.tsx","purpose":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, t"},{"hash":"sha256:056914568b3ca3d770f135b890f4c1538a4a74f92c13f8af95519900743bcc2f","id":"F:d20e4b6b91","path":"design-system/src/components/Carousel/Carousel.tsx","purpose":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scro"},{"hash":"sha256:efbb27ce7153b11fb7fc2f191d555a1f8f200616b90b6b9645bb44d3899c618d","id":"F:7054844360","path":"design-system/src/components/Checkbox/Checkbox.tsx","purpose":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * sur"},{"hash":"sha256:ca46497990303b19a2897b57a78af5475e4c21389901cdb21d7acd89fe38bc53","id":"F:81c495717c","path":"design-system/src/components/Slider/Slider.tsx","purpose":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announ"},{"hash":"sha256:1749a31827e26d5315b93b32f0835467bd966790860b259052dd1ef58a4429e6","id":"F:c0e80ca327","path":"design-system/src/components/Sparkline/Sparkline.tsx","purpose":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inlin"},{"hash":"sha256:0ce4a9dfe4be427aa7d81a5b7f1bcf1759b8d910b8184c57a02bf20cc732282b","id":"F:2f6c42c5ee","path":"design-system/src/components/States/States.tsx","purpose":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items "},{"hash":"sha256:a402f532e2ae9df7f4e1728c1c9a2891d67c4e70b584f2e879d36e86418b2fab","id":"F:2fc610bd94","path":"design-system/src/components/StatusPill/StatusPill.tsx","purpose":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or do"},{"hash":"sha256:7305e00d55b66cd30ad1083dff3787872a53e884744d212a333ffd022d93da4a","id":"F:a402d2f9ed","path":"design-system/src/components/Table/Table.tsx","purpose":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highli"},{"hash":"sha256:6390a12d96f31f795832d3cbcb460bd8142784a0e5498e05ec1439a43aefbeae","id":"F:1db369d970","path":"design-system/src/components/Tabs/Tabs.tsx","purpose":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-sel"},{"hash":"sha256:b455cb481a9f8ac3c2e29039fdcbff0d82ae37e5ca28409003fbe3529303a3b5","id":"F:da42f69531","path":"design-system/src/components/TierBadge/TierBadge.tsx","purpose":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, "},{"hash":"sha256:0eaf585024cc9b6b47c917317f09565c3e5905a901ea85698cd0dc299688dc2e","id":"F:ab334f34df","path":"design-system/src/components/Toast/Toast.tsx","purpose":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: m"},{"hash":"sha256:7c310667a053c1678db6dc008663b4a314b0c1f612bcb27f6f2d7bc3cc8c5c7d","id":"F:214cc0a5f4","path":"design-system/src/components/Toggle/Toggle.tsx","purpose":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a c"},{"hash":"sha256:2a9b6f1ea5893fbbf927c0709325446a864aed023ca789afc890fa32eb6030f5","id":"F:8a9aff1529","path":"design-system/src/components/Tooltip/Tooltip.tsx","purpose":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the"},{"hash":"sha256:6787fd41c6a7f0de4c0e2b7e8b5e4af929d3a3bda45cbc58fac0077cd897073c","id":"F:b5ae6ee133","path":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","purpose":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, s"},{"hash":"sha256:21f8d11ecf93eee3757dc47b0007b9ac0edf38eab77c113091e64b9a13283884","id":"F:08064e0c53","path":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","purpose":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens "},{"hash":"sha256:bdea45a54795dca5069c1ad0b5c8159fa4a00a292ce6e62c9c3b967748dcd58f","id":"F:7c8d518693","path":"design-system/src/lib/cx.ts","purpose":"Join class names, dropping falsy values. A tiny classnames helper."},{"hash":"sha256:7f07947b761351c40274e1af83ab1278dc6af2f268b61f8b11344506a794bd9f","id":"F:86838d35ac","path":"design-system/src/lib/format.ts","purpose":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\"."},{"hash":"sha256:18a15384b92501e8515b1bfc8b4a1e8947bea352611aeac378b1c71a23e7f9e4","id":"F:c64c042051","path":"design-system/src/tokens/tokens.ts","purpose":"CSS custom-property name for an arming mode color."},{"hash":"sha256:65423e5476fdd50a743b0ef1564643c98394d3f1ed2d347e0506dc1913b93949","id":"F:e5e9ec402f","path":"docs/LEXICON.md","purpose":"Lexicon"},{"hash":"sha256:29ba3cb66e137c91293ee4815ef683206cb24b67d349b8186d24627f7f87eb7a","id":"F:0b5ca119d2","path":"docs/README.md","purpose":"Modonome documentation"},{"hash":"sha256:d932cd4f5a2c1606a161167bb4f21ad7443112c207e5520e240f1806c72fecb4","id":"F:6e4723a45d","path":"docs/adapters.md","purpose":"Bringing an external agentic CLI (the adapter contract)"},{"hash":"sha256:173d95b4ae6ce1c5d0c93b6ff34196bde52d4117b07b33ddc6a7ee02b1983cb7","id":"F:6e4b629d3c","path":"docs/adr/ADR-001-self-governance-pipeline.md","purpose":"ADR-001: Self-Governance Pipeline"},{"hash":"sha256:853ce2cc504318bc8e294ab2a734aa7ed2f3c165500fa46eb5276db95093e7fc","id":"F:64c5acf802","path":"docs/adr/ADR-002-shadow-mode.md","purpose":"ADR-002: Shadow Mode"},{"hash":"sha256:7938a6cf42851b4c667e7c86f36f321531bb1cda42d8ec8be2e817ee7f2660a9","id":"F:14812742da","path":"docs/adr/ADR-003-agentproof-portability.md","purpose":"ADR-003: AgentProof Portability"},{"hash":"sha256:7b3919fdf35b4803351784a6e97f0fef53d943945922e8a01771c66b84285df0","id":"F:6dd88cde1c","path":"docs/adr/ADR-004-arming-isolation-enforcement.md","purpose":"ADR-004: Arming Isolation Enforcement"},{"hash":"sha256:4ae9f4aa1833fdb26a3ae2585ddd65ed7c2fa816c43e56755d666634926921e6","id":"F:d4ead22b1b","path":"docs/adr/ADR-005-run-observability.md","purpose":"ADR-005: Run Observability"},{"hash":"sha256:52484d1db4941c2e69b23dce3e059a364832a9213785e1011d53ea10f7c318ea","id":"F:dc00dfe394","path":"docs/adr/ADR-006-checker-independence.md","purpose":"ADR-006: Checker Independence"},{"hash":"sha256:670f9d8f98b830daf3398b8311c228b4533647f879e19e15b84bbaa161b48513","id":"F:0526aab88e","path":"docs/adr/ADR-007-claim-atomicity.md","purpose":"ADR-007: Claim Atomicity"},{"hash":"sha256:77402b5f5b6792751d2228af5fa40d754c4808c799955274db29405cb8510b59","id":"F:8c2e08ed12","path":"docs/adr/ADR-008-trusted-author-allowlist.md","purpose":"ADR-008: Trusted Author Allowlist"},{"hash":"sha256:85c78896e75ef98a0350008fa898323170454e918d5f1d40bfe75e969787ebbe","id":"F:00a0cb4ee4","path":"docs/adr/ADR-009-mcp-tool-auth-scope.md","purpose":"ADR-009: MCP Tool Authentication and Scope"},{"hash":"sha256:e0da3fc9d933331ecf32692d92e7aff081fe47d22936ab6899b274f4e03f5d4a","id":"F:de4538fe53","path":"docs/adr/ADR-010-knowledge-packet-trust.md","purpose":"ADR-010: Knowledge Packet Trust and Promotion"},{"hash":"sha256:3be6708edc9457216f91418d2d82adb51b902f99865cb15f2fa295110ceffadf","id":"F:d2b14b5b34","path":"docs/adr/ADR-011-ci-env-var-trust-scope.md","purpose":"ADR-011: CI Environment Variable Trust Scope"},{"hash":"sha256:6b260de5664608d0c560ba27d479991cfd25c470aae92b3f134be4f2da02410d","id":"F:6f5b5f0bc4","path":"docs/adr/ADR-012-harness-prompt-integrity.md","purpose":"ADR-012: Harness Prompt Integrity"},{"hash":"sha256:1dbf9afdac131fd48920ea6232c09671017209d989ef56150fa26fd5e126ffc4","id":"F:e844676be4","path":"docs/adr/ADR-013-config-downgrade-and-migration.md","purpose":"ADR-013: Config Downgrade and State Migration"},{"hash":"sha256:228b5b0f71563d679198d7a5e258a1f4d6c54e77015e03426e26029c4fc787b8","id":"F:1a58c06540","path":"docs/adr/ADR-014-knowledge-network-transport.md","purpose":"ADR-014: Knowledge Network Transport and Sync Model"},{"hash":"sha256:0b49c78427c07a5d4aa41f6d7ee3ccd490c380b61e0a8adf72b9fa7e2b4b26ed","id":"F:cbaff08a46","path":"docs/adr/ADR-015-knowledge-network-catalog.md","purpose":"ADR-015: Knowledge Network Catalog Design"},{"hash":"sha256:cd3664d5c465e78657dfad0c2394d890db8721ff17efa9b774d927392f9a5b62","id":"F:c077d16aeb","path":"docs/adr/ADR-016-knowledge-network-packet-identity.md","purpose":"ADR-016: Knowledge Network Packet Identity, Lineage, and Dedup"},{"hash":"sha256:dd3dbc63222d451861660dfc13cb3079a0ba00d4857d1dbe411937e4abbebd7c","id":"F:72b7ab4c3e","path":"docs/adr/ADR-017-knowledge-network-packet-signing.md","purpose":"ADR-017: Knowledge Network Packet Signing and Key Management"},{"hash":"sha256:9f6017d79d341d0cf99d4c68cb088b16e8fc7e24a81263855d3ac63e88dddcc8","id":"F:0a6b452f14","path":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","purpose":"ADR-018: Knowledge Network Import Pipeline and Local Re-Validation Ratchet"},{"hash":"sha256:d4975d473b876a68555a6fc8ff1df074ea53df18e5a8cdacacfbf2f75c460365","id":"F:28d4e1ad3d","path":"docs/adr/ADR-019-knowledge-network-execution-scope.md","purpose":"ADR-019: Knowledge Network Scripts Run in Base-Branch CI Scope"},{"hash":"sha256:2144d8d484fba40346bd38b105490b85586a29327f1c3aa290f287e3e6e376eb","id":"F:4aaece5252","path":"docs/adr/ADR-020-prompt-complexity-budget.md","purpose":"ADR-020: Prompt Complexity Budget"},{"hash":"sha256:fad6527345c252a1f413bea83f9d7e936ee47384a7b6f1cb0f96a7f0f9de7662","id":"F:24f28ae0fa","path":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","purpose":"ADR-021: Prompt Behavioral Regression Suite"},{"hash":"sha256:3c6cd64127ab8f6a7bc01e93892358dbf5b47571e10d561a1e5e558de9f3cd76","id":"F:35002ba3fe","path":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","purpose":"ADR-022: Anti-Rubber-Stamp Checker Telemetry"},{"hash":"sha256:f61b594192a7ace32fdaa94ba28e82b8dc27bfe839b49af8e637fca0391bc263","id":"F:b4279e0af6","path":"docs/adr/ADR-023-config-schema-migration-contract.md","purpose":"ADR-023: Config Schema Migration Contract"},{"hash":"sha256:1947cc76998fc11788589b2cfa1ace56293e64f75587e0be319c0f90772327a7","id":"F:a70145dc77","path":"docs/adr/ADR-024-capability-promotion-gate.md","purpose":"ADR-024: Capability Promotion Gate"},{"hash":"sha256:1b958ef93312b193f44193e203e8c253572f5f59211ff8137d6e67053e434574","id":"F:dc0cc6d551","path":"docs/adr/ADR-025-self-application-conformance.md","purpose":"ADR-025: Self-Application Conformance"},{"hash":"sha256:289e8dc568d7a9d4a02b0236d03fda1ae2b0323653fc3a023d3f3dba98c4de5d","id":"F:094efaca92","path":"docs/adr/ADR-026-learning-promotion-audit-trail.md","purpose":"ADR-026: Learning Promotion Audit Trail"},{"hash":"sha256:747626f0ebcb6a2b4458e4b6144ac86416a2a8953e602d6fae502e61a8038414","id":"F:d783999e16","path":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","purpose":"ADR-027: AgentProof Suite Expansion to 25 Scenarios"},{"hash":"sha256:bdf3ba61386081102e423597184d6b7b78ee53b60eaa2c23204d08cd4d7d1e16","id":"F:514a79560d","path":"docs/adr/ADR-028-portability.md","purpose":"ADR-028: Portability Validation Strategy"},{"hash":"sha256:7bd61ffe34ff4b25962fa8d5fa8f131b61782213fdff7c6fb31658380f2020a9","id":"F:d66f93d7b7","path":"docs/adr/ADR-029-adversarial-test-design.md","purpose":"ADR-029: Adversarial Test Design Principles"},{"hash":"sha256:c6b6bafc88dd8eed9f8dcd04b988d725c557dfbcd9972b6afdb8077f7fb1b3aa","id":"F:5a04bfa7a4","path":"docs/adr/ADR-030-embedding-safety.md","purpose":"ADR-030: Embedding Safety Framework"},{"hash":"sha256:c793fe2343c351a829714c39555b9f29dc73b23d3fa339065f14ca2a76d60633","id":"F:627afb27fd","path":"docs/adr/ADR-031-markdown-governance.md","purpose":"ADR-031: Markdown governance"},{"hash":"sha256:0d4fe4e04bc4cc160978de2d177a0aaacaa9da105dfe52e4801d95de95fe5a93","id":"F:3a70dc66ea","path":"docs/adr/ADR-032-oss-adapter-boundary.md","purpose":"ADR-032: OSS adapter boundary"},{"hash":"sha256:cc2816e62a042699a38168ce64bf0e43eb502277a49c7c9f464e33d2afb7d5c0","id":"F:b5f5700e4d","path":"docs/adr/ADR-033-repo-snapshot.md","purpose":"ADR-033: Repo snapshot"},{"hash":"sha256:48413d3e10d2c802c860ae06796c54b4a4f5c98a79122688fa75018c09af3e2d","id":"F:21752cf61a","path":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","purpose":"ADR-034: Compliance and audit doc staleness gate"},{"hash":"sha256:3b7df614cd01444cb19035016351d7148e86fa750ffdbde23fa262d0e6763e03","id":"F:c3588d683e","path":"docs/adr/ADR-035-metadata-remediator.md","purpose":"ADR-035: Metadata-only Commit-History Remediator"},{"hash":"sha256:ea9f950814081a796dab54219ab216345f187428dd8c3c262093f2fbc5f7ddcc","id":"F:750436d8c1","path":"docs/adr/ADR-036-policy-attestation.md","purpose":"ADR-036: Policy-Pack Manifest and Disclosure Attestation"},{"hash":"sha256:6c578562d5e2883fae66693c03afdeadec928657639626ff4dfa14d07ed2b208","id":"F:01a7edaeba","path":"docs/adr/ADR-037-policy-pack-adoption.md","purpose":"ADR-037: Policy-Pack Adoption Tooling"},{"hash":"sha256:f4ed302d621cdba1b05a7cb7338887ede84afae871cc2ad23fb5cfe5be0cfd03","id":"F:1a368a7935","path":"docs/adr/ADR-038-checker-as-review-service.md","purpose":"ADR-038: Checker as an Author-Agnostic Review Service"},{"hash":"sha256:cf60da2b108af71da94f3657a8edba35840ae517e00f172665351d6a0365de0e","id":"F:56a132aaca","path":"docs/adr/ADR-039-agent-capability-profiles.md","purpose":"ADR-039: Agent Capability Profiles and the Always-Run Crew"},{"hash":"sha256:d6c607ef85aef2400d7c407348195d6799c02bfcbb53c23151ca5190078c6504","id":"F:25fdf1f8f6","path":"docs/adr/ADR-040-end-to-end-operating-model.md","purpose":"ADR-040: The End-to-End Governed Operating Model"},{"hash":"sha256:364956eb17c4267d523eaed728c773af38e5f38bceeda9642bd4e50a5ed17935","id":"F:40887a152e","path":"docs/adr/ADR-041-gauntlet-replay.md","purpose":"ADR-041: The Gauntlet, a Host-Repo Gate-Integrity Replay"},{"hash":"sha256:ebc8e5161c570c7cb7b731014b9050033849966a11570ad3755d41560318dea4","id":"F:27086b6de3","path":"docs/adr/ADR-042-agentproof-verified.md","purpose":"ADR-042: AgentProof Verified and the Hardened Registry"},{"hash":"sha256:1c1c3ea0aee28bcf86addabaa79510b739e24299dc71d5122d7f326fc9650d87","id":"F:c7326495ec","path":"docs/adr/ADR-043-terraform-module.md","purpose":"ADR-043: Terraform module for org-level provisioning"},{"hash":"sha256:3370011df1de3044ed112eae438df4a907ac3621689864e4d97155472355e060","id":"F:ffcad313b6","path":"docs/adr/ADR-044-agent-org-structure.md","purpose":"ADR-044: The agent org structure and its configurability"},{"hash":"sha256:7813270906fcf35082b0fee1de9ff31db4b9e307e9f0038ce9b8e58619704136","id":"F:97fc86d7a3","path":"docs/adr/ADR-045-scope-focus.md","purpose":"ADR-045: Scope focus for launch. Proof before surface."},{"hash":"sha256:c608f49155da28e237edcaf817ba565fdf9d48c3a24856c142d26cd4fb793e44","id":"F:e9701967b3","path":"docs/adr/ADR-046-ship-the-deferred-features.md","purpose":"ADR-046: Ship adapter-verify, Break the Ratchet, and CheckerProof"},{"hash":"sha256:07236c8a59dc7952655f1b442e82fb773b9ee2cfcfd82a4de87587d2feeb7c70","id":"F:c3b2fcfb69","path":"docs/agent-org.md","purpose":"The Modonome agent org"},{"hash":"sha256:735569ae4c95b9b3cc468abc2d8a6b863475a25cd8d14988e356e33c5c1ed5db","id":"F:a384388adc","path":"docs/agents.md","purpose":"Agents, roles, runners, and models"},{"hash":"sha256:1a3057039a6a458ddc3be94b408cd17f7078bc4f5d84dc5a1bb28da1a8534927","id":"F:8a7591db62","path":"docs/audits/claims-audit-2026-06-25.md","purpose":"Claims audit, 2026-06-25"},{"hash":"sha256:d82a943730259de4fd7d57f0e4a7b2c3b1d7d6d58f1bb95e5895190a3480a0da","id":"F:6a3a98df8c","path":"docs/audits/claims-audit-2026-07-01.md","purpose":"Claims audit, 2026-07-01"},{"hash":"sha256:736538bc53e263123890881fca15f42561555a6b1e4d13b22fbb19c266d6a62d","id":"F:efd369884e","path":"docs/audits/claims-audit-2026-07-08.md","purpose":"Claims audit, 2026-07-08"},{"hash":"sha256:2dac20871ea07e1ce3708fbf8cb8f546b893e418486c7ad1f29f64df74284829","id":"F:3dcdfa18c0","path":"docs/autonomy-plan.md","purpose":"Autonomy plan: governed autonomy on free models"},{"hash":"sha256:3f5e1ae50727d09485d21fc98a19f4bf5e18079d7f09598f9d834e30cdb933bf","id":"F:95e51a604d","path":"docs/compliance/compliance.md","purpose":"Compliance"},{"hash":"sha256:22d7361557fb51fe0f6e60c086efcecd8d647f9deee172c5aa69119928c75a57","id":"F:5fa0ad758b","path":"docs/compliance/eu-ai-act-classification.md","purpose":"EU AI Act Classification"},{"hash":"sha256:9d6370381372c370f5daae8bde8638d4c805d17726d6b11c74e6675028778b2f","id":"F:7983a5dd39","path":"docs/compliance/openssf-badge-evidence.md","purpose":"OpenSSF Best Practices badge evidence"},{"hash":"sha256:c56f5c3dbbfa26d338d5a039e3b01258daeb8f45888117f5753a9ccab50ded83","id":"F:83d4d07afc","path":"docs/control-panel-modes.md","purpose":"Control panel: modes, and what you can and cannot do"},{"hash":"sha256:97f78ccf4a2589ea2b8f147e070e012554082ce45a921fc15d9cf5d96a874972","id":"F:191a17b151","path":"docs/enterprise.md","purpose":"Enterprise estates"},{"hash":"sha256:646676d2908eee2dd7caa4559f055a986cc6551b03d4b1ef3712c26e1c366778","id":"F:b81cf7567f","path":"docs/guidelines/markdown-governance.md","purpose":"Markdown governance policy"},{"hash":"sha256:9582fbef8508d57553d7dce7978de17865198f2aede85767ad548e7c79b402b0","id":"F:6bee8a97f3","path":"docs/launch/article-seeds.md","purpose":"Article seeds"},{"hash":"sha256:4770f83af6300c58e41041ac390f81917943b925aa5fe4420999b4696962c6f3","id":"F:930bc5297d","path":"docs/launch/show-hn.md","purpose":"Show HN draft"},{"hash":"sha256:c2a8514369ddf12ce8565a62f9e7b10b2f11c1628312e9257ea5f612d23d8071","id":"F:2bfaa5759d","path":"docs/launch/x-thread.md","purpose":"X thread skeleton (@ModonomeLab)"},{"hash":"sha256:911e3c3d9d96e433b3d5734a91a6d8f7f3cdad8f080d9aa46e3b0665fad51cae","id":"F:61486b1ec2","path":"docs/ops/add-control.md","purpose":"Add-control runbook"},{"hash":"sha256:9ce795a33cc46ee5bb875f06197a022074d104169b32fb552108e78a918857b2","id":"F:9d53df2290","path":"docs/ops/add-gate.md","purpose":"Add-gate runbook"},{"hash":"sha256:8925cf704bc9c68e322c2a14ee3c7f544649f6a382a8c82cfb2753f886312027","id":"F:1339474d8c","path":"docs/ops/merge-governance-setup.md","purpose":"Merge governance setup (owner action)"},{"hash":"sha256:7ddc7ca071ed94c0fc6f0684198c6c6cfb06112a700347754d78a3c9f3155576","id":"F:08baf2c1e2","path":"docs/ops/preflight.md","purpose":"Preflight runbook: am I ready to push?"},{"hash":"sha256:0afb51d17728db3e9e95ed786890325cf78cbb0abb9f8ebd4e0f2000072d411c","id":"F:f1f2b57403","path":"docs/ops/runner-model-config.md","purpose":"Runner and Model Configuration (WS-H)"},{"hash":"sha256:699f12ea40894445b8d909cfe98cb36ea3291778a463432c111a3cad820a6943","id":"F:c54a514860","path":"docs/ops/work-item.md","purpose":"Work-item runbook: the queue discipline"},{"hash":"sha256:d5152c802dc8b1474c04a4bdd443a4e6ec7cc540e2c7c02871d1b8714519154b","id":"F:0a640a72f9","path":"docs/research/README.md","purpose":"Modonome Research Directions"},{"hash":"sha256:dbf7884a73eebe19e227d71297f93b00d74e089b7cf93cd1df1e81e76dd857ef","id":"F:83ecac7524","path":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","purpose":"Agentic Governance Mesh: Research Direction"},{"hash":"sha256:355a11f71e2855a77b700a36713b17efc9ac0c06d6bd1fc562279202ff4fbc6e","id":"F:492786871a","path":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","purpose":"RD-027: Governance Packet Protocol"},{"hash":"sha256:f6efbea820092a98600911ff787dcf104d6f66b636e737a5869337223a5811ec","id":"F:0e78eb22ec","path":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","purpose":"RD-028: Trust Network & Discovery"},{"hash":"sha256:d6fefc664720aeb755233cc106ccaa872b5ac5a84c92550f3177ee77954e7c09","id":"F:ff644711e7","path":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","purpose":"RD-029: Packet Lifecycle & Versioning"},{"hash":"sha256:96d7c204886019a60f16679bc715bc9856dd9f11c01cf7c0be9dd23bd4a7a8d3","id":"F:cb8c4aadaf","path":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","purpose":"RD-030: Cross-Repo Governance Feedback"},{"hash":"sha256:9d73bf60d826564abdf1274e681a59ab2fcd27b23b2776ff0beb124bb3623b93","id":"F:0c07096c4e","path":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","purpose":"RD-031: Semantic Compatibility & Conflicts"},{"hash":"sha256:c3df99eed2b4134afc312ef5626a3ea6ada93228563fc838c6a536abcae49e03","id":"F:79cec3a152","path":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","purpose":"RD-032: Network-Level Ratchet"},{"hash":"sha256:16b1b26c33c80b3f4f946231b9fe7b2f3f29b891445cf9d7784583940693dd4f","id":"F:acd892d4a0","path":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","purpose":"The Governance Mesh Vision: Modonome as a WWW for Repositories"},{"hash":"sha256:c7f8fdb4ff6ac66235b70abbc785628dc62d7afd2707b8349c489ce7f64a77cc","id":"F:bcd1c88877","path":"docs/research/knowledge-network-architecture.md","purpose":"Cross-Repo Knowledge Network: v0.2 Architecture"},{"hash":"sha256:412df5caddf6378895f6a9a61f3e6175f0967ec36e8c550dc647f85d892869a8","id":"F:55673172df","path":"docs/specs/governed-autonomy-spec.md","purpose":"Governed Autonomy: A Specification for Safe Autonomous Software Engineering Agents"},{"hash":"sha256:a8be4604abf2f1f3f5069ca9519542d5cb297e1b8510b3d1fc62115e172cbc1d","id":"F:4d5cfa3611","path":"docs/specs/ratchet-spec.md","purpose":"Anti-Gaming Ratchet Specification"},{"hash":"sha256:117057588d3bde9166f502b23296313a7eb0d39c311d164c6ba6e3d9e2cff711","id":"F:c1cc304e56","path":"docs/versioning.md","purpose":"Versioning and embedding"},{"hash":"sha256:4cd43f8db80add0570df0f1adc1bddd8ba37dd1b3a04752a5b55846a09aba316","id":"F:88244532e4","path":"docs/vscode-workflow.md","purpose":"VS Code manual trigger workflow"},{"hash":"sha256:ab6445332dd2838b319c1a3c1ad357ce8d4190b81c7bd5674cb33c2012e0f4fb","id":"F:91a7efa0ba","path":"docs/workflow-fixes.md","purpose":"Workflow Push Event Fix"},{"hash":"sha256:8de7c8d5c9b8940c958fa8d7e6ce9fcdac2614927f9e38c6b4dd61ca51df634d","id":"F:fcc5f4b906","path":"examples/demo-app/README.md","purpose":"modonome-demo"},{"hash":"sha256:204b9ae011a6583c51ce31dcc14895f744c4b521410f72c2af62e1527b5c218f","id":"F:9666ca7f0d","path":"examples/demo-app/WALKTHROUGH.md","purpose":"Modonome on this demo app: dry-run, maker/checker cycle, and a real ratchet block"},{"hash":"sha256:8abb4449c6701801c43b4b9f03ce80f97f1ed09cf7e95630cffff687b422ed4b","id":"F:a37ab631dc","path":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","purpose":"Captured maker and checker run: demo-refund-coverage"},{"hash":"sha256:58dd762e7666111d5d22579223a5469d13cdc8141dcb2f9c293456b3ce62566f","id":"F:1174d7e2ba","path":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","purpose":"Captured gate-integrity run: the ratchet blocking a gaming diff"},{"hash":"sha256:ebe33167ee32caa55022fd15d7124f5f80e2e38bafdadd493e2a1cd73e868d02","id":"F:9444435647","path":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","purpose":"Captured run: the two-key arming mechanism, live, at a $0 budget"},{"hash":"sha256:add0234530427f1c666cc530f399c8c7242c071b75b2d953a1859dd27d2cd119","id":"F:599f5b2f28","path":"examples/demo-app/src/CartService.js","purpose":"CartService: manages user shopping carts stored in memory."},{"hash":"sha256:abcd98accc06e996929792a54325933e5c9062c7788870a06d911197d622996e","id":"F:54c6928de9","path":"examples/demo-app/src/CheckoutService.js","purpose":"CheckoutService: drives the checkout flow from cart to order."},{"hash":"sha256:21e75a44d724365e4a2fbf5f1869f91eaeaf9fd69c03f07f8cde66b70870d64b","id":"F:bd02b28f17","path":"examples/demo-app/src/InventoryService.js","purpose":"InventoryService: tracks stock levels for products in memory."},{"hash":"sha256:ac71e8f3cb979ba0a56453517c21600c02311dbe2a9fd83cd2ecf66ee002ddd6","id":"F:b9d806ba4d","path":"examples/demo-app/src/NotificationService.js","purpose":"NotificationService: records notifications sent to users."},{"hash":"sha256:7a9e84c178fbc67605c88dc5b987f5d274dcb5c1777b41f2ca2e4b5c3efaa987","id":"F:1ecd18c4b9","path":"examples/demo-app/src/OrderService.js","purpose":"OrderService: creates and manages orders."},{"hash":"sha256:a58caa051fa780ade55ccfbc3f97afd559f68bd99894f9195909169964ec46b4","id":"F:ff3aef693f","path":"examples/demo-app/src/PaymentProcessor.js","purpose":"PaymentProcessor: wraps a payment gateway with amount conversion."},{"hash":"sha256:75e7eb2c2d84332172ed6a023336c5ef9e7e4ccbccbdd47eed778eec4c1e7232","id":"F:8bb1b57470","path":"examples/demo-app/src/index.js","purpose":"Composition root for the demo app."},{"hash":"sha256:1afae5fa52dc4fb9da6958558524c5cef0cf50cc63beafe735d92d3a8922a8be","id":"F:3c53926ecd","path":"examples/demo-app/tests/CartService.test.js","purpose":"function makeDb"},{"hash":"sha256:b2320331f4ba103ef635b1377172c522abcbb95be380f15493e6deaf38278292","id":"F:52caf3b287","path":"examples/demo-app/tests/CheckoutService.test.js","purpose":"function makeCartService"},{"hash":"sha256:1bb3ddc7d9966c00d23c01cf9d9ed06cb002a002f01f759d8382bb4c547d0f09","id":"F:f8168b956f","path":"examples/demo-app/tests/InventoryService.test.js","purpose":"function makeDb"},{"hash":"sha256:3748cc9dfe7d9cc71b49559646c276a835ceb00cf11a7ad6ec31af6f0035edae","id":"F:044b762a79","path":"examples/demo-app/tests/OrderService.test.js","purpose":"Tests for OrderService."},{"hash":"sha256:41ca78f6845a8d5b2a3386a2e5dbd906e8e15936f8af9edd91a868e3dda27627","id":"F:373a946d5c","path":"examples/demo-app/tests/PaymentProcessor.test.js","purpose":"function makeGateway"},{"hash":"sha256:6cbc7df60ec7300fd8a38f82a14cd39b637b69acc15477bfb94e5b69a69000a9","id":"F:d52b08ebeb","path":"examples/node-typescript/README.md","purpose":"Example: Node and TypeScript service"},{"hash":"sha256:f04c42db742b1a61a21e1a5e4daa6e556879454a2ddb5213a8141c82e08fc689","id":"F:93f0f5d3de","path":"examples/node-typescript/src/checkout.ts","purpose":"type Card"},{"hash":"sha256:d244fe19489b99550187b195234440ed263227b76c6fc2f4e4b3231a4bda724d","id":"F:ae227d695d","path":"examples/python-service/README.md","purpose":"Example: Python service"},{"hash":"sha256:22be80cafe6ef2f172dcea2a76083692cb4cbaad6fda65011a3e4ebac72dff6f","id":"F:7ccad64380","path":"examples/python-service/app/orders.py","purpose":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after d"},{"hash":"sha256:6ac7d0d8b8789da8454f3774ed4e4c92e595378f15b9c065fc150bfe2c2eebcf","id":"F:2c2cc77861","path":"examples/python-service/tests/test_orders.py","purpose":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50"},{"hash":"sha256:572478361a59803f53a72fd7e2ef8a7f189f3765c6b65d07ee7caf80ebd41584","id":"F:c72e6949b9","path":"fixtures/adapters/reference-adapter.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9e256013a4969962340b88bc4fbd1a18faa54136e9c40145752d699faa37ad0a","id":"F:fdaf1308e4","path":"fixtures/evidence-tampered.md","purpose":"RELEASE-EVIDENCE"},{"hash":"sha256:b69a37444b540b95bbc9414c30f90effbae363f0a41c61d107d2fb41def038ad","id":"F:a1411f1423","path":"fixtures/negative-controls/app-syntax-error.js","purpose":"Negative control: intentional syntax error in example app"},{"hash":"sha256:c68d242c675ce2ac4f466c43367a1f62b3c88685dd8d7a91cf56d82aa25a09e6","id":"F:6fdd929a92","path":"fixtures/portability/prompt-injection-host/docs/guide.md","purpose":"Host Documentation"},{"hash":"sha256:f3a7f116395c8dc6344c12e3bb59a33c043c77322adf73ae260d8390c3518cd7","id":"F:90f0999521","path":"fixtures/portability/prompt-injection-host/src/main.js","purpose":"This file contains adversarial content in comments that should not affect Modonome."},{"hash":"sha256:d5ef951e3b520b4c771cfbfd415cfadb7ba2e7f40b7c3ec6e58f2eaddecf54c9","id":"F:7fcbf6b32d","path":"fixtures/portability/schema-collision/README.md","purpose":"Schema Collision Fixture"},{"hash":"sha256:433f5d3005e295d639f837ed731df3d1fc9f69d87454a9059c20919cc1eb8e69","id":"F:c0714e4bf0","path":"prompts/modonome.bundle.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:05ea9c92a67465908f531a11893fb6e9e79800ae0754db9922348bfc37b408fc","id":"F:1c3b1b469e","path":"prompts/modonome.core.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:4f717a8789ae5bff9f95be1bdc42f7d8c5524217a166b837b487bc0aac54d6fd","id":"F:41623f0bcd","path":"prompts/modules/adoption.md","purpose":"Adoption pass"},{"hash":"sha256:6a9f76705145d5337c587b7f29a2e41b5a80fea39888b8ab99069027f4d99e13","id":"F:36693b0d8b","path":"prompts/modules/control-panel.md","purpose":"Operator control panel"},{"hash":"sha256:053fa9757f27a93ab0f30c796d714ae61d0d1f30b47ea3a93b81d39cf899bae4","id":"F:02359d48d5","path":"prompts/modules/gates.md","purpose":"Deterministic gates"},{"hash":"sha256:e66de7085c9cb23c1bf9e93144adfa2415b80134202d294c3cdc8b8a3aff2e0c","id":"F:c98f6b55e3","path":"prompts/modules/network.md","purpose":"Cross-repo knowledge network (Milestone 2, not shipped)"},{"hash":"sha256:5367fd6d871586fed38e0da4f9a287dec6baf532fe519d06569378f8f54f5481","id":"F:8f62475ebe","path":"prompts/modules/roles.md","purpose":"Agent roles"},{"hash":"sha256:cfaa37419ed0b88debeb9f9e2ce712a9e6e88e34b46a3b779722f794e47e0b88","id":"F:c324fab0cc","path":"prompts/modules/snapshot.md","purpose":"Repo snapshot"},{"hash":"sha256:bd2ccd3653b7c86cd3ad87326f69db6b788065c060516a2a7c5cffe2c27d7f45","id":"F:9a28b4e90e","path":"prompts/modules/state-machine.md","purpose":"Durable state machine"},{"hash":"sha256:3d7b33777faa2baf4d1b4f057fc4ea0381f6777f6ca342c607e760131208ddd9","id":"F:f5d313e9f1","path":"scripts/adapter-verify.mjs","purpose":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * "},{"hash":"sha256:9cb8c6696aa47049d5f8193269996b2849efba0073ef8bf5bd3b2a240c2267ee","id":"F:5b113a0914","path":"scripts/agent/action-queue.mjs","purpose":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued."},{"hash":"sha256:56b52308decd179cc645822572b7b57e2fef714fe9b8c58eaf4250493d6c47f9","id":"F:872221b1da","path":"scripts/agent/apply-patch.mjs","purpose":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker."},{"hash":"sha256:ba80f6381cc467a9c683002821c35d5b27c6019096ba81dc9c2c6ea2d1b401f6","id":"F:8d2cb93236","path":"scripts/agent/openai-client.mjs","purpose":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUr"},{"hash":"sha256:d9f7d2a9b42c3f1c8733b4082327011bc64cd445c82cded91b0ae1102e304ff8","id":"F:851f776227","path":"scripts/agent/parse-checker-telemetry.mjs","purpose":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true."},{"hash":"sha256:a21893a1726194e08208e2a6805c3e186aa9818c611b30234a4edeb9f63acbb1","id":"F:8b5a1f94c4","path":"scripts/agent/providers.mjs","purpose":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here."},{"hash":"sha256:92fe8a966146d773b203e831a54eb2a655572beae435b439aa325115a7fafd24","id":"F:fd660a117b","path":"scripts/agent/render-prompt.mjs","purpose":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read t"},{"hash":"sha256:990c960a7bdd181c31fba92eeeb60d7fa01360ecb16c2e93e6f41dff01e6c0b7","id":"F:304ce7b89d","path":"scripts/agent/resolve-role.mjs","purpose":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative whe"},{"hash":"sha256:e5779dca1895b87903260631ce711391e9a9eb5639c5c91158f7955f9a78928e","id":"F:2d6ef08990","path":"scripts/agent/review-diff.mjs","purpose":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into ap"},{"hash":"sha256:cebe0dc7f6340cb3f141af88716bcda80f3b1fb13ced87e84097dbcc9e0e6104","id":"F:2127a8caca","path":"scripts/agent/review-proposals.mjs","purpose":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mj"},{"hash":"sha256:abb3bebb9b8ef6e4bd91e48facd8e44d7d645556859045d19b6097676af5f55e","id":"F:37f4a5c04e","path":"scripts/agent/route-action.mjs","purpose":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the"},{"hash":"sha256:43cf44b9edf6feca7efb0f71f7e26c4a26ba530d6ef7a206ecb8e20382811cab","id":"F:ddeb486c49","path":"scripts/agent/run-cycle.mjs","purpose":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the res"},{"hash":"sha256:edeb925a87b920bb9b64a63c2a3218b0281b7237af6ad86ca1608b170e14d6fd","id":"F:aa77f227a6","path":"scripts/agent/tool-loop-adapter.mjs","purpose":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value "},{"hash":"sha256:3b7c9ec492dec9c378f582afef587b2ff23ec768bd982857ecdc4c0d77ecd04e","id":"F:aea3c05bca","path":"scripts/agent/triggers.mjs","purpose":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.ym"},{"hash":"sha256:87bc294cf5068d051e6d20d6056432da9925110e6f8db55b99660f8e36fc0bd1","id":"F:af6de66499","path":"scripts/agentproof-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9275fe5c20751f990b51b1021467f17e59250f4c38a45aa3b5b3a35daf6ace69","id":"F:5f7910375b","path":"scripts/arm.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:bd263b1245941e1b4041001b4afb0ba97b394dc5c9d8a1e1471ee33451bfd247","id":"F:fa49930755","path":"scripts/assert-governed-change.mjs","purpose":"function gitDiff"},{"hash":"sha256:f1141bf6b8313e4155e84d70e8fc631dd391abf85a19ee92218eb681161d6fe3","id":"F:c9493b5275","path":"scripts/audit-learnings.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:f8e07c6c13183b7fbf33578abd8ff3d70686fba63ffae44d0982a7368fc8eed5","id":"F:2e327963ed","path":"scripts/build-compliance-evidence.mjs","purpose":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object."},{"hash":"sha256:061241e18cce8d0dcf12c11db8c58927dea9d4ded02e2078c7def7f325a1ef58","id":"F:780c791407","path":"scripts/build-policy-attestation.mjs","purpose":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure."},{"hash":"sha256:dd530f7ea86c3a22ac08fdf514d8f7551be74ce4deb5f12d10fc1b22731d5a2b","id":"F:c4395c3023","path":"scripts/build-prompt.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:be7f3355b469f9afc2e06391aceaa8174ce7e70695aa6b0d573ac92274b07834","id":"F:9344d335a6","path":"scripts/build-release-evidence.mjs","purpose":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), s"},{"hash":"sha256:c77a817b7fc82d4ebee7775b907c151db19eac9863dbca666c8e0eef641f3529","id":"F:b16afebae9","path":"scripts/check-agentproof-registry.mjs","purpose":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:5c29d7dbd4be83018e5d25810618ca7a31df62a8e437b9144ea2554e2144d5ca","id":"F:4749cc43a0","path":"scripts/check-architecture-drift.mjs","purpose":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match "},{"hash":"sha256:b29bdd09ee9c05a106aff2d333fe6dd9842839d3dfe6b08a539674391590245c","id":"F:e8676a18b7","path":"scripts/check-attribution-fp-corpus.mjs","purpose":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (provin"},{"hash":"sha256:d216d2f5903d4bdc8eadf06f3dac38cae0f3df9786ab318881ab622a310559a7","id":"F:fc5d887ff6","path":"scripts/check-checker-engagement.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3310b9321df769c49419a6203cd88c79bcbd1a10655abba8798aa6665ef29198","id":"F:92d6903b5f","path":"scripts/check-decisions-authority.mjs","purpose":"Parse DECISIONS.md text into heading violations and Resolved-section entries."},{"hash":"sha256:d60e08a38e4005ed25ee758d7cf8e61ef9b751d0d32245c45a68c391066fa251","id":"F:87c30bdb4c","path":"scripts/check-drift.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:579e7403d192e1755d1ddf4a5f8567dd8ff14642db3442800583a173a1802c14","id":"F:9427d264e6","path":"scripts/check-edit-set-compliance.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3216227092f32ee7c6f96f49e7604bab76e808b6459685c22c1853f07ea067c0","id":"F:ace169adc4","path":"scripts/check-evidence-secrets.mjs","purpose":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync."},{"hash":"sha256:b430df3653f60df588991bb9a4d2a3d960098b15e3defdcbe7fadec6fa9afedd","id":"F:fc21812307","path":"scripts/check-gate-dag.mjs","purpose":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no "},{"hash":"sha256:9702cbaa25ff0244bbfd29c1f63ae498861dd5e5ea84914860c672c2a762c875","id":"F:cc361bd05a","path":"scripts/check-licenses.mjs","purpose":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:50afc330cf4fac557f8b99eb5906ca2932616c858ea4811adcd03e542080fd37","id":"F:fd08562f92","path":"scripts/check-md-governance.mjs","purpose":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research."},{"hash":"sha256:3c601bbcdfc8b45a42b893b35a86a22321f7c5f56c6e03e591f64eeb2da92d94","id":"F:2d4c555ba1","path":"scripts/check-portability.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:abfc4b3e72056ce2540816630ffb66f166c0cfcc906ddc57ab2274ccbb88ced4","id":"F:c5938c33fd","path":"scripts/check-promotion-readiness.mjs","purpose":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate."},{"hash":"sha256:07bdd20c05fa3927668884c14b436f491487d1b590b057d9a8d8a4ed02a7ea01","id":"F:e7380d1444","path":"scripts/check-regex-safety.mjs","purpose":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped."},{"hash":"sha256:3313c93f4758a857263196d58fcb974ec3a68b431b6555e7db7c20cb922e55fc","id":"F:61296e720c","path":"scripts/check-repo-hygiene.mjs","purpose":"Helper"},{"hash":"sha256:72916ed386139b6b7506897cfa00ce06dcd8f9302c21c423ffa31856ff3d3da8","id":"F:4096620673","path":"scripts/check-self-application.mjs","purpose":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is p"},{"hash":"sha256:a44590cf10dbd2cd48800f5864c83a939307510be49125345ace97e1dbbec8e2","id":"F:8b8d3c46b3","path":"scripts/check-state-machine-acyclic.mjs","purpose":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned boun"},{"hash":"sha256:28cc840559474e83a1ee21dba95c35e28b268902f1a72fb2372147047d23f808","id":"F:ca0833ac73","path":"scripts/check-style.mjs","purpose":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase "},{"hash":"sha256:eaf537f197bd578bec1076407cda89e4c85973635231d5cdc3999ba527596b0b","id":"F:d6401dd73e","path":"scripts/connect.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:97433b7af1d83122e5a0b5dae4a3b004d4033de57d3c30803d82b670693bf2fd","id":"F:09ba331878","path":"scripts/detect-near-miss.mjs","purpose":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch."},{"hash":"sha256:3c6707888df8aaaaa3f402c119fbe05164b9c19b4c95df42abb4c3372a97602c","id":"F:6f247eb514","path":"scripts/dry-run-sweep.mjs","purpose":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing "},{"hash":"sha256:e1dcceba4e0522d0c121c0788768de2a53a50d140904067ae9643d931335aa74","id":"F:128b647d9a","path":"scripts/fleet-ledger.mjs","purpose":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse."},{"hash":"sha256:5cfd1768d2a265c8c9c50898d37377c3da90f9a0870fe804e32cea74fc5bbbc8","id":"F:522efae76d","path":"scripts/gauntlet.mjs","purpose":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rul"},{"hash":"sha256:563d044fe89ec39aa32f05e04406003e5cc38ff7850a003d9ad12da714eb5505","id":"F:8a10462927","path":"scripts/guard-ratchet.mjs","purpose":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote "},{"hash":"sha256:99de1dee24fee158bebf0282beea7c691e1db08ffcd225c96a3c861939b7b07c","id":"F:90e1fd2fd9","path":"scripts/hygiene.mjs","purpose":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves)."},{"hash":"sha256:ea137b388471eabcc768a50eaa87370d0d8ff22c5930538f2b02b7ee389abb7e","id":"F:a7ce0f6452","path":"scripts/install-hooks.mjs","purpose":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than"},{"hash":"sha256:d244edfb949175f0c6f949f0552a3b44c868873ac1fd477b8f9f3be0ebf499cb","id":"F:5a3543606b","path":"scripts/lib/attribution-fp-corpus.mjs","purpose":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word."},{"hash":"sha256:39eb059a2ae2d05ffea008a764c8ee54d4512f392d93c49cba0d1d0df7a26e78","id":"F:6e0bd62fa3","path":"scripts/lib/branch-name.mjs","purpose":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first"},{"hash":"sha256:1ad1f8a9b02017c0d197db0d6cc81425f8a7f7006aba988237647420fc958885","id":"F:245efb551c","path":"scripts/lib/canonical-json.mjs","purpose":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another."},{"hash":"sha256:ec29a7bc4bd47ae47abf9977d1ce9ea482f08c973cdaa5b07198c394fdc23bfa","id":"F:98529ba7ea","path":"scripts/lib/capability-flags.mjs","purpose":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/c"},{"hash":"sha256:a602b02d47546bf2f61d1ce0115814be8d94f25d26f8944bc2745caa4af2ddc0","id":"F:2d93cea2d4","path":"scripts/lib/cli-args.mjs","purpose":"Minimal argv helper shared by scripts that take `--flag value` pairs."},{"hash":"sha256:cac7448be7d7d4dd22883cdcf78a7f351b926cd087505967814a1c2ff5dee2be","id":"F:e4ff19bbe2","path":"scripts/lib/commit-identity.mjs","purpose":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendo"},{"hash":"sha256:437e6ab7ef1994b7b6f1c508dfb7b50e66b454cc1c6bbbca20921583425f5741","id":"F:d480e40c97","path":"scripts/lib/config-validate.mjs","purpose":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers:"},{"hash":"sha256:784a3f9087775417d015cb26550348ea7b24b163a99df58d7004ad5a09dc3e69","id":"F:1a19f02364","path":"scripts/lib/control-panel-audit.mjs","purpose":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary "},{"hash":"sha256:ccc5c76cd7b844283a20f6e510b6aae9bf403f654cbb16bf1e632162e722a085","id":"F:4a7eaceb5c","path":"scripts/lib/detect-attribution.mjs","purpose":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the fir"},{"hash":"sha256:4b4b88d9bb97bd5f214e3321b995b646f067843323838c567bf2a73206bc1369","id":"F:0cacf66a3b","path":"scripts/lib/ed25519.mjs","purpose":"Raw 32-byte public key as base64, accepting either a public or private KeyObject."},{"hash":"sha256:71b31aebe22a8c98aafef65bed9f562e02b56bc00515de949a947f30ad9ecc9e","id":"F:9a72895a04","path":"scripts/lib/file-classifiers.mjs","purpose":"Test files: any language."},{"hash":"sha256:a3488a4f708323ac66b888445195aa30435c0447782db57b995a3599ad92f935","id":"F:ff2c4a08a4","path":"scripts/lib/git-scope.mjs","purpose":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo)"},{"hash":"sha256:521f61f9241e90e815aa0be486910b589b4eeaaa40b81d80b7c3c21cdf4887cf","id":"F:cdbe769ed3","path":"scripts/lib/github-api.mjs","purpose":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin."},{"hash":"sha256:151594baff293acbee5d59624d372828624fc07b8ca255ce1c69e894136afcd2","id":"F:f51cba9beb","path":"scripts/lib/graph.mjs","purpose":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the"},{"hash":"sha256:943e69c8656c227f4aaec006181a2ccfce440d491533c7d254a3ed1a57446a01","id":"F:34cb2b6c48","path":"scripts/lib/jsonschema.mjs","purpose":"A small, dependency-free JSON Schema validator."},{"hash":"sha256:d7e0fde286931884db99d3a1a496f428bd6c68fbddf5de8e75cb0fd7a6209a51","id":"F:594f505f11","path":"scripts/lib/lang-adapters/generic.mjs","purpose":"Fallback extractor for languages without a dedicated adapter. It captures common"},{"hash":"sha256:8e61f09199636a2a7bd4ed653ebb4176fd0f5c41f8f8719956613f0227db1122","id":"F:ffe5c1269b","path":"scripts/lib/lang-adapters/go.mjs","purpose":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding l"},{"hash":"sha256:39f6d32bbcecdcc56e34c94fa12cd68b0e0f303302324d2ce24d5fb85cae150d","id":"F:2554ddd30c","path":"scripts/lib/lang-adapters/index.mjs","purpose":"Resolve the adapter for a path by extension, defaulting to the generic fallback."},{"hash":"sha256:31bd1870b3685735b96c6fa032a6c9b7601c963658638d182dedf17103802d1c","id":"F:c598a2d684","path":"scripts/lib/lang-adapters/java.mjs","purpose":"Dependency-free signature extractor for Java. It captures type declarations"},{"hash":"sha256:7f8e7109694e05aadc965af340c67bab5cda5a9c0d0495535b5cf7385ed5a95b","id":"F:36419aa427","path":"scripts/lib/lang-adapters/js-ts.mjs","purpose":"Dependency-free signature extractor for JavaScript and TypeScript. It scans top"},{"hash":"sha256:752af1565feb9bf566c2683e75abb951d701ab390777e88c42baf1a6921b50ae","id":"F:3213d03b72","path":"scripts/lib/lang-adapters/python.mjs","purpose":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and im"},{"hash":"sha256:110290b3d6d591798432e680943ee28a30281a47504da121b58e834fa09c31e9","id":"F:cecdb96382","path":"scripts/lib/lang-adapters/tree-sitter.mjs","purpose":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered."},{"hash":"sha256:d6c309ff2f4bd2cc17f802ca282a312583327a153f10049310dbe98a6dad1f08","id":"F:4ebb5aa8a0","path":"scripts/lib/learnings.mjs","purpose":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evic"},{"hash":"sha256:e18e2c920e97766971ead19dfa0b82eb4911a2fe957cfb73ce7fe1ca2b5eac71","id":"F:2b9c43b0ca","path":"scripts/lib/merkle.mjs","purpose":"Hash raw file bytes (Buffer or string) into a prefixed digest."},{"hash":"sha256:60fea90ed1969e529114e0c8c88a58607618b0570bbc9c735bc56011da83d561","id":"F:e9f1cc1e5d","path":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:38ac9166a3c80ca01dc4aaeb0167cf9f4f1f138b707f2212528a70bbb3f678f3","id":"F:91e24dcac0","path":"scripts/lib/message-catalog/advisory/build-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:896322295191ba28f7c351678ad86b1b1fcdb22b729484173b52b8dc0068431b","id":"F:99251bc045","path":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:83f8ea50cb0ade3033e437971998189dd92da02f85c41655960254d08f8531c3","id":"F:c6bd51a324","path":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","purpose":"const MESSAGES"},{"hash":"sha256:56d58644294be2ef66bde21bac0dff8edca53bd83f4990fb809531cb2a0495c2","id":"F:1ff2bf39a4","path":"scripts/lib/message-catalog/advisory/github-api.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8ef6c2e14a8d0b58ece3bb7b3e1a7f98d780e799045c8ec2aa83d95379709441","id":"F:d328f97d94","path":"scripts/lib/message-catalog/advisory/hygiene.mjs","purpose":"const MESSAGES"},{"hash":"sha256:90d0f7c077bacdb650e433022ac8e2c968d7d8253dda7cd4e6c71aad0721ccb9","id":"F:4d08d5472f","path":"scripts/lib/message-catalog/advisory/learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8f8037a5cb63473a4912543f0203211419999bb61bde7d77fc6637a770f9283f","id":"F:d8e37c4449","path":"scripts/lib/message-catalog/advisory/migrate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:013ac5fd17e1afecd4793e8f132990132e1b4191fddeca1e89248bc236ec9c3f","id":"F:9b01a5cd4d","path":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","purpose":"const MESSAGES"},{"hash":"sha256:dcf18fb07eb5c297b55075a40d7a267da2f4632f1e23e0b9dd19b73578ba9793","id":"F:d288a78085","path":"scripts/lib/message-catalog/advisory/sign-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7aba6be92f59e9b9e0c22e1d4163686fce03fc729fc6097689f9df011b2c1a1a","id":"F:9a32917e56","path":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","purpose":"const MESSAGES"},{"hash":"sha256:e6844e187fe342bf462bbec7dc26ae8ca192285c46ed51cd6d2f82c7460df954","id":"F:dd58ae3791","path":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c63edcd93cab1923edcfa9e9e1fab374e4eac71b15fdfa171e26d787cf1314d9","id":"F:09ea014068","path":"scripts/lib/message-catalog/advisory/verify-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b6a5e7e1c42beacee11eb5a45f0f13999566e46c9fd486797a2ceb483f36f294","id":"F:da9133a29d","path":"scripts/lib/message-catalog/agent-run/action-queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9151a420940e33c897078aea7224430d08cb455aae601e44a078073cbe37cedb","id":"F:aa27d254da","path":"scripts/lib/message-catalog/agent-run/arm.mjs","purpose":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or dow"},{"hash":"sha256:6658d1a5b449f2ef7e2a8340fcb477ddb2e64d5dea0b79e31da5adb92a982ee8","id":"F:9616513cb6","path":"scripts/lib/message-catalog/agent-run/disarm.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0934bc4ec371ff52ae9f3e431d7c429ac048d7e0d663487f29c3a481bf380dae","id":"F:9803feef4a","path":"scripts/lib/message-catalog/agent-run/openai-client.mjs","purpose":"const MESSAGES"},{"hash":"sha256:4572c1be5d02623ba2bb952d81f8690ee828af9a8122439c64ec4d534d7f1b0a","id":"F:e948251d2b","path":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3586e3392442081e34ff5d91ca35569cf944c745c236df06978711a3726e0a5e","id":"F:5d52d97b8a","path":"scripts/lib/message-catalog/agent-run/queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:17f6398c9cb42806adabf7da20358039e55b6f7ac17715e85707cc6edd63df34","id":"F:a5822fdd03","path":"scripts/lib/message-catalog/agent-run/release.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c58f58b0e6aae4da93c0bc1922a47b9485abbe4b8cfa10bf31edb37942c5fbe5","id":"F:33c4d744f3","path":"scripts/lib/message-catalog/agent-run/remediate.mjs","purpose":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, "},{"hash":"sha256:7dd6e91aca949390bc9be664d950656960f20631ee69a4c14efae7ed61005d5b","id":"F:59b2499e4e","path":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:40bedb377bf613e45e81cfa30972c95cd5de3a4b36eaf721ef85503deb44c64d","id":"F:e2025a4e0c","path":"scripts/lib/message-catalog/agent-run/route-action.mjs","purpose":"const MESSAGES"},{"hash":"sha256:09d36c5933378524789996b727dac4db3cdedd84e1a2e9a0f22c3cc66d977bd5","id":"F:acc3f6b466","path":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","purpose":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advi"},{"hash":"sha256:4b3f343aa8615dec423fbddc2c090cb6ef30bd01589e8b164da68b6b79f915f2","id":"F:313bcfac46","path":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9735efc423677e7249cb9b85b4d7b4144a3aaa377780279637bc281408429a2d","id":"F:6a86908a3e","path":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9f526f99d6bbdeb34a67e2b03cc8bc011ba3d45875923a4397fd3220df6670ac","id":"F:1127892e72","path":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","purpose":"const MESSAGES"},{"hash":"sha256:db26343cd0406efc3d0147aca404aaac49ab5111b5e27bf7d6281473febdf79f","id":"F:964f89b6cc","path":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","purpose":"const MESSAGES"},{"hash":"sha256:eb0cfb783b0b42137f4f059e1a0bb6c713c511a335672b35298e5cd0bde4a6ee","id":"F:40d8f235fd","path":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3d6c96d1905aba0e8b1b3dfdb98a50cff5c6619329afdf92eb0c53c6c21e7d1e","id":"F:35d4a12b63","path":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","purpose":"const MESSAGES"},{"hash":"sha256:15411f6601e2524b7760c0b4ce06f61bfbaae59c924360d294dc104aadefcf16","id":"F:2715f09f24","path":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","purpose":"const MESSAGES"},{"hash":"sha256:62195cc465a6caa11f1bb8ac74b69e363a2015c75f072b2cd3a0a2e76bffc0ae","id":"F:a8c32b8f15","path":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:de8580a9807af52726a195ff6bbea0ba59024896e43e64ad563209a1ae931607","id":"F:b502a0fe75","path":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9b1d901e95fe1a39f690959333ef957b63c9b647fb6bdb8c90d95297d9262e7a","id":"F:2215d0e1fc","path":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0b53053e37e90fe399af325eecb321bd0259c7ec1009f414d40353c11e1da95d","id":"F:ccb72910b3","path":"scripts/lib/message-catalog/gate/check-drift.mjs","purpose":"Catalog entries for scripts/check-drift.mjs."},{"hash":"sha256:986f0df07a4720d88fbbc1b5742636295b56b156f0a85ef1dca5537551f89939","id":"F:05a0f0d5a5","path":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","purpose":"Catalog entries for scripts/check-edit-set-compliance.mjs."},{"hash":"sha256:2733747219e41422cb94f686f76ae82cabcdf6a6b04a8eb5e5ac7f45e93ed55a","id":"F:efa02030ca","path":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","purpose":"const MESSAGES"},{"hash":"sha256:74ed10d3af65d1c4cfd60c3bc16c0d223ba6ab2119cbba1436786a2d287328b0","id":"F:240ace7a8f","path":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","purpose":"const MESSAGES"},{"hash":"sha256:88f3cd8aef67912ef0e255cb4741653c5477fc1a4c6beb8a30f35aa142f1598e","id":"F:0c731e3460","path":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0dbe8208bead033ac950619986c6aa89ca356ba356dc77a184134a542606677b","id":"F:3835919e8e","path":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b276d73e960984be67d9728b2e2df11212942149bafcbbeeaa64265cb7d0ab8b","id":"F:3f1216fc11","path":"scripts/lib/message-catalog/gate/check-licenses.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5f842574f39f155e2a8da073e72208396eae4900cff3e05b455e3da8af71ae12","id":"F:b25dcdad19","path":"scripts/lib/message-catalog/gate/check-md-governance.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0da9a0f1224bb89807786944653c7da3e344f26722b53faaed0406518f23f0da","id":"F:23dbdd7e76","path":"scripts/lib/message-catalog/gate/check-portability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:d0b4806531e17afd05fe7e81b647f61dc3fc6633c4cce3282a93277fbba86617","id":"F:973aca5f3e","path":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","purpose":"const MESSAGES"},{"hash":"sha256:bc09937690d9279d167eebde956fd80e6d9da09ba5139df802dd1a5ff6bdfe80","id":"F:b4f4e16ca1","path":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","purpose":"const MESSAGES"},{"hash":"sha256:973c6d0a27ab11310c8414b6bf85549764f86882b6fa6bd55163b716b5eebee3","id":"F:597cc7ae15","path":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","purpose":"Catalog entries for scripts/check-repo-hygiene.mjs."},{"hash":"sha256:da60e62990a8ee27166781413a9718cd755c64104e7ad801a8447c56200e4100","id":"F:de188c1b79","path":"scripts/lib/message-catalog/gate/check-self-application.mjs","purpose":"const MESSAGES"},{"hash":"sha256:6e35dc5881832f52e637ba331d6361c7ee8fa741fd4cbf88e86a520ed02374f6","id":"F:179564da6f","path":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5e7ec0986719e01a5f2d8bd52df29ca0e60cc88f511822992031be12848a4e41","id":"F:9dbf431d3e","path":"scripts/lib/message-catalog/gate/check-style.mjs","purpose":"Catalog entries for scripts/check-style.mjs."},{"hash":"sha256:53cf657d4da273c63e8f24ee82f7582658d90fed61a0ed127950462ab7c2f197","id":"F:b2efd505ef","path":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c7bbeb3b7d9f0e776386632aa64287228eac6fc294f6b166c67209a2606a80d7","id":"F:e6677dcd37","path":"scripts/lib/message-catalog/gate/check-work-items.mjs","purpose":"const MESSAGES"},{"hash":"sha256:306896f7104deb562b7631cbc392ed01b500270b0225a1da73ac44002dd5c568","id":"F:86fd2cf669","path":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","purpose":"Catalog entries for scripts/guard-ratchet.mjs."},{"hash":"sha256:74717fcb0f99085d9d122db58e8e4ba94805d7322aef6bc620cf0d3cc199c774","id":"F:5b5b4ddcae","path":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","purpose":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (age"},{"hash":"sha256:ef1721e2305e6bb4ce9d7161f7539715485f76a36d1fec7ed074ab34049cd756","id":"F:a104667369","path":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","purpose":"const MESSAGES"},{"hash":"sha256:1bcf14f7da5da91f3110ecfeab482e2df7ebdedddb1ab0566a7f1a29dd2f5c1a","id":"F:ec3aa9930a","path":"scripts/lib/message-catalog/gate/validate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7c112cd9b24871b493e467957094dfd12be3a18b9b982fdf43a73dc252b1a206","id":"F:bf4e255c6e","path":"scripts/lib/message-catalog/gate/validate-work-item.mjs","purpose":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune"},{"hash":"sha256:3c7e98c3dd7abb28643d576ef61df514127dc8c62c7bb737464a0c629f6d4800","id":"F:03f476958e","path":"scripts/lib/message-catalog/index.mjs","purpose":"AUTO-GENERATED by a one-off script during migration. Aggregates every"},{"hash":"sha256:1169c59a31929d875f93c908e8979f38939fdbeedc3fc8c296e40b25b01522e5","id":"F:f41378fed0","path":"scripts/lib/message-catalog/panel/control-panel.mjs","purpose":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wo"},{"hash":"sha256:0694d9599d0f9d3dea44ee03d796aff6c9bde8ae2229bc7766948b9100274297","id":"F:05bffc70e9","path":"scripts/lib/messages.mjs","purpose":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries."},{"hash":"sha256:4f7779cf5392e036bb31212825c280df1825f69daaceeba4812ea39ed04d0882","id":"F:9a3e8ed7d2","path":"scripts/lib/near-miss.mjs","purpose":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identiti"},{"hash":"sha256:d60fc11156d34e1e740eb83a35af450377fa564f0d6cf64bf73422407451a6ed","id":"F:12c7a4e461","path":"scripts/lib/packet-id.mjs","purpose":"Content-addressed packet identity (ADR-016). The id is sha256 over the JCS of the"},{"hash":"sha256:facc1024c7256850c5287a76a89e091c1db28a5046cf9451b11379f16b242a70","id":"F:4db1101024","path":"scripts/lib/policy-manifest.mjs","purpose":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored"},{"hash":"sha256:3658a4a3013851c5dcb36c815d539c96ada209792b97326f384bfc670fb9e365","id":"F:8ffb11f281","path":"scripts/lib/remediate.mjs","purpose":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis"},{"hash":"sha256:22f072717e361c8cb6eca4926f99b8aa51fdb569f05b7586fb82f769c768f2e9","id":"F:ae46bbab81","path":"scripts/lib/repo-detect.mjs","purpose":"Build the small file helpers a detector needs, bound to one target directory."},{"hash":"sha256:7ea23105d1a1d923578a3c606d67aca39d5d6a01c06edc0da696b4fa2b6f8290","id":"F:b014028f57","path":"scripts/lib/run-gate-capped.mjs","purpose":"Thin wrapper around spawnSync with a hard timeout and output-size cap."},{"hash":"sha256:495d8f38fcbb601695c8f161eb1b02aea33adac82569ddd8bd6a002495589f9e","id":"F:68c4da7fe8","path":"scripts/lib/secret-patterns.mjs","purpose":"Returns an array of { name } objects for every pattern that matches text."},{"hash":"sha256:be57418797ef4ee54f3c3e71d7b3b13a89b5adc1ce0fbf9616db542bacc23156","id":"F:1cf31c4792","path":"scripts/lib/snapshot-anchors.mjs","purpose":"A short, stable id from a string. Hex keeps it deterministic across platforms."},{"hash":"sha256:d3e330978bbbc5f009688d69510b6c683fb59eaa66f154df8f911bd0a53fd278","id":"F:119e3c0fce","path":"scripts/lib/snapshot-cache.mjs","purpose":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option"},{"hash":"sha256:237f5b4282a76f71b0a2953e54c663750f138b5454aed474ea906a7f02587692","id":"F:dbb9c92ca1","path":"scripts/lib/snapshot-core.mjs","purpose":"Detect binary content by scanning a prefix for a null byte."},{"hash":"sha256:b538e22f73b15770c75edab736311cf48d00324e81e8aab01c6f4f274a5445ed","id":"F:015261eab0","path":"scripts/lib/snapshot-graph.mjs","purpose":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\"."},{"hash":"sha256:60c433da29ddd383027d0bb950d4cc1b4e74437b7448fc71e57e69ad4cf49ef6","id":"F:4b91a9f65b","path":"scripts/lib/snapshot-redact.mjs","purpose":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked."},{"hash":"sha256:97f8769695906c86e13308edb05def7aaa9fbcd592f29ee56d5c4d346e62a3a5","id":"F:cb66095cb4","path":"scripts/lib/snapshot-walk.mjs","purpose":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), *"},{"hash":"sha256:642e97312574db19dec8b678ebf04827ddcceecb6b5d7f960823006045ac03f2","id":"F:7944059823","path":"scripts/lib/token-estimate.mjs","purpose":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which"},{"hash":"sha256:3cf0f082a2ffc271f28e040c0432af60005821bc9e72152b73598d200bd4e204","id":"F:a1baa3f01d","path":"scripts/lib/work-item-staleness.mjs","purpose":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing o"},{"hash":"sha256:773578d3c2dc5529756fcbce2ad2f9d157a79d6b06b5772feee7d0c9bf2577c3","id":"F:cb3c5f7715","path":"scripts/lib/work-item-validate.mjs","purpose":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (the"},{"hash":"sha256:d53fbc6f62dfaab45537134168c78b39e1d4aa41ceb079fb829fb5876466c5de","id":"F:1575110130","path":"scripts/lib/yaml-lite.mjs","purpose":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string."},{"hash":"sha256:0209679156fb05ba27ff06b76b8eda2eeee8afd83c15b6e4a7e73edc23d8ddb1","id":"F:ab5077147a","path":"scripts/mcp-server.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ee850affb3bf19cd5b253535cf806dc341e885ff118589641c3208cbce63019a","id":"F:9d69a6b766","path":"scripts/migrate-config.mjs","purpose":"Safe defaults for every lever. Migration fills any missing key from here."},{"hash":"sha256:93cd048e0c8b17b97337fbb587101af43b3ea3d289e155fbb9baebeb8d4755d9","id":"F:7232ada2da","path":"scripts/preflight-embedding.mjs","purpose":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`."},{"hash":"sha256:b348d37fc2e50832baadc43039a306a4b5049507debcabde313087323b882d78","id":"F:ac11b5379f","path":"scripts/promote-learning.mjs","purpose":"Slugify a lesson into a deterministic ID."},{"hash":"sha256:47e7d2ead1129a6bd6a4a2202883e524778c990715b2027c5bca3b701ee5e079","id":"F:e9479e1a3b","path":"scripts/ratchet-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:08c26d5e35bea28010341cc485b8bacbc1def7ecf03d812a9b9d4d3ed7899054","id":"F:edf42fb1af","path":"scripts/release.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:a109bb6467a8c6c433d7839dfeeb8f605c0ed8f4fec6ceb69fdf3870be25d3d1","id":"F:1e5ef6ba70","path":"scripts/remediate.mjs","purpose":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-"},{"hash":"sha256:c03c8e271e9be99be123b63baca4bf1e24818c705bcd486d45eef82df7423d27","id":"F:3b382f95c0","path":"scripts/report.mjs","purpose":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he"},{"hash":"sha256:ace3ba225e4ff802da64a42e737843913c708e466602ab98a23151fb34d642ad","id":"F:edb11415f0","path":"scripts/run-gate-pipeline.mjs","purpose":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name."},{"hash":"sha256:cbe2d6ea83610d9a33c48f6dce83e514d1672687c85a032a873539b2cb2e5914","id":"F:5e450ff82c","path":"scripts/scaffold.mjs","purpose":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp"},{"hash":"sha256:d215c06b5aafdb9ff71a4c1ada37e33b202a688248f8098d8d238b4f30f72d74","id":"F:e11f907cba","path":"scripts/score-proposals.mjs","purpose":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale."},{"hash":"sha256:f6388f045a2cd30e25ab513e6b47875572c02ff15a17340b081446188fd31b4f","id":"F:7b3e38c9a6","path":"scripts/sign-packet.mjs","purpose":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rath"},{"hash":"sha256:cb7db504e88426d42954eb37c6b4695b11c738a38483e905b146d18f1654689d","id":"F:a0d489df6d","path":"scripts/snapshot.mjs","purpose":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yield"},{"hash":"sha256:3952dac12800b17c8153ed462ab6073b0ed24af0a188e898e5491f324fe84cc1","id":"F:8abf9e432a","path":"scripts/sync-site-data.mjs","purpose":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read wher"},{"hash":"sha256:aa0aa9abb59be3ae19db00c9ef7db9d6cc08045d3416b359875a1ec76b9da0f2","id":"F:23917c6197","path":"scripts/test-prompt-behavior.mjs","purpose":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns "},{"hash":"sha256:56007d9acd788c62cb891a03f1d22790b844390830a7c5aafda1347e4b3a4d89","id":"F:d135cffeaa","path":"scripts/transition-work-item.mjs","purpose":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older i"},{"hash":"sha256:f89c1fd863164fde2d373634069d30c4d3631be96a9768d5630901b52064d54b","id":"F:3b96b6dfed","path":"scripts/tripwire-check.mjs","purpose":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor bef"},{"hash":"sha256:18d20c24e1fc001459bc1926c55be66dac198f93ec7bf15e02be87818761585b","id":"F:65193a9799","path":"scripts/validate-knowledge-packet.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:240b429dd6418ed77a6ecad1a0635969884c96035107da3eb3e06183e7158e01","id":"F:0c1c5ad5d9","path":"scripts/verify-packet.mjs","purpose":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather t"},{"hash":"sha256:ce19e9a81b804f9827f62afc8d794ffbb68bdab9e5a744c9a0efc2303356ac66","id":"F:669d2a51f4","path":"site/README.md","purpose":"Modonome landing page (modonome.com)"},{"hash":"sha256:db50b84e07e0d99cd6b703e8d90b7ab0594b235fff2253aa203f3dbf2b8c141b","id":"F:aef9cf1e27","path":"site/index.html","purpose":"class Component"},{"hash":"sha256:41cc004d9a3d9f8d0701d181a235ae206d248470c009de18176e540f6b4a1888","id":"F:6a5934a79d","path":"templates/.github/copilot-instructions.md","purpose":"Copilot review guidance: gate integrity"},{"hash":"sha256:1e6ba7bac7bbcc6d85acac2228227493609359e98bcaae632ede494533923f87","id":"F:037178c793","path":"templates/.modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:1d2f92bf5237ba63d8447070c29beff13597b9668ab64f9f017a2e485bfe6ff7","id":"F:26c8e3a19a","path":"templates/.modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:515a65a35b","path":"templates/.modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:8918ad8e3a343b8450ba620de91ea940fb320d0cfd4c2b312a035aa6fe9fdc6f","id":"F:e27748d089","path":"templates/.modonome/STATUS.md","purpose":"Modonome status"},{"hash":"sha256:d528b04b9da3809145bc30439e8a0577daa9d4cfd059d7436aec7858660ec7b0","id":"F:75c1125713","path":"templates/.modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:1a28680281da45ca68d4e4d912b5cc4147c97f5d61c2b95d17513a69804347a7","id":"F:2148814594","path":"terraform/README.md","purpose":"Modonome org-provisioning module"},{"hash":"sha256:faafda4763433ac754f4936ae5a7545fe0f2aac848ef92003a78b1ac6f8fdef3","id":"F:195e9217ca","path":"tests/action-queue.test.mjs","purpose":"function tmpQueue"},{"hash":"sha256:66d197135fce5140ea1ee62cdf60ce50c1f2565d5589e95fce7657b99d8bc830","id":"F:cacaab56e1","path":"tests/adapter-verify.test.mjs","purpose":"Coverage for the adapter conformance verifier (docs/adapters.md). Tier 1"},{"hash":"sha256:f03b2f065139b4a025ce69bef63c9ab58d672c1674bcaf9628bc18e6a3013f8d","id":"F:18f569225a","path":"tests/agent-model-fallback.test.mjs","purpose":"WI-041 (ADR-039 follow-up): runtime model fallback in the loop. resolveRoleModelChain"},{"hash":"sha256:c6049e544a248e0df041509b989f0e4717b4df24aaa212aeb2ac984a48fad4d0","id":"F:1bc6d1449f","path":"tests/agentproof-attestation.test.mjs","purpose":"Tests for the AgentProof conformance attestation (ADR-042). The Statement shape and"},{"hash":"sha256:270640c566b3fb72ea5a277b4db30f7ed12cf51cc0e63472de3b6ebb4248bc88","id":"F:940d5f4399","path":"tests/arm-disarm.test.mjs","purpose":"Tests for `modonome arm` and `modonome disarm`: the guided ceremony that flips"},{"hash":"sha256:43bbfe482e04ee3d5f5310c89bb7ea589d5a9a57078fea7d007331560f81332b","id":"F:60548316f5","path":"tests/arming.test.mjs","purpose":"function tmpRepo"},{"hash":"sha256:0d90c61482079b4e23bcd539618b23439c4b11c4e026cbc7e677a3328f5df0ea","id":"F:8fe56e5618","path":"tests/chaos.test.mjs","purpose":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure."},{"hash":"sha256:825ad054cf87ff7205f4d60e6cb87fa820f7aeb1addb4b1d005dc71a480cbe5d","id":"F:564b053598","path":"tests/check-architecture-drift.test.mjs","purpose":"function makeMinimalRepo"},{"hash":"sha256:a9ca00820366b64f0e6c4b6d9108c7d0e7b152671ff5fe423e428ef0710f9f4c","id":"F:df4b55ecef","path":"tests/check-gate-dag.test.mjs","purpose":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says."},{"hash":"sha256:30690fee946ac10a3ecc618e5909fc2bb31f51b111173e2f2e52d999f2d01443","id":"F:0391f3b249","path":"tests/check-md-governance.test.mjs","purpose":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under te"},{"hash":"sha256:91b3a910fa42af06c4cfeba5b735c93e31a0268ef94c5c1c94f77bef05fb8497","id":"F:e359adb110","path":"tests/check-style-lexicon.test.mjs","purpose":"Tests for the Lexicon Gate wired into scripts/check-style.mjs: a banned term from"},{"hash":"sha256:4cba8865613c76bc3e95b3308f1be5cc76e5ba7b2a1003a85602f95e4c0f8aa6","id":"F:40e4f39b59","path":"tests/cli-dispatch.test.mjs","purpose":"function cli"},{"hash":"sha256:c803e7cccf71bd7bfc883e20cf0612e043e0ca62ef8b64215e32f1a71209b75e","id":"F:3ea503e7c0","path":"tests/compliance-evidence.test.mjs","purpose":"Helper reused by the mapping test."},{"hash":"sha256:cb57af34873242513701019e39d38d9336899d37c263372f90fcbbc74ef417ff","id":"F:5eff4122c0","path":"tests/config-key-parity.test.mjs","purpose":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`."},{"hash":"sha256:b1abc614f5f29ceacb2dbe8490be13605cbbab487feee98818689423b5fb451a","id":"F:5956278014","path":"tests/connect.test.mjs","purpose":"Tests for `modonome connect`, which registers the read-only MCP server with an agent"},{"hash":"sha256:2037529df3e0aa6dd33508e799f1cf299758373e3daf4c18dfa3b6920e803cdb","id":"F:d0da1cab80","path":"tests/control-panel-ownership.test.mjs","purpose":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config."},{"hash":"sha256:a0d9d96354cbf39c606470a59f64a93247ac045059b0e654319de426b68fb0c8","id":"F:e00aec45ce","path":"tests/control-panel-work-item-writer.test.mjs","purpose":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory."},{"hash":"sha256:6b5ed813cc8f8442ef1975e65f3a1cad7db442e8f7323a668e8acf41d13f5274","id":"F:8b2f3dbcba","path":"tests/control-panel-writer-nested.test.mjs","purpose":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state."},{"hash":"sha256:4e1f4b2cf905b3e5f11747628e019caeb327d4f1d9b77220575715ab16506836","id":"F:f921eecad7","path":"tests/decisions-authority.test.mjs","purpose":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }."},{"hash":"sha256:c80f660e875231f20615c19af04c4a405427dd7822dbbf8b48334c6d9aa4f8f3","id":"F:b70824b13e","path":"tests/dependency.test.mjs","purpose":"Read all .mjs files in a directory (non-recursive by default)."},{"hash":"sha256:c2a5852ebeed046ca14df04e80f524f33a60f0608226bb36a19b55bf6ed7ba95","id":"F:778c33cdc0","path":"tests/dry-run.test.mjs","purpose":"function dryRun"},{"hash":"sha256:56a9c14022247f4b8398927593ddee297edf4c37cc70fcc82446998691b173eb","id":"F:9cbe9238f8","path":"tests/e2e.test.mjs","purpose":"function tmp"},{"hash":"sha256:4cc22fbbf064820e9641e044e84851171e2b401d1f18d0d946875e9bce143951","id":"F:cc65dd1342","path":"tests/embedding-safety.test.mjs","purpose":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into"},{"hash":"sha256:e2138a1e49810b80b6b1bdd808e8139b7d586bc22874a53008f044e7faa897bb","id":"F:06b982f5a2","path":"tests/envisioner-role.test.mjs","purpose":"Envisioner role (ADR-039/ADR-040, Milestone 5): scoped innovation proposals from an"},{"hash":"sha256:c884fce8a5b2e930ae9a000272d3a4faa55a3e017229ab755bb695a370aec720","id":"F:571aa2f3ae","path":"tests/fleet-ledger.test.mjs","purpose":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals."},{"hash":"sha256:c4b0075f9fbb43245412a6ea6c9b4a8e7e43d6a6aab66477de3323fbf14d5046","id":"F:6da7bd8294","path":"tests/gauntlet.test.mjs","purpose":"Tests for `modonome gauntlet` (see docs/adr/ADR-041-gauntlet-replay.md): a read-only"},{"hash":"sha256:7aa6848dd94a7b5dc83ae094f4175a91cb90d6c063ac64311cdf78757efd7f66","id":"F:4dabd020df","path":"tests/helpers/mock-github-server.mjs","purpose":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @pa"},{"hash":"sha256:8f4842a323938cbfa8f9b1a0c8200938b87cee281a26dea3bd75f76d6c92e0c8","id":"F:eb14a0bdeb","path":"tests/helpers/mock-openai-server.mjs","purpose":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] "},{"hash":"sha256:159dd5948af7b763cca4920cd28fd95d9df9dc496cfbf88e69c7d776357163cc","id":"F:9bb94e1b40","path":"tests/hygiene.test.mjs","purpose":"function cli"},{"hash":"sha256:aa5c6b359e7da8f7b228dcb2a6e39a272695c3c9a4bb1a8bc512808e505b6b82","id":"F:cba8f1d03b","path":"tests/install-hooks.test.mjs","purpose":"function tempRepo"},{"hash":"sha256:27e8759927ffe5f7f0342d88dee88b66d761fa6eb8458b5696da274656995701","id":"F:54a3c626d9","path":"tests/learnings.test.mjs","purpose":"function run"},{"hash":"sha256:15169d4a2e50f7cebfddf83be2b0616b2d0d5dcf18202f83ab1a00288382fa19","id":"F:5994385869","path":"tests/maker-checker.test.mjs","purpose":"function run"},{"hash":"sha256:0e60f6fabd39f650beed080526df7fe86b8fc589a3b71b89f47cc52922ced78e","id":"F:093689bb8e","path":"tests/marketresearcher-role.test.mjs","purpose":"Market-researcher role (ADR-039/ADR-040, Milestone 5): an opt-in ecosystem scan,"},{"hash":"sha256:a1eb606786fdd89c7f98afcc4aa05eae41cfe658a4576a060335d499329b27d9","id":"F:a167609a41","path":"tests/mcp-compliance.test.mjs","purpose":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the st"},{"hash":"sha256:92582915bee1a0805d1bdba172b6b977e595259d11e36c09e790fcd065796ae2","id":"F:fadcf390da","path":"tests/metrics.test.mjs","purpose":"Schema-conformant event line using \"event\" field (not \"type\")."},{"hash":"sha256:201277007ce3e5c29c3424e6a238772c624c5d5398b20cd4baa147e91895310f","id":"F:55b3a4e2c0","path":"tests/migrate-lessons-rename.test.mjs","purpose":"Tests for `modonome migrate --rename-lessons`: the file-rename half of the LEARNINGS ->"},{"hash":"sha256:7701733aef7d6c28befcc6e63452082dbd3b00b8d8d351c6aa1577be6969e120","id":"F:3de9042953","path":"tests/packet-signing.test.mjs","purpose":"function setup"},{"hash":"sha256:eea7438755704a2c9aebdf7685484a77e9aff97e7b7d53d4db8ccc7930a55a2a","id":"F:b28f13b600","path":"tests/performance.test.mjs","purpose":"Build a synthetic 1000-line diff that is clean (no gaming patterns)."},{"hash":"sha256:75b053f720a36f2d63161f5be3a70fcec9c6fa29dba432e517124b391589a996","id":"F:137056535b","path":"tests/policy-attestation.test.mjs","purpose":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind."},{"hash":"sha256:e7d7eb8b5d39ac2311b724a6c4f4665ec1c8d7bb5d0b70763c250a63a484768a","id":"F:fd6ebce602","path":"tests/portability.test.mjs","purpose":"Run validate-config.mjs against a given config path."},{"hash":"sha256:8b3911ae2cc0de4fb6990f765ec3412ec60af1ebb34a2d997e75f322a5ce00a4","id":"F:e540f7b669","path":"tests/promote-learning.test.mjs","purpose":"function run"},{"hash":"sha256:72142379302da73a19ab7a02001f93b893a909a0066d609fcd6b3ff4a412f468","id":"F:ddd82fc886","path":"tests/promoted-learnings.test.mjs","purpose":"function withRoot"},{"hash":"sha256:cb2324595499e121c6c87625451a14ad222a01194ae72ef88d2ad3fccc2e2c0f","id":"F:ba97282cf5","path":"tests/provenance.test.mjs","purpose":"Base valid packet factory: returns a fresh object each call."},{"hash":"sha256:a2902a5457d0fcb137970762dc3a90f1f6f111c1b2cea892a1313bea8349350b","id":"F:ee02e563c6","path":"tests/providers.test.mjs","purpose":"function baseCfg"},{"hash":"sha256:e8cb0e1034dc9e30ccb24b0d3f85669463a1ed529752fd8edf71c2a2c568129c","id":"F:9f6dd5e5a3","path":"tests/queue.test.mjs","purpose":"Tests for `modonome queue`: converts scored dry-run proposals into schema-valid"},{"hash":"sha256:772d914bb9dbe6a2f28760d78c9f636fa97137e89f585137b041c0323d9585ce","id":"F:92dde817ee","path":"tests/ratchet-attestation.test.mjs","purpose":"Tests for the gate-integrity in-toto receipt. The Statement shape and predicate type"},{"hash":"sha256:3f465e8c640ee3a806371b2dd83ea7aba8fd2ee34a1c4bf726919ff0abb02743","id":"F:cede5f9fa2","path":"tests/ratchet-format.test.mjs","purpose":"Tests for the machine-readable ratchet output (--json and --sarif). These lock in"},{"hash":"sha256:a1600871aa4fc565b91d374e0b7944f56464a5dde0feab3b57d8174cdc51cb35","id":"F:f238d164c9","path":"tests/ratchet.test.mjs","purpose":"function ratchet"},{"hash":"sha256:63511f631cfdeb4f83708b6f72d1de0b0624fbf3036cc45ed2d24cc7b6a1b897","id":"F:44a5987438","path":"tests/remediate.test.mjs","purpose":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commi"},{"hash":"sha256:abe1d5445a00324d9c4fa6fcd367756fab6cae0f0939280c43695f586b009318","id":"F:8a3433b070","path":"tests/report-impact.test.mjs","purpose":"function tmp"},{"hash":"sha256:2f40d127b1ebdbf3e1719bcdaf07937b5d0e20fff5d66fb2d161bca1c541234b","id":"F:ce41983a53","path":"tests/researcher-role.test.mjs","purpose":"WI-042 (ADR-039/ADR-040 follow-up): the researcher actually running in the loop."},{"hash":"sha256:b87d5890928df18b21f8c57d5b46e743d330f1d4a108e3b682fb4254279a7df1","id":"F:e2f1b5ac07","path":"tests/role-registry.test.mjs","purpose":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are "},{"hash":"sha256:94e8507428bca4a9f2a0183ad7754b1e4380364e5c170115acc0f978a0d79f26","id":"F:0103cf3d56","path":"tests/rollback.test.mjs","purpose":"Recursively snapshot path -> \"size:sha-like(content)\" for every file."},{"hash":"sha256:5aa570f9f5b52b1376719c311c4348cccd1eedcaec959f655fcd0b04a236bdb7","id":"F:704e42d42b","path":"tests/route-action.test.mjs","purpose":"A config where each runner declares its environment and reach."},{"hash":"sha256:192c851aec2639e573cfac1e35f7b91fd162eaca7bfff35561dd3a38df433558","id":"F:580d11b514","path":"tests/run-cycle-openai.test.mjs","purpose":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be "},{"hash":"sha256:84c54d851c6f663b48b14ec859edb9176d4fe3f214b8c5502d7cafd8163d29d1","id":"F:d7d4e8d2a9","path":"tests/run-log.test.mjs","purpose":"function tmp"},{"hash":"sha256:b0ccad59d3b2eb7f575bb28dc4c0cdeae656b734372ef1c4f5a28283aca7763f","id":"F:de5ebbf586","path":"tests/scaffold-adoption.test.mjs","purpose":"function gitRepo"},{"hash":"sha256:61adc921fef938c2bbc7d80da41b3f25d9fa1bad854c262532686d9a16e763b1","id":"F:48355ccf4d","path":"tests/self-application.test.mjs","purpose":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true})."},{"hash":"sha256:939dff56c806160478559ac542a3ac09753c42c0cad986b79c0515d83225a153","id":"F:9f36b3ef29","path":"tests/snapshot-cli.test.mjs","purpose":"function run"},{"hash":"sha256:98db4465944b66bc892fa065a25ff21499c9c8b36790c7e484cce522c06d4c94","id":"F:2a74ae3f05","path":"tests/snapshot-golden.test.mjs","purpose":"function names"},{"hash":"sha256:c58456e425434ea92d0315727dbf7493b7bf5163acccc471865359b53708fdc3","id":"F:4637e1fecb","path":"tests/snapshot-incremental.test.mjs","purpose":"function repo"},{"hash":"sha256:1ac7429a13d1ee6d63273a9f1c12642328bbf454c9be2f3954c3518912bf5160","id":"F:ca05b6ba1c","path":"tests/terraform-module-shape.test.mjs","purpose":"function tf"},{"hash":"sha256:c5fcee70cbe65990dba4744c7b0e29280ad8e2165a7fce074f20773d5356cfe7","id":"F:baf7641a01","path":"tests/tick.test.mjs","purpose":"function tmp"},{"hash":"sha256:53a0c9a0ab5516f2c454f41ecf22f0516829d55376940b4daa24f91af95bbb8e","id":"F:ed9c47feb2","path":"tests/tool-loop-adapter.test.mjs","purpose":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close)."},{"hash":"sha256:325d8278b663211e574a2afc843024be684cf1dd5d51278b4a39a622dd38a824","id":"F:61c2a29876","path":"tests/tripwire.test.mjs","purpose":"Tripwires: the local, best-effort editor hook kernel (scripts/tripwire-check.mjs)."},{"hash":"sha256:c2c7ad14be6fbc5d9e6fe5cc3e40a4a0f72e82745c9c74948decc2628c1357b4","id":"F:1bcaaff9eb","path":"tests/ws-b-harness.test.mjs","purpose":"A config fixture with distinct maker/checker models and a models registry."},{"hash":"sha256:b2fde6e1764d60ca1135a54c765a9183d684d3c44012fe19e79dcf49b4114c77","id":"F:bbb6476d71","path":"tests/ws-e-negative-controls.test.mjs","purpose":"WS-E: negative-control fixtures that prove governance gates have teeth."},{"hash":"sha256:670746ec74b6650d92a5081683d9d20bf923b2141dcd011cee1a82126c8cbcfc","id":"F:2b49c74e74","path":"tests/ws-e-ratchet-languages.test.mjs","purpose":"function runRatchet"}],"schema_version":1,"token_budget":120000,"token_estimate":135721,"truncated":false}
+{"api":[{"anchor":"S:c5854b8940","doc":"Recursively snapshot path -> \"size:sha-like(content)\" for every file.","kind":"function","line":27,"name":"snapshot","path_id":"F:0103cf3d56","signature":"async function snapshot(dir)"},{"anchor":"S:44e7188c1d","doc":"Tiny content hash (FNV-1a): avoids a crypto import and is deterministic.","kind":"function","line":50,"name":"hash","path_id":"F:0103cf3d56","signature":"function hash(buf)"},{"anchor":"S:4ee042ed06","kind":"function","line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56","signature":"async function makeHostRepo()"},{"anchor":"S:08df8d7472","kind":"function","line":70,"name":"runPreflight","path_id":"F:0103cf3d56","signature":"function runPreflight(target)"},{"anchor":"S:c47beeac78","doc":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\".","kind":"function","line":11,"name":"normalizeRelative","path_id":"F:015261eab0","signature":"function normalizeRelative(fromPath, module)"},{"anchor":"S:0d7b0da50a","doc":"Resolve a relative import to a repo file, trying common extensions and index files. External and bare imports return null and become no edge.","kind":"function","line":24,"name":"resolveImport","path_id":"F:015261eab0","signature":"function resolveImport(fromPath, module, fileSet)"},{"anchor":"S:c732826ee5","doc":"Build an adjacency map { relPath -> [relPath, ...] } from per-file imports. Only edges that resolve to another repo file are kept.","kind":"function","line":41,"name":"buildImportGraph","path_id":"F:015261eab0","signature":"export function buildImportGraph(perFile, fileSet)"},{"anchor":"S:79144070a6","doc":"Degree centrality: out-edges of a node plus in-edges pointing at it.","kind":"function","line":55,"name":"centrality","path_id":"F:015261eab0","signature":"export function centrality(adj)"},{"anchor":"S:bb578790a3","doc":"PageRank over the import graph. Fixed iteration count keeps it deterministic. Dangling nodes (no out-edges) redistribute their rank uniformly.","kind":"function","line":67,"name":"pagerank","path_id":"F:015261eab0","signature":"export function pagerank(adj, { damping = 0.85, iterations = 40 } = {})"},{"anchor":"S:4d0bae812e","kind":"function","line":91,"name":"round","path_id":"F:015261eab0","signature":"function round(n, places = 6)"},{"anchor":"S:b88ce47ede","doc":"Rank files by a normalized composite of churn, centrality, and PageRank. Returns a sorted list of { path, churn, centrality, pagerank, score }, highest first.","kind":"function","line":98,"name":"attentionRank","path_id":"F:015261eab0","signature":"export function attentionRank(paths, { churn = new Map(), centralityMap = new Map(), pagerankMap = new Map() } = {})"},{"anchor":"S:5ad0c942a1","doc":"Report whether the import graph has a cycle and one example cycle, reusing the shared cycle detector so the snapshot can warn about circular dependencies.","kind":"function","line":117,"name":"findCycle","path_id":"F:015261eab0","signature":"export function findCycle(adj)"},{"anchor":"S:1e6749f65a","kind":"function","line":31,"name":"run","path_id":"F:02a5f8fc55","signature":"function run(env)"},{"anchor":"S:c932c7339f","doc":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under test can make the run fail or pass.","kind":"function","line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249","signature":"function makeMinimalRepo()"},{"anchor":"S:0ab594146c","kind":"function","line":33,"name":"runScript","path_id":"F:0391f3b249","signature":"function runScript(tmp)"},{"anchor":"S:689125598d","doc":"A git-init'd variant of makeMinimalRepo(), for the staleness check, which shells out to `git log` and needs a real repository to query.","kind":"function","line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249","signature":"function makeMinimalGitRepo()"},{"anchor":"S:bac2ebbef5","kind":"function","line":53,"name":"gitCommit","path_id":"F:0391f3b249","signature":"function gitCommit(tmp, message)"},{"anchor":"S:cd2e7eba8f","doc":"Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as ","kind":"function","line":61,"name":"gitCommitAt","path_id":"F:0391f3b249","signature":"function gitCommitAt(tmp, message, isoDate)"},{"anchor":"S:405ee38bbe","kind":"const","line":66,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e","signature":"export const CATALOG_PARTIALS = ["},{"anchor":"S:949f988c9e","kind":"function","line":10,"name":"makeDb","path_id":"F:044b762a79","signature":"function makeDb(orders = new Map())"},{"anchor":"S:e96fb86528","doc":"Catalog entries for scripts/check-edit-set-compliance.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5","signature":"export const MESSAGES ="},{"anchor":"S:f8524caefc","kind":"const","line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9","signature":"export const SEVERITY_RANK = { ok: 0, info: 1, attention: 2, blocked: 3 };"},{"anchor":"S:c12913d4da","kind":"function","line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9","signature":"function mergeCatalog(sources)"},{"anchor":"S:4bea381dfd","kind":"const","line":33,"name":"MESSAGES","path_id":"F:05bffc70e9","signature":"export const MESSAGES = mergeCatalog(CATALOG_SOURCES);"},{"anchor":"S:81c9c1291a","kind":"function","line":35,"name":"interpolate","path_id":"F:05bffc70e9","signature":"function interpolate(template, params)"},{"anchor":"S:db0bb71f37","doc":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries.","kind":"function","line":41,"name":"clampSeverity","path_id":"F:05bffc70e9","signature":"function clampSeverity(entry, requestedSeverity)"},{"anchor":"S:a79dad6e97","kind":"function","line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9","signature":"export function loadMessageOverrides(modonomeDir)"},{"anchor":"S:0044d1a126","doc":"Validate an overrides document (the parsed contents of messages.yaml) against both the JSON schema and the severity-floor rule. Shared by scripts/check-message-catalog-integrity.mjs (CI) and the contr","kind":"function","line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9","signature":"export function checkOverridesIntegrity(overridesDoc, schema)"},{"anchor":"S:8282a0b575","doc":"Look up a message by id, apply any operator override (clamped to the floor for non_suppressible entries), interpolate {param} tokens, and return the resolved { id, severity, suppressed, message } read","kind":"function","line":85,"name":"formatMessage","path_id":"F:05bffc70e9","signature":"export function formatMessage(id, params = {}, overrides = {})"},{"anchor":"S:6dde857e83","doc":"List every catalog entry with its resolved (override-applied) state, for the control panel's Messages tab.","kind":"function","line":104,"name":"listMessages","path_id":"F:05bffc70e9","signature":"export function listMessages(overrides = {})"},{"anchor":"S:ab3548c3d0","kind":"function","line":16,"name":"baseCfg","path_id":"F:06b982f5a2","signature":"function baseCfg(extra = {})"},{"anchor":"S:0a11409d06","doc":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens the * item: identities, lease, allowed e","kind":"interface","line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53","signature":"export interface WorkItemDetail extends WorkItemSummary"},{"anchor":"S:6a4d8aa30d","kind":"interface","line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53","signature":"export interface WorkItemDrawerProps"},{"anchor":"S:1e67af68fc","kind":"function","line":52,"name":"Section","path_id":"F:08064e0c53","signature":"function Section({ label, children }: { label: string; children: ReactNode })"},{"anchor":"S:fff471613b","doc":"A read-only inspector for a single work item, presented in the shared `Drawer` * primitive. Lays out status, the maker and checker identities, lease and branch * info, attempt count, the allowed edit ","kind":"function","line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53","signature":"export function WorkItemDrawer({ item, open, onClose }: WorkItemDrawerProps)"},{"anchor":"S:9f9c07db7d","kind":"function","line":10,"name":"Model","path_id":"F:08577063d4","signature":"export const Model = () => ("},{"anchor":"S:d3f17c584a","kind":"function","line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86","signature":"function isSelfGovernance(dir)"},{"anchor":"S:02e2e85572","kind":"function","line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86","signature":"function resolveModonomeDir(rawMode, dirParam)"},{"anchor":"S:8097fe47fc","kind":"function","line":40,"name":"readBody","path_id":"F:08b7435c86","signature":"function readBody(req)"},{"anchor":"S:a10a756308","kind":"function","line":59,"name":"sendJson","path_id":"F:08b7435c86","signature":"function sendJson(res, status, body)"},{"anchor":"S:0e6240f5b7","doc":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the base flag first (off => nothing is writa","kind":"function","line":70,"name":"writeGate","path_id":"F:08b7435c86","signature":"function writeGate(baseWritable, dir)"},{"anchor":"S:b06f3444be","kind":"function","line":86,"name":"stateWithSource","path_id":"F:08b7435c86","signature":"function stateWithSource(baseWritable, dir, mode)"},{"anchor":"S:62210684b4","doc":"Best-effort reachability probe for an OpenAI-compatible endpoint (LM Studio, Ollama, a gateway). Read-only and network-only: it never touches config.yaml, so it needs no write guard. Always resolves (","kind":"function","line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86","signature":"function buildModelsUrl(baseUrl)"},{"anchor":"S:3f9e6b3a7b","kind":"function","line":104,"name":"testConnection","path_id":"F:08b7435c86","signature":"async function testConnection(baseUrl)"},{"anchor":"S:5092562c12","kind":"function","line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86","signature":"export function modonomeApiPlugin()"},{"anchor":"S:9b40c124ce","kind":"function","line":17,"name":"baseCfg","path_id":"F:093689bb8e","signature":"function baseCfg(extra = {})"},{"anchor":"S:7078ce1661","kind":"function","line":40,"name":"today","path_id":"F:09ba331878","signature":"function today()"},{"anchor":"S:735c642c3a","doc":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch.","kind":"function","line":46,"name":"collectNearMisses","path_id":"F:09ba331878","signature":"export function collectNearMisses({ branch, commits })"},{"anchor":"S:4358d9c393","doc":"A denylist proposal is per unique (tier, surface, token): the widener proposes adding a token, not fixing N occurrences. Keep the first occurrence as evidence.","kind":"function","line":67,"name":"proposalsFrom","path_id":"F:09ba331878","signature":"export function proposalsFrom(findings)"},{"anchor":"S:b89188d9e3","kind":"function","line":76,"name":"main","path_id":"F:09ba331878","signature":"function main(argv)"},{"anchor":"S:79997ba94d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:09ea014068","signature":"export const MESSAGES ="},{"anchor":"S:b29fc4b0d5","kind":"function","line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d","signature":"export const ArmEngine = () => ("},{"anchor":"S:8cd25e6f09","kind":"type","line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:40a4170626","kind":"type","line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5","signature":"export type ArmingMode = \"disabled\" | \"dry-run\" | \"armed\";"},{"anchor":"S:49f97badd7","kind":"type","line":12,"name":"WorkState","path_id":"F:0a85f3b8e5","signature":"export type WorkState ="},{"anchor":"S:3e9158c80b","kind":"type","line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5","signature":"export type RiskTier = 1 | 2 | 3 | 4;"},{"anchor":"S:86cb290127","doc":"The subject a mode points at: which repo the panel is reading.","kind":"interface","line":25,"name":"Subject","path_id":"F:0a85f3b8e5","signature":"export interface Subject"},{"anchor":"S:a337ae8f0b","doc":"The engine configuration (schemas/config.schema.json), the levers the panel edits.","kind":"interface","line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5","signature":"export interface ModonomeConfig"},{"anchor":"S:577a1daeb3","kind":"type","line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5","signature":"export type MessageSeverity = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:6605365375","doc":"One entry of the built-in message catalog (scripts/lib/messages.mjs), with * this subject's .modonome/messages.yaml overrides already resolved. A * non_suppressible entry's severity/suppressed always ","kind":"interface","line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5","signature":"export interface MessageCatalogEntryVM"},{"anchor":"S:d22e005d52","doc":"A patch to one message's override, as sent to onSaveMessages. Omitted * fields reset to the catalog default; severity/suppressed are rejected * server-side for a non_suppressible id.","kind":"interface","line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5","signature":"export interface MessageOverridePatch"},{"anchor":"S:d56c1854d7","doc":"One prerequisite in the armed-mode gate checklist.","kind":"interface","line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5","signature":"export interface ArmingCheck"},{"anchor":"S:6bc87187a8","kind":"interface","line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5","signature":"export interface ArmingStatus"},{"anchor":"S:a4a9a79fbe","kind":"type","line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5","signature":"export type WorkItemType = \"fix-issue\" | \"develop-feature\" | \"create-article\" | \"create-plan\" | \"update-docs\" | \"chore\";"},{"anchor":"S:3f93aaa307","doc":"True for any state where a real actor could be actively working the item: * mutating it destructively (delete) needs the lease released first.","kind":"const","line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5","signature":"export const IN_FLIGHT_STATES: WorkState[] = [\"claimed\", \"making\", \"checking\", \"rework\", \"merge_ready\", \"merging\"];"},{"anchor":"S:5a49db2766","kind":"interface","line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemVM"},{"anchor":"S:f3e5c99141","kind":"interface","line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5","signature":"export interface LeaseVM"},{"anchor":"S:dddb39652d","kind":"type","line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:9bc07de53c","kind":"interface","line":181,"name":"GateVM","path_id":"F:0a85f3b8e5","signature":"export interface GateVM"},{"anchor":"S:126357e421","kind":"interface","line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5","signature":"export interface CostByModel"},{"anchor":"S:ebe2964819","kind":"interface","line":198,"name":"CostVM","path_id":"F:0a85f3b8e5","signature":"export interface CostVM"},{"anchor":"S:72a5c214ac","kind":"interface","line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5","signature":"export interface LearningVM"},{"anchor":"S:e03cf612ca","kind":"interface","line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5","signature":"export interface DecisionVM"},{"anchor":"S:6ef3b2f2e5","doc":"One commit the metadata-only remediator would rewrite, and why.","kind":"interface","line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationProposalVM"},{"anchor":"S:b41535d6e7","doc":"The armed metadata-only remediator (ADR-035) as a read-only surface plus one owner * lever. `applyEnabled` mirrors the config flag; `ready` is true only when every arming * condition is met, and `bloc","kind":"interface","line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationVM"},{"anchor":"S:3ad2d564a8","kind":"type","line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5","signature":"export type AuditKind ="},{"anchor":"S:7c6ba2a644","kind":"interface","line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5","signature":"export interface AuditEventVM"},{"anchor":"S:19226d4902","kind":"interface","line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5","signature":"export interface ProtectedPathVM"},{"anchor":"S:61e677ae40","kind":"interface","line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5","signature":"export interface TrendPoint"},{"anchor":"S:cefb8c3f64","doc":"Where a loaded PanelState actually came from, so the UI never presents demo data as real.","kind":"interface","line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5","signature":"export interface PanelSource"},{"anchor":"S:4a0171ecb5","kind":"interface","line":295,"name":"PanelState","path_id":"F:0a85f3b8e5","signature":"export interface PanelState"},{"anchor":"S:6dcad3cdf1","doc":"Fields a new work item is created with. Always starts in state \"queued\".","kind":"interface","line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5","signature":"export interface NewWorkItemInput"},{"anchor":"S:7934857ce3","doc":"Safe-to-edit-anytime fields: never state, owner, or lease, since those change only * through the existing lease/transition machinery, never a generic metadata edit.","kind":"interface","line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemPatch"},{"anchor":"S:a2d9480f78","kind":"interface","line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5","signature":"export interface WriteActions"},{"anchor":"S:6dd199eea1","doc":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads itself","kind":"function","line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9","signature":"export function resolveActiveKey(peerKeys, alias, now = new Date(), overrides = {})"},{"anchor":"S:f3b8628cdb","doc":"Full ordered verification. options.skipContentGate runs only the signature checks (steps 3 to 5), used when the caller already ran the schema and redaction gate.","kind":"function","line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9","signature":"export function verifyPacket(packet, peerKeys, { now = new Date(), skipContentGate = false, overrides = {} } = {})"},{"anchor":"S:0af608ade0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:0c731e3460","signature":"export const MESSAGES ="},{"anchor":"S:ee5246d16c","kind":"function","line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b","signature":"export function generateKeypair()"},{"anchor":"S:842e875c5a","doc":"Raw 32-byte public key as base64, accepting either a public or private KeyObject.","kind":"function","line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyB64(keyObject)"},{"anchor":"S:8a971e3c54","doc":"Public KeyObject from a raw 32-byte base64 public key.","kind":"function","line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyFromB64(b64)"},{"anchor":"S:380b82547c","doc":"Private KeyObject from base64 PKCS8 DER (the env-secret format).","kind":"function","line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyFromB64Pkcs8(b64)"},{"anchor":"S:19e5ddb185","kind":"function","line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyToB64Pkcs8(keyObject)"},{"anchor":"S:1c7919b4ea","kind":"function","line":40,"name":"signMessage","path_id":"F:0cacf66a3b","signature":"export function signMessage(message, privateKeyObject)"},{"anchor":"S:fb81ef11a3","kind":"function","line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b","signature":"export function verifyMessage(message, sigB64, publicKeyObject)"},{"anchor":"S:4a08c48993","doc":"Short fingerprint for out-of-band key comparison (ADR-017 enrollment): the first 16 hex characters of sha256 over the raw public key bytes.","kind":"function","line":54,"name":"fingerprint","path_id":"F:0cacf66a3b","signature":"export function fingerprint(pubB64)"},{"anchor":"S:f2e1ea8458","kind":"function","line":16,"name":"deriveMode","path_id":"F:0da05a2a05","signature":"export function deriveMode(config: ModonomeConfig, envArmed: boolean): ArmingMode"},{"anchor":"S:97bc3f0eb4","kind":"function","line":22,"name":"deriveArming","path_id":"F:0da05a2a05","signature":"export function deriveArming("},{"anchor":"S:a3fb13b441","kind":"function","line":4,"name":"Tones","path_id":"F:10e76cfcd3","signature":"export const Tones = () => ("},{"anchor":"S:14ef0a45e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1127892e72","signature":"export const MESSAGES ="},{"anchor":"S:a1d4334d94","kind":"function","line":44,"name":"App","path_id":"F:113387361d","signature":"export function App()"},{"anchor":"S:f034e67219","kind":"function","line":36,"name":"normalizeLF","path_id":"F:116adfb9f8","signature":"function normalizeLF(s)"},{"anchor":"S:e23dca26d1","kind":"function","line":45,"name":"stripFlags","path_id":"F:116adfb9f8","signature":"export function stripFlags(argv)"},{"anchor":"S:8fc6479414","kind":"function","line":72,"name":"getDiff","path_id":"F:116adfb9f8","signature":"function getDiff(positional)"},{"anchor":"S:6202790aac","kind":"class","line":103,"name":"UsageError","path_id":"F:116adfb9f8","signature":"class UsageError extends Error {}"},{"anchor":"S:a8ccdc0c7d","kind":"function","line":112,"name":"parseDiff","path_id":"F:116adfb9f8","signature":"export function parseDiff(diffText)"},{"anchor":"S:4295d27685","kind":"function","line":158,"name":"makeFinding","path_id":"F:116adfb9f8","signature":"function makeFinding(rule, file, line, rawText)"},{"anchor":"S:afdc9fa742","kind":"function","line":172,"name":"scanFile","path_id":"F:116adfb9f8","signature":"export function scanFile(filePath, addedLines)"},{"anchor":"S:9435112073","kind":"function","line":194,"name":"scanDiff","path_id":"F:116adfb9f8","signature":"export function scanDiff(diffText)"},{"anchor":"S:34df82b1c2","kind":"function","line":215,"name":"hasHighOrCritical","path_id":"F:116adfb9f8","signature":"function hasHighOrCritical(findings)"},{"anchor":"S:672926584c","kind":"function","line":219,"name":"decideExitCode","path_id":"F:116adfb9f8","signature":"export function decideExitCode(mode, findings)"},{"anchor":"S:6117b8ec80","kind":"function","line":224,"name":"decideResult","path_id":"F:116adfb9f8","signature":"export function decideResult(mode, findings)"},{"anchor":"S:74c8951fb9","kind":"function","line":230,"name":"severityToSarifLevel","path_id":"F:116adfb9f8","signature":"export function severityToSarifLevel(severity)"},{"anchor":"S:8b3d7e9050","kind":"function","line":240,"name":"summaryMessage","path_id":"F:116adfb9f8","signature":"function summaryMessage(mode, findings)"},{"anchor":"S:17bc177192","kind":"function","line":251,"name":"formatHuman","path_id":"F:116adfb9f8","signature":"export function formatHuman(findings, { mode })"},{"anchor":"S:82407637b4","kind":"function","line":266,"name":"emitJson","path_id":"F:116adfb9f8","signature":"export function emitJson(findings, { mode })"},{"anchor":"S:38407e52ac","kind":"function","line":274,"name":"emitSarif","path_id":"F:116adfb9f8","signature":"export function emitSarif(findings)"},{"anchor":"S:9f6788d90d","kind":"function","line":314,"name":"runCli","path_id":"F:116adfb9f8","signature":"function runCli()"},{"anchor":"S:670e55d75a","kind":"const","line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce","signature":"export const CACHE_SCHEMA_VERSION = 1;"},{"anchor":"S:31032f0509","doc":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option (some git options can read or write fil","kind":"function","line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce","signature":"export function isPlausibleRevision(value)"},{"anchor":"S:7762c6d861","kind":"function","line":21,"name":"cachePath","path_id":"F:119e3c0fce","signature":"function cachePath(root)"},{"anchor":"S:59b9039619","doc":"Load the cache for a repo, or null when absent, unreadable, or a different version.","kind":"function","line":28,"name":"loadCache","path_id":"F:119e3c0fce","signature":"export function loadCache(root)"},{"anchor":"S:ba5f7d1ffe","doc":"Persist the cache. entries is { relPath: { hash, symbols, imports, purposeRaw } }.","kind":"function","line":41,"name":"saveCache","path_id":"F:119e3c0fce","signature":"export function saveCache(root, { built_at_head = null, entries = {} })"},{"anchor":"S:ed24428ce0","doc":"The current git HEAD sha for the repo, or null when unavailable.","kind":"function","line":50,"name":"gitHead","path_id":"F:119e3c0fce","signature":"export function gitHead(root)"},{"anchor":"S:236237bc1b","doc":"Strip git's optional quoting from a porcelain path.","kind":"function","line":56,"name":"unquote","path_id":"F:119e3c0fce","signature":"function unquote(p)"},{"anchor":"S:93d0a78f18","doc":"The set of paths that changed since the cache was built: uncommitted work (git status) plus commits since cache.built_at_head. Returns null when git is not usable, which forces a full rebuild.","kind":"function","line":65,"name":"changedPaths","path_id":"F:119e3c0fce","signature":"export function changedPaths(root, cache)"},{"anchor":"S:c3d94f0812","doc":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse.","kind":"function","line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a","signature":"export function parseRepoFromUrl(url)"},{"anchor":"S:d1b03afffb","doc":"Derive a stable repo label. The generator block credits the tool (generator.name is always \"modonome\"), so the per-repo identity lives in generator.repository. Prefer that, then fall back to the filen","kind":"function","line":41,"name":"deriveRepoName","path_id":"F:128b647d9a","signature":"export function deriveRepoName(att, filename)"},{"anchor":"S:3a57c07db5","doc":"Three-way posture from the attestation posture block.","kind":"function","line":48,"name":"derivePosture","path_id":"F:128b647d9a","signature":"export function derivePosture(posture)"},{"anchor":"S:26df582c22","doc":"Build one row from a filename and its raw text. A parse or shape problem is recorded on the row and reported as a table cell; it never throws, so one bad file cannot crash the whole run.","kind":"function","line":57,"name":"buildRow","path_id":"F:128b647d9a","signature":"export function buildRow(filename, text)"},{"anchor":"S:ba36fd17d6","doc":"Read every *.json file in dir and build a row for each. Files are read once with readFileSync (no separate stat then read, so there is no check-to-use race window). Returns unsorted rows.","kind":"function","line":100,"name":"collectRows","path_id":"F:128b647d9a","signature":"export function collectRows(dir)"},{"anchor":"S:c42dd60d39","doc":"Deterministic order: by repo label, then by filename as a tie-break.","kind":"function","line":126,"name":"sortRows","path_id":"F:128b647d9a","signature":"export function sortRows(rows)"},{"anchor":"S:7619cf060d","kind":"function","line":133,"name":"escapeHtml","path_id":"F:128b647d9a","signature":"function escapeHtml(s)"},{"anchor":"S:7bcf8115de","kind":"function","line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a","signature":"function capabilitiesCell(caps)"},{"anchor":"S:b366c411d2","doc":"Render the sorted rows to a self-contained HTML document. Pure: given the same rows and options it returns the same string.","kind":"function","line":150,"name":"renderHtml","path_id":"F:128b647d9a","signature":"export function renderHtml(rows, options = {})"},{"anchor":"S:5afb2ca954","doc":"Full pipeline: directory to HTML string. Exported for tests.","kind":"function","line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a","signature":"export function renderLedgerFromDir(dir, options = {})"},{"anchor":"S:0255163ba3","kind":"function","line":229,"name":"parseArgs","path_id":"F:128b647d9a","signature":"function parseArgs(argv)"},{"anchor":"S:cecb0a4a33","kind":"function","line":248,"name":"main","path_id":"F:128b647d9a","signature":"function main(argv)"},{"anchor":"S:3968554637","kind":"const","line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461","signature":"export const VOLATILE_FIELDS = ['id', 'signature'];"},{"anchor":"S:9f7fa8d585","kind":"function","line":10,"name":"packetContent","path_id":"F:12c7a4e461","signature":"export function packetContent(packet)"},{"anchor":"S:a0ea4d9d0f","kind":"function","line":18,"name":"computePacketId","path_id":"F:12c7a4e461","signature":"export function computePacketId(packet)"},{"anchor":"S:d2ef86c19f","kind":"function","line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461","signature":"export function packetIdMatches(packet)"},{"anchor":"S:4700befa2a","kind":"function","line":16,"name":"run","path_id":"F:137056535b","signature":"function run(args = [], env = {})"},{"anchor":"S:bc56c13940","doc":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind.","kind":"function","line":22,"name":"preservingArtifact","path_id":"F:137056535b","signature":"function preservingArtifact(fn)"},{"anchor":"S:2cd4d9571d","kind":"function","line":189,"name":"withTempFile","path_id":"F:137056535b","signature":"function withTempFile(name, content, fn)"},{"anchor":"S:5708b6bd2b","kind":"function","line":4,"name":"PendingApproval","path_id":"F:13d31b33ea","signature":"export const PendingApproval = () => ("},{"anchor":"S:4f265e8008","kind":"function","line":8,"name":"Approved","path_id":"F:13d31b33ea","signature":"export const Approved = () => ("},{"anchor":"S:93e0292f30","kind":"function","line":12,"name":"Protected","path_id":"F:13d31b33ea","signature":"export const Protected = () => ;"},{"anchor":"S:e80517f20b","kind":"interface","line":6,"name":"ActivationCheck","path_id":"F:14edab923f","signature":"export interface ActivationCheck"},{"anchor":"S:30eded078f","kind":"interface","line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f","signature":"export interface ActivationLadderProps"},{"anchor":"S:73a3da9f65","doc":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when every * prerequisite holds. Items marked o","kind":"function","line":46,"name":"ActivationLadder","path_id":"F:14edab923f","signature":"export function ActivationLadder("},{"anchor":"S:237d74cadf","kind":"function","line":21,"name":"parseScalar","path_id":"F:1575110130","signature":"function parseScalar(raw)"},{"anchor":"S:299c43d83e","kind":"function","line":40,"name":"stripQuotes","path_id":"F:1575110130","signature":"function stripQuotes(s)"},{"anchor":"S:0b7b39d873","doc":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string.","kind":"function","line":49,"name":"extractRawValue","path_id":"F:1575110130","signature":"function extractRawValue(afterColon)"},{"anchor":"S:b4a3093fe9","doc":"Count leading spaces to determine nesting depth.","kind":"function","line":66,"name":"indentOf","path_id":"F:1575110130","signature":"function indentOf(line)"},{"anchor":"S:bec355e18a","doc":"Parse an array of non-empty, non-comment lines into a nested object. Each entry is { indent, key, rawValue, isItem }, where a sequence-item line (\"- value\") has isItem: true and key: null.","kind":"function","line":75,"name":"parseEntries","path_id":"F:1575110130","signature":"function parseEntries(entries, start, minIndent)"},{"anchor":"S:8990e6571f","kind":"function","line":118,"name":"parseFlatYaml","path_id":"F:1575110130","signature":"export function parseFlatYaml(text)"},{"anchor":"S:5bac9ae6d5","kind":"function","line":151,"name":"formatScalarForYaml","path_id":"F:1575110130","signature":"function formatScalarForYaml(value)"},{"anchor":"S:efe9cb11d4","doc":"Patch one or more top-level (zero-indent) scalar keys in a config.yaml's raw text, line by line. Every other line, including every comment, is left untouched, so a hand-written config file survives an","kind":"function","line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130","signature":"export function patchTopLevelYaml(text, patch)"},{"anchor":"S:0b56ac32a5","kind":"const","line":1,"name":"MESSAGES","path_id":"F:179564da6f","signature":"export const MESSAGES ="},{"anchor":"S:1b14fa60f7","kind":"function","line":92,"name":"git","path_id":"F:18f569225a","signature":"function git(args, cwd)"},{"anchor":"S:34df99c630","kind":"function","line":98,"name":"makeGitFixture","path_id":"F:18f569225a","signature":"function makeGitFixture()"},{"anchor":"S:a3cae87964","kind":"function","line":109,"name":"makePlan","path_id":"F:18f569225a","signature":"function makePlan(role, roleDescriptor, transcriptSubdir, extra = {})"},{"anchor":"S:0eec918c49","kind":"function","line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a","signature":"function cleanupTranscripts()"},{"anchor":"S:0064b473e6","kind":"function","line":14,"name":"tmpQueue","path_id":"F:195e9217ca","signature":"function tmpQueue()"},{"anchor":"S:d240732a9d","kind":"function","line":18,"name":"sampleAction","path_id":"F:195e9217ca","signature":"function sampleAction(id, target = \"ci\")"},{"anchor":"S:05a5299b28","kind":"interface","line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae","signature":"export interface ConceptTileProps extends ButtonHTMLAttributes"},{"anchor":"S:14c08c7efc","doc":"A compact, focusable tile naming one engine concept: an icon, its name, and a short * category tag. Renders as a real button so it is keyboard-reachable on its own, meant * to be wrapped in a HoverCar","kind":"function","line":20,"name":"ConceptTile","path_id":"F:1a137480ae","signature":"export function ConceptTile({ icon, label, tag, className, ...rest }: ConceptTileProps)"},{"anchor":"S:76d7b21daf","doc":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary ceiling.","kind":"const","line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364","signature":"export const MAX_CONTROLS_PER_TAB = 10;"},{"anchor":"S:b840cddd67","kind":"function","line":20,"name":"readScreens","path_id":"F:1a19f02364","signature":"function readScreens(root)"},{"anchor":"S:7a05eaea5a","doc":"Every field in config.schema.json must resolve to either a literal reference in a screen (a real control, or read-only display) or a documented exemption in exposure.json. A plain substring search, no","kind":"function","line":34,"name":"auditCoverage","path_id":"F:1a19f02364","signature":"export function auditCoverage(root)"},{"anchor":"S:da2f845458","doc":"Splits a screen's source into one segment per tab (by source order, using the `{tab === \"id\" ?` marker this codebase's tabbed screens consistently use), or a single whole-file segment for screens with","kind":"function","line":57,"name":"splitByTabs","path_id":"F:1a19f02364","signature":"function splitByTabs(text)"},{"anchor":"S:6a7737bb57","kind":"function","line":66,"name":"extractTags","path_id":"F:1a19f02364","signature":"function extractTags(text, tagNames)"},{"anchor":"S:0ac24bec51","doc":"Two checks, both numeric: a screen/tab must not exceed the control-density budget, and every value-entry control (Toggle, NumberField, Slider, Select) must carry a hint. Input is excluded from the hin","kind":"function","line":76,"name":"auditCoherence","path_id":"F:1a19f02364","signature":"export function auditCoherence(root)"},{"anchor":"S:762b3eaf4a","kind":"function","line":17,"name":"Models","path_id":"F:1aa7cf650d","signature":"export const Models = () => ("},{"anchor":"S:8da618623d","kind":"function","line":18,"name":"headSha","path_id":"F:1bc6d1449f","signature":"function headSha()"},{"anchor":"S:fc01241f03","doc":"A config fixture with distinct maker/checker models and a models registry.","kind":"function","line":13,"name":"cfg","path_id":"F:1bcaaff9eb","signature":"function cfg(overrides = {})"},{"anchor":"S:55b15c0abb","doc":"A short, stable id from a string. Hex keeps it deterministic across platforms.","kind":"function","line":9,"name":"short","path_id":"F:1cf31c4792","signature":"function short(text, len = 10)"},{"anchor":"S:2e016b842d","kind":"function","line":13,"name":"fileAnchor","path_id":"F:1cf31c4792","signature":"export function fileAnchor(relPath)"},{"anchor":"S:00db09c5a8","kind":"function","line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792","signature":"export function symbolAnchor(relPath, name)"},{"anchor":"S:ab79b43633","doc":"Build the path dictionary from walked files. Returns { paths, pathIdByPath } where `paths` is the serializable { id -> relPath } map and `pathIdByPath` is the reverse lookup callers use to reference p","kind":"function","line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792","signature":"export function buildPathDictionary(relPaths)"},{"anchor":"S:63613c3a63","doc":"Build the symbol dictionary from API entries. Each entry carries its anchor, owning path id, name, and line, so an anchor resolves to an exact location.","kind":"function","line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792","signature":"export function buildSymbolDictionary(apiEntries)"},{"anchor":"S:a3ca73d34c","doc":"Lifecycle status of a learning: staged for review, or promoted into a permanent gate.","kind":"type","line":6,"name":"LearningStatus","path_id":"F:1d03291691","signature":"export type LearningStatus = \"staged\" | \"promoted\";"},{"anchor":"S:6cbed7ff26","doc":"Plain data shape for a single learning surfaced by the system. Components in this * package define their own shape rather than importing app-level types, so this * interface is the contract a host app","kind":"interface","line":13,"name":"LearningSummary","path_id":"F:1d03291691","signature":"export interface LearningSummary"},{"anchor":"S:8b9971d92a","kind":"interface","line":30,"name":"LearningCardProps","path_id":"F:1d03291691","signature":"export interface LearningCardProps"},{"anchor":"S:d293a69125","doc":"A card summarizing a single learning the system has surfaced: the lesson learned, * how old it is, what signal or evidence produced it, and its lifecycle status. * Staged learnings offer Promote and P","kind":"function","line":49,"name":"LearningCard","path_id":"F:1d03291691","signature":"export function LearningCard({ learning, onPromote, onPrune }: LearningCardProps)"},{"anchor":"S:14850052c8","kind":"interface","line":6,"name":"TabItem","path_id":"F:1db369d970","signature":"export interface TabItem"},{"anchor":"S:c68bb17ca2","kind":"interface","line":17,"name":"TabsProps","path_id":"F:1db369d970","signature":"export interface TabsProps"},{"anchor":"S:bd1a0a35f8","doc":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-selected`, and only the active tab is in th","kind":"function","line":35,"name":"Tabs","path_id":"F:1db369d970","signature":"export function Tabs({ tabs, active, onChange, className }: TabsProps)"},{"anchor":"S:d737cd7277","kind":"function","line":52,"name":"flagValue","path_id":"F:1e5ef6ba70","signature":"function flagValue(argv, name)"},{"anchor":"S:8f93f4689a","doc":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-024: even an armed engine will not rewri","kind":"function","line":60,"name":"armState","path_id":"F:1e5ef6ba70","signature":"function armState(root, env = process.env)"},{"anchor":"S:46d884501c","kind":"function","line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70","signature":"function armingBlockers(arm)"},{"anchor":"S:baa16abe42","kind":"function","line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70","signature":"function targetIdentity(argv)"},{"anchor":"S:6140d7ae56","kind":"function","line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70","signature":"function identityUsable(id)"},{"anchor":"S:edeb959111","doc":"Gather the branch-unique commit range oldest-first with the fields the applier needs: tree object, first parent, author and committer identity and dates, and raw message. Enforces the protected-histor","kind":"function","line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70","signature":"function gatherRange()"},{"anchor":"S:4bc9723575","doc":"Advisory range for `plan`: tolerant of a missing origin/main so the proposal works in a fresh clone. Newest-first from git log; reversed to oldest-first for stable output.","kind":"function","line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70","signature":"function advisoryRange()"},{"anchor":"S:59807c1a98","kind":"function","line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70","signature":"function buildPlan(branch, commits, identity)"},{"anchor":"S:2484ffb006","kind":"function","line":142,"name":"printPlan","path_id":"F:1e5ef6ba70","signature":"function printPlan(plan, identity)"},{"anchor":"S:e7f49cafe1","kind":"function","line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70","signature":"function isDirtyTracked()"},{"anchor":"S:e2861b1099","kind":"function","line":173,"name":"rollback","path_id":"F:1e5ef6ba70","signature":"function rollback(savedHead)"},{"anchor":"S:e8b27564c5","doc":"Replay the range from the first changed commit forward, reusing each original tree object so the rewrite is metadata-only. Verifies tree-SHA invariance per commit and rolls back on any failure. Return","kind":"function","line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70","signature":"function applyPlan(commits, plan)"},{"anchor":"S:b97efe3854","kind":"function","line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70","signature":"function cmdPlan(argv)"},{"anchor":"S:69db4ad7cc","kind":"function","line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70","signature":"function cmdApply(argv, root)"},{"anchor":"S:602e030d27","kind":"function","line":297,"name":"main","path_id":"F:1e5ef6ba70","signature":"function main(argv)"},{"anchor":"S:5a6c3aef24","kind":"class","line":7,"name":"OrderService","path_id":"F:1ecd18c4b9","signature":"export class OrderService"},{"anchor":"S:a2fef04067","kind":"function","line":4,"name":"Budget","path_id":"F:1f40b6eb6e","signature":"export const Budget = () => ("},{"anchor":"S:2ed4ecfad7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4","signature":"export const MESSAGES ="},{"anchor":"S:8c2cd9c54f","doc":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mjs.","kind":"function","line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca","signature":"export function buildProposalReviewPrompt(proposal, checkerModel, authorLabel)"},{"anchor":"S:ebd259dfef","doc":"Resolve the checker and plan its review of a proposal, without calling a model. * * @returns {{ checker: object, authorLabel: string, proposal: string, prompt: string }}","kind":"function","line":43,"name":"planProposalReview","path_id":"F:2127a8caca","signature":"export function planProposalReview(cfg, { proposal, authorLabel = \"an external author\" } = {})"},{"anchor":"S:a1cc5660fe","doc":"A garbled review, or one with no explicit marker, must NOT read as an approval: a proposal is admitted to the backlog only on an explicit APPROVE: yes. Fail closed.","kind":"function","line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca","signature":"export function parseProposalVerdict(text)"},{"anchor":"S:3fc87c5f7e","doc":"Plan the proposal review and, under execute:true, run the checker on its endpoint. * The live path supports the openai-http transport (a local or free/gateway model), * matching the local-first cost s","kind":"function","line":73,"name":"reviewProposal","path_id":"F:2127a8caca","signature":"export async function reviewProposal(cfg, { proposal, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:537ea4dfe0","kind":"type","line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4","signature":"export type ToggleTone = \"primary\" | \"info\" | \"owner\";"},{"anchor":"S:cd836c2fc7","kind":"interface","line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4","signature":"export interface ToggleProps"},{"anchor":"S:84b00e90de","doc":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a checkbox so the on/off semantics are anno","kind":"function","line":28,"name":"Toggle","path_id":"F:214cc0a5f4","signature":"export function Toggle("},{"anchor":"S:b919653baa","kind":"function","line":44,"name":"DryRun","path_id":"F:2207a6ebce","signature":"export const DryRun = () => ("},{"anchor":"S:ea5d04ea13","kind":"function","line":48,"name":"Armed","path_id":"F:2207a6ebce","signature":"export const Armed = () => ("},{"anchor":"S:e193570e9e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc","signature":"export const MESSAGES ="},{"anchor":"S:7cd45cbc03","kind":"function","line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e","signature":"function formatYamlScalar(value)"},{"anchor":"S:1c5d801590","doc":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent scalar or array keys are touched here; ","kind":"function","line":70,"name":"patchYamlText","path_id":"F:22566cb46e","signature":"function patchYamlText(text, patch)"},{"anchor":"S:15b3a95566","doc":"Locate a top-level `key:` block-opening line (a zero-indent key whose value is empty, meaning what follows is a nested map) and the half-open [start, end) line range it and its indented content occupy","kind":"function","line":100,"name":"findBlock","path_id":"F:22566cb46e","signature":"function findBlock(lines, key)"},{"anchor":"S:aa8f9a7b3d","doc":"Split a block's interior lines into ordered segments: a real entry (a line at exactly ENTRY_INDENT spaces naming a key, plus every following line indented deeper than that), or \"other\" (blank lines, a","kind":"function","line":122,"name":"captureSegments","path_id":"F:22566cb46e","signature":"function captureSegments(lines, start, end)"},{"anchor":"S:c3a1d0f1a7","kind":"function","line":151,"name":"serializeEntry","path_id":"F:22566cb46e","signature":"function serializeEntry(topKey, entryKey, value)"},{"anchor":"S:af28852c7f","kind":"function","line":169,"name":"deepEqualJson","path_id":"F:22566cb46e","signature":"function deepEqualJson(a, b)"},{"anchor":"S:2eef7d840d","doc":"Reconcile one nested map's block against its new value, entry by entry. An entry present in both, unchanged, is copied verbatim (comments and all); a changed entry is re-serialized (dropping any comme","kind":"function","line":180,"name":"rewriteBlock","path_id":"F:22566cb46e","signature":"function rewriteBlock(lines, topKey, oldValue, newValue)"},{"anchor":"S:b06714d9c5","kind":"function","line":225,"name":"patchConfig","path_id":"F:22566cb46e","signature":"export function patchConfig(modonomeDir, patch)"},{"anchor":"S:8b67ef3e8b","kind":"function","line":266,"name":"workItemFile","path_id":"F:22566cb46e","signature":"function workItemFile(modonomeDir, itemId)"},{"anchor":"S:fd9d32de9a","kind":"function","line":272,"name":"releaseLease","path_id":"F:22566cb46e","signature":"export function releaseLease(modonomeDir, itemId)"},{"anchor":"S:d7086f2a5b","kind":"function","line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e","signature":"function loadConfigForValidation(modonomeDir)"},{"anchor":"S:f22a53ac17","kind":"function","line":305,"name":"createWorkItem","path_id":"F:22566cb46e","signature":"export function createWorkItem(modonomeDir, input)"},{"anchor":"S:a4e623c70b","doc":"Metadata-only edit: type, assigned_role, allowed_edit_set, gates, max_attempts, and touches_protected_path are safe to change regardless of the item's current state, including in flight, since none of","kind":"function","line":354,"name":"updateWorkItem","path_id":"F:22566cb46e","signature":"export function updateWorkItem(modonomeDir, itemId, patch)"},{"anchor":"S:14cb0e8cbb","doc":"Refuses outright for any in-flight state, regardless of whether its lease has technically expired: an item past \"queued\" represents real record of what happened (a branch, a PR, attempts, a maker iden","kind":"function","line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e","signature":"export function deleteWorkItem(modonomeDir, itemId)"},{"anchor":"S:e152142e8c","doc":"Merge a patch of { id: { severity?, text?, suppressed? } } into .modonome/messages.yaml's overrides map, re-validate against both the schema and the severity-floor rule (the same checkOverridesIntegri","kind":"function","line":399,"name":"patchMessages","path_id":"F:22566cb46e","signature":"export function patchMessages(modonomeDir, patch)"},{"anchor":"S:5b0e153cfb","kind":"function","line":424,"name":"pruneLearning","path_id":"F:22566cb46e","signature":"export function pruneLearning(modonomeDir, lesson)"},{"anchor":"S:a931ad2e62","doc":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns {string} the concatenated committed prom","kind":"function","line":46,"name":"resolvePromptText","path_id":"F:23917c6197","signature":"export function resolvePromptText(root)"},{"anchor":"S:0a5fed1978","doc":"Load every fixture JSON file from a directory. * @param {string} dir directory holding fixture *.json files * @returns {Array} parsed fixture objects, sorted by file name for stable output","kind":"function","line":59,"name":"loadFixtures","path_id":"F:23917c6197","signature":"export function loadFixtures(dir)"},{"anchor":"S:407ded8730","doc":"Evaluate one fixture against the committed prompt text. A fixture is ok only when * every one of its anchors is present, meaning the governing rule that produces its * golden decision still exists in ","kind":"function","line":79,"name":"evaluateFixture","path_id":"F:23917c6197","signature":"export function evaluateFixture(fixture, promptText)"},{"anchor":"S:c2e641f1c8","doc":"Run the whole suite: load fixtures, resolve prompt text, evaluate each. * @param {string} root repository root * @param {string} fixturesDir directory holding fixtures * @returns {{ results: Array<{id","kind":"function","line":106,"name":"runSuite","path_id":"F:23917c6197","signature":"export function runSuite(root, fixturesDir)"},{"anchor":"S:87ceb91d57","kind":"const","line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76","signature":"export const MESSAGES ="},{"anchor":"S:b5883cd7f4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:240ace7a8f","signature":"export const MESSAGES ="},{"anchor":"S:76171943e3","kind":"function","line":7,"name":"canonicalize","path_id":"F:245efb551c","signature":"export function canonicalize(value)"},{"anchor":"S:781c4112a2","doc":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another.","kind":"const","line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c","signature":"export const PACKET_DOMAIN = 'modonome.knowledge-packet.v1\\n';"},{"anchor":"S:210b0c6999","doc":"The exact bytes a packet signature covers: the domain tag followed by the JCS of the packet with its signature object removed.","kind":"function","line":26,"name":"signedBytes","path_id":"F:245efb551c","signature":"export function signedBytes(packet)"},{"anchor":"S:c44da37a7d","kind":"function","line":12,"name":"Dashboard","path_id":"F:2470e60179","signature":"export const Dashboard = () => ("},{"anchor":"S:7d5af2fca1","kind":"function","line":22,"name":"Staged","path_id":"F:250c8a0d4a","signature":"export const Staged = () => ("},{"anchor":"S:dd05df51d3","kind":"function","line":26,"name":"Promoted","path_id":"F:250c8a0d4a","signature":"export const Promoted = () => ;"},{"anchor":"S:4df7a92e8e","kind":"function","line":15,"name":"registerAdapter","path_id":"F:2554ddd30c","signature":"export function registerAdapter(adapter)"},{"anchor":"S:a07487517b","doc":"Resolve the adapter for a path by extension, defaulting to the generic fallback.","kind":"function","line":25,"name":"getAdapter","path_id":"F:2554ddd30c","signature":"export function getAdapter(relPath)"},{"anchor":"S:ec18e42e1a","doc":"Extract from one file, guarding against any adapter error so a single bad file never aborts a whole snapshot.","kind":"function","line":32,"name":"extractFile","path_id":"F:2554ddd30c","signature":"export function extractFile(relPath, source)"},{"anchor":"S:2fbd29545b","kind":"function","line":42,"name":"nestedMapChanged","path_id":"F:25e649633c","signature":"function nestedMapChanged(a: Record | undefined, b: Record | undefined): boolean"},{"anchor":"S:ea841eb82d","kind":"function","line":49,"name":"diffConfig","path_id":"F:25e649633c","signature":"export function diffConfig(base: ModonomeConfig, edited: ModonomeConfig): Partial"},{"anchor":"S:4426823827","kind":"interface","line":5,"name":"NavItem","path_id":"F:268769c4a6","signature":"export interface NavItem"},{"anchor":"S:a4155f5067","kind":"interface","line":16,"name":"AppShellProps","path_id":"F:268769c4a6","signature":"export interface AppShellProps"},{"anchor":"S:24b854ce78","doc":"The Modonome brand mark: a teal ring with a check on the dark ground.","kind":"function","line":36,"name":"BrandMark","path_id":"F:268769c4a6","signature":"function BrandMark()"},{"anchor":"S:5154763a93","doc":"The application frame: a fixed sidebar of primary navigation, a sticky top bar for * the mode switch and arming status, and a scrollable content column. It establishes * the mdn-root wrapper (the dark","kind":"function","line":60,"name":"AppShell","path_id":"F:268769c4a6","signature":"export function AppShell("},{"anchor":"S:33dfee21e3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2715f09f24","signature":"export const MESSAGES ="},{"anchor":"S:df7e6c1db0","kind":"function","line":4,"name":"Disabled","path_id":"F:28b7af3c53","signature":"export const Disabled = () => ;"},{"anchor":"S:36be7c4ac5","kind":"function","line":6,"name":"DryRun","path_id":"F:28b7af3c53","signature":"export const DryRun = () => ;"},{"anchor":"S:813f68335e","kind":"function","line":8,"name":"Armed","path_id":"F:28b7af3c53","signature":"export const Armed = () => ;"},{"anchor":"S:28578fa81a","kind":"function","line":10,"name":"Large","path_id":"F:28b7af3c53","signature":"export const Large = () => ;"},{"anchor":"S:bd9f62784d","doc":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker that only reads the rationale and skims ","kind":"const","line":5,"name":"scenario","path_id":"F:28f278b1d9","signature":"export const scenario ="},{"anchor":"S:d595535449","kind":"function","line":9,"name":"names","path_id":"F:2a74ae3f05","signature":"function names(result)"},{"anchor":"S:a5baaff840","kind":"function","line":12,"name":"modules","path_id":"F:2a74ae3f05","signature":"function modules(result)"},{"anchor":"S:b9942b1651","kind":"function","line":11,"name":"runRatchet","path_id":"F:2b49c74e74","signature":"function runRatchet(diffFile)"},{"anchor":"S:015c572711","doc":"Hash raw file bytes (Buffer or string) into a prefixed digest.","kind":"function","line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca","signature":"export function hashFileContent(bytes)"},{"anchor":"S:b926c18911","doc":"Hash an arbitrary string, used for oversized or unreadable files where content is represented by a stable stand-in rather than its bytes.","kind":"function","line":15,"name":"hashString","path_id":"F:2b9c43b0ca","signature":"export function hashString(text)"},{"anchor":"S:a320bea4da","doc":"Build a Merkle tree from file leaves. `entries` is [{ relPath, hash }]. Returns { root, nodes } where nodes maps every directory path (root is \".\") to its hash.","kind":"function","line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca","signature":"export function buildMerkleTree(entries)"},{"anchor":"S:85c852fd1a","doc":"File-level diff between two { relPath -> hash } maps. Returns sorted lists of added, removed, and changed paths. Directory node hashes (from buildMerkleTree) let a caller skip re-extracting an unchang","kind":"function","line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca","signature":"export function diffMerkle(prevFiles, nextFiles)"},{"anchor":"S:ad4edf7e81","kind":"function","line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861","signature":"def test_total_sums_prices()"},{"anchor":"S:54d2db3f99","doc":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50%, etc.) to verify correct discount calc","kind":"function","line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861","signature":"def test_apply_discount_zero_percent()"},{"anchor":"S:93fa315ac7","kind":"function","line":48,"name":"fail","path_id":"F:2d4c555ba1","signature":"function fail(code, message)"},{"anchor":"S:8252cf2ba8","kind":"function","line":52,"name":"warn","path_id":"F:2d4c555ba1","signature":"function warn(code, message)"},{"anchor":"S:003e6c53c4","kind":"function","line":56,"name":"info","path_id":"F:2d4c555ba1","signature":"function info(code, message)"},{"anchor":"S:5ef7e9a80c","doc":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into approving itself (the new attack surface a","kind":"function","line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990","signature":"export function buildReviewPrompt(diff, checkerModel, authorLabel)"},{"anchor":"S:d5a9bb4227","kind":"function","line":47,"name":"capDiff","path_id":"F:2d6ef08990","signature":"function capDiff(diff)"},{"anchor":"S:fb6bf396bc","doc":"Resolve the checker and plan its review of a diff, without calling any model. * Enforces checker independence: when the change's maker model is known and distinct * models are required, the checker mu","kind":"function","line":61,"name":"planReview","path_id":"F:2d6ef08990","signature":"export function planReview(cfg, { diff, makerModel = null, authorLabel = \"an external author\" } = {})"},{"anchor":"S:9ab63d4bb2","doc":"Extract a coarse structured verdict from the checker's free text. Deliberately simple: the summary is the first line, REQUEST_CHANGES drives the requestChanges flag. A missing marker is treated as \"no","kind":"function","line":83,"name":"parseVerdict","path_id":"F:2d6ef08990","signature":"export function parseVerdict(text)"},{"anchor":"S:bca7722767","doc":"Plan the review and, under execute:true, run the checker on its configured endpoint. * The spike's live path supports the openai-http transport (a local or free/gateway * model, matching the local-fir","kind":"function","line":100,"name":"reviewDiff","path_id":"F:2d6ef08990","signature":"export async function reviewDiff(cfg, { diff, makerModel, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:568ac62670","doc":"--- CLI ---------------------------------------------------------------------","kind":"function","line":124,"name":"parseArgs","path_id":"F:2d6ef08990","signature":"function parseArgs(argv)"},{"anchor":"S:f12376c7b1","kind":"function","line":136,"name":"readDiff","path_id":"F:2d6ef08990","signature":"function readDiff(path)"},{"anchor":"S:2d24ebcbdf","doc":"A markdown block for a human, and for GitHub Actions the same block lands in the job summary when the workflow redirects stdout to $GITHUB_STEP_SUMMARY.","kind":"function","line":143,"name":"renderReport","path_id":"F:2d6ef08990","signature":"function renderReport({ plan, executed, review })"},{"anchor":"S:118e66be10","doc":"Minimal argv helper shared by scripts that take `--flag value` pairs.","kind":"function","line":2,"name":"flagValue","path_id":"F:2d93cea2d4","signature":"export function flagValue(argv, name)"},{"anchor":"S:4bacff1244","kind":"function","line":15,"name":"fileExists","path_id":"F:2e327963ed","signature":"function fileExists(root, ...candidates)"},{"anchor":"S:41050d03a4","kind":"function","line":19,"name":"readIfExists","path_id":"F:2e327963ed","signature":"function readIfExists(root, rel)"},{"anchor":"S:1be3814c77","kind":"function","line":24,"name":"listWorkflows","path_id":"F:2e327963ed","signature":"function listWorkflows(root)"},{"anchor":"S:8f1da92228","doc":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object.","kind":"function","line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed","signature":"export function detectRepoFacts(root)"},{"anchor":"S:74bea9ecdf","doc":"A criterion entry: a stable id, the framework and level, whether the observed facts satisfy it, and the evidence or remediation note.","kind":"function","line":59,"name":"criterion","path_id":"F:2e327963ed","signature":"function criterion(id, framework, level, met, evidence)"},{"anchor":"S:8e94f927e1","doc":"Map observed facts to criteria across the supported frameworks. Pure.","kind":"function","line":64,"name":"mapToCriteria","path_id":"F:2e327963ed","signature":"export function mapToCriteria(facts)"},{"anchor":"S:a0db477c6e","kind":"function","line":90,"name":"summarize","path_id":"F:2e327963ed","signature":"export function summarize(criteria)"},{"anchor":"S:f93b3b8c7c","kind":"function","line":95,"name":"buildEvidence","path_id":"F:2e327963ed","signature":"export function buildEvidence(root, generatedAt)"},{"anchor":"S:43f1c85009","kind":"function","line":108,"name":"renderMarkdown","path_id":"F:2e327963ed","signature":"export function renderMarkdown(evidence)"},{"anchor":"S:b6efca77f5","kind":"function","line":17,"name":"basename","path_id":"F:2f3e98ab2c","signature":"function basename(path)"},{"anchor":"S:e2afc6b75b","kind":"function","line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c","signature":"export function isContentExempt(path)"},{"anchor":"S:1562160a7c","kind":"function","line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c","signature":"export function isJsTsScope(path)"},{"anchor":"S:c0981a3461","kind":"function","line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c","signature":"export function isPythonScope(path)"},{"anchor":"S:4195e187b2","kind":"function","line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c","signature":"export function isWorkflowScope(path)"},{"anchor":"S:732a1c21fe","kind":"function","line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerComposeScope(path)"},{"anchor":"S:d25b3fbe33","kind":"function","line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerfileScope(path)"},{"anchor":"S:55386d6b24","kind":"function","line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c","signature":"export function isK8sScope(path)"},{"anchor":"S:2216bfd660","kind":"function","line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c","signature":"export function isTerraformScope(path)"},{"anchor":"S:f88ca29ea3","kind":"function","line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c","signature":"export function isBroadScope(path)"},{"anchor":"S:823d7fa306","kind":"const","line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c","signature":"export const PROTECTED_PATH_GLOBS = ["},{"anchor":"S:2dc33a851f","kind":"function","line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c","signature":"function globToRegExp(glob)"},{"anchor":"S:5e20ef9f71","kind":"function","line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c","signature":"export function matchesProtectedPath(path)"},{"anchor":"S:bb036fe763","kind":"function","line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripSameLineNoise(rawLine)"},{"anchor":"S:7d38304e55","kind":"function","line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripPythonSameLineNoise(line)"},{"anchor":"S:cf9f3a025e","doc":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the ","kind":"function","line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c","signature":"export function stripHashComment(line)"},{"anchor":"S:d9eda62ca5","kind":"function","line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c","signature":"export function stripForScope(path, line)"},{"anchor":"S:e4bb79a957","kind":"function","line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c","signature":"export function redactMatchedText(text, opts = {})"},{"anchor":"S:ec6c0b3d73","kind":"const","line":245,"name":"RULES","path_id":"F:2f3e98ab2c","signature":"export const RULES = ["},{"anchor":"S:02759ae11a","kind":"const","line":955,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c","signature":"export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));"},{"anchor":"S:c504685956","kind":"interface","line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee","signature":"export interface EmptyStateProps"},{"anchor":"S:80e9a1f555","doc":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it","kind":"function","line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee","signature":"export function EmptyState({ title, message, icon = \"queue\", action }: EmptyStateProps)"},{"anchor":"S:baacff5701","kind":"interface","line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee","signature":"export interface LoadingStateProps"},{"anchor":"S:0a9b63cb4b","doc":"Centered spinner with a label, used while a screen or panel is fetching data. * The spinner is a decorative rotating ring; the label carries the accessible * status via `role=\"status\"` so assistive te","kind":"function","line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee","signature":"export function LoadingState({ label = \"Loading\" }: LoadingStateProps)"},{"anchor":"S:9382da6a24","kind":"interface","line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee","signature":"export interface ErrorStateProps"},{"anchor":"S:78e9af551d","doc":"Danger-toned placeholder for a screen or panel that failed to load. Pairs the * danger color with an alert icon and text so the failure is never color-only. * Use `role=\"alert\"` semantics are carried ","kind":"function","line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee","signature":"export function ErrorState({ title = \"Something went wrong\", message, action }: ErrorStateProps)"},{"anchor":"S:79676d74df","kind":"interface","line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee","signature":"export interface PermissionDeniedStateProps"},{"anchor":"S:3800b0c645","doc":"Owner-toned placeholder shown when the current actor lacks the role needed to * view or act on a screen. Pairs the owner color with a lock icon and text so the * restriction is never color-only.","kind":"function","line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee","signature":"export function PermissionDeniedState("},{"anchor":"S:fc6f0e771f","kind":"type","line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94","signature":"export type StatusPillTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:0518e5f603","kind":"type","line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94","signature":"export type StatusPillSize = \"sm\" | \"md\";"},{"anchor":"S:c850118bb2","kind":"interface","line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94","signature":"export interface StatusPillProps extends HTMLAttributes"},{"anchor":"S:eb647d4678","doc":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or dot) so * the status reads correctly even ","kind":"function","line":27,"name":"StatusPill","path_id":"F:2fc610bd94","signature":"export function StatusPill("},{"anchor":"S:35a01a919e","doc":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative when present preserves every existing confi","kind":"function","line":45,"name":"primaryModel","path_id":"F:304ce7b89d","signature":"function primaryModel(roleCfg, roleDefaults)"},{"anchor":"S:0713a27a1f","kind":"function","line":51,"name":"resolveRole","path_id":"F:304ce7b89d","signature":"export function resolveRole(cfg, role)"},{"anchor":"S:433f196465","doc":"Resolve a role's prioritized model list into an ordered array of fully-resolved model descriptors, highest priority first. Source is roleCfg.models when present, else the single primary model, so a ro","kind":"function","line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d","signature":"export function resolveRoleModelChain(cfg, role)"},{"anchor":"S:5aed523637","doc":"Pick the first model in a chain that is affordable under the daily budget, so a prioritized list falls back from a paid frontier choice to a free or local one when no budget is set. A local or free mo","kind":"function","line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d","signature":"export function selectUsableModel(chain, { budgetUsdPerDay = 0 } = {})"},{"anchor":"S:a2d5fcb920","doc":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duties * contract (distinct maker, checker, ","kind":"function","line":13,"name":"GatesScreen","path_id":"F:304fa8ef33","signature":"export function GatesScreen({ state }: { state: PanelState })"},{"anchor":"S:b6cbeed65d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:313bcfac46","signature":"export const MESSAGES ="},{"anchor":"S:6425f5a6c7","kind":"function","line":10,"name":"WithLeases","path_id":"F:31658eff0b","signature":"export const WithLeases = () => {}} />;"},{"anchor":"S:618d055a7c","doc":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and import edges. Bodies are never included. e","kind":"function","line":5,"name":"clean","path_id":"F:3213d03b72","signature":"function clean(text)"},{"anchor":"S:37c1996b57","kind":"function","line":10,"name":"signature","path_id":"F:3213d03b72","signature":"function signature(line)"},{"anchor":"S:1bafda617f","doc":"The docstring is the first triple-quoted string on the line(s) after a def/class.","kind":"function","line":15,"name":"docBelow","path_id":"F:3213d03b72","signature":"function docBelow(lines, defIndex)"},{"anchor":"S:82727ee8e7","kind":"function","line":35,"name":"collectImports","path_id":"F:3213d03b72","signature":"function collectImports(trimmed, lineNo, out)"},{"anchor":"S:aaa1eac555","kind":"const","line":47,"name":"adapter","path_id":"F:3213d03b72","signature":"export const adapter ="},{"anchor":"S:a63cef8ef8","kind":"function","line":4,"name":"Armed","path_id":"F:3319e5c923","signature":"export const Armed = () => ("},{"anchor":"S:e25d17a09c","kind":"function","line":17,"name":"SafeDefaults","path_id":"F:3319e5c923","signature":"export const SafeDefaults = () => ("},{"anchor":"S:457f8a5e17","doc":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi","kind":"const","line":4,"name":"MESSAGES","path_id":"F:33c4d744f3","signature":"export const MESSAGES ="},{"anchor":"S:4b38793395","doc":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal","kind":"const","line":8,"name":"scenario","path_id":"F:34ca4e55d1","signature":"export const scenario ="},{"anchor":"S:f794e6adf4","kind":"function","line":6,"name":"typeOf","path_id":"F:34cb2b6c48","signature":"function typeOf(value)"},{"anchor":"S:0768a4cf0f","kind":"function","line":13,"name":"matchesType","path_id":"F:34cb2b6c48","signature":"function matchesType(value, type)"},{"anchor":"S:52913852e3","kind":"function","line":22,"name":"validate","path_id":"F:34cb2b6c48","signature":"export function validate(schema, value, path = \"$\", errors = [])"},{"anchor":"S:4b7a72e608","kind":"type","line":4,"name":"Role","path_id":"F:35c6d59157","signature":"export type Role ="},{"anchor":"S:fdc2a33d21","kind":"type","line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157","signature":"export type RoleBadgeSize = \"sm\" | \"md\";"},{"anchor":"S:e3f95000e0","kind":"interface","line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157","signature":"export interface RoleBadgeProps"},{"anchor":"S:301cb496d5","doc":"A labeled chip identifying a governance actor or role, pairing an icon with the * human-readable name. The four core review actors (maker, checker, merge authority, * owner) get distinct accent colors","kind":"function","line":72,"name":"RoleBadge","path_id":"F:35c6d59157","signature":"export function RoleBadge({ role, size = \"md\" }: RoleBadgeProps)"},{"anchor":"S:35902c8cc1","kind":"const","line":1,"name":"MESSAGES","path_id":"F:35d4a12b63","signature":"export const MESSAGES ="},{"anchor":"S:61ec9209fc","kind":"function","line":22,"name":"matchSymbol","path_id":"F:36419aa427","signature":"function matchSymbol(trimmed)"},{"anchor":"S:500f4c1cd3","kind":"function","line":30,"name":"cleanSignature","path_id":"F:36419aa427","signature":"function cleanSignature(trimmed)"},{"anchor":"S:3602dcc44c","kind":"function","line":37,"name":"cleanDoc","path_id":"F:36419aa427","signature":"function cleanDoc(text)"},{"anchor":"S:df1472b647","kind":"function","line":47,"name":"docAbove","path_id":"F:36419aa427","signature":"function docAbove(lines, index)"},{"anchor":"S:ac015d1f81","kind":"function","line":67,"name":"collectImports","path_id":"F:36419aa427","signature":"function collectImports(trimmed, lineNo)"},{"anchor":"S:70c4ff437c","kind":"const","line":80,"name":"adapter","path_id":"F:36419aa427","signature":"export const adapter ="},{"anchor":"S:65d6e9b42e","kind":"function","line":112,"name":"dedupeImports","path_id":"F:36419aa427","signature":"function dedupeImports(imports)"},{"anchor":"S:442c9dff6c","kind":"function","line":5,"name":"makeGateway","path_id":"F:373a946d5c","signature":"function makeGateway()"},{"anchor":"S:af1450421c","doc":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the github-models provider (needs models:re","kind":"function","line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e","signature":"export function classifyEndpoint(role)"},{"anchor":"S:cbbe6a270b","doc":"A base_url points at a private/self-hosted host when its hostname is localhost, a loopback address, a *.local mDNS name, or an RFC1918 range.","kind":"function","line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e","signature":"function isPrivateHost(baseUrl)"},{"anchor":"S:ff45c441d1","doc":"Decide whether a runner target can reach a role's endpoint. A target declares * its reach with optional fields on its config entry: * reachable_providers: provider names it can call (for example [\"loc","kind":"function","line":67,"name":"canReach","path_id":"F:37f4a5c04e","signature":"export function canReach(target, roleEndpoint)"},{"anchor":"S:55ee648216","doc":"Resolve the required execution target (environment id) for a role's model * endpoint. Reads cfg.runners and returns the first target that both declares an * environment and can reach the endpoint, pre","kind":"function","line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e","signature":"export function resolveExecutionTarget(role, cfg, overrides = {})"},{"anchor":"S:2a28972ca4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3835919e8e","signature":"export const MESSAGES ="},{"anchor":"S:a9b3acb352","kind":"function","line":16,"name":"writeRunLog","path_id":"F:3b382f95c0","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:4118076b3e","kind":"function","line":29,"name":"pad","path_id":"F:3b382f95c0","signature":"function pad(s, n) { return String(s).padEnd(n); }"},{"anchor":"S:0ba2f17fcf","kind":"function","line":30,"name":"rpad","path_id":"F:3b382f95c0","signature":"function rpad(s, n) { return String(s).padStart(n); }"},{"anchor":"S:02e9b6beea","kind":"function","line":32,"name":"parseMetrics","path_id":"F:3b382f95c0","signature":"function parseMetrics()"},{"anchor":"S:5962011a99","kind":"function","line":41,"name":"summarize","path_id":"F:3b382f95c0","signature":"function summarize(events)"},{"anchor":"S:b288f69305","kind":"function","line":76,"name":"agentproofScore","path_id":"F:3b382f95c0","signature":"function agentproofScore()"},{"anchor":"S:145bc035b8","kind":"function","line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0","signature":"function listFilesRecursive(dir, matches, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:5967648d07","doc":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple heuristic, not a full doc-coverage analysi","kind":"function","line":116,"name":"isDocumented","path_id":"F:3b382f95c0","signature":"function isDocumented(filePath)"},{"anchor":"S:98d9caecec","doc":"Advisory, bounded heuristic: an exported symbol is a \"dead code suspect\" when its declared name never appears again (by plain text match) anywhere else under scripts/ or tests/. This is a name-collisi","kind":"function","line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0","signature":"function findExportedSymbols(filePath)"},{"anchor":"S:cab6ecab70","kind":"function","line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0","signature":"export function computeDeadCodeSuspects(sourceFiles, root, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:62f42e9591","doc":"Computes a deterministic, offline snapshot of repo-impact metrics rooted at `root` (a directory containing scripts/, tests/, docs/). Pure aside from filesystem reads; never writes anything.","kind":"function","line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function computeImpactSnapshot(root)"},{"anchor":"S:882efb23a5","doc":"Reads the newest run log under runsDir that carries an `impact` field. Returns null if none exists (first run, no baseline).","kind":"function","line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function findPriorImpactSnapshot(runsDir)"},{"anchor":"S:d444b209b8","doc":"Pure delta computation: current minus prior for each numeric field. When prior is null/undefined, returns a \"first run, no baseline\" marker instead of numeric deltas.","kind":"function","line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0","signature":"export function computeImpactDelta(current, prior)"},{"anchor":"S:bafcfbb33c","kind":"function","line":224,"name":"formatDelta","path_id":"F:3b382f95c0","signature":"function formatDelta(n)"},{"anchor":"S:b6eeacb415","kind":"function","line":4,"name":"Requirement","path_id":"F:3b4065b679","signature":"export const Requirement = () => ("},{"anchor":"S:35e362f448","kind":"function","line":79,"name":"emit","path_id":"F:3b96b6dfed","signature":"function emit(format, decision, reason)"},{"anchor":"S:073124e2d8","kind":"function","line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed","signature":"function extractFromClaudeToolInput(toolName, input, cwd)"},{"anchor":"S:40cce153df","doc":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor beforeShellExecution payload carries `comma","kind":"function","line":135,"name":"extractChange","path_id":"F:3b96b6dfed","signature":"function extractChange(payload)"},{"anchor":"S:f2e55d9b4a","kind":"function","line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed","signature":"function guessFileFromCommand(cmd)"},{"anchor":"S:209a48ca7f","doc":"Best-effort parse of a `sed 's/PATTERN/REPLACEMENT/'` (or `#`, `|`, `,`, `@` delimited) substitution. This is the one shell idiom common enough, and structured enough, to reliably recover a real befor","kind":"function","line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed","signature":"function parseSedReplacement(cmd)"},{"anchor":"S:485d7c5e96","kind":"function","line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed","signature":"function unescapeSed(s)"},{"anchor":"S:4214f7fa01","doc":"Best-effort parse of a shell redirect target (`> file`, `>> file`), which names the exact file the command is about to write, stronger than any token guess.","kind":"function","line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed","signature":"function parseRedirectTarget(cmd)"},{"anchor":"S:2305f3725a","kind":"function","line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed","signature":"function diffForCommand(cmd)"},{"anchor":"S:d761c7660a","kind":"function","line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed","signature":"function diffForReplace(filePath, oldText, newText)"},{"anchor":"S:2df1658785","kind":"function","line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed","signature":"function diffForMultiEdit(filePath, edits)"},{"anchor":"S:ae3c96ae84","kind":"function","line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed","signature":"function diffForWrite(filePath, content, cwd)"},{"anchor":"S:7d253ea6b0","kind":"function","line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed","signature":"function buildSyntheticDiff(change)"},{"anchor":"S:8761033dfb","kind":"function","line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed","signature":"function runGuardRatchet(diffText)"},{"anchor":"S:12c1e0f104","kind":"function","line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed","signature":"function formatDenyReason(findings)"},{"anchor":"S:745c98231d","kind":"function","line":338,"name":"main","path_id":"F:3b96b6dfed","signature":"function main()"},{"anchor":"S:efea80af4e","doc":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying the * control-panel requirement of a co","kind":"function","line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e","signature":"export function ConfirmProvider({ children }: { children: ReactNode })"},{"anchor":"S:7989466d34","kind":"function","line":59,"name":"useConfirm","path_id":"F:3c479cac6e","signature":"export function useConfirm(): ConfirmFn"},{"anchor":"S:b908c74a11","kind":"function","line":5,"name":"makeDb","path_id":"F:3c53926ecd","signature":"function makeDb()"},{"anchor":"S:225c7a7d84","kind":"function","line":21,"name":"Open","path_id":"F:3ce0fd77eb","signature":"export const Open = () => {}} />;"},{"anchor":"S:a2df9a5c24","kind":"function","line":23,"name":"Resolved","path_id":"F:3ce0fd77eb","signature":"export const Resolved = () => ;"},{"anchor":"S:7c44412e8a","kind":"function","line":4,"name":"WithHeader","path_id":"F:3d505706cd","signature":"export const WithHeader = () => ("},{"anchor":"S:72d4f657d5","kind":"function","line":91,"name":"setup","path_id":"F:3de9042953","signature":"function setup()"},{"anchor":"S:09a834e684","kind":"function","line":14,"name":"makeRepo","path_id":"F:3ea503e7c0","signature":"function makeRepo(spec)"},{"anchor":"S:64de4c98b6","doc":"Helper reused by the mapping test.","kind":"function","line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0","signature":"function makeRepoOnce()"},{"anchor":"S:fa6785fa4b","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3f1216fc11","signature":"export const MESSAGES ="},{"anchor":"S:91c42b4f27","kind":"function","line":23,"name":"read","path_id":"F:4096620673","signature":"function read(rel)"},{"anchor":"S:87c8d03eb8","doc":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that","kind":"function","line":126,"name":"dirsFromCodeowners","path_id":"F:4096620673","signature":"function dirsFromCodeowners()"},{"anchor":"S:4287ee7685","kind":"const","line":1,"name":"MESSAGES","path_id":"F:40d8f235fd","signature":"export const MESSAGES ="},{"anchor":"S:daac1f172a","kind":"function","line":12,"name":"cli","path_id":"F:40e4f39b59","signature":"function cli(...args)"},{"anchor":"S:1c82a73570","kind":"function","line":19,"name":"tmp","path_id":"F:40e4f39b59","signature":"function tmp()"},{"anchor":"S:586705c7a0","kind":"type","line":5,"name":"CardTone","path_id":"F:40eb542a82","signature":"export type CardTone = \"default\" | \"raised\";"},{"anchor":"S:1ae77ae47b","kind":"interface","line":7,"name":"CardProps","path_id":"F:40eb542a82","signature":"export interface CardProps extends HTMLAttributes"},{"anchor":"S:555c013724","doc":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, then the * body. When no title, eyebrow, ","kind":"function","line":31,"name":"Card","path_id":"F:40eb542a82","signature":"export function Card("},{"anchor":"S:b6fce3a5a9","kind":"function","line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a","signature":"export const ItemDetail = () => ("},{"anchor":"S:afe9763761","kind":"function","line":3,"name":"RaiseCap","path_id":"F:4387a44284","signature":"export const RaiseCap = () => ("},{"anchor":"S:24f0960624","kind":"function","line":29,"name":"runRemediate","path_id":"F:44a5987438","signature":"function runRemediate(args, { cwd, env = {} })"},{"anchor":"S:c8ee4f2e2e","doc":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commit.","kind":"function","line":40,"name":"makePollutedRepo","path_id":"F:44a5987438","signature":"function makePollutedRepo()"},{"anchor":"S:3e43134e83","kind":"function","line":69,"name":"arm","path_id":"F:44a5987438","signature":"function arm(dir, overrides = {})"},{"anchor":"S:48356203e2","kind":"function","line":13,"name":"repo","path_id":"F:4637e1fecb","signature":"function repo()"},{"anchor":"S:fd2e16186e","doc":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is ","kind":"function","line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0","signature":"function escapeRegExp(s)"},{"anchor":"S:e3c36060ec","doc":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).","kind":"function","line":95,"name":"makeMinimalRepo","path_id":"F:48355ccf4d","signature":"function makeMinimalRepo()"},{"anchor":"S:7c9eb8f22d","kind":"function","line":113,"name":"runScript","path_id":"F:48355ccf4d","signature":"function runScript(tmp)"},{"anchor":"S:43cc2b28a1","kind":"function","line":227,"name":"withStubRunner","path_id":"F:48355ccf4d","signature":"function withStubRunner(tmp, score, extendedScore, totalScore)"},{"anchor":"S:bb570e99d8","kind":"const","line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c","signature":"export const AI_SIGNATURE_RE = new RegExp(P, \"iu\");"},{"anchor":"S:ba4cb77f9c","doc":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions ","kind":"function","line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c","signature":"export function branchHasModelSegment(name)"},{"anchor":"S:4bfc88b9a8","doc":"Propose a compliant branch name by replacing any denylisted segment with a neutral * placeholder, preserving the rest of the path so the suggestion stays meaningful. * \"claude/fix-config\" -> \"change/f","kind":"function","line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c","signature":"export function suggestBranchName(name)"},{"anchor":"S:38e44b5fa7","doc":"Scan a branch name and return a finding if it carries a model identifier.","kind":"function","line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c","signature":"export function detectBranch(name)"},{"anchor":"S:e0f397f4e1","doc":"Scan commits for forbidden author/committer identity (reusing commit-identity.mjs) * AND for AI signatures inside commit-message bodies. The identity check and the body * check are complementary: the ","kind":"function","line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c","signature":"export function detectCommits(logOutput, bodies = [])"},{"anchor":"S:099c6ccde0","doc":"Scan a block of free text (PR body, a comment, a tracked file) for AI signatures. * Returns one finding per matching line so the remedy can point at the exact spot.","kind":"function","line":132,"name":"detectText","path_id":"F:4a7eaceb5c","signature":"export function detectText(kind, where, text)"},{"anchor":"S:6c21b6660b","kind":"function","line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c","signature":"function firstMatch(text)"},{"anchor":"S:af6abeace9","doc":"Render a precomputed, actionable remedy so a blocked violation is never a dead end. * The message names the exact fix and, where applicable, the literal git commands to * apply it, so a reviewer paste","kind":"function","line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c","signature":"export function formatRemedy(findings)"},{"anchor":"S:3ef15e4c1b","doc":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked.","kind":"function","line":13,"name":"redactText","path_id":"F:4b91a9f65b","signature":"export function redactText(text, { strict = false } = {})"},{"anchor":"S:7379962c7e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:4d08d5472f","signature":"export const MESSAGES ="},{"anchor":"S:5e08a11ce4","doc":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @param {Array} [options.comments] -","kind":"function","line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df","signature":"export function startMockGitHubServer(options = {})"},{"anchor":"S:2ea6241ebd","kind":"function","line":68,"name":"writeJson","path_id":"F:4dabd020df","signature":"function writeJson(res, status, body)"},{"anchor":"S:a76a61b560","doc":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored copy cannot silently drop credit to mod","kind":"const","line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024","signature":"export const MANIFEST_VERSION = 2;"},{"anchor":"S:d4ed2d5fe7","kind":"const","line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024","signature":"export const ATTESTATION_KIND = \"policy-attestation\";"},{"anchor":"S:78dd5bd63d","kind":"function","line":52,"name":"sha256Hex","path_id":"F:4db1101024","signature":"function sha256Hex(bytes)"},{"anchor":"S:fc880b17bd","kind":"function","line":56,"name":"readOrNull","path_id":"F:4db1101024","signature":"function readOrNull(root, rel)"},{"anchor":"S:262e039096","doc":"Extract a Markdown section body: the heading whose text matches `heading` (case-insensitive) and the lines beneath it, up to the next heading of the same or higher level. Returns null when no such hea","kind":"function","line":68,"name":"extractSection","path_id":"F:4db1101024","signature":"export function extractSection(markdown, heading)"},{"anchor":"S:e6c1406727","kind":"function","line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024","signature":"function fingerprintDisclosureSources(root)"},{"anchor":"S:41514ae74b","kind":"function","line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024","signature":"function fingerprintPolicyFiles(root)"},{"anchor":"S:cf9af1e29c","doc":"The disclosed gate set is derived from the actual `verify` npm script so it cannot drift from what the project runs. One level of `npm run ` / `npm test` aliases is flattened so gates hidden beh","kind":"function","line":112,"name":"gatesFromVerify","path_id":"F:4db1101024","signature":"export function gatesFromVerify(pkgJson)"},{"anchor":"S:5f317ed26b","kind":"function","line":127,"name":"capabilities","path_id":"F:4db1101024","signature":"function capabilities(config)"},{"anchor":"S:44c14f3d19","doc":"The credit block (ADR-037). Populated from package.json, never hardcoded twice, so a rename in package.json is what moves this, not a second literal to keep in sync. The repository URL is stripped of ","kind":"function","line":135,"name":"generator","path_id":"F:4db1101024","signature":"function generator(pkgJson)"},{"anchor":"S:f51dd29844","kind":"function","line":145,"name":"normalizePaths","path_id":"F:4db1101024","signature":"function normalizePaths(list)"},{"anchor":"S:a92333a9ea","doc":"Build the deterministic manifest body (without the content_digest) from repo state.","kind":"function","line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024","signature":"export function buildPolicyManifestBody({ root, config, pkgJson })"},{"anchor":"S:c4e4845bcc","doc":"Content digest over the canonical (RFC 8785 JCS) serialization of the body, so a re-serialized or key-reordered file yields the same digest and only a real policy change moves it.","kind":"function","line":181,"name":"manifestDigest","path_id":"F:4db1101024","signature":"export function manifestDigest(body)"},{"anchor":"S:b29d404deb","doc":"The full manifest: the body plus its self-describing content_digest.","kind":"function","line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024","signature":"export function buildPolicyManifest({ root, config, pkgJson })"},{"anchor":"S:72cb0b7406","kind":"const","line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0","signature":"export const REQUIRED_FIELDS = ["},{"anchor":"S:005abb5200","doc":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evict.\" Until now nothing enforced it; appen","kind":"const","line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0","signature":"export const MAX_STAGED_ENTRIES = 20;"},{"anchor":"S:2064ebd573","doc":"A staged line, per LESSONS.md's own \"Staged format\": - [YYYY-MM-DD] (signal: gate|review|incident|rework) lesson - evidence: ref","kind":"const","line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0","signature":"export const STAGED_LINE_RE ="},{"anchor":"S:391a920cca","kind":"function","line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0","signature":"function learningsPath(root)"},{"anchor":"S:6831eb78e0","doc":"Extract the first fenced json block that appears after the \"## Promoted\" heading.","kind":"function","line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0","signature":"export function readPromotedLearnings(root)"},{"anchor":"S:dab0af7046","doc":"Return the staged bullet lines (the \"- [date] ...\" entries) between the \"## Staged\" and \"## Promoted\" headings. Lines that do not begin a bullet are ignored, so surrounding prose does not count agains","kind":"function","line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0","signature":"export function readStagedEntries(root)"},{"anchor":"S:30e8b022de","doc":"Append one staged candidate line to LESSONS.md, enforcing the format and the cap. Never evicts: a full section throws so a human promotes or prunes first. Idempotent on an exact-duplicate line. Return","kind":"function","line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0","signature":"export function appendStagedEntry(root, line)"},{"anchor":"S:2ca5ab6d7f","kind":"function","line":18,"name":"previewText","path_id":"F:4ebf08705b","signature":"function previewText(template: string)"},{"anchor":"S:d49b633132","kind":"function","line":67,"name":"isValidUrl","path_id":"F:4ebf08705b","signature":"function isValidUrl(value: string): boolean"},{"anchor":"S:6d2334f815","doc":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-","kind":"function","line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b","signature":"export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:fcf3c9d4a4","kind":"function","line":39,"name":"run","path_id":"F:4fad18c892","signature":"function run(diffPath, extraArgs = [])"},{"anchor":"S:9e3d232a1b","kind":"function","line":43,"name":"fixture","path_id":"F:4fad18c892","signature":"function fixture(dir, name)"},{"anchor":"S:d439b00c59","doc":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rule.","kind":"function","line":73,"name":"writeRunLog","path_id":"F:522efae76d","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:76dbb025c9","kind":"function","line":116,"name":"removeFirstMatch","path_id":"F:522efae76d","signature":"function removeFirstMatch(text, re)"},{"anchor":"S:4316722ab5","kind":"function","line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d","signature":"function insertBeforeFirst(text, re, render)"},{"anchor":"S:0ed808bd36","kind":"function","line":132,"name":"insertAfterFirst","path_id":"F:522efae76d","signature":"function insertAfterFirst(text, re, render)"},{"anchor":"S:49ad410798","kind":"function","line":140,"name":"replaceFirst","path_id":"F:522efae76d","signature":"function replaceFirst(text, findRe, replaceRe, replacement)"},{"anchor":"S:47c5321a5f","doc":"--------------------------------------------------------------------------- Target-repo file listing. Prefer git (fast, respects .gitignore, skips node_modules) and fall back to a bounded manual walk ","kind":"function","line":264,"name":"listFiles","path_id":"F:522efae76d","signature":"function listFiles(target)"},{"anchor":"S:474ceb514b","doc":"Opens the file once and sizes/reads it through that one file descriptor, rather than statSync(path) followed by a separate readFileSync(path): a path-based check-then-use leaves a window where the pat","kind":"function","line":289,"name":"readCapped","path_id":"F:522efae76d","signature":"function readCapped(abs)"},{"anchor":"S:a8f75707be","doc":"A minimal single-hunk unified diff for a localized edit, headed with the file's REAL repo-relative path so guard-ratchet classifies it as the real file, not a temp path.","kind":"function","line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d","signature":"function makeUnifiedDiff(relPath, before, after)"},{"anchor":"S:33d286d62d","doc":"Run a guard-ratchet at `scriptPath` against a saved diff. `json` asks for the machine format (used for the oracle, to read the MR code); the graded host run only needs the exit code. --diff mode reads","kind":"function","line":330,"name":"runRatchet","path_id":"F:522efae76d","signature":"function runRatchet(scriptPath, diffFile, json)"},{"anchor":"S:867db3037b","doc":"--------------------------------------------------------------------------- Decide what gate the target actually has configured. -----------------------------------------------------------------------","kind":"function","line":343,"name":"resolveGate","path_id":"F:522efae76d","signature":"function resolveGate(target)"},{"anchor":"S:4e5c54ea09","doc":"--------------------------------------------------------------------------- Run one category: find a real file, synthesize a weakening on a scratch copy, confirm it with the oracle, then grade it agai","kind":"function","line":369,"name":"runCategory","path_id":"F:522efae76d","signature":"function runCategory(cat, target, files, gate, scratchRoot)"},{"anchor":"S:c2e502ad5e","doc":"--------------------------------------------------------------------------- Level from the applicable (tested) categories only. N/A categories are excluded from both numerator and denominator so a rep","kind":"function","line":409,"name":"levelFor","path_id":"F:522efae76d","signature":"function levelFor(pass, applicable, gateConfigured)"},{"anchor":"S:086ff230f0","kind":"function","line":417,"name":"main","path_id":"F:522efae76d","signature":"function main(argv)"},{"anchor":"S:ad302fbf54","kind":"function","line":5,"name":"makeCartService","path_id":"F:52caf3b287","signature":"function makeCartService(cart)"},{"anchor":"S:8d10c3ed6e","kind":"function","line":13,"name":"makeOrderService","path_id":"F:52caf3b287","signature":"function makeOrderService()"},{"anchor":"S:6c21f00789","doc":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves the assertion's expected value to match ","kind":"const","line":7,"name":"scenario","path_id":"F:5376e86470","signature":"export const scenario ="},{"anchor":"S:2a04172292","kind":"function","line":4,"name":"HostSelected","path_id":"F:545c0ccfeb","signature":"export const HostSelected = () => {}} />;"},{"anchor":"S:2bd0a26c48","kind":"function","line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb","signature":"export const ProductSelected = () => {}} />;"},{"anchor":"S:5e3d6fa91f","kind":"function","line":20,"name":"run","path_id":"F:54a3c626d9","signature":"function run(script, args = [], env = {})"},{"anchor":"S:2f1892a712","kind":"function","line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9","signature":"function makeStagedFixture(stagedLines = [])"},{"anchor":"S:5ea90f5e50","kind":"class","line":3,"name":"CheckoutService","path_id":"F:54c6928de9","signature":"export class CheckoutService"},{"anchor":"S:712330cf3e","kind":"function","line":6,"name":"parseStagedLine","path_id":"F:54df44aadd","signature":"export function parseStagedLine(line)"},{"anchor":"S:041a6b87af","kind":"function","line":14,"name":"tmp","path_id":"F:55b3a4e2c0","signature":"function tmp()"},{"anchor":"S:32c99a4337","kind":"function","line":18,"name":"run","path_id":"F:55b3a4e2c0","signature":"function run(...args)"},{"anchor":"S:05af4c96a8","kind":"function","line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0","signature":"function seedLearnings(dir)"},{"anchor":"S:d8edda2d76","kind":"function","line":12,"name":"makeMinimalRepo","path_id":"F:564b053598","signature":"function makeMinimalRepo()"},{"anchor":"S:7cd6925ad6","kind":"function","line":19,"name":"runScript","path_id":"F:564b053598","signature":"function runScript(tmp)"},{"anchor":"S:634b7012be","doc":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals.","kind":"function","line":17,"name":"makeAtt","path_id":"F:571aa2f3ae","signature":"function makeAtt(repoUrl, autonomyEnabled, dryRun, caps, digest)"},{"anchor":"S:bbdb581d9d","kind":"interface","line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716","signature":"export interface SafetyStripProps"},{"anchor":"S:3f2874e2ce","doc":"A horizontal, wrapping strip of small labeled cells summarizing the safety-relevant * levers for a project at a glance: whether autonomy and auto-merge are on, dry-run * status, merge and budget caps,","kind":"function","line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716","signature":"export function SafetyStrip("},{"anchor":"S:42b8608c58","kind":"function","line":92,"name":"Cell","path_id":"F:57ca5f1716","signature":"function Cell({ label, help, children }: CellProps)"},{"anchor":"S:0f004d17fa","kind":"function","line":24,"name":"git","path_id":"F:580d11b514","signature":"function git(args, cwd)"},{"anchor":"S:4b391a8eee","doc":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be well-formed and to apply cleanly against","kind":"function","line":34,"name":"makeGitFixture","path_id":"F:580d11b514","signature":"function makeGitFixture()"},{"anchor":"S:fd58589dfa","doc":"Build a minimal plan shape invokeRoleOpenAI needs: plan[role] (a resolved role descriptor) plus runId/transcriptDir. transcriptDir is deliberately kept under the repo's gitignored runs/ prefix (see .g","kind":"function","line":127,"name":"makePlan","path_id":"F:580d11b514","signature":"function makePlan(role, roleDescriptor, transcriptSubdir)"},{"anchor":"S:b7db5f4d64","kind":"function","line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514","signature":"function cleanupTranscripts()"},{"anchor":"S:47cde5f81f","doc":"Lifecycle status of a decision: still open for input, or already resolved.","kind":"type","line":6,"name":"DecisionStatus","path_id":"F:583edef643","signature":"export type DecisionStatus = \"open\" | \"resolved\";"},{"anchor":"S:707883a645","doc":"Plain data shape for a single decision awaiting (or having received) human input. * Components in this package define their own shape rather than importing app-level * types, so this interface is the ","kind":"interface","line":14,"name":"DecisionSummary","path_id":"F:583edef643","signature":"export interface DecisionSummary"},{"anchor":"S:6e1dfe647a","kind":"interface","line":29,"name":"DecisionCardProps","path_id":"F:583edef643","signature":"export interface DecisionCardProps"},{"anchor":"S:5c69e2b109","doc":"A card summarizing a single decision the system is asking a human to make: the * question, an optional recommendation in an info-tinted inset, and its lifecycle * status. Open decisions with a hold-by","kind":"function","line":45,"name":"DecisionCard","path_id":"F:583edef643","signature":"export function DecisionCard({ decision, onResolve }: DecisionCardProps)"},{"anchor":"S:bd63b1e408","kind":"function","line":15,"name":"cleanSignature","path_id":"F:594f505f11","signature":"function cleanSignature(line)"},{"anchor":"S:21635cbeda","kind":"const","line":19,"name":"adapter","path_id":"F:594f505f11","signature":"export const adapter ="},{"anchor":"S:cf88d1486b","kind":"function","line":16,"name":"run","path_id":"F:5956278014","signature":"function run(...args)"},{"anchor":"S:06c0c85d92","kind":"function","line":20,"name":"tmp","path_id":"F:5956278014","signature":"function tmp()"},{"anchor":"S:069ca5f436","doc":"Catalog entries for scripts/check-repo-hygiene.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:597cc7ae15","signature":"export const MESSAGES ="},{"anchor":"S:7d89fd8d95","kind":"function","line":13,"name":"run","path_id":"F:5994385869","signature":"function run(script, args = [], env = {})"},{"anchor":"S:1ef7d0ea53","kind":"class","line":3,"name":"CartService","path_id":"F:599f5b2f28","signature":"export class CartService"},{"anchor":"S:bb5d1b5426","kind":"const","line":1,"name":"MESSAGES","path_id":"F:59b2499e4e","signature":"export const MESSAGES ="},{"anchor":"S:e99608caf1","doc":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word.","kind":"const","line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b","signature":"export const SAFE_BRANCH_NAMES = ["},{"anchor":"S:59dcca7090","doc":"Commit identities no layer may flag. dependabot is ordinary automation, allowed.","kind":"const","line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b","signature":"export const SAFE_IDENTITIES = ["},{"anchor":"S:7bfb1bf049","doc":"Free-text snippets (PR-body/commit-body shaped) no layer may flag. These exercise the ordinary-English and in-repo-vocabulary collisions that bare-word or substring matching would trip on.","kind":"const","line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b","signature":"export const SAFE_TEXT_SNIPPETS = ["},{"anchor":"S:9ef12b47d5","doc":"Inputs the STRICT detector intentionally flags today. This is a documented, deliberate over-block, not a false positive: the corpus locks the current behavior so any future change to it is a conscious","kind":"const","line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b","signature":"export const DOCUMENTED_STRICT_OVERBLOCKS = ["},{"anchor":"S:bfb04089fa","kind":"const","line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914","signature":"export const DEFAULT_QUEUE_DIR = join(root, \".modonome\", \"queue\");"},{"anchor":"S:04f5060b44","kind":"const","line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914","signature":"export const DEFAULT_LEASE_MINUTES = 30;"},{"anchor":"S:7bc320f853","doc":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued.","kind":"function","line":27,"name":"assertValid","path_id":"F:5b113a0914","signature":"function assertValid(record)"},{"anchor":"S:556ab0a4ef","kind":"function","line":34,"name":"recordPath","path_id":"F:5b113a0914","signature":"function recordPath(dir, id)"},{"anchor":"S:29fd3ef66c","doc":"Atomic write: serialize to a temp file in the same directory, then rename over the destination. Rename is atomic on the same filesystem, so a reader never observes a partial record.","kind":"function","line":41,"name":"writeAtomic","path_id":"F:5b113a0914","signature":"function writeAtomic(dir, id, record)"},{"anchor":"S:2102bdee1c","kind":"function","line":49,"name":"readRecord","path_id":"F:5b113a0914","signature":"function readRecord(dir, file)"},{"anchor":"S:a364864213","kind":"function","line":53,"name":"listRecords","path_id":"F:5b113a0914","signature":"function listRecords(dir)"},{"anchor":"S:96b040bf38","doc":"Enqueue an action. Fills schema_version, state, and created_at when omitted, * validates the record, and writes it atomically. Returns the stored record. * * @param {object} action - At least id, targ","kind":"function","line":76,"name":"enqueue","path_id":"F:5b113a0914","signature":"export function enqueue(action, dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:852d083fcb","doc":"List queued (not claimed/done/failed) actions, oldest first by created_at. * * @param {string} [dir] * @returns {object[]}","kind":"function","line":97,"name":"listQueued","path_id":"F:5b113a0914","signature":"export function listQueued(dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:ba017108fd","doc":"A lease is live if the record is claimed and its expiry is strictly in the future.","kind":"function","line":104,"name":"leaseIsLive","path_id":"F:5b113a0914","signature":"function leaseIsLive(record, now)"},{"anchor":"S:6b0614bdf6","doc":"Atomically lease the oldest queued action this worker environment can serve. * A record is servable when its target equals the worker env or appears in the * worker env's served set. Sets state to cla","kind":"function","line":127,"name":"claim","path_id":"F:5b113a0914","signature":"export function claim(workerEnv, dir = DEFAULT_QUEUE_DIR, now = new Date(), leaseMinutes = DEFAULT_LEASE_MINUTES)"},{"anchor":"S:194e854c70","doc":"Mark a claimed action done or failed, attaching an optional result object. * * @param {string} id * @param {object|null} result * @param {string} [dir] * @param {boolean} [ok] - true marks done, false","kind":"function","line":156,"name":"complete","path_id":"F:5b113a0914","signature":"export function complete(id, result, dir = DEFAULT_QUEUE_DIR, ok = true)"},{"anchor":"S:ed1db0b6bb","doc":"Revert every claimed record whose lease has expired back to queued, clearing * its owner and expiry. Returns the list of reclaimed records. * * @param {string} [dir] * @param {Date} [now] * @returns {","kind":"function","line":176,"name":"reclaimStale","path_id":"F:5b113a0914","signature":"export function reclaimStale(dir = DEFAULT_QUEUE_DIR, now = new Date())"},{"anchor":"S:26ee7911e3","doc":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (agentproof, CI log scraping), not a human-f","kind":"const","line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae","signature":"export const MESSAGES ="},{"anchor":"S:92bd39eb47","doc":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a finding's reason, reviewer_guidance, and lim","kind":"const","line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02","signature":"export const MESSAGES ="},{"anchor":"S:64ebce69bf","kind":"const","line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a","signature":"export const MESSAGES ="},{"anchor":"S:f36d6a8da6","kind":"function","line":12,"name":"buildRemediationView","path_id":"F:5daab9894d","signature":"export function buildRemediationView({ config = {}, envArmed = false, commits = [], identity = { name: \"\", email: \"\" } } = {})"},{"anchor":"S:ddfea151e8","kind":"function","line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7","signature":"export const TrustedAuthor = () => ("},{"anchor":"S:ea76c925e2","doc":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipped with --no-snapshot. Never overwrites ","kind":"function","line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c","signature":"function enableSnapshot(target, here)"},{"anchor":"S:8c6ccd3e8b","kind":"function","line":64,"name":"listTemplate","path_id":"F:5e450ff82c","signature":"function listTemplate(dir, base = \"\")"},{"anchor":"S:6dcbe228c5","kind":"function","line":75,"name":"scaffold","path_id":"F:5e450ff82c","signature":"export function scaffold(target, write)"},{"anchor":"S:950b7153af","doc":"Install the Tripwires editor hook packs into a target repo: the two hook config templates (.claude/settings.json, .cursor/hooks.json) plus the shared kernel and the detector it shells out to, so a hos","kind":"function","line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c","signature":"function scaffoldTripwires(target, here)"},{"anchor":"S:1856df868b","kind":"function","line":163,"name":"writeRunLog","path_id":"F:5e450ff82c","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:d6cf821403","doc":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`.","kind":"function","line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0","signature":"function keysFromDeclaration(source, declName)"},{"anchor":"S:da40a0864b","kind":"function","line":33,"name":"assertSameSet","path_id":"F:5eff4122c0","signature":"function assertSameSet(a, b, label)"},{"anchor":"S:0a677c2e37","kind":"function","line":19,"name":"msg","path_id":"F:5f7910375b","signature":"function msg(id, params)"},{"anchor":"S:397210a79e","kind":"function","line":24,"name":"pass","path_id":"F:5f7910375b","signature":"function pass(msg)"},{"anchor":"S:4bd4d449f1","kind":"function","line":27,"name":"fail","path_id":"F:5f7910375b","signature":"function fail(msg)"},{"anchor":"S:5d58defc25","kind":"function","line":14,"name":"tmpRepo","path_id":"F:60548316f5","signature":"function tmpRepo(configBody)"},{"anchor":"S:580f464240","kind":"function","line":23,"name":"runStatus","path_id":"F:60548316f5","signature":"function runStatus(dir, env)"},{"anchor":"S:0cfad6d2cf","kind":"function","line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c","signature":"function findSafeToDeleteFiles(dir)"},{"anchor":"S:17985dad90","doc":"Helper","kind":"function","line":245,"name":"execSync","path_id":"F:61296e720c","signature":"function execSync(cmd, opts)"},{"anchor":"S:2441bf3938","kind":"function","line":17,"name":"run","path_id":"F:61c2a29876","signature":"function run(format, payload)"},{"anchor":"S:581a43b877","kind":"function","line":26,"name":"parseJsonLine","path_id":"F:61c2a29876","signature":"function parseJsonLine(stdout)"},{"anchor":"S:5a2d3d98ce","kind":"type","line":6,"name":"ModalSize","path_id":"F:63351e350b","signature":"export type ModalSize = \"sm\" | \"md\";"},{"anchor":"S:b5d72ba60f","kind":"interface","line":8,"name":"ModalProps","path_id":"F:63351e350b","signature":"export interface ModalProps"},{"anchor":"S:5d9d040e28","doc":"The generic centered dialog: a panel over a scrim, closable by Escape, a scrim * click, or its own close button. Moves focus into the dialog on open. This is the * base primitive that composed dialogs","kind":"function","line":30,"name":"Modal","path_id":"F:63351e350b","signature":"export function Modal({ open, onClose, title, children, footer, size = \"md\" }: ModalProps)"},{"anchor":"S:1f19b07227","kind":"interface","line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb","signature":"export interface ConfirmDialogProps"},{"anchor":"S:0a9885ca9d","doc":"A confirmation dialog for destructive or high-consequence controls. Every control * that arms the engine, releases a lease, approves a protected path, or prunes a * learning routes through this so an ","kind":"function","line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb","signature":"export function ConfirmDialog("},{"anchor":"S:4abcc2a45b","kind":"function","line":21,"name":"redactionErrors","path_id":"F:65193a9799","signature":"export function redactionErrors(packet)"},{"anchor":"S:a8a643fda8","kind":"function","line":55,"name":"validatePacket","path_id":"F:65193a9799","signature":"export function validatePacket(packet)"},{"anchor":"S:489fa8bc67","kind":"type","line":14,"name":"HoverCardSide","path_id":"F:66264a042c","signature":"export type HoverCardSide = \"top\" | \"bottom\";"},{"anchor":"S:551c7477f2","kind":"interface","line":16,"name":"HoverCardSource","path_id":"F:66264a042c","signature":"export interface HoverCardSource"},{"anchor":"S:5ed8ee5c0a","kind":"interface","line":23,"name":"HoverCardProps","path_id":"F:66264a042c","signature":"export interface HoverCardProps"},{"anchor":"S:312c004ac1","doc":"A richer sibling of Tooltip: a small card (heading, body copy, source citation) for * reference content pulled from real documentation, rather than a one-line hint. Unlike * Tooltip, its content accep","kind":"function","line":46,"name":"HoverCard","path_id":"F:66264a042c","signature":"export function HoverCard({ title, body, source, children, side = \"bottom\" }: HoverCardProps)"},{"anchor":"S:050ec6eff9","doc":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent activity.","kind":"function","line":26,"name":"OverviewScreen","path_id":"F:6627655633","signature":"export function OverviewScreen("},{"anchor":"S:e95e85f904","kind":"const","line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8","signature":"export const SECRET_PATTERNS = ["},{"anchor":"S:9c4deaa396","doc":"Returns an array of { name } objects for every pattern that matches text.","kind":"function","line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8","signature":"export function scanForSecrets(text)"},{"anchor":"S:8b7542071f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:6a86908a3e","signature":"export const MESSAGES ="},{"anchor":"S:4eb76c8a83","kind":"function","line":9,"name":"Set","path_id":"F:6bef3f93ab","signature":"export const Set = () => ("},{"anchor":"S:c16b3b7bbf","kind":"function","line":10,"name":"Board","path_id":"F:6c0919b64e","signature":"export const Board = () => {}} />;"},{"anchor":"S:96ffd586d6","kind":"function","line":19,"name":"tmp","path_id":"F:6da7bd8294","signature":"function tmp()"},{"anchor":"S:0f77533ed4","kind":"function","line":23,"name":"run","path_id":"F:6da7bd8294","signature":"function run(...args)"},{"anchor":"S:4adffc8b06","kind":"function","line":27,"name":"seedJsTest","path_id":"F:6da7bd8294","signature":"function seedJsTest(dir)"},{"anchor":"S:354e31ec69","kind":"function","line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294","signature":"function snapshotFiles(dir)"},{"anchor":"S:7698d9efeb","doc":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first segment is \"feature\"; only a leading \"a","kind":"function","line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3","signature":"export function isModelIdentifierBranch(name)"},{"anchor":"S:99c574f83d","doc":"Resolve the branch under review from CI environment variables. Prefers the * pull request head ref, then the push ref name. Returns an empty string when * neither is set so callers can fall back to a ","kind":"function","line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3","signature":"export function resolveBranchName(env = process.env)"},{"anchor":"S:bb800288d9","kind":"function","line":12,"name":"writeRunLog","path_id":"F:6f247eb514","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:002c9f1daa","kind":"function","line":25,"name":"slug","path_id":"F:6f247eb514","signature":"function slug(text)"},{"anchor":"S:3d6f7980b3","kind":"function","line":33,"name":"proposeWork","path_id":"F:6f247eb514","signature":"function proposeWork(stack, hotFiles)"},{"anchor":"S:e099520832","doc":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing otherwise), so this stays safe and inert","kind":"function","line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514","signature":"function proposeControlPanelWork(targetDir)"},{"anchor":"S:24407449b3","doc":"Order proposals by descending deterministic priority score (highest-value, lowest-risk first). Signals are derived heuristically from each proposal's text and the hot-file churn count for the file it ","kind":"function","line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514","signature":"export function orderProposalsByScore(proposals, hotFiles)"},{"anchor":"S:7fb0e9b59c","kind":"function","line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514","signature":"export function proposalToWorkItem(proposal, opts = {})"},{"anchor":"S:ab8d34f24a","doc":"Run stack/protected-path/instruction/hot-file detection and score the resulting proposals for a target directory. Read-only: writes nothing. Shared by the CLI printer below, `--emit-work-item`, and `q","kind":"function","line":119,"name":"sweepTarget","path_id":"F:6f247eb514","signature":"export function sweepTarget(target)"},{"anchor":"S:19ecd8efbf","kind":"function","line":134,"name":"main","path_id":"F:6f247eb514","signature":"function main(args)"},{"anchor":"S:5fe0061772","kind":"function","line":4,"name":"Maker","path_id":"F:7008a20b1c","signature":"export const Maker = () => ("},{"anchor":"S:93ab3c1c15","kind":"function","line":8,"name":"Checker","path_id":"F:7008a20b1c","signature":"export const Checker = () => ("},{"anchor":"S:d4fd7f4ad3","kind":"function","line":12,"name":"Pair","path_id":"F:7008a20b1c","signature":"export const Pair = () => ("},{"anchor":"S:ba7fe0b6d3","doc":"A config where each runner declares its environment and reach.","kind":"function","line":10,"name":"routedConfig","path_id":"F:704e42d42b","signature":"function routedConfig()"},{"anchor":"S:435432f041","kind":"interface","line":6,"name":"CheckboxProps","path_id":"F:7054844360","signature":"export interface CheckboxProps"},{"anchor":"S:0b453b55b9","doc":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` visually replaced by a styl","kind":"function","line":25,"name":"Checkbox","path_id":"F:7054844360","signature":"export function Checkbox({ checked, onCheckedChange, label, hint, disabled }: CheckboxProps)"},{"anchor":"S:145586915d","kind":"interface","line":5,"name":"DrawerProps","path_id":"F:71f0bfb455","signature":"export interface DrawerProps"},{"anchor":"S:eb4b11fdf2","doc":"A right-side sheet that slides in over a scrim, for focused tasks that need more * room than a popover but should not leave the current page's context (inspecting a * work item, editing a policy). Tra","kind":"function","line":25,"name":"Drawer","path_id":"F:71f0bfb455","signature":"export function Drawer({ open, onClose, title, width = 480, children }: DrawerProps)"},{"anchor":"S:eaba90daa0","kind":"function","line":101,"name":"exists","path_id":"F:7232ada2da","signature":"async function exists(p)"},{"anchor":"S:7b87285e6c","kind":"function","line":110,"name":"readTextSafe","path_id":"F:7232ada2da","signature":"async function readTextSafe(p)"},{"anchor":"S:934c97a052","kind":"function","line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da","signature":"async function listFilesRecursive(dir, { maxDepth = 5 } = {})"},{"anchor":"S:7048bb8a3d","doc":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`.","kind":"function","line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da","signature":"function parseCiJobNames(yamlText)"},{"anchor":"S:fc6086da9e","doc":"Extremely small YAML-ish key:value reader for flat config files. Good enough to inspect schema_version and the boolean arming levers without a YAML dep.","kind":"function","line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da","signature":"function parseFlatYaml(yamlText)"},{"anchor":"S:c275cb33da","doc":"(a) Schema collision: target has .modonome/ with incompatible config.","kind":"function","line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da","signature":"export async function checkSchemaCollision(targetDir)"},{"anchor":"S:8660e770ea","doc":"(b) CI job name conflict: target's CI files use Modonome job names.","kind":"function","line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da","signature":"export async function checkCiJobConflict(targetDir)"},{"anchor":"S:ee4deb809d","doc":"(c) Script shadowing: target has scripts/ that shadow Modonome scripts.","kind":"function","line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da","signature":"export async function checkScriptShadowing(targetDir)"},{"anchor":"S:f5a168e2ff","doc":"(d) Env var pollution: MODONOME_* env vars set that override safe defaults. Reads from the current process environment (the shell preparing to embed) AND statically inspects, read-only, the target's `","kind":"function","line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da","signature":"export async function checkEnvPollution(targetDir, env = process.env)"},{"anchor":"S:8a6e48a119","doc":"(e) Dependency conflict: target has deps that conflict with Modonome requirements.","kind":"function","line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da","signature":"export async function checkDependencyConflict(targetDir)"},{"anchor":"S:22ac6bb569","doc":"(f) Prompt injection risk: governance-override patterns in the target. Trusted locations (.modonome/, schemas/, CI dirs) are scanned exhaustively; for the rest of the repo we scan source-bearing files","kind":"function","line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da","signature":"export async function checkPromptInjection(targetDir)"},{"anchor":"S:522a86b0ed","doc":"(g) Node version incompatibility: target requires Node < 18.","kind":"function","line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da","signature":"export async function checkNodeVersion(targetDir)"},{"anchor":"S:03145d5ec3","kind":"const","line":519,"name":"CHECKS","path_id":"F:7232ada2da","signature":"export const CHECKS = ["},{"anchor":"S:0dd1d1c53a","kind":"function","line":529,"name":"runPreflight","path_id":"F:7232ada2da","signature":"export async function runPreflight(targetDir)"},{"anchor":"S:80ded7ba90","kind":"function","line":542,"name":"renderHuman","path_id":"F:7232ada2da","signature":"function renderHuman(report)"},{"anchor":"S:1ba042e0cf","kind":"function","line":565,"name":"main","path_id":"F:7232ada2da","signature":"async function main()"},{"anchor":"S:4514b4c1f0","doc":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the lessons * the engine has staged from repea","kind":"function","line":19,"name":"LearningsScreen","path_id":"F:757a70680a","signature":"export function LearningsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:e9fcedbe8f","kind":"interface","line":7,"name":"InputProps","path_id":"F:763efdd51c","signature":"export interface InputProps extends InputHTMLAttributes"},{"anchor":"S:6981533501","doc":"A labeled single-line text input. Shares the labeled-field frame used by every * form control in the panel: an optional label, an optional hint bubble, and an * optional error message below. Use for f","kind":"function","line":24,"name":"Input","path_id":"F:763efdd51c","signature":"export function Input("},{"anchor":"S:b4b12fd408","doc":"The kind of event recorded in the audit trail.","kind":"type","line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7","signature":"export type AuditEventKind ="},{"anchor":"S:ee3edffdff","doc":"Plain data shape for a single audit-trail event. Components in this package define * their own shape rather than importing app-level types, so this interface is the * contract a host app maps its own ","kind":"interface","line":25,"name":"AuditEvent","path_id":"F:76da13a8f7","signature":"export interface AuditEvent"},{"anchor":"S:62d1cf1f06","kind":"interface","line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7","signature":"export interface AuditTimelineProps"},{"anchor":"S:35ac020356","doc":"A vertical audit trail with a connecting line down the left edge. Each event shows a * colored node carrying an icon for its kind (so the event type is never carried by * color alone), the relative ti","kind":"function","line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7","signature":"export function AuditTimeline({ events, limit }: AuditTimelineProps)"},{"anchor":"S:e15045d8a4","kind":"function","line":13,"name":"dryRun","path_id":"F:778c33cdc0","signature":"function dryRun(dir)"},{"anchor":"S:f88498de73","doc":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure.","kind":"const","line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407","signature":"export const ATTESTATION_DOMAIN = \"modonome.policy-attestation.v1\\n\";"},{"anchor":"S:b455c897cf","doc":"Relative-to-root display path. Safe on any input: a path outside root (e.g. under ADOPT_ROOT when MODONOME_ADOPT_ROOT points elsewhere) is returned unchanged rather than sliced by a bare string-prefix","kind":"function","line":66,"name":"rel","path_id":"F:780c791407","signature":"function rel(p)"},{"anchor":"S:5b8a5996df","kind":"function","line":70,"name":"fail","path_id":"F:780c791407","signature":"function fail(msg)"},{"anchor":"S:87013bd4c3","kind":"function","line":75,"name":"loadInputs","path_id":"F:780c791407","signature":"export function loadInputs(r = root)"},{"anchor":"S:aacff6bc1c","doc":"The exact bytes a signature covers: the domain tag followed by the JCS of the manifest with its signature and content_digest removed (the content_digest is itself derived from that body, so signing th","kind":"function","line":84,"name":"attestationBytes","path_id":"F:780c791407","signature":"export function attestationBytes(manifest)"},{"anchor":"S:120830c7dd","kind":"function","line":91,"name":"maybeSign","path_id":"F:780c791407","signature":"function maybeSign(manifest, env)"},{"anchor":"S:5aff27256c","kind":"function","line":109,"name":"schema","path_id":"F:780c791407","signature":"function schema()"},{"anchor":"S:cf413b97c8","kind":"function","line":113,"name":"write","path_id":"F:780c791407","signature":"function write(env)"},{"anchor":"S:de8e4d5857","doc":"Recomputes a manifest body's digest and compares it to its own recorded content_digest. Shared by check(), verifyCmd(), and adoptCmd() so this self-consistency test is defined once; each caller still ","kind":"function","line":128,"name":"digestMismatch","path_id":"F:780c791407","signature":"function digestMismatch(m)"},{"anchor":"S:53158831f9","kind":"function","line":135,"name":"check","path_id":"F:780c791407","signature":"function check()"},{"anchor":"S:5ef4400e5e","doc":"The generator credit line, tolerant of a foreign pack that predates manifest_version 2: such a pack is shown honestly as claiming no credit rather than crashing on a missing field. homepage is guarded","kind":"function","line":169,"name":"generatorLine","path_id":"F:780c791407","signature":"function generatorLine(m)"},{"anchor":"S:2d4876abe2","kind":"function","line":174,"name":"readPack","path_id":"F:780c791407","signature":"function readPack(path)"},{"anchor":"S:ddc69b10ca","doc":"Reads and parses a caller-supplied pack file, failing with the tool's normal clean error instead of an uncaught exception. Every command that accepts a user-supplied path (--show, --verify, --diff, --","kind":"function","line":182,"name":"readForeignPack","path_id":"F:780c791407","signature":"function readForeignPack(path)"},{"anchor":"S:e476893b3b","kind":"function","line":190,"name":"show","path_id":"F:780c791407","signature":"function show(path)"},{"anchor":"S:acc91dc6fe","kind":"function","line":210,"name":"verifyCmd","path_id":"F:780c791407","signature":"function verifyCmd(path)"},{"anchor":"S:b9d44c6996","doc":"Set-valued policy fields (denylist, protected paths, gates): report what the foreign pack adds and what it is missing relative to this repo's live policy.","kind":"function","line":230,"name":"diffSet","path_id":"F:780c791407","signature":"function diffSet(label, local, foreign)"},{"anchor":"S:0be1a2cd09","kind":"function","line":244,"name":"diffCapabilities","path_id":"F:780c791407","signature":"function diffCapabilities(local, foreign)"},{"anchor":"S:90b2cf611f","kind":"function","line":255,"name":"diffPosture","path_id":"F:780c791407","signature":"function diffPosture(local, foreign)"},{"anchor":"S:d2a299acb3","doc":"Read-only comparison of a foreign pack's disclosed policy against this repo's own live policy. Always succeeds (never a pass/fail gate); a human uses this to decide whether to adopt. The foreign pack'","kind":"function","line":266,"name":"diffCmd","path_id":"F:780c791407","signature":"function diffCmd(path)"},{"anchor":"S:8735f37dad","doc":"Vendor a foreign policy pack into this repo, refusing on any integrity or credit failure. Order matters: schema validation catches a pack whose generator block was stripped outright (manifest_version ","kind":"function","line":288,"name":"adoptCmd","path_id":"F:780c791407","signature":"function adoptCmd(path, alias)"},{"anchor":"S:67852685cf","kind":"function","line":4,"name":"Info","path_id":"F:7832db450f","signature":"export const Info = () => ;"},{"anchor":"S:96c461f8cd","kind":"function","line":6,"name":"Success","path_id":"F:7832db450f","signature":"export const Success = () => ;"},{"anchor":"S:21a4872ace","kind":"function","line":8,"name":"Blocked","path_id":"F:7832db450f","signature":"export const Blocked = () => ;"},{"anchor":"S:59617d720e","doc":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which keeps the utility portable. It is used ","kind":"function","line":5,"name":"estimateTokens","path_id":"F:7944059823","signature":"export function estimateTokens(text)"},{"anchor":"S:a48d9e0b16","doc":"Greedily keep pre-ranked items until the token budget is spent. `sizeFn` returns the token cost of an item. A falsy or non-finite budget keeps everything. Returns { kept, dropped, tokens } so the call","kind":"function","line":13,"name":"budgetTier","path_id":"F:7944059823","signature":"export function budgetTier(items, maxTokens, sizeFn)"},{"anchor":"S:3ed1d37c7b","kind":"function","line":3,"name":"Unreachable","path_id":"F:79467a3153","signature":"export const Unreachable = () => ("},{"anchor":"S:cec6405a03","kind":"interface","line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b","signature":"export interface ArmingStateBadgeProps"},{"anchor":"S:3bae21fee6","doc":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, armed is * teal. The mode label always ren","kind":"function","line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b","signature":"export function ArmingStateBadge({ mode, envArmed, size = \"md\" }: ArmingStateBadgeProps)"},{"anchor":"S:130202d7f0","kind":"function","line":3,"name":"Queue","path_id":"F:7a43bf4ce5","signature":"export const Queue = () => ("},{"anchor":"S:8ec4bd5dec","doc":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads it","kind":"function","line":25,"name":"signPacket","path_id":"F:7b3e38c9a6","signature":"export function signPacket(packet, privateKeyObject, { keyAlias, signedAt }, overrides = {})"},{"anchor":"S:d732af6be5","doc":"Join class names, dropping falsy values. A tiny classnames helper.","kind":"type","line":2,"name":"ClassValue","path_id":"F:7c8d518693","signature":"export type ClassValue = string | false | null | undefined;"},{"anchor":"S:deea6aabbd","kind":"function","line":4,"name":"cx","path_id":"F:7c8d518693","signature":"export function cx(...values: ClassValue[]): string"},{"anchor":"S:41443bba10","kind":"function","line":1,"name":"total","path_id":"F:7ccad64380","signature":"def total(items)"},{"anchor":"S:05fcfe1c5b","doc":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after discount","kind":"function","line":5,"name":"apply_discount","path_id":"F:7ccad64380","signature":"def apply_discount(items, discount_percent)"},{"anchor":"S:90f1a56d4e","kind":"const","line":180,"name":"hostState","path_id":"F:7d236c9aa6","signature":"export const hostState: PanelState ="},{"anchor":"S:64376e38db","kind":"interface","line":6,"name":"SelectOption","path_id":"F:819f72edf6","signature":"export interface SelectOption"},{"anchor":"S:8af9c33a76","kind":"interface","line":13,"name":"SelectProps","path_id":"F:819f72edf6","signature":"export interface SelectProps"},{"anchor":"S:0b0e197734","doc":"A styled native `` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * surface treatment of the other form control","kind":"function","line":35,"name":"Select","path_id":"F:819f72edf6","signature":"export function Select("},{"anchor":"S:66cd7b74c6","kind":"interface","line":5,"name":"SliderProps","path_id":"F:81c495717c","signature":"export interface SliderProps"},{"anchor":"S:a91334a377","doc":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announcements) while the track and thumb pick ","kind":"function","line":32,"name":"Slider","path_id":"F:81c495717c","signature":"export function Slider("},{"anchor":"S:74e8f23a0b","kind":"function","line":4,"name":"MergeCap","path_id":"F:84a5c32a4c","signature":"export const MergeCap = () => ("},{"anchor":"S:14b57397ed","kind":"function","line":14,"name":"Budget","path_id":"F:84a5c32a4c","signature":"export const Budget = () => ("},{"anchor":"S:88bc43a62b","doc":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true.","kind":"const","line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227","signature":"export const CHANGE_REQUEST_SIGNALS = ["},{"anchor":"S:90b86b1f26","doc":"True when the transcript contains any documented change-request signal * phrase (case-insensitive). Pure string search: no partial-word surprises * beyond what the phrase itself implies. * * @param {s","kind":"function","line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227","signature":"export function hasChangeRequestSignal(transcript)"},{"anchor":"S:328dcdf4cc","doc":"Count distinct raised concerns/questions in the transcript. * * Heuristic (documented, approximate, not semantic): * - Any line ending in \"?\" counts once. * - Any line starting with \"concern:\", \"quest","kind":"function","line":76,"name":"countRaisedQuestions","path_id":"F:851f776227","signature":"export function countRaisedQuestions(transcript)"},{"anchor":"S:cfe87f9141","doc":"Derive checker-engagement telemetry from a checker transcript. * * @param {string|undefined|null} transcript - Full checker transcript text. * @returns {{checker_requested_changes: boolean, checker_qu","kind":"function","line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227","signature":"export function parseCheckerTelemetry(transcript)"},{"anchor":"S:6c778494b3","doc":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\".","kind":"function","line":7,"name":"relativeTime","path_id":"F:86838d35ac","signature":"export function relativeTime(iso: string, now: number = Date.parse(\"2026-07-01T09:45:00Z\")): string"},{"anchor":"S:8641765bb2","doc":"Format a duration in milliseconds as a compact string, for example \"1.2s\" or \"9s\".","kind":"function","line":34,"name":"formatDuration","path_id":"F:86838d35ac","signature":"export function formatDuration(ms?: number): string"},{"anchor":"S:6cb93e992c","doc":"Format a USD amount with two decimals.","kind":"function","line":45,"name":"formatUsd","path_id":"F:86838d35ac","signature":"export function formatUsd(usd: number): string"},{"anchor":"S:0aee45c73e","doc":"Catalog entries for scripts/guard-ratchet.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:86fd2cf669","signature":"export const MESSAGES ="},{"anchor":"S:88426a3883","doc":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker.","kind":"function","line":12,"name":"looksLikeDiff","path_id":"F:872221b1da","signature":"function looksLikeDiff(body)"},{"anchor":"S:074c2b3c02","doc":"Pull a unified diff out of a model response. Prefers a fenced ```diff or * ```patch block; falls back to a bare fenced block whose body looks like a * diff; falls back to treating the whole text as a ","kind":"function","line":28,"name":"extractDiff","path_id":"F:872221b1da","signature":"export function extractDiff(text)"},{"anchor":"S:fe1a464205","doc":"Apply a unified diff to a working directory using the git binary. * Validates with `git apply --check` first; git apply is atomic, so a diff * that fails validation or application is never partially a","kind":"function","line":60,"name":"applyPatch","path_id":"F:872221b1da","signature":"export function applyPatch(diff, cwd, deps = {})"},{"anchor":"S:6b5288f35f","kind":"function","line":18,"name":"coreLevers","path_id":"F:87c30bdb4c","signature":"function coreLevers()"},{"anchor":"S:b4e887ed4f","kind":"function","line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c","signature":"function schemaLevers()"},{"anchor":"S:e09a554f44","kind":"function","line":32,"name":"templateLevers","path_id":"F:87c30bdb4c","signature":"function templateLevers()"},{"anchor":"S:5d118d4b60","kind":"function","line":3,"name":"Row","path_id":"F:8972d37045","signature":"export const Row = () => ("},{"anchor":"S:e89c164d25","kind":"function","line":54,"name":"titleFromId","path_id":"F:89aee72994","signature":"function titleFromId(id: string): string"},{"anchor":"S:f0db7341e7","kind":"const","line":89,"name":"productState","path_id":"F:89aee72994","signature":"export const productState: PanelState ="},{"anchor":"S:89e92655dd","kind":"function","line":57,"name":"normalizeLF","path_id":"F:8a10462927","signature":"function normalizeLF(s)"},{"anchor":"S:a34306cc67","kind":"function","line":61,"name":"getDiff","path_id":"F:8a10462927","signature":"function getDiff()"},{"anchor":"S:974654287c","kind":"function","line":304,"name":"count","path_id":"F:8a10462927","signature":"function count(lines, re)"},{"anchor":"S:fd230402e2","kind":"function","line":323,"name":"deconfuse","path_id":"F:8a10462927","signature":"function deconfuse(line)"},{"anchor":"S:457528354e","kind":"function","line":331,"name":"stripInlineComment","path_id":"F:8a10462927","signature":"function stripInlineComment(line)"},{"anchor":"S:d0c2835a28","doc":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote or that does not close on this line, or ","kind":"function","line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927","signature":"function stripLineLocalNoise(line)"},{"anchor":"S:a4c389d72a","kind":"function","line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927","signature":"function isVacuousAssertion(line)"},{"anchor":"S:17945c542e","kind":"function","line":393,"name":"countBareAsserts","path_id":"F:8a10462927","signature":"function countBareAsserts(lines)"},{"anchor":"S:4d3ac94b7c","kind":"function","line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927","signature":"function isVacuousPyAssert(line)"},{"anchor":"S:0b8ff85c9c","kind":"function","line":666,"name":"classifyCode","path_id":"F:8a10462927","signature":"function classifyCode(msg)"},{"anchor":"S:2358b05e12","doc":"Each problem message is \": \". Recover the file path for a location.","kind":"function","line":680,"name":"fileOf","path_id":"F:8a10462927","signature":"function fileOf(msg)"},{"anchor":"S:edb5058173","kind":"function","line":685,"name":"helpUri","path_id":"F:8a10462927","signature":"function helpUri(code)"},{"anchor":"S:eff02f504b","kind":"function","line":689,"name":"toFindings","path_id":"F:8a10462927","signature":"function toFindings(list)"},{"anchor":"S:42188b3bb9","kind":"function","line":696,"name":"emitJson","path_id":"F:8a10462927","signature":"function emitJson(findings)"},{"anchor":"S:1d0f5bc129","kind":"function","line":708,"name":"emitSarif","path_id":"F:8a10462927","signature":"function emitSarif(findings)"},{"anchor":"S:06700c1faf","doc":"Advisory-only, informational, never affects the exit code (see the comment where assertionTally is declared above). Printed in both outcomes so a reviewer sees the cross-file shape whether or not a sp","kind":"function","line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927","signature":"function printAssertionTallyAdvisory()"},{"anchor":"S:69f3537d3b","kind":"function","line":13,"name":"tmp","path_id":"F:8a3433b070","signature":"function tmp()"},{"anchor":"S:1fe8548dac","kind":"function","line":17,"name":"fixture","path_id":"F:8a3433b070","signature":"function fixture()"},{"anchor":"S:33534dd596","kind":"function","line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff","signature":"export function readModonomeState(modonomeDir, { mode })"},{"anchor":"S:895b1937bd","kind":"function","line":61,"name":"readConfig","path_id":"F:8a3dd6ccff","signature":"function readConfig(modonomeDir)"},{"anchor":"S:6044b46e0f","doc":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces in CI, so the panel can never display a","kind":"function","line":100,"name":"readMessages","path_id":"F:8a3dd6ccff","signature":"function readMessages(modonomeDir)"},{"anchor":"S:9287ce102a","kind":"function","line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff","signature":"function readWorkItems(modonomeDir)"},{"anchor":"S:064519e650","kind":"function","line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff","signature":"function titleFromId(id)"},{"anchor":"S:ac0d90ea9c","kind":"function","line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff","signature":"function toWorkItemVM(item)"},{"anchor":"S:23afcde4ab","doc":"A gate's status is implied by the state of every work item that declares it, never by a fabricated pass. A repo that has only ever run dry-run sweeps shows every declared gate as \"pending\", which is t","kind":"function","line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff","signature":"function impliedGateStatus(state)"},{"anchor":"S:639160c471","kind":"function","line":186,"name":"buildGates","path_id":"F:8a3dd6ccff","signature":"function buildGates(items)"},{"anchor":"S:e41c3f2d61","kind":"function","line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff","signature":"function buildProtectedPaths(config, items)"},{"anchor":"S:4741feecf9","doc":"modonome's own agent runner does not yet record a dollar cost per call (see scripts/agent/run-cycle.mjs), so real spend is honestly zero until that lands. Calls are still counted from the real maker_r","kind":"function","line":234,"name":"buildCost","path_id":"F:8a3dd6ccff","signature":"function buildCost(config, metrics)"},{"anchor":"S:77031e48f4","kind":"function","line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff","signature":"function readLearnings(modonomeDir)"},{"anchor":"S:783d91f2ed","kind":"function","line":319,"name":"extractSection","path_id":"F:8a3dd6ccff","signature":"function extractSection(text, heading)"},{"anchor":"S:b02fc1cd06","kind":"function","line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff","signature":"function readDecisions(modonomeDir)"},{"anchor":"S:4350272f8a","kind":"function","line":357,"name":"readRuns","path_id":"F:8a3dd6ccff","signature":"function readRuns(modonomeDir)"},{"anchor":"S:d9c2336e09","doc":"Real telemetry only. metrics.example.jsonl documents the schema and must never be read here: the promoted learning L-001 in this repo's own LESSONS.md exists specifically because sample telemetry was ","kind":"function","line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff","signature":"function readMetrics(modonomeDir)"},{"anchor":"S:409d8caf58","kind":"function","line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff","signature":"function describeMetric(m, kind)"},{"anchor":"S:b8469e1267","kind":"function","line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff","signature":"function buildAudit(runs, metrics)"},{"anchor":"S:a8971aba2c","kind":"function","line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff","signature":"function buildTrends(runs)"},{"anchor":"S:b81af2dbe4","kind":"function","line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff","signature":"function latestAgentProofScore(runs)"},{"anchor":"S:db7c5c1950","doc":"Mirrors latestAgentProofScore, but for `npx modonome gauntlet` runs (a distinct command, never conflated with `report`). Undefined (not 0) when the tool has never been run, since a 0 score and \"never ","kind":"function","line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff","signature":"function latestGauntletScore(runs)"},{"anchor":"S:baab120dbc","kind":"function","line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff","signature":"function gitInfo(repoRoot)"},{"anchor":"S:f40a6dfd1b","doc":"The unpublished commit range (origin/main..HEAD) with the identity and message fields the remediation planner reads. Bounded to origin/main so the panel only ever proposes over history that has not be","kind":"function","line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff","signature":"function gitCommits(repoRoot)"},{"anchor":"S:37268eb979","doc":"The repository's own git identity, the target a reauthor rewrite would use. Empty when unset, which the planner and the CLI both treat as \"not usable for apply\".","kind":"function","line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff","signature":"function gitIdentity(repoRoot)"},{"anchor":"S:4cd48cf92e","kind":"function","line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff","signature":"function buildSubject({ repoRoot, modonomeDir, mode, config, queue, runs })"},{"anchor":"S:77a4165d99","kind":"type","line":12,"name":"TooltipSide","path_id":"F:8a9aff1529","signature":"export type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";"},{"anchor":"S:0b70780ca5","kind":"interface","line":14,"name":"TooltipProps","path_id":"F:8a9aff1529","signature":"export interface TooltipProps"},{"anchor":"S:7bdca9af48","doc":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the same * information), and closes on blur","kind":"function","line":30,"name":"Tooltip","path_id":"F:8a9aff1529","signature":"export function Tooltip({ content, children, side = \"top\" }: TooltipProps)"},{"anchor":"S:55fc57e799","doc":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read where the file could be removed out from und","kind":"function","line":17,"name":"readIfExists","path_id":"F:8abf9e432a","signature":"function readIfExists(path)"},{"anchor":"S:c44c6a3e42","doc":"Parse RELEASE-EVIDENCE.md to extract gate counts and autonomy status","kind":"function","line":35,"name":"parseEvidence","path_id":"F:8abf9e432a","signature":"function parseEvidence()"},{"anchor":"S:208ce5b839","doc":"Count work items by state","kind":"function","line":65,"name":"countWorkItems","path_id":"F:8abf9e432a","signature":"function countWorkItems()"},{"anchor":"S:370b67baf2","doc":"Parse the product version from package.json. (.modonome/version holds a schema version, not the product version, so it must not be used here.)","kind":"function","line":90,"name":"readVersion","path_id":"F:8abf9e432a","signature":"function readVersion()"},{"anchor":"S:4afb276004","doc":"Parse the normative AgentProof score and level from agentproof/README.md.","kind":"function","line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a","signature":"function parseAgentproof()"},{"anchor":"S:172b08e199","doc":"Update the meta block in site/repo-data.js (version, score, level).","kind":"function","line":118,"name":"updateRepoData","path_id":"F:8abf9e432a","signature":"function updateRepoData(data)"},{"anchor":"S:ee17355d71","doc":"Update site/index.html with live data","kind":"function","line":133,"name":"updateSite","path_id":"F:8abf9e432a","signature":"function updateSite(data)"},{"anchor":"S:03b000e190","doc":"Verify site data matches evidence (used in CI gate)","kind":"function","line":153,"name":"verifySiteData","path_id":"F:8abf9e432a","signature":"function verifySiteData(data)"},{"anchor":"S:c0c2347579","kind":"type","line":5,"name":"ButtonVariant","path_id":"F:8b122c449e","signature":"export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";"},{"anchor":"S:05e617fb30","kind":"type","line":6,"name":"ButtonSize","path_id":"F:8b122c449e","signature":"export type ButtonSize = \"sm\" | \"md\" | \"lg\";"},{"anchor":"S:c928d805b5","kind":"interface","line":8,"name":"ButtonProps","path_id":"F:8b122c449e","signature":"export interface ButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:b1bbb81b82","doc":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and * `danger` for anything that arms, delete","kind":"function","line":30,"name":"Button","path_id":"F:8b122c449e","signature":"export function Button("},{"anchor":"S:6c4ca00b53","doc":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state.","kind":"function","line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba","signature":"function scratchModonomeDir(sourcePath = realConfigPath)"},{"anchor":"S:a57f8c1bdc","doc":"Lines present in the original file that are untouched by a given patch: every line outside the blocks the patch's keys live in. Used to assert a patch changes only what it says it changes.","kind":"function","line":39,"name":"otherLines","path_id":"F:8b2f3dbcba","signature":"function otherLines(originalText, touchedTopKeys)"},{"anchor":"S:542af83b15","doc":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here.","kind":"const","line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4","signature":"export const BUILTIN_PROVIDERS ="},{"anchor":"S:6ee308cae0","doc":"Resolve a provider descriptor by name. Built-ins are merged with an optional * config-provided override map (cfg.providers), so a host repo can redefine or * add providers without touching this file. ","kind":"function","line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4","signature":"export function resolveProvider(name, providersOverride)"},{"anchor":"S:bead992b70","doc":"A cost class is billable only when it is \"paid\". Free and local roles never require remote_model_budget_usd_per_day.","kind":"function","line":48,"name":"isBillable","path_id":"F:8b5a1f94c4","signature":"export function isBillable(costClass)"},{"anchor":"S:97a7516354","doc":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned bounded-retry escapes and must not count as ","kind":"function","line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3","signature":"function buildAdjacency(machine, { includeCapGuard })"},{"anchor":"S:a716bbdaa8","doc":"reaches(adjacency, start, targets) -> bool Whether any node in `targets` is reachable from `start` along the edges.","kind":"function","line":33,"name":"reaches","path_id":"F:8b8d3c46b3","signature":"function reaches(adjacency, start, targets)"},{"anchor":"S:982b9fa62d","kind":"function","line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3","signature":"export function stateMachineErrors(machine)"},{"anchor":"S:a1828ef829","kind":"function","line":59,"name":"main","path_id":"F:8bb1b57470","signature":"async function main()"},{"anchor":"S:796295afbe","kind":"type","line":6,"name":"GateStatus","path_id":"F:8c6234a8cb","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:0906a625c3","kind":"interface","line":8,"name":"GateRow","path_id":"F:8c6234a8cb","signature":"export interface GateRow"},{"anchor":"S:2db1222578","kind":"interface","line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb","signature":"export interface GatePanelProps"},{"anchor":"S:0d46d60d35","doc":"A vertical list of CI gate rows, used to visualize the merge-blocking checks and * the anti-gaming ratchet on a work item or pipeline. Each row pairs an icon, a color, * and a text label for its statu","kind":"function","line":63,"name":"GatePanel","path_id":"F:8c6234a8cb","signature":"export function GatePanel({ gates, title = \"CI gates\" }: GatePanelProps)"},{"anchor":"S:aecf05317d","doc":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUrl * @returns {string}","kind":"function","line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236","signature":"export function buildChatCompletionsUrl(baseUrl)"},{"anchor":"S:b9ed6b7b01","doc":"Build the request headers, including the Authorization header when a token * is supplied. No Authorization header is sent when authToken is falsy, which * suits local endpoints that need none. * * @pa","kind":"function","line":44,"name":"buildHeaders","path_id":"F:8d2cb93236","signature":"export function buildHeaders(authToken, authScheme = \"Bearer\")"},{"anchor":"S:403ac351dd","doc":"Build the JSON request body. max_tokens is omitted when maxTokens is * undefined, since some endpoints reject an explicit null/undefined field. * * @param {string} model * @param {Array} messa","kind":"function","line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236","signature":"export function buildRequestBody(model, messages, maxTokens)"},{"anchor":"S:37693a15d4","doc":"Normalize a parsed OpenAI chat-completions response into * { text, finishReason, usage }. Throws a clear error on a malformed body * (missing choices, missing message). * * @param {any} data * @return","kind":"function","line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236","signature":"export function normalizeResponse(data)"},{"anchor":"S:fd88bace68","doc":"Retry only on 429 (rate limit) and 5xx (server error). Any other non-2xx status is a caller error and must not be retried.","kind":"function","line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236","signature":"function isRetryableStatus(status)"},{"anchor":"S:969658a48c","kind":"function","line":91,"name":"sleep","path_id":"F:8d2cb93236","signature":"function sleep(ms)"},{"anchor":"S:705c285e25","doc":"POST a chat-completions request to an OpenAI-compatible endpoint and return * a normalized result. * * @param {object} opts * @param {string} opts.baseUrl - Endpoint base, e.g. \"https://api.example.co","kind":"function","line":112,"name":"chatCompletion","path_id":"F:8d2cb93236","signature":"export async function chatCompletion("},{"anchor":"S:8041c36b7b","doc":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure.","kind":"function","line":18,"name":"noThrow","path_id":"F:8fe56e5618","signature":"function noThrow(fn)"},{"anchor":"S:856f3a5bea","doc":"Wrap guard-ratchet call with a hard 5-second timeout.","kind":"function","line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618","signature":"function ratchetWithTimeout(content)"},{"anchor":"S:744cc47208","doc":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and deterministic. * * Never returns an empty message:","kind":"function","line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281","signature":"export function cleanCommitMessage(message)"},{"anchor":"S:bc4bff4faa","doc":"Decide the metadata-only rewrite for each commit in a range. Input `commits` is the * range oldest-first, each { sha, an, ae, cn, ce, message }. `identity` is the target * { name, email } that replace","kind":"function","line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281","signature":"export function planCommitRewrites(commits, identity)"},{"anchor":"S:792d313360","doc":"A deterministic fingerprint of a rewrite plan. Same findings and target identity * produce the same plan and therefore the same fingerprint, which is what lets an owner * approve a proposal and later ","kind":"function","line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281","signature":"export function remediationFingerprint(plan)"},{"anchor":"S:18ff6b9c89","doc":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {string} dir * @returns {{ patchPath: stri","kind":"function","line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a","signature":"export function loadSubmission(dir)"},{"anchor":"S:00452332a2","doc":"Run the ratchet against the submitted diff TEXT ONLY, via its existing * --diff mode. Never applies or executes the diff. Returns the ratchet's raw * exit status and output for the report. * @param {s","kind":"function","line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a","signature":"export function runRatchetAgainstSubmission(patchPath, deps = {})"},{"anchor":"S:4296da48b7","doc":"Combine the declaration and the ratchet's verdict into a judged result. * Pure. \"confirmed-break\" only when the submitter claimed the diff should be * blocked and the ratchet, in fact, did not block i","kind":"function","line":86,"name":"judge","path_id":"F:90cbb2cf6a","signature":"export function judge(declaration, ratchetResult)"},{"anchor":"S:c388580f86","kind":"function","line":114,"name":"main","path_id":"F:90cbb2cf6a","signature":"async function main(argv)"},{"anchor":"S:fc3bb4bc24","doc":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves).","kind":"function","line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9","signature":"function collectFindings()"},{"anchor":"S:400a8c02c3","kind":"function","line":61,"name":"applyFix","path_id":"F:90e1fd2fd9","signature":"function applyFix(branch, findings)"},{"anchor":"S:6fab505fa4","doc":"Parse an optional `--pr ` flag. Returns the positive integer PR number, or null when absent. Throws on a malformed value so the caller can report it.","kind":"function","line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9","signature":"function parsePrNumber(rest)"},{"anchor":"S:cde4a28e06","doc":"Fetch the PR title, body, and conversation comments and scan them with the strict detector. Uses the same AI_SIGNATURE_RE as every other surface, so this is a hard detection gate, not the advisory nea","kind":"function","line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9","signature":"async function collectPrFindings(prNumber, client = createGitHubClient())"},{"anchor":"S:c546f7913f","kind":"function","line":108,"name":"main","path_id":"F:90e1fd2fd9","signature":"async function main(argv)"},{"anchor":"S:d75c32ea9c","kind":"function","line":11,"name":"add","path_id":"F:90f0999521","signature":"export function add(a, b)"},{"anchor":"S:d7d594dd8d","kind":"function","line":15,"name":"multiply","path_id":"F:90f0999521","signature":"export function multiply(a, b)"},{"anchor":"S:7902cd38d0","kind":"interface","line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8","signature":"export interface MdnRootProps extends HTMLAttributes"},{"anchor":"S:f2642efdc2","doc":"The design-system root. Establishes the dark ground, the body font, and the token * scope that every component inherits. Wrap an app or a screen in this (AppShell already * does). It is also the wrapp","kind":"function","line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8","signature":"export function MdnRoot({ children, className, style, ...rest }: MdnRootProps)"},{"anchor":"S:2b6631cd33","kind":"const","line":1,"name":"MESSAGES","path_id":"F:91e24dcac0","signature":"export const MESSAGES ="},{"anchor":"S:3b092e9ab0","doc":"Parse DECISIONS.md text into heading violations and Resolved-section entries.","kind":"function","line":64,"name":"parseDecisions","path_id":"F:92d6903b5f","signature":"export function parseDecisions(text)"},{"anchor":"S:183f710a08","kind":"function","line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f","signature":"function readCodeownersUsers(rootDir)"},{"anchor":"S:fe27a88258","doc":"Given a PR's reviews (GitHub API shape: [{ user: { login }, state }]) and its author login, is there at least one APPROVED review from a CODEOWNERS-listed login that is not the author themselves? Self","kind":"function","line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f","signature":"export function hasEligibleApproval(reviews, prAuthorLogin, codeownersUsers)"},{"anchor":"S:890ccb5d6b","kind":"function","line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f","signature":"async function fetchPRReviews(repoSlug, prNumber, token)"},{"anchor":"S:9554538925","doc":"Read the current PR's number, author login, and repo slug from GitHub Actions' standard environment (or from MODONOME_PR_* overrides, for tests and manual runs against a specific PR). Returns null whe","kind":"function","line":196,"name":"readPRContext","path_id":"F:92d6903b5f","signature":"function readPRContext()"},{"anchor":"S:eb67f0edae","kind":"function","line":219,"name":"getFileAt","path_id":"F:92d6903b5f","signature":"function getFileAt(ref, rootDir)"},{"anchor":"S:e18ceff2c8","kind":"function","line":230,"name":"main","path_id":"F:92d6903b5f","signature":"async function main()"},{"anchor":"S:a8fe6446c0","kind":"function","line":17,"name":"headSha","path_id":"F:92dde817ee","signature":"function headSha()"},{"anchor":"S:342fb4655a","kind":"function","line":23,"name":"gate","path_id":"F:9344d335a6","signature":"function gate(script, args = [])"},{"anchor":"S:cb97c7b3fc","kind":"function","line":27,"name":"mark","path_id":"F:9344d335a6","signature":"function mark(ok) { return ok ? \"pass\" : \"FAIL\"; }"},{"anchor":"S:bcddbe684b","doc":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), so summarizing them stays reproducible fr","kind":"function","line":62,"name":"listCaptures","path_id":"F:9344d335a6","signature":"function listCaptures()"},{"anchor":"S:0bae1275b2","kind":"type","line":1,"name":"Card","path_id":"F:93f0f5d3de","signature":"export type Card = { number: string; expired: boolean };"},{"anchor":"S:94383b0aef","kind":"type","line":3,"name":"RefundResult","path_id":"F:93f0f5d3de","signature":"export type RefundResult ="},{"anchor":"S:16a3c28802","kind":"function","line":9,"name":"charge","path_id":"F:93f0f5d3de","signature":"export function charge(card: Card): \"ok\" | \"declined\""},{"anchor":"S:bf5cf69681","kind":"function","line":13,"name":"refund","path_id":"F:93f0f5d3de","signature":"export function refund(card: Card, amount: number): RefundResult"},{"anchor":"S:5cc853b5b1","doc":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output.","kind":"function","line":50,"name":"loadScenarios","path_id":"F:94050e680d","signature":"export async function loadScenarios(dir = join(here, \"scenarios\"))"},{"anchor":"S:8e586c7c13","kind":"function","line":60,"name":"commandOnPath","path_id":"F:94050e680d","signature":"function commandOnPath(command)"},{"anchor":"S:44432e7cb0","doc":"Run one scenario against the resolved checker role. Never throws: every * failure to reach a model (binary absent, spawn error, non-zero exit, no * base_url for an openai-http checker) resolves to a \"","kind":"function","line":75,"name":"runScenario","path_id":"F:94050e680d","signature":"export async function runScenario(scenario, checker, deps = {})"},{"anchor":"S:5607ca9508","kind":"function","line":116,"name":"main","path_id":"F:94050e680d","signature":"async function main(argv)"},{"anchor":"S:517ace9ff8","kind":"function","line":17,"name":"tmp","path_id":"F:940d5f4399","signature":"function tmp()"},{"anchor":"S:2fb48a9b04","kind":"function","line":21,"name":"run","path_id":"F:940d5f4399","signature":"function run(script, ...args)"},{"anchor":"S:f9a8f3309b","kind":"function","line":25,"name":"scaffold","path_id":"F:940d5f4399","signature":"function scaffold(dir)"},{"anchor":"S:e31656bc1d","kind":"function","line":33,"name":"readConfig","path_id":"F:940d5f4399","signature":"function readConfig(dir)"},{"anchor":"S:1b794f5743","kind":"function","line":21,"name":"getDiff","path_id":"F:9427d264e6","signature":"function getDiff(baseRef = \"origin/main\")"},{"anchor":"S:d47456131b","kind":"function","line":40,"name":"getChangedFiles","path_id":"F:9427d264e6","signature":"function getChangedFiles(diff)"},{"anchor":"S:2f0240b93f","kind":"function","line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6","signature":"function loadCurrentWorkItem()"},{"anchor":"S:56a4782fc2","kind":"function","line":77,"name":"matchesPattern","path_id":"F:9427d264e6","signature":"function matchesPattern(path, patterns)"},{"anchor":"S:636b7af50c","doc":"A single active claim lease on a work item, as shown in the lease table.","kind":"interface","line":10,"name":"LeaseRow","path_id":"F:956332d4b5","signature":"export interface LeaseRow"},{"anchor":"S:46ca0706e7","kind":"interface","line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5","signature":"export interface LeaseTableProps"},{"anchor":"S:5eba6876fa","doc":"A table of active claim leases: which work item, who holds it, when it expires * (relative and exact), and whether it has gone stale. When `onRelease` is provided, * each row gets a danger \"Release\" b","kind":"function","line":36,"name":"LeaseTable","path_id":"F:956332d4b5","signature":"export function LeaseTable({ leases, onRelease }: LeaseTableProps)"},{"anchor":"S:7b984e047b","kind":"function","line":18,"name":"finalizeState","path_id":"F:95d4304133","signature":"export function finalizeState(base: PanelState): PanelState"},{"anchor":"S:559455c526","kind":"function","line":25,"name":"loadPanelState","path_id":"F:95d4304133","signature":"export async function loadPanelState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:b8ed1c85bb","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9616513cb6","signature":"export const MESSAGES ="},{"anchor":"S:8fe737eaa0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:964f89b6cc","signature":"export const MESSAGES ="},{"anchor":"S:c38d35b211","kind":"function","line":4,"name":"Roles","path_id":"F:973aaa9d86","signature":"export const Roles = () => ("},{"anchor":"S:257f8f1622","kind":"const","line":1,"name":"MESSAGES","path_id":"F:973aca5f3e","signature":"export const MESSAGES ="},{"anchor":"S:d412af5fd3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9803feef4a","signature":"export const MESSAGES ="},{"anchor":"S:944e1f3b0b","doc":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/check-promotion-readiness.mjs), which fai","kind":"const","line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea","signature":"export const CAPABILITY_FLAGS = ["},{"anchor":"S:2bba65c029","kind":"const","line":1,"name":"MESSAGES","path_id":"F:99251bc045","signature":"export const MESSAGES ="},{"anchor":"S:1dc2770ace","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9a32917e56","signature":"export const MESSAGES ="},{"anchor":"S:5a7bfc5a1b","doc":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identities is safe. The existing strict tokens a","kind":"const","line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER1_TOKENS = ["},{"anchor":"S:f650b22681","doc":"Tier 2: generic or ambiguous words that would explode with false positives under substring or free-text matching (\"assistant professor\", \"once you grok this\", \"the argument doesn't cohere\"). Matched O","kind":"const","line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER2_TOKENS = [\"assistant\", \"grok\", \"cohere\"];"},{"anchor":"S:0c9de67184","doc":"Free text (commit bodies, PR text) is the noisiest surface: this repo legitimately names \"claude\"/\"gpt\" in prose, and \"grok\"/\"cohere\" are ordinary words there. So free-text scanning is limited to the ","kind":"const","line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TEXT_TOKENS = [\"mistral\", \"deepseek\", \"qwen\"];"},{"anchor":"S:680cec9dbd","kind":"function","line":64,"name":"clamp","path_id":"F:9a3e8ed7d2","signature":"function clamp(s)"},{"anchor":"S:25a03d4ee2","doc":"Lowercase and strip separators (`/ - _ .` and whitespace) so \"claude-code\", * \"claude_code\", and \"Claude Code\" all normalize to a form containing \"claudecode\". * Used for Tier-1 substring matching on ","kind":"function","line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2","signature":"export function normalizeForMatch(s)"},{"anchor":"S:7b7ddcaa20","doc":"Split a branch name or identity into its bare word segments for exact Tier-2 matching: \"feature/grok-adapter\" -> [\"feature\", \"grok\", \"adapter\"].","kind":"function","line":79,"name":"segments","path_id":"F:9a3e8ed7d2","signature":"function segments(s)"},{"anchor":"S:89065c6f4b","kind":"function","line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2","signature":"function tier1Hit(normalized)"},{"anchor":"S:7910b636e8","kind":"function","line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2","signature":"function tier2Hit(segs)"},{"anchor":"S:a657233cd5","doc":"Near-miss on a branch name. Returns a finding, or null when clean or when the * strict segment check already catches it (so the widener never duplicates strict).","kind":"function","line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissBranch(name)"},{"anchor":"S:d92119a484","doc":"Near-miss on a commit author/committer identity. Checks the name (Tier 1 substring * and Tier 2 exact word) and the email (Tier 1 substring, catching vendor domains * such as \"@mistral.ai\"). Returns n","kind":"function","line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissIdentity(name, email)"},{"anchor":"S:b121dfe1ec","doc":"Near-miss on free text, scanned line by line. A line is a candidate only when it * both names a distinctive new-vendor TEXT_TOKEN (as a whole word) AND carries an * attribution cue, and the strict AI_","kind":"function","line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissText(where, text)"},{"anchor":"S:fa71aef711","doc":"Render one LESSONS.md Staged line from a finding. The line is a PROPOSED denylist * addition for human review, never an applied change. The (signal: review) tag marks * it as a review-surfaced candida","kind":"function","line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2","signature":"export function formatStagedLine(finding, { date, evidence })"},{"anchor":"S:cf3414acc5","doc":"Test files: any language.","kind":"const","line":10,"name":"TEST_FILE","path_id":"F:9a72895a04","signature":"export const TEST_FILE = new RegExp(["},{"anchor":"S:1c6f22237b","doc":"Python test files: pytest uses the bare `assert` statement (no call parens), which a call-site-only assertion counter cannot see. These need language-aware handling for the removal check and a vacuous","kind":"const","line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04","signature":"export const PYTHON_TEST = /(?:^|\\/)(?:test_[^/]*|[^/]*_test)\\.py$/;"},{"anchor":"S:2e1baab2ff","doc":"Source files by language (for non-test type-escape checks).","kind":"const","line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04","signature":"export const JAVA_SRC = /\\.java$/;"},{"anchor":"S:7ad858b9a2","kind":"const","line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04","signature":"export const DOTNET_SRC = /\\.cs$/;"},{"anchor":"S:e0b068ef78","kind":"const","line":31,"name":"TS_SRC","path_id":"F:9a72895a04","signature":"export const TS_SRC = /\\.(c|m)?[jt]sx?$/;"},{"anchor":"S:4d36cf3d1c","doc":"JaCoCo / Gradle / Coverlet config files.","kind":"const","line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04","signature":"export const JAVA_BUILD = /^(pom\\.xml|build\\.gradle(\\.kts)?)$/;"},{"anchor":"S:edd792ec6d","kind":"const","line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04","signature":"export const DOTNET_BUILD = /\\.(runsettings|csproj|props)$/;"},{"anchor":"S:d0478605fa","kind":"const","line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04","signature":"export const TS_CONFIG = /tsconfig.*\\.json$/;"},{"anchor":"S:4c9526df5f","kind":"const","line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04","signature":"export const COVERAGE_CONFIG = /(?:jest|vitest)\\.config\\.(js|ts|mjs|cjs)$|pyproject\\.toml$/;"},{"anchor":"S:f43dc8ad19","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d","signature":"export const MESSAGES ="},{"anchor":"S:4a7db1c0d0","kind":"function","line":45,"name":"emptyDraft","path_id":"F:9b3f18856e","signature":"function emptyDraft(defaultRole: string): WorkItemDraft"},{"anchor":"S:84220fc054","doc":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-only * inspector drawer with the item's i","kind":"function","line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e","signature":"export function WorkQueueScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:700d752004","kind":"function","line":11,"name":"cli","path_id":"F:9bb94e1b40","signature":"function cli(...args)"},{"anchor":"S:46d90cc86e","kind":"function","line":13,"name":"Timeline","path_id":"F:9c9edea0c9","signature":"export const Timeline = () => ;"},{"anchor":"S:a1107105c3","kind":"function","line":26,"name":"tmp","path_id":"F:9cbe9238f8","signature":"function tmp()"},{"anchor":"S:641774928a","kind":"function","line":30,"name":"run","path_id":"F:9cbe9238f8","signature":"function run(script, ...args)"},{"anchor":"S:765b4574da","kind":"function","line":34,"name":"mcpCall","path_id":"F:9cbe9238f8","signature":"function mcpCall(method, params = {})"},{"anchor":"S:3fd1032067","kind":"const","line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766","signature":"export const CURRENT_SCHEMA_VERSION = 1;"},{"anchor":"S:18c9f379c0","doc":"Safe defaults for every lever. Migration fills any missing key from here.","kind":"const","line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766","signature":"export const SAFE_DEFAULTS ="},{"anchor":"S:b8cdbe3fd3","kind":"function","line":73,"name":"migrate","path_id":"F:9d69a6b766","signature":"export function migrate(cfg)"},{"anchor":"S:7803dea04b","doc":"Catalog entries for scripts/check-style.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e","signature":"export const MESSAGES ="},{"anchor":"S:8822b8498d","kind":"type","line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0","signature":"export type ProgressMeterTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:c1667b970b","kind":"interface","line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0","signature":"export interface ProgressMeterProps"},{"anchor":"S:8dfe0cf637","doc":"A horizontal meter for bounded quantities such as budget consumed or checker * coverage. Renders a label row (with a mono value/max readout) above a track, * with a filled bar sized to the current val","kind":"function","line":27,"name":"ProgressMeter","path_id":"F:9deac13db0","signature":"export function ProgressMeter("},{"anchor":"S:95871faa22","kind":"function","line":75,"name":"formatNumber","path_id":"F:9deac13db0","signature":"function formatNumber(n: number): string"},{"anchor":"S:5f8c0130c3","kind":"type","line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b","signature":"export type MetricTileTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:e15dbc7540","kind":"interface","line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b","signature":"export interface MetricTileProps"},{"anchor":"S:1beab0dc0c","doc":"A dashboard stat tile: an eyebrow label (with an optional HelpHint), a large value * with unit, and optional icon, trend slot, and sub text. This is the core building * block of the Overview screen's ","kind":"function","line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b","signature":"export function MetricTile({ label, value, unit, hint, tone = \"neutral\", icon, trend, sub }: MetricTileProps)"},{"anchor":"S:ad93bbf998","kind":"function","line":14,"name":"run","path_id":"F:9f36b3ef29","signature":"function run(args, cwd)"},{"anchor":"S:107eb40a1d","kind":"function","line":18,"name":"makeRepo","path_id":"F:9f36b3ef29","signature":"function makeRepo()"},{"anchor":"S:704fff1c43","kind":"function","line":15,"name":"tmp","path_id":"F:9f6dd5e5a3","signature":"function tmp()"},{"anchor":"S:13fdf696a0","kind":"function","line":19,"name":"run","path_id":"F:9f6dd5e5a3","signature":"function run(...args)"},{"anchor":"S:0a6b98d712","kind":"function","line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3","signature":"function scaffold(dir)"},{"anchor":"S:247c34d405","kind":"function","line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3","signature":"function itemsDir(dir)"},{"anchor":"S:e95adce358","kind":"function","line":4,"name":"DryRun","path_id":"F:a0068c8817","signature":"export const DryRun = () => ("},{"anchor":"S:9598b17b9e","kind":"function","line":14,"name":"AutoMerge","path_id":"F:a0068c8817","signature":"export const AutoMerge = () => ("},{"anchor":"S:c80f0936ea","kind":"function","line":4,"name":"Budget","path_id":"F:a0abaf6a25","signature":"export const Budget = () => ("},{"anchor":"S:5115891196","kind":"function","line":8,"name":"Coverage","path_id":"F:a0abaf6a25","signature":"export const Coverage = () => ;"},{"anchor":"S:996743005b","kind":"function","line":29,"name":"flagValue","path_id":"F:a0d489df6d","signature":"function flagValue(argv, name)"},{"anchor":"S:59ba63dbab","kind":"function","line":34,"name":"readConfig","path_id":"F:a0d489df6d","signature":"function readConfig(root)"},{"anchor":"S:3c2bad87be","kind":"function","line":40,"name":"snapshotDir","path_id":"F:a0d489df6d","signature":"function snapshotDir(root) { return join(root, \".modonome\", \"snapshot\"); }"},{"anchor":"S:5353762af1","kind":"function","line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d","signature":"function loadCommittedSignature(root)"},{"anchor":"S:d5719588cb","kind":"function","line":48,"name":"llmsText","path_id":"F:a0d489df6d","signature":"function llmsText(signature)"},{"anchor":"S:88bd705d3f","kind":"function","line":64,"name":"badgeJson","path_id":"F:a0d489df6d","signature":"function badgeJson(signature, map)"},{"anchor":"S:bc3262b829","kind":"function","line":73,"name":"writeArtifact","path_id":"F:a0d489df6d","signature":"function writeArtifact(root, built)"},{"anchor":"S:3466f40801","kind":"function","line":83,"name":"buildOptions","path_id":"F:a0d489df6d","signature":"function buildOptions(root, argv, now)"},{"anchor":"S:6584162247","kind":"function","line":97,"name":"nowIso","path_id":"F:a0d489df6d","signature":"function nowIso() { return new Date().toISOString(); }"},{"anchor":"S:383c03d511","doc":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yields a full rebuild that produces identical","kind":"function","line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d","signature":"function incrementalInputs(root, argv)"},{"anchor":"S:df5cb6eb12","doc":"Recompute file hashes and the Merkle root directly from disk. Used by --verify.","kind":"function","line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d","signature":"function recomputeMerkle(root)"},{"anchor":"S:8d131c2429","doc":"A --since ref is free-form git revision syntax (branch, tag, HEAD~N, a SHA), so it cannot be restricted to a fixed pattern the way a cache-internal SHA can. The one property that must hold is that it ","kind":"function","line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d","signature":"function isSafeGitRevision(value)"},{"anchor":"S:2a5511d42c","kind":"function","line":125,"name":"gitDelta","path_id":"F:a0d489df6d","signature":"function gitDelta(root, ref)"},{"anchor":"S:2ce7a5bbe7","kind":"function","line":146,"name":"positional","path_id":"F:a0d489df6d","signature":"function positional(argv)"},{"anchor":"S:ecd0da924a","doc":"Register the tree-sitter parser when requested via --parser or config, with a graceful fallback to the heuristic default when tree-sitter is not installed.","kind":"function","line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d","signature":"async function maybeRegisterParser(root, argv)"},{"anchor":"S:68308360b1","kind":"function","line":166,"name":"main","path_id":"F:a0d489df6d","signature":"async function main(argv)"},{"anchor":"S:f6264503e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a104667369","signature":"export const MESSAGES ="},{"anchor":"S:7369c62b84","kind":"class","line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423","signature":"export class OrderServiceBroken"},{"anchor":"S:07a58ff928","doc":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the stdin-close race in batch mode.","kind":"function","line":14,"name":"rpc","path_id":"F:a167609a41","signature":"function rpc(requests, expectedIds)"},{"anchor":"S:8e42d127b7","doc":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing out or parked for a human, so staleness d","kind":"const","line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d","signature":"export const OPEN_STATES = [\"queued\", \"claimed\", \"making\", \"checking\", \"rework\"];"},{"anchor":"S:b3a28348ad","doc":"A lease is live when it has a holder and an unexpired expiry, mirroring transition-work-item.mjs's own leaseIsLive so the two files can never disagree about what \"actively claimed\" means.","kind":"function","line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d","signature":"export function hasLiveLease(item, now = new Date())"},{"anchor":"S:25139ebf6c","doc":"Every `tests.test.mjs` (or agentproof.test.mjs) path literally named in an item's gates array, deduplicated. Broad gates like \"npm run verify\" or \"node scripts/check-style.mjs .\" name no specific file","kind":"function","line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d","signature":"export function extractOwnTestFiles(gates = [])"},{"anchor":"S:87fa79bea3","doc":"Every allowed_edit_set entry that is not itself one of the item's own test files: the implementation surface the test files are supposed to prove exists.","kind":"function","line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d","signature":"export function implementationPaths(item)"},{"anchor":"S:3fac1340a4","doc":"Decide whether a single open-state item looks stale, without running anything. Returns a reason string when every static precondition holds (has a resolvable test file, every implementation path exist","kind":"function","line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d","signature":"export function staleCandidate(item, now = new Date())"},{"anchor":"S:098af8d3e8","doc":"Run one already-existing test file and report whether it passed. Spawned, not imported, so a crash or hang in the target test cannot take this checker down with it; `node --test` on a single file is f","kind":"function","line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d","signature":"export function testFilePasses(testFile, { spawn = spawnSync } = {})"},{"anchor":"S:980a6a0449","doc":"Full check across every work item. Returns the list of stale findings; each entry names the item, the state it is stuck in, and the evidence (which test files and implementation paths already exist an","kind":"function","line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d","signature":"export function findStaleWorkItems(items, { spawn = spawnSync, now = new Date() } = {})"},{"anchor":"S:dc4ac94e5b","kind":"type","line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed","signature":"export type TableColumnAlign = \"left\" | \"right\" | \"center\";"},{"anchor":"S:aabd2d1e55","kind":"interface","line":6,"name":"TableColumn","path_id":"F:a402d2f9ed","signature":"export interface TableColumn"},{"anchor":"S:1d4c8df8c0","kind":"interface","line":19,"name":"TableProps","path_id":"F:a402d2f9ed","signature":"export interface TableProps"},{"anchor":"S:9f9ed94a62","doc":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highlight on * hover; when `onRowClick` is set","kind":"function","line":42,"name":"Table","path_id":"F:a402d2f9ed","signature":"export function Table({ columns, rows, getRowKey, onRowClick, empty, dense }: TableProps)"},{"anchor":"S:396f1000ae","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a5822fdd03","signature":"export const MESSAGES ="},{"anchor":"S:cd1b84d7ff","doc":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised.","kind":"function","line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021","signature":"function makeMinimalRepo()"},{"anchor":"S:336ebe7ff5","kind":"function","line":52,"name":"run","path_id":"F:a6d2bd3021","signature":"function run(tmp)"},{"anchor":"S:0ca7d7cb9c","doc":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than by path, so it holds under a copied or ","kind":"function","line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452","signature":"export function isModonomeRepo(targetRoot)"},{"anchor":"S:2681abe2e5","doc":"Install the pre-commit hook into targetRoot. Returns \"installed\", \"kept\" (a host hook already existed and was preserved), or \"no-git\". self=true writes modonome's own dev hook and overwrites; a host i","kind":"function","line":60,"name":"installHooks","path_id":"F:a7ce0f6452","signature":"export function installHooks(targetRoot, { self = false, mode = \"snapshot\" } = {})"},{"anchor":"S:0126079093","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15","signature":"export const MESSAGES ="},{"anchor":"S:0b4b18fb8a","kind":"type","line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27","signature":"export type IconButtonVariant = \"ghost\" | \"secondary\" | \"danger\";"},{"anchor":"S:49158af5a6","kind":"type","line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27","signature":"export type IconButtonSize = \"sm\" | \"md\";"},{"anchor":"S:b4354229d8","kind":"interface","line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27","signature":"export interface IconButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:8c83339acb","doc":"A square, icon-only button. Always carries an `aria-label` built from the required * `label` prop so the control has an accessible name even though no text is visible. * Use for compact affordances su","kind":"function","line":25,"name":"IconButton","path_id":"F:a8cfe45d27","signature":"export function IconButton("},{"anchor":"S:d31fd4dafa","doc":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or downgrade a failed precondition.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:aa27d254da","signature":"export const MESSAGES ="},{"anchor":"S:170dcaab55","doc":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value is * a bare command name resolved agains","kind":"function","line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6","signature":"export function resolveAdapterCommand(adapterEntry)"},{"anchor":"S:d7a4f68100","doc":"Enforce ADR-009 path containment. The adapter's working directory must resolve * to exactly the target directory (resolve(root, plan.target)); a cwd outside the * target, reached via \"..\" or an absolu","kind":"function","line":52,"name":"containedCwd","path_id":"F:aa77f227a6","signature":"export function containedCwd(root, target)"},{"anchor":"S:5b2eae49a8","kind":"function","line":62,"name":"sep","path_id":"F:aa77f227a6","signature":"function sep()"},{"anchor":"S:7ed39c68da","doc":"Build the argument vector for the external CLI. Points it at the resolved * endpoint (base URL and model), forwards a bounded max-turns flag, and reads the * prompt from stdin (so no prompt text lands","kind":"function","line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6","signature":"export function buildAdapterArgs(endpoint, maxTurns, adapterEntry)"},{"anchor":"S:bd7f311fdb","doc":"Run the external agentic CLI for one role. Never throws on a bounded/expected * failure (spawn error, non-zero exit, timeout, cap hit): returns a clean status * object mirroring the single-shot path's","kind":"function","line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6","signature":"export async function runToolLoopAdapter("},{"anchor":"S:2cd9cbf595","kind":"type","line":4,"name":"ToastTone","path_id":"F:ab334f34df","signature":"export type ToastTone = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:00c956ccf3","kind":"interface","line":6,"name":"ToastProps","path_id":"F:ab334f34df","signature":"export interface ToastProps"},{"anchor":"S:5eb8ce722f","doc":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: mount * one `Toast` per visible notificat","kind":"function","line":31,"name":"Toast","path_id":"F:ab334f34df","signature":"export function Toast({ tone = \"info\", title, message, onDismiss }: ToastProps)"},{"anchor":"S:55a57d9fd6","kind":"function","line":168,"name":"toolRatchet","path_id":"F:ab5077147a","signature":"async function toolRatchet(args)"},{"anchor":"S:a4d0ce8fea","kind":"function","line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a","signature":"async function toolValidateConfig(args)"},{"anchor":"S:2d1eeb5346","kind":"function","line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a","signature":"async function toolValidateWorkItem(args)"},{"anchor":"S:6499fa18ee","kind":"function","line":264,"name":"toolStatus","path_id":"F:ab5077147a","signature":"async function toolStatus(args)"},{"anchor":"S:2d2b3ccfa2","kind":"function","line":318,"name":"toolCompliance","path_id":"F:ab5077147a","signature":"async function toolCompliance(args)"},{"anchor":"S:f613554429","kind":"function","line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a","signature":"async function toolVerifyAttestation(args)"},{"anchor":"S:521fca28ad","kind":"function","line":344,"name":"toolSnapshot","path_id":"F:ab5077147a","signature":"async function toolSnapshot(args)"},{"anchor":"S:16d8c02a8e","kind":"function","line":372,"name":"send","path_id":"F:ab5077147a","signature":"function send(obj)"},{"anchor":"S:2306976428","kind":"function","line":376,"name":"errorResponse","path_id":"F:ab5077147a","signature":"function errorResponse(id, code, message)"},{"anchor":"S:dd3b976184","kind":"function","line":380,"name":"handleRequest","path_id":"F:ab5077147a","signature":"async function handleRequest(req)"},{"anchor":"S:a6ff0bb6d7","doc":"Slugify a lesson into a deterministic ID.","kind":"function","line":28,"name":"slugifyId","path_id":"F:ac11b5379f","signature":"function slugifyId(lesson)"},{"anchor":"S:928743a069","doc":"Build a learning record from options.","kind":"function","line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f","signature":"export function buildLearningRecord(opts = {})"},{"anchor":"S:562052e079","doc":"Validate a learning record. Returns an array of error strings. Empty array means valid.","kind":"function","line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f","signature":"export function validateLearningRecord(record)"},{"anchor":"S:ba65eaae5b","doc":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advisory notice.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:acc3f6b466","signature":"export const MESSAGES ="},{"anchor":"S:e19487a8ae","doc":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync.","kind":"function","line":22,"name":"resolveFiles","path_id":"F:ace169adc4","signature":"function resolveFiles(argPath)"},{"anchor":"S:c79db45132","doc":"Build the small file helpers a detector needs, bound to one target directory.","kind":"function","line":11,"name":"helpers","path_id":"F:ae46bbab81","signature":"function helpers(target)"},{"anchor":"S:13fa2b4863","doc":"Detect the primary stack. Returns { name, pm, gates } exactly as the dry-run sweep expects, plus { entrypoints, commands } for the snapshot signature.","kind":"function","line":20,"name":"detectStack","path_id":"F:ae46bbab81","signature":"export function detectStack(target = \".\")"},{"anchor":"S:3575202801","doc":"Paths that must never be auto-merged. Same list the dry-run sweep reports.","kind":"function","line":57,"name":"detectProtected","path_id":"F:ae46bbab81","signature":"export function detectProtected(target = \".\")"},{"anchor":"S:9e9207d834","doc":"Repo instruction files an agent should read first.","kind":"function","line":67,"name":"detectInstructions","path_id":"F:ae46bbab81","signature":"export function detectInstructions(target = \".\")"},{"anchor":"S:7c716c856e","doc":"Rank files by how often they changed in recent git history. The dry-run sweep uses the default limit of 3; the snapshot passes a larger limit to score churn across the whole tree. Returns [] when git ","kind":"function","line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81","signature":"export function detectHotFiles(target = \".\", { commits = 200, limit = 3 } = {})"},{"anchor":"S:7fe7ee7f43","kind":"function","line":94,"name":"dedupe","path_id":"F:ae46bbab81","signature":"function dedupe(arr)"},{"anchor":"S:3d3f20848d","doc":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.yml). Both are excluded from the schedule ","kind":"const","line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca","signature":"export const CORE_ROLE_SEQUENCE = [\"maker\", \"checker\"];"},{"anchor":"S:96e9e4a020","doc":"Normalize a role's trigger field (string shorthand, object, or absent) into a stable shape. A bare string s becomes { type: s }. Absent becomes { type: null }. after and cron default to an empty list ","kind":"function","line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca","signature":"export function normalizeTrigger(trigger)"},{"anchor":"S:0427f639c4","doc":"Normalize a role's schedule field into { cron, timezone } or null when absent. Pure.","kind":"function","line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca","signature":"export function normalizeSchedule(schedule)"},{"anchor":"S:d15b7063e3","doc":"The cron expressions a role fires on: its schedule.cron plus a trigger.cron (or a trigger.type of schedule that carries a cron), de-duplicated and sorted for a stable render. Returns an empty array fo","kind":"function","line":76,"name":"roleCrons","path_id":"F:aea3c05bca","signature":"export function roleCrons(roleCfg)"},{"anchor":"S:afa2ffd4a2","doc":"The crew roles the schedule generator manages: every configured role that is not a reserved role (maker, checker, self-govern) and has a prompt to run. Sorted for a stable render. Pure aside from read","kind":"function","line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca","signature":"export function schedulableCrewRoles(cfg)"},{"anchor":"S:33846c9bba","doc":"Build the executed role order from after-role triggers. Returns null when no role declares trigger.after, so the caller keeps its existing default (a pure maker -> checker run) with zero behavior chan","kind":"function","line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca","signature":"export function deriveTriggerSequence(cfg)"},{"anchor":"S:73cbfa5a7d","doc":"Render one job for a scheduled crew role. It checks out, runs the role as a single dry-run invocation of run-cycle.mjs, and only executes behind an explicit repository variable. When the role carries ","kind":"function","line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca","signature":"function renderRoleJob(role, crons)"},{"anchor":"S:9cda312f51","doc":"Render the full scheduled-crew workflow as a deterministic YAML string. The trigger block is the sorted union of every managed role's crons plus workflow_dispatch, so a role always has a manual path a","kind":"function","line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca","signature":"export function renderScheduleWorkflow(cfg)"},{"anchor":"S:65004e9f74","doc":"Load the repo config through the same loader run-cycle uses, so the generator reads exactly what the loop reads. Falls back to an empty roles map when the file is absent.","kind":"function","line":215,"name":"loadCfg","path_id":"F:aea3c05bca","signature":"function loadCfg()"},{"anchor":"S:5327d3b72c","kind":"function","line":223,"name":"main","path_id":"F:aea3c05bca","signature":"function main()"},{"anchor":"S:e8f6de81b4","kind":"function","line":259,"name":"selfTest","path_id":"F:aea3c05bca","signature":"function selfTest()"},{"anchor":"S:52826c5034","kind":"class","line":768,"name":"Component","path_id":"F:aef9cf1e27","signature":"class Component extends DCLogic"},{"anchor":"S:52be3c746f","kind":"function","line":32,"name":"git","path_id":"F:af6de66499","signature":"function git(...a)"},{"anchor":"S:48102a3f37","kind":"function","line":37,"name":"parseFraction","path_id":"F:af6de66499","signature":"function parseFraction(s)"},{"anchor":"S:6122b96d0b","kind":"function","line":11,"name":"runGateCapped","path_id":"F:b014028f57","signature":"export function runGateCapped(cmdArray, { timeoutMs = 30000, maxBuffer = 67108864 } = {})"},{"anchor":"S:4fb0095605","doc":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":22,"name":"checkRegistry","path_id":"F:b16afebae9","signature":"export function checkRegistry(registry, schema)"},{"anchor":"S:837b5a8d1e","doc":"CLI: read the registry and schema from the repo root and report PASS/FAIL.","kind":"function","line":38,"name":"runCli","path_id":"F:b16afebae9","signature":"function runCli()"},{"anchor":"S:c6d0684785","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b25dcdad19","signature":"export const MESSAGES ="},{"anchor":"S:41ad75ea93","doc":"Build a synthetic 1000-line diff that is clean (no gaming patterns).","kind":"function","line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600","signature":"function buildLargeDiff(lines)"},{"anchor":"S:d0587dc399","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b2efd505ef","signature":"export const MESSAGES ="},{"anchor":"S:3e2d44a335","kind":"type","line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:0c7a33bcbe","kind":"interface","line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb","signature":"export interface ModeSwitcherProps"},{"anchor":"S:5b0828ff4b","doc":"The global context switch. Host mode reads the engine as installed in a customer * repo; product mode reads modonome governing its own repository (self-application). * The same screens serve either su","kind":"function","line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb","signature":"export function ModeSwitcher({ mode, onModeChange, hostLabel, productLabel }: ModeSwitcherProps)"},{"anchor":"S:4bfea4387c","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1","signature":"export const MESSAGES ="},{"anchor":"S:700c80e34d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b502a0fe75","signature":"export const MESSAGES ="},{"anchor":"S:ea113218d1","doc":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, so this * interface is the contract a hos","kind":"interface","line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133","signature":"export interface WorkItemSummary"},{"anchor":"S:42d33f191a","kind":"interface","line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133","signature":"export interface WorkItemCardProps"},{"anchor":"S:c7ef137e46","doc":"A compact, clickable summary card for a single work item: title with its id, * current-state pill, risk tier, a protected-path lock indicator, attempt count, and * pull request number. Used in queue b","kind":"function","line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133","signature":"export function WorkItemCard({ item, onClick }: WorkItemCardProps)"},{"anchor":"S:18da5ae581","doc":"Read all .mjs files in a directory (non-recursive by default).","kind":"function","line":13,"name":"listMjs","path_id":"F:b70824b13e","signature":"function listMjs(dir, recursive = false)"},{"anchor":"S:df7a91f366","doc":"Extract import specifiers from a file's source text. Only matches actual import statements (not comments or JSDoc).","kind":"function","line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e","signature":"function extractImportSpecifiers(source)"},{"anchor":"S:3702b2fefe","kind":"function","line":47,"name":"isAllowedImport","path_id":"F:b70824b13e","signature":"function isAllowedImport(specifier)"},{"anchor":"S:fedbb5f441","kind":"class","line":4,"name":"NotificationService","path_id":"F:b9d806ba4d","signature":"export class NotificationService"},{"anchor":"S:eb51a5641a","doc":"Base valid packet factory: returns a fresh object each call.","kind":"function","line":7,"name":"makePacket","path_id":"F:ba97282cf5","signature":"function makePacket(overrides = {})"},{"anchor":"S:ebb9dad93b","kind":"function","line":12,"name":"tmp","path_id":"F:baf7641a01","signature":"function tmp()"},{"anchor":"S:79a288a97f","kind":"function","line":16,"name":"runTick","path_id":"F:baf7641a01","signature":"function runTick(stateDir)"},{"anchor":"S:77054cfc82","kind":"function","line":23,"name":"makeItem","path_id":"F:baf7641a01","signature":"function makeItem(overrides = {})"},{"anchor":"S:028a668f8e","kind":"function","line":34,"name":"writeItem","path_id":"F:baf7641a01","signature":"function writeItem(itemsDir, name, item)"},{"anchor":"S:357942abbf","kind":"function","line":38,"name":"readItem","path_id":"F:baf7641a01","signature":"function readItem(itemsDir, name)"},{"anchor":"S:b01ec1a6ac","kind":"function","line":25,"name":"Gates","path_id":"F:bb6a874d58","signature":"export const Gates = () => ;"},{"anchor":"S:f5a71d2ca6","kind":"function","line":19,"name":"runScript","path_id":"F:bbb6476d71","signature":"function runScript(script, args = [], env = {})"},{"anchor":"S:c7db2cc29d","kind":"class","line":3,"name":"InventoryService","path_id":"F:bd02b28f17","signature":"export class InventoryService"},{"anchor":"S:0bf3d508cb","doc":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune their wording without a code change.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e","signature":"export const MESSAGES ="},{"anchor":"S:ac1ae69e0f","kind":"type","line":3,"name":"SparklineTone","path_id":"F:c0e80ca327","signature":"export type SparklineTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:b27476e527","kind":"interface","line":5,"name":"SparklineProps","path_id":"F:c0e80ca327","signature":"export interface SparklineProps"},{"anchor":"S:655f25fbed","doc":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inline * next to a metric (cost trend, throug","kind":"function","line":33,"name":"Sparkline","path_id":"F:c0e80ca327","signature":"export function Sparkline("},{"anchor":"S:a272c887e3","kind":"function","line":82,"name":"toPoints","path_id":"F:c0e80ca327","signature":"function toPoints(data: number[], innerW: number, innerH: number, padding: number): [number, number][]"},{"anchor":"S:686192f35d","kind":"function","line":97,"name":"toLinePath","path_id":"F:c0e80ca327","signature":"function toLinePath(points: [number, number][]): string"},{"anchor":"S:27005d8f20","kind":"function","line":27,"name":"buildBundle","path_id":"F:c4395c3023","signature":"function buildBundle()"},{"anchor":"S:3ad956fb93","kind":"function","line":36,"name":"configDefaults","path_id":"F:c5938c33fd","signature":"function configDefaults(rel)"},{"anchor":"S:1e5dabea9c","doc":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate.","kind":"function","line":43,"name":"hasHeading","path_id":"F:c5938c33fd","signature":"function hasHeading(text, section)"},{"anchor":"S:6b1894b02c","kind":"function","line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd","signature":"function findPromotionAdr(flag)"},{"anchor":"S:03b490fb81","kind":"function","line":7,"name":"clean","path_id":"F:c598a2d684","signature":"function clean(text)"},{"anchor":"S:ec2e53ab2e","kind":"function","line":12,"name":"signature","path_id":"F:c598a2d684","signature":"function signature(line)"},{"anchor":"S:ebdb053467","kind":"function","line":17,"name":"docAbove","path_id":"F:c598a2d684","signature":"function docAbove(lines, index)"},{"anchor":"S:df1c5c3628","kind":"const","line":33,"name":"adapter","path_id":"F:c598a2d684","signature":"export const adapter ="},{"anchor":"S:95e56b0a9c","kind":"function","line":27,"name":"Remote","path_id":"F:c63a71fb57","signature":"export const Remote = () => ;"},{"anchor":"S:e5772fff07","kind":"function","line":29,"name":"LocalOnly","path_id":"F:c63a71fb57","signature":"export const LocalOnly = () => ;"},{"anchor":"S:749446c25e","kind":"const","line":8,"name":"armingModes","path_id":"F:c64c042051","signature":"export const armingModes = [\"disabled\", \"dry-run\", \"armed\"] as const;"},{"anchor":"S:fc7eb05498","kind":"type","line":9,"name":"ArmingMode","path_id":"F:c64c042051","signature":"export type ArmingMode = (typeof armingModes)[number];"},{"anchor":"S:5465e6de42","kind":"const","line":11,"name":"workStates","path_id":"F:c64c042051","signature":"export const workStates = ["},{"anchor":"S:725b07739e","kind":"type","line":22,"name":"WorkState","path_id":"F:c64c042051","signature":"export type WorkState = (typeof workStates)[number];"},{"anchor":"S:544b9ce58e","kind":"const","line":24,"name":"riskTiers","path_id":"F:c64c042051","signature":"export const riskTiers = [1, 2, 3, 4] as const;"},{"anchor":"S:dab833b9a8","kind":"type","line":25,"name":"RiskTier","path_id":"F:c64c042051","signature":"export type RiskTier = (typeof riskTiers)[number];"},{"anchor":"S:8289602f81","doc":"CSS custom-property name for an arming mode color.","kind":"function","line":28,"name":"modeVar","path_id":"F:c64c042051","signature":"export function modeVar(mode: ArmingMode): string"},{"anchor":"S:583c8b60d3","doc":"CSS custom-property name for a work-item state color.","kind":"function","line":34,"name":"stateVar","path_id":"F:c64c042051","signature":"export function stateVar(state: WorkState): string"},{"anchor":"S:89566a4918","doc":"CSS custom-property name for a risk-tier color.","kind":"function","line":39,"name":"tierVar","path_id":"F:c64c042051","signature":"export function tierVar(tier: RiskTier): string"},{"anchor":"S:a26ee6eefd","doc":"Human labels for the work states, in flow order.","kind":"const","line":44,"name":"workStateLabels","path_id":"F:c64c042051","signature":"export const workStateLabels: Record ="},{"anchor":"S:644e7adeef","kind":"const","line":56,"name":"tokens","path_id":"F:c64c042051","signature":"export const tokens ="},{"anchor":"S:f80ff247d7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:c6bd51a324","signature":"export const MESSAGES ="},{"anchor":"S:d029f96a64","kind":"function","line":27,"name":"flagValue","path_id":"F:c72e6949b9","signature":"function flagValue(argv, name)"},{"anchor":"S:44a852f5e1","kind":"function","line":32,"name":"readStdin","path_id":"F:c72e6949b9","signature":"function readStdin()"},{"anchor":"S:276edd396a","kind":"function","line":45,"name":"postJson","path_id":"F:c72e6949b9","signature":"function postJson(url, body, apiKey)"},{"anchor":"S:301d436113","kind":"function","line":80,"name":"main","path_id":"F:c72e6949b9","signature":"async function main(argv)"},{"anchor":"S:29574da2e9","doc":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unrelated, low-value assertions are added to","kind":"const","line":7,"name":"scenario","path_id":"F:c7423b85cf","signature":"export const scenario ="},{"anchor":"S:9299cd9a70","kind":"function","line":31,"name":"matches","path_id":"F:c9493b5275","signature":"function matches(l)"},{"anchor":"S:00f913bfd8","kind":"function","line":11,"name":"tf","path_id":"F:ca05b6ba1c","signature":"function tf(name)"},{"anchor":"S:3696870ce9","doc":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase \"packet\".","kind":"function","line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73","signature":"function literalPhraseRe(phrase)"},{"anchor":"S:55eb1af9ca","doc":"docs/LEXICON.md explains the rationale; this loads the terms it documents. A grandfathered term (see lexicon.json) warns instead of failing, so an approved rename can ship before every pre-existing fi","kind":"function","line":32,"name":"loadLexicon","path_id":"F:ca0833ac73","signature":"function loadLexicon()"},{"anchor":"S:ee9b2c90d1","kind":"function","line":53,"name":"walk","path_id":"F:ca0833ac73","signature":"function walk(dir, out = [])"},{"anchor":"S:aa4de9995b","kind":"function","line":4,"name":"Trends","path_id":"F:ca13fe2a5b","signature":"export const Trends = () => ("},{"anchor":"S:66ac4b8d64","kind":"function","line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:039c3576c4","doc":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (they fall through the family check and are ","kind":"function","line":23,"name":"modelFamily","path_id":"F:cb3c5f7715","signature":"export function modelFamily(model)"},{"anchor":"S:b128b3a196","doc":"Governance rules that JSON Schema cannot express (cross-field invariants).","kind":"function","line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715","signature":"export function governanceErrors(item, config = {})"},{"anchor":"S:16267c791e","kind":"function","line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715","signature":"export function validateWorkItem(item, config = {})"},{"anchor":"S:7c5c3a31a4","doc":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), * (within a segment), ** (across segments","kind":"function","line":41,"name":"compilePattern","path_id":"F:cb66095cb4","signature":"function compilePattern(pattern)"},{"anchor":"S:531cf59eb3","doc":"Build an ignore predicate for a repo root. The predicate takes a posix relative path and returns true when the path should be excluded. Later patterns win, so a negation can re-include a path a broad ","kind":"function","line":86,"name":"loadIgnore","path_id":"F:cb66095cb4","signature":"export function loadIgnore(root)"},{"anchor":"S:d4e650f5ae","doc":"Walk a repository into a sorted list of files. Symlinks are skipped to avoid cycles and escapes. Returns [{ relPath, absPath, size }] ordered by relPath.","kind":"function","line":110,"name":"walkRepo","path_id":"F:cb66095cb4","signature":"export function walkRepo(root, { ignore = () => false, maxDepth = 12 } = {})"},{"anchor":"S:e6e23439bf","kind":"function","line":8,"name":"tempRepo","path_id":"F:cba8f1d03b","signature":"function tempRepo({ withGit = true, pkgName = \"some-host\" } = {})"},{"anchor":"S:25117f5b1d","kind":"function","line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a","signature":"function normalizeLicense(raw)"},{"anchor":"S:cb3211f3c2","doc":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":33,"name":"checkLicenses","path_id":"F:cc361bd05a","signature":"export function checkLicenses(pkg, manifest)"},{"anchor":"S:310e2149b2","doc":"CLI: read package.json and adapters.json from the repo root and report PASS/FAIL.","kind":"function","line":80,"name":"runCli","path_id":"F:cc361bd05a","signature":"function runCli()"},{"anchor":"S:298b204d13","doc":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into the env-pollution check.","kind":"function","line":22,"name":"runPreflight","path_id":"F:cc65dd1342","signature":"function runPreflight(fixtureName)"},{"anchor":"S:c73cab5b60","kind":"function","line":42,"name":"ids","path_id":"F:cc65dd1342","signature":"function ids(report)"},{"anchor":"S:2ca7aeeeaf","kind":"function","line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342","signature":"function findingsBySeverity(report, severity)"},{"anchor":"S:ee57130d72","doc":"Catalog entries for scripts/check-drift.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:ccb72910b3","signature":"export const MESSAGES ="},{"anchor":"S:83ad315769","doc":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin.","kind":"function","line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3","signature":"export function resolveRepo(env = process.env, originUrl = null, overrides = {})"},{"anchor":"S:4d35869e55","kind":"function","line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3","signature":"function readOriginUrl()"},{"anchor":"S:fc28898c78","doc":"The credential, from GITHUB_TOKEN or GH_TOKEN. Empty string means unauthenticated.","kind":"function","line":44,"name":"resolveToken","path_id":"F:cdbe769ed3","signature":"export function resolveToken(env = process.env)"},{"anchor":"S:a4e7d71500","kind":"function","line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3","signature":"function isRetryableStatus(status)"},{"anchor":"S:95e22729ee","kind":"function","line":52,"name":"sleep","path_id":"F:cdbe769ed3","signature":"function sleep(ms)"},{"anchor":"S:de0b2dc0df","doc":"Build a read-only client bound to one repository. All inputs are injectable so * tests drive it against a local mock server with no real network call.","kind":"function","line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3","signature":"export function createGitHubClient("},{"anchor":"S:66b4da1ed7","kind":"type","line":6,"name":"ModelCostClass","path_id":"F:ce1173e176","signature":"export type ModelCostClass = \"paid\" | \"free\" | \"local\";"},{"anchor":"S:2e3ac2ba9f","kind":"interface","line":8,"name":"ModelCostRow","path_id":"F:ce1173e176","signature":"export interface ModelCostRow"},{"anchor":"S:61579a6235","kind":"interface","line":21,"name":"CostSummary","path_id":"F:ce1173e176","signature":"export interface CostSummary"},{"anchor":"S:8cf2204c43","kind":"interface","line":36,"name":"CostPanelProps","path_id":"F:ce1173e176","signature":"export interface CostPanelProps"},{"anchor":"S:13f1b3c9c0","doc":"A summary of model spend and call volume for a period: a budget meter for remote * USD spend, a small stat row of local calls, remote calls, and cache saves (framed * positively as retries avoided), a","kind":"function","line":93,"name":"CostPanel","path_id":"F:ce1173e176","signature":"export function CostPanel({ cost }: CostPanelProps)"},{"anchor":"S:4ed98bc995","kind":"function","line":18,"name":"baseCfg","path_id":"F:ce41983a53","signature":"function baseCfg(extra = {})"},{"anchor":"S:ad7d7732a1","kind":"function","line":24,"name":"makeExtract","path_id":"F:cecdb96382","signature":"function makeExtract(Parser, grammar)"},{"anchor":"S:464c90cba5","doc":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered.","kind":"function","line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382","signature":"export async function registerTreeSitter(register)"},{"anchor":"S:7c0d389b98","kind":"function","line":17,"name":"runRatchet","path_id":"F:cede5f9fa2","signature":"function runRatchet(...args)"},{"anchor":"S:703e56c471","doc":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config.","kind":"function","line":45,"name":"scratchRepo","path_id":"F:d0da1cab80","signature":"function scratchRepo(codeowners)"},{"anchor":"S:fb4a6826d7","kind":"function","line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80","signature":"function fakeGitEmail(email)"},{"anchor":"S:8d1ca74a54","doc":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older items, the schema's `owner` field; either","kind":"function","line":29,"name":"leaseHolder","path_id":"F:d135cffeaa","signature":"function leaseHolder(item)"},{"anchor":"S:87ca9c146a","kind":"function","line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa","signature":"function leaseIsLive(item, now)"},{"anchor":"S:fd822bf451","doc":"tryTransition(item, fromState, toState, writerId, now) -> result { ok: true, item } swap succeeded; item is a fresh copy { ok: false, conflict: \"\" } swap refused; item is left untouched `now` ","kind":"function","line":45,"name":"tryTransition","path_id":"F:d135cffeaa","signature":"export function tryTransition(item, fromState, toState, writerId, now = new Date())"},{"anchor":"S:fa36ece453","kind":"interface","line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91","signature":"export interface CarouselProps"},{"anchor":"S:36acbff697","doc":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scrolls a * focused item into view automatic","kind":"function","line":21,"name":"Carousel","path_id":"F:d20e4b6b91","signature":"export function Carousel({ children, label, className }: CarouselProps)"},{"anchor":"S:19aab1f03f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d288a78085","signature":"export const MESSAGES ="},{"anchor":"S:3ae3f92415","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d328f97d94","signature":"export const MESSAGES ="},{"anchor":"S:ce2faa5c80","kind":"function","line":18,"name":"loadConfig","path_id":"F:d480e40c97","signature":"export function loadConfig(path)"},{"anchor":"S:75c48595da","doc":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers: config values such as autonomy_enabled ","kind":"function","line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97","signature":"function primaryRoleModel(roleCfg)"},{"anchor":"S:dce77ef3c3","kind":"function","line":42,"name":"safetyErrors","path_id":"F:d480e40c97","signature":"export function safetyErrors(cfg)"},{"anchor":"S:ea1469d710","kind":"function","line":70,"name":"validateConfig","path_id":"F:d480e40c97","signature":"export function validateConfig(cfg)"},{"anchor":"S:655cf75cf0","kind":"function","line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9","signature":"export const OwnerOnly = () => ("},{"anchor":"S:733f5fd096","kind":"interface","line":5,"name":"HelpHintProps","path_id":"F:d5b496b125","signature":"export interface HelpHintProps"},{"anchor":"S:e44c445050","doc":"A tiny circular help affordance: a `help` icon button that reveals its text in a * Tooltip on hover or keyboard focus. This is the pervasive \"hover for context\" * control placed next to section labels","kind":"function","line":21,"name":"HelpHint","path_id":"F:d5b496b125","signature":"export function HelpHint({ label, children, size = 13 }: HelpHintProps)"},{"anchor":"S:c1c63b1bf8","kind":"function","line":35,"name":"planFile","path_id":"F:d6401dd73e","signature":"function planFile(editor)"},{"anchor":"S:c9785dab7b","doc":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches provable tautologies like `expect(1).toBe(","kind":"const","line":6,"name":"scenario","path_id":"F:d744931e6a","signature":"export const scenario ="},{"anchor":"S:fe9c17eefa","kind":"function","line":12,"name":"tmp","path_id":"F:d7d4e8d2a9","signature":"function tmp()"},{"anchor":"S:37a0d721be","kind":"function","line":16,"name":"run","path_id":"F:d7d4e8d2a9","signature":"function run(script, ...args)"},{"anchor":"S:91108693ba","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d8e37c4449","signature":"export const MESSAGES ="},{"anchor":"S:4f19353e16","kind":"interface","line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce","signature":"export interface ProtectedPathRowProps"},{"anchor":"S:e0eb326a77","doc":"A single row describing one protected path's guard state: a lock icon, the path in * mono, and a status readout. When a change is awaiting approval, shows an * attention-toned pill, notes who touched ","kind":"function","line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce","signature":"export function ProtectedPathRow("},{"anchor":"S:1274d7cf4b","kind":"type","line":3,"name":"Tier","path_id":"F:da42f69531","signature":"export type Tier = 1 | 2 | 3 | 4;"},{"anchor":"S:fea88d42b6","kind":"interface","line":5,"name":"TierBadgeProps","path_id":"F:da42f69531","signature":"export interface TierBadgeProps"},{"anchor":"S:f3d272846b","doc":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, and * anywhere a change's review require","kind":"function","line":24,"name":"TierBadge","path_id":"F:da42f69531","signature":"export function TierBadge({ tier, showLabel = true }: TierBadgeProps)"},{"anchor":"S:7070a0d16e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:da9133a29d","signature":"export const MESSAGES ="},{"anchor":"S:4eb7e87341","kind":"interface","line":5,"name":"NumberFieldProps","path_id":"F:db651caf76","signature":"export interface NumberFieldProps"},{"anchor":"S:50b0879e24","kind":"function","line":28,"name":"clamp","path_id":"F:db651caf76","signature":"function clamp(n: number, min?: number, max?: number): number"},{"anchor":"S:cfdd1d8a7f","doc":"A numeric field with decrement and increment stepper buttons and an optional * unit suffix. Used for caps and budget editors such as max open PRs, max diff * lines, lease minutes, and the remote model","kind":"function","line":40,"name":"NumberField","path_id":"F:db651caf76","signature":"export function NumberField("},{"anchor":"S:8d30c800e7","kind":"const","line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1","signature":"export const SNAPSHOT_SCHEMA_VERSION = 1;"},{"anchor":"S:154918aa5a","doc":"Detect binary content by scanning a prefix for a null byte.","kind":"function","line":32,"name":"isBinary","path_id":"F:dbb9c92ca1","signature":"function isBinary(buffer)"},{"anchor":"S:3734794a77","kind":"function","line":38,"name":"extOf","path_id":"F:dbb9c92ca1","signature":"function extOf(relPath)"},{"anchor":"S:cbe5a2e179","kind":"function","line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1","signature":"function firstCommentLine(source)"},{"anchor":"S:05fa5077ed","doc":"Derive a module purpose from its symbols and source. Returns the raw (unredacted) string so it can be cached; redaction is applied at map assembly time.","kind":"function","line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1","signature":"function rawPurpose(relPath, symbols, source)"},{"anchor":"S:e9e4290005","doc":"Build the full snapshot for a repository root.","kind":"function","line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1","signature":"export function buildSnapshot(root, opts = {})"},{"anchor":"S:45b2f146f0","doc":"Resolve adjacency into a sorted edge list of dictionary path ids.","kind":"function","line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1","signature":"function buildEdgeList(adjacency, pathIdByPath)"},{"anchor":"S:dbf47f93d3","kind":"function","line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1","signature":"function renderMarkdown({ generatedFor, merkleRoot, files, totalBytes, map })"},{"anchor":"S:890a9e6691","doc":"Read a light governance posture from the target config and environment. It never arms anything; it only reports posture so a snapshot can double as a status probe.","kind":"function","line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1","signature":"function readGovernance(root)"},{"anchor":"S:73feb65706","kind":"function","line":4,"name":"OnLabel","path_id":"F:dca643f34b","signature":"export const OnLabel = () => ("},{"anchor":"S:bd8806c490","kind":"function","line":13,"name":"Board","path_id":"F:dd1be2cd7b","signature":"export const Board = () => ;"},{"anchor":"S:b815c12407","kind":"const","line":1,"name":"MESSAGES","path_id":"F:dd58ae3791","signature":"export const MESSAGES ="},{"anchor":"S:e0832e1baa","kind":"function","line":8,"name":"withRoot","path_id":"F:ddd82fc886","signature":"function withRoot(learningsBody)"},{"anchor":"S:1d6822da4e","doc":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the researcher (or any other subset) without ed","kind":"function","line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49","signature":"export function resolveRoleSequence(cfg, opts = {})"},{"anchor":"S:4b76f865fa","doc":"Resolve a role's execution mode from its model's config entry. The default is \"patch\" (the WI-029 single-shot-diff path) whenever exec_mode is absent, so existing configs behave exactly as before. Onl","kind":"function","line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49","signature":"export function resolveExecMode(cfg, model)"},{"anchor":"S:914d5cd317","doc":"Build a role's ordered runtime fallback chain: the resolved primary first (so a --maker-model/--checker-model CLI override always wins as chain[0]), then the rest of the role's configured `models` lis","kind":"function","line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49","signature":"export function buildFallbackChain(cfg, role, resolved, known)"},{"anchor":"S:4f138d4cbe","doc":"Conservative classifier: only a network-level failure (connection refused/reset, DNS failure, a request timeout) counts as \"unreachable\" and is safe to retry against the next model in a role's fallbac","kind":"function","line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49","signature":"export function isUnreachableError(err)"},{"anchor":"S:41689151ff","kind":"function","line":105,"name":"parseArgs","path_id":"F:ddeb486c49","signature":"export function parseArgs(argv)"},{"anchor":"S:15286656f4","doc":"The execution environment this process is running in. Routing compares each role's required target against this to decide inline vs enqueue. Precedence: an explicit --worker-env flag, then MODONOME_WO","kind":"function","line":127,"name":"localEnv","path_id":"F:ddeb486c49","signature":"function localEnv(opts, env)"},{"anchor":"S:959be959f7","doc":"Resolve and validate a full cycle plan without calling any model. Pure: it reads the passed config and runId and throws on any policy violation. This is the testable core of the harness; the execute p","kind":"function","line":134,"name":"planCycle","path_id":"F:ddeb486c49","signature":"export function planCycle(opts, cfg, runId)"},{"anchor":"S:a75126f856","doc":"Build the child-process environment for a role invocation. When the resolved model carries a base_url (a local, self-hosted, or gateway endpoint), route the CLI there by setting ANTHROPIC_BASE_URL, wh","kind":"function","line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49","signature":"export function buildRunnerEnv(baseEnv, role)"},{"anchor":"S:9b986c2d8a","doc":"Render the role prompt with the same variables regardless of transport: identity/model placeholders, the run branch, and promoted learnings.","kind":"function","line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49","signature":"function buildRolePrompt(plan, role, env)"},{"anchor":"S:9f59110fda","doc":"Write the transcript log and append the schema-conformant metric shared by every transport. `extra` merges additional fields into the metric record (for example whether an openai-http patch applied).","kind":"function","line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49","signature":"function writeTranscriptAndMetric(plan, role, r, transcriptText, extra = {})"},{"anchor":"S:693b8fedee","doc":"Build the argv for the CLI-transport maker/checker invocation. Exported and * pure (no spawn) so a test can assert on the exact flags without launching a * real binary or spending tokens. * @param {{ ","kind":"function","line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49","signature":"export function buildRoleCliArgs(r, plan, prompt)"},{"anchor":"S:fe41df17f9","kind":"function","line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49","signature":"function invokeRoleClaudeCli(plan, role, env, deps = {})"},{"anchor":"S:c028c053e3","doc":"Provider-native single-shot execution: render the same prompt, call an OpenAI-compatible chat-completions endpoint once, and turn the response into file changes deterministically by extracting a unifi","kind":"function","line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49","signature":"export async function invokeRoleOpenAI(plan, role, env, deps = {})"},{"anchor":"S:8f6d716f36","doc":"Load the single agentic-CLI adapter entry from adapters.json for the tool-loop path. Returns the first declared adapter, or null when the manifest is empty or absent (which makes tool-loop degrade to ","kind":"function","line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49","signature":"function loadAdapterEntry(deps = {})"},{"anchor":"S:83b3a2ab69","doc":"Agentic tool-loop execution: spawn the declared external coding CLI (adapt-first, ADR-032) pointed at the resolved OpenAI-compatible endpoint. Containment, the turn cap, and the wall-clock timeout are","kind":"function","line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49","signature":"export async function invokeRoleToolLoop(plan, role, env, deps = {})"},{"anchor":"S:f8004b7b76","kind":"function","line":475,"name":"invokeRole","path_id":"F:ddeb486c49","signature":"function invokeRole(plan, role, env, deps)"},{"anchor":"S:4f43d4e206","doc":"Execute a plan. Refuses a hosted run when the budget is zero. Runs the maker, then the checker, each as a distinct CLI invocation with its own model and identity. `deps` (chatCompletionImpl/applyPatch","kind":"function","line":489,"name":"runCycle","path_id":"F:ddeb486c49","signature":"export function runCycle(opts, { execute, cfg, runId, env = process.env, queueDir, deps })"},{"anchor":"S:d33c2c4d3e","doc":"Invoke each role in turn and produce the \"executed\" result. A role's transport decides whether invokeRole returns a status number synchronously (anthropic-cli) or a Promise (openai-http, which awaits ","kind":"function","line":534,"name":"runRoles","path_id":"F:ddeb486c49","signature":"function runRoles(plan, roles, env, deps)"},{"anchor":"S:f71a25079c","kind":"function","line":549,"name":"main","path_id":"F:ddeb486c49","signature":"async function main()"},{"anchor":"S:2bd83b1706","kind":"const","line":1,"name":"MESSAGES","path_id":"F:de188c1b79","signature":"export const MESSAGES ="},{"anchor":"S:fe07a3bcbc","kind":"function","line":13,"name":"gitRepo","path_id":"F:de5ebbf586","signature":"function gitRepo()"},{"anchor":"S:8579f519b1","kind":"function","line":25,"name":"scaffold","path_id":"F:de5ebbf586","signature":"function scaffold(dir, extra = [])"},{"anchor":"S:60070857ec","doc":"The curated Modonome icon set. Every glyph is a stroke path on a 24x24 grid and * inherits `currentColor`, so an icon takes the color of whatever text or control it * sits in. Icons are decorative by ","kind":"type","line":9,"name":"IconName","path_id":"F:deab644e60","signature":"export type IconName ="},{"anchor":"S:a0f5484b98","kind":"interface","line":77,"name":"IconProps","path_id":"F:deab644e60","signature":"export interface IconProps extends Omit, \"name\">"},{"anchor":"S:abe6a83201","kind":"function","line":88,"name":"Icon","path_id":"F:deab644e60","signature":"export function Icon({ name, size = 16, title, strokeWidth = 1.8, ...rest }: IconProps)"},{"anchor":"S:f2f7e716af","doc":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says.","kind":"function","line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef","signature":"function makeBoundaryFixture(daImports)"},{"anchor":"S:8a9e6199b3","doc":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory.","kind":"function","line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce","signature":"function scratchModonomeDir()"},{"anchor":"S:211cdf5f9d","kind":"function","line":17,"name":"readItem","path_id":"F:e00aec45ce","signature":"function readItem(dir, id)"},{"anchor":"S:73e4b1bbf9","kind":"const","line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba","signature":"export const SIGNAL_MIN = 0;"},{"anchor":"S:ad1b93bd0c","kind":"const","line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba","signature":"export const SIGNAL_MAX = 5;"},{"anchor":"S:d4349c402c","kind":"const","line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba","signature":"export const NEUTRAL_SIGNAL = 2.5;"},{"anchor":"S:81bb2e8cc4","kind":"function","line":39,"name":"clamp","path_id":"F:e11f907cba","signature":"function clamp(n)"},{"anchor":"S:fb06279d5d","doc":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.","kind":"function","line":48,"name":"normalizeSignals","path_id":"F:e11f907cba","signature":"export function normalizeSignals(signals = {})"},{"anchor":"S:574c990b3f","doc":"Pure scoring function. Higher score means higher priority: more value and safety for less effort, risk, and uncertainty.","kind":"function","line":59,"name":"scoreProposal","path_id":"F:e11f907cba","signature":"export function scoreProposal(signals = {})"},{"anchor":"S:c53d33aa2a","doc":"Sort proposals by descending score. Each entry may be a plain signals object or carry signals under an explicit `signals` key alongside other fields (for example `id` or `proposal` text), which are pr","kind":"function","line":71,"name":"scoreProposals","path_id":"F:e11f907cba","signature":"export function scoreProposals(proposalsWithSignals = [])"},{"anchor":"S:3cceb8dc09","doc":"Heuristic, deterministic signal derivation from a proposal string and a simple context object. This is a convenience default, not a source of truth: callers with better signals should pass them direct","kind":"function","line":96,"name":"deriveSignals","path_id":"F:e11f907cba","signature":"export function deriveSignals(proposalText, context = {})"},{"anchor":"S:ba347c9b77","kind":"function","line":4,"name":"Beside","path_id":"F:e19aab09cb","signature":"export const Beside = () => ("},{"anchor":"S:fdf5ba078f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c","signature":"export const MESSAGES ="},{"anchor":"S:e1813dcc71","doc":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are added by extending `roles`, `models`, an","kind":"function","line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07","signature":"function baseCfg(extra = {})"},{"anchor":"S:170d5cf4ef","kind":"function","line":18,"name":"tmp","path_id":"F:e359adb110","signature":"function tmp()"},{"anchor":"S:85083e2f79","kind":"function","line":22,"name":"run","path_id":"F:e359adb110","signature":"function run(dir)"},{"anchor":"S:8d5d2455bf","kind":"interface","line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72","signature":"export interface ResolvedPanelMessage"},{"anchor":"S:74b454ee62","kind":"function","line":56,"name":"interpolate","path_id":"F:e406ceab72","signature":"function interpolate(template: string, params: Record): string"},{"anchor":"S:72886ee448","doc":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to DEFAULTS, then to the raw id, so a miss","kind":"function","line":66,"name":"formatMessage","path_id":"F:e406ceab72","signature":"export function formatMessage("},{"anchor":"S:870a14c796","doc":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separation-of- * duties governance rules. The la","kind":"function","line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48","signature":"export function ArmingScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:d7029fdff9","doc":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendor identities are rejected.","kind":"function","line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2","signature":"export function isForbiddenIdentity(name, email)"},{"anchor":"S:5c7ed4ab16","doc":"Parse `git log` output where each commit is one line of * \"authorNameauthorEmailcommitterNamecommitterEmailshortSha\". * Returns the commits whose author or committer is a forbidden","kind":"function","line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2","signature":"export function findForbiddenCommits(logOutput)"},{"anchor":"S:f040dfb6c9","kind":"function","line":15,"name":"run","path_id":"F:e540f7b669","signature":"function run(script, args = [])"},{"anchor":"S:ce5e964e25","kind":"function","line":4,"name":"ArmingMode","path_id":"F:e5e519f441","signature":"export const ArmingMode = () => ("},{"anchor":"S:8c65a8b2a2","kind":"function","line":15,"name":"ActiveWork","path_id":"F:e5e519f441","signature":"export const ActiveWork = () => ("},{"anchor":"S:dd37641bec","kind":"function","line":27,"name":"Spend","path_id":"F:e5e519f441","signature":"export const Spend = () => ("},{"anchor":"S:2d541b3911","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e6677dcd37","signature":"export const MESSAGES ="},{"anchor":"S:17c9a6d377","doc":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped.","kind":"function","line":45,"name":"stripCharClasses","path_id":"F:e7380d1444","signature":"function stripCharClasses(src)"},{"anchor":"S:be897872b9","doc":"True when a group body contains a top-level unbounded quantifier.","kind":"function","line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444","signature":"function bodyHasUnbounded(body)"},{"anchor":"S:ca3e7d6f59","doc":"Detect nested quantifiers: a group (...) that is itself quantified by an unbounded quantifier (+, *, or {n,}) AND whose body contains an unbounded quantifier. This is the catastrophic-backtracking cla","kind":"function","line":72,"name":"redosFindings","path_id":"F:e7380d1444","signature":"export function redosFindings(source)"},{"anchor":"S:c52b041088","doc":"1. Runtime: exported RegExp sources (including RegExps inside an exported array).","kind":"function","line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444","signature":"async function exportedRegexSources(absFile)"},{"anchor":"S:dcc6653dc4","doc":"2/3. Static: new RegExp(\"...\"|`...`) string args (no interpolation) and /.../ literals.","kind":"function","line":114,"name":"staticPatternSources","path_id":"F:e7380d1444","signature":"function staticPatternSources(src)"},{"anchor":"S:979cd75d0e","doc":"Collect every regex-safety problem across the target files. Exported (not run at import time) so the gate can be exercised without triggering process.exit.","kind":"function","line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444","signature":"export async function regexSafetyProblems(rootDir = root)"},{"anchor":"S:42d4f014b5","doc":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (proving it * would catch a bad promotion). Eac","kind":"function","line":41,"name":"corpusProblems","path_id":"F:e8676a18b7","signature":"export function corpusProblems({ strictBranch, fuzzyBranch, strictId, fuzzyId, strictText, fuzzyText })"},{"anchor":"S:59f6d857da","doc":"The real detectors, wired to the injectable checker.","kind":"const","line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7","signature":"export const LIVE_DETECTORS ="},{"anchor":"S:ed0a2f8660","kind":"function","line":28,"name":"git","path_id":"F:e9479e1a3b","signature":"function git(...a)"},{"anchor":"S:b32b89125f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e948251d2b","signature":"export const MESSAGES ="},{"anchor":"S:98ca1b6552","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d","signature":"export const MESSAGES ="},{"anchor":"S:135fde5dfb","doc":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] * - \"success\": always returns a normal c","kind":"function","line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb","signature":"export function startMockServer(options = {})"},{"anchor":"S:b65916676a","kind":"function","line":98,"name":"successBody","path_id":"F:eb14a0bdeb","signature":"function successBody(overrides)"},{"anchor":"S:ac31df31c0","kind":"function","line":113,"name":"writeJson","path_id":"F:eb14a0bdeb","signature":"function writeJson(res, status, body)"},{"anchor":"S:153c85af26","kind":"const","line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a","signature":"export const MESSAGES ="},{"anchor":"S:38948fee1c","kind":"class","line":10,"name":"LiveApiError","path_id":"F:ec52ca3820","signature":"export class LiveApiError extends Error {}"},{"anchor":"S:819d9d37ff","kind":"function","line":12,"name":"call","path_id":"F:ec52ca3820","signature":"async function call(path: string, init?: RequestInit): Promise"},{"anchor":"S:cab56da046","kind":"function","line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820","signature":"export function fetchLiveState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:18fce60dc6","kind":"function","line":32,"name":"saveConfig","path_id":"F:ec52ca3820","signature":"export function saveConfig("},{"anchor":"S:4124b7df92","kind":"function","line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820","signature":"export function releaseLeaseLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:a4b6be1d49","kind":"function","line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820","signature":"export function pruneLearningLive(mode: PanelMode, lesson: string, dir?: string): Promise"},{"anchor":"S:699f2f623f","kind":"function","line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820","signature":"export function saveMessagesLive("},{"anchor":"S:92bb85bdff","kind":"interface","line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820","signature":"export interface ConnectionTestResult"},{"anchor":"S:cb81b7e05c","doc":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway).","kind":"function","line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820","signature":"export function testConnectionLive(baseUrl: string): Promise"},{"anchor":"S:69ef79b6f3","kind":"function","line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820","signature":"export function createWorkItemLive(mode: PanelMode, item: NewWorkItemInput, dir?: string): Promise"},{"anchor":"S:7a68bb8c0c","kind":"function","line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820","signature":"export function updateWorkItemLive(mode: PanelMode, itemId: string, patch: WorkItemPatch, dir?: string): Promise"},{"anchor":"S:f9a749a2b1","kind":"function","line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820","signature":"export function deleteWorkItemLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:b1e3e516c3","doc":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close).","kind":"function","line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:dd1940719c","doc":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name.","kind":"function","line":46,"name":"parseArgs","path_id":"F:edb11415f0","signature":"function parseArgs(argv)"},{"anchor":"S:e6654c6139","doc":"gateOrder(graph) -> [...] the gates in dependency-first topological order. topoSort orders a gate ahead of the gates it points to, so reverse to put each gate's dependencies before the gate itself.","kind":"function","line":59,"name":"gateOrder","path_id":"F:edb11415f0","signature":"export function gateOrder(graph)"},{"anchor":"S:6e6111c7dd","doc":"runPipeline(order, fixtures) -> [...] failures in topological order. Each failure is { gate, reason }. A missing fixture for a gate is itself a failure: the gate cannot be evaluated, so the pipeline m","kind":"function","line":70,"name":"runPipeline","path_id":"F:edb11415f0","signature":"export function runPipeline(order, fixtures)"},{"anchor":"S:66bb927095","kind":"function","line":11,"name":"run","path_id":"F:edf42fb1af","signature":"function run(cmd, opts = {})"},{"anchor":"S:c1e6062cfc","kind":"function","line":109,"name":"baseCfg","path_id":"F:ee02e563c6","signature":"function baseCfg(overrides = {})"},{"anchor":"S:5bad105043","kind":"function","line":3,"name":"Reading","path_id":"F:eecc78e7e8","signature":"export const Reading = () => ;"},{"anchor":"S:fd42584b25","kind":"const","line":1,"name":"MESSAGES","path_id":"F:efa02030ca","signature":"export const MESSAGES ="},{"anchor":"S:524aeb5cd6","kind":"function","line":23,"name":"Detail","path_id":"F:f0fbd8716f","signature":"export const Detail = () => {}} />;"},{"anchor":"S:2e93f745f3","kind":"function","line":17,"name":"ratchet","path_id":"F:f238d164c9","signature":"function ratchet(diffPath)"},{"anchor":"S:7ff08ea7a1","doc":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wording from the Messages tab too. None ar","kind":"const","line":5,"name":"MESSAGES","path_id":"F:f41378fed0","signature":"export const MESSAGES ="},{"anchor":"S:3c3cd672a7","doc":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the order they were detected via DFS (the f","kind":"function","line":11,"name":"isCyclic","path_id":"F:f51cba9beb","signature":"export function isCyclic(adjacency)"},{"anchor":"S:075e86ea7c","doc":"topoSort(adjacency, nodes) -> { order: [...], error?: string } Returns a topological ordering of `nodes` given the directed edges in `adjacency`. Nodes not present in `nodes` but reachable via edges a","kind":"function","line":48,"name":"topoSort","path_id":"F:f51cba9beb","signature":"export function topoSort(adjacency, nodes)"},{"anchor":"S:cb1a5f81e0","doc":"reachableFrom(adjacency, start) -> Set of nodes reachable from `start` by following directed edges (breadth-first). `start` itself is not included unless the graph has a path back to it. Used by the d","kind":"function","line":78,"name":"reachableFrom","path_id":"F:f51cba9beb","signature":"export function reachableFrom(adjacency, start)"},{"anchor":"S:9ec4198171","doc":"Collect every node mentioned either as a key or as a neighbour value.","kind":"function","line":93,"name":"collectNodes","path_id":"F:f51cba9beb","signature":"function collectNodes(adjacency)"},{"anchor":"S:c063b246d1","doc":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * where entry is undefined if `name` is no","kind":"function","line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1","signature":"export function loadAndValidateManifest(rootDir, name)"},{"anchor":"S:45bcd8bd18","doc":"Confirm the pure argv-construction helpers resolve without throwing and * produce a shape that never carries a prompt or a credential-like value. * Pure. Returns a list of problem strings (empty means","kind":"function","line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1","signature":"export function checkArgvSanity(entry)"},{"anchor":"S:753ca853b2","kind":"function","line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1","signature":"function commandOnPath(command)"},{"anchor":"S:59cd81d0e0","doc":"Minimal local OpenAI-compatible chat-completions mock. No real network, no cost, no external dependency. Scripted to echo back a fixed marker so a conforming adapter that forwards the model's reply in","kind":"function","line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1","signature":"function startProbeServer(replyContent)"},{"anchor":"S:781c2d6b40","doc":"Run the live conformance probe for one adapter entry. Returns * { status: \"pass\"|\"fail\"|\"skipped\", detail }. Never throws: every failure * mode (binary absent, timeout, non-zero exit, containment viol","kind":"function","line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1","signature":"export async function runLiveProbe(entry, opts = {})"},{"anchor":"S:c63f60f015","kind":"function","line":210,"name":"main","path_id":"F:f5d313e9f1","signature":"async function main(argv)"},{"anchor":"S:f988f356bd","kind":"function","line":4,"name":"Variants","path_id":"F:f6e100ab45","signature":"export const Variants = () => ("},{"anchor":"S:edacefac29","kind":"function","line":19,"name":"Sizes","path_id":"F:f6e100ab45","signature":"export const Sizes = () => ("},{"anchor":"S:af1e7a50ba","kind":"function","line":5,"name":"makeDb","path_id":"F:f8168b956f","signature":"function makeDb()"},{"anchor":"S:cb8cdfa49f","kind":"interface","line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9","signature":"export interface ConceptEntry"},{"anchor":"S:83deb081d9","kind":"const","line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9","signature":"export const CONCEPTS: ConceptEntry[] = ["},{"anchor":"S:a3bf9f1833","kind":"interface","line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b","signature":"export interface QueueBoardProps"},{"anchor":"S:16975f80af","doc":"The work queue as a board. Items are grouped into the columns of the durable state * machine (queued, claimed, making, checking, merge ready, done, escalated), with * rework folded into making and mer","kind":"function","line":18,"name":"QueueBoard","path_id":"F:f8609bae0b","signature":"export function QueueBoard({ items, onSelect }: QueueBoardProps)"},{"anchor":"S:5835c8b608","doc":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variable, which lives in CI or operator scope,","kind":"function","line":69,"name":"resolveArming","path_id":"F:f90930c3c3","signature":"export function resolveArming(targetDir, env = process.env)"},{"anchor":"S:53b9eda0f8","kind":"function","line":90,"name":"run","path_id":"F:f90930c3c3","signature":"function run(script, args)"},{"anchor":"S:214691c25d","kind":"function","line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3","signature":"function targetDirFrom(rest)"},{"anchor":"S:9249714b12","kind":"function","line":104,"name":"main","path_id":"F:f90930c3c3","signature":"function main(argv)"},{"anchor":"S:b1b5323930","kind":"function","line":77,"name":"runGate","path_id":"F:f921eecad7","signature":"function runGate(dir, args = [])"},{"anchor":"S:0b25fbc8fe","kind":"function","line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7","signature":"function plainDecisionsDir(content)"},{"anchor":"S:1ebb8bc1af","kind":"function","line":122,"name":"git","path_id":"F:f921eecad7","signature":"function git(args, cwd)"},{"anchor":"S:6ee06ecd24","doc":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }.","kind":"function","line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7","signature":"function repoWithNewEntry()"},{"anchor":"S:1b85e41391","doc":"The mock server has to run as its own OS process: the CLI-under-test is driven via spawnSync, which blocks this test's event loop for the duration of the child. An in-process HTTP server can't accept ","kind":"function","line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7","signature":"function startMockReviewServer(reviews)"},{"anchor":"S:45061132f3","kind":"function","line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7","signature":"function runGateWithPRContext(dir, baseSha, { apiBase, reviews, prAuthor = \"some-agent\" })"},{"anchor":"S:9b166b011e","kind":"type","line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f","signature":"export type IdentityChipRole = \"maker\" | \"checker\";"},{"anchor":"S:01b4ff4d73","kind":"type","line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f","signature":"export type IdentityChipSize = \"sm\" | \"md\";"},{"anchor":"S:a06feb4e68","kind":"interface","line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f","signature":"export interface IdentityChipProps"},{"anchor":"S:6797390adc","kind":"function","line":18,"name":"initialsFor","path_id":"F:f942e88a8f","signature":"function initialsFor(name: string): string"},{"anchor":"S:aaca852d2b","doc":"A compact identity marker: an initials avatar plus a name, with an optional model * string in muted mono beneath. When `role` is set the avatar ring is tinted (info for * maker, primary for checker) s","kind":"function","line":31,"name":"IdentityChip","path_id":"F:f942e88a8f","signature":"export function IdentityChip({ name, model, role, size = \"md\" }: IdentityChipProps)"},{"anchor":"S:e173063c31","kind":"function","line":4,"name":"Queued","path_id":"F:f9c98a8642","signature":"export const Queued = () => ("},{"anchor":"S:c7ebadadb9","kind":"function","line":19,"name":"Checking","path_id":"F:f9c98a8642","signature":"export const Checking = () => ("},{"anchor":"S:dff1725e3b","kind":"function","line":37,"name":"Escalated","path_id":"F:f9c98a8642","signature":"export const Escalated = () => ("},{"anchor":"S:13a8db3ab6","kind":"function","line":11,"name":"gitDiff","path_id":"F:fa49930755","signature":"function gitDiff(...args)"},{"anchor":"S:c176253e9c","kind":"function","line":12,"name":"tmp","path_id":"F:fadcf390da","signature":"function tmp()"},{"anchor":"S:8bff005013","kind":"function","line":16,"name":"runReport","path_id":"F:fadcf390da","signature":"function runReport(targetDir)"},{"anchor":"S:5919844321","doc":"Schema-conformant event line using \"event\" field (not \"type\").","kind":"function","line":24,"name":"makeEvent","path_id":"F:fadcf390da","signature":"function makeEvent(event, extra = {})"},{"anchor":"S:54a007aa57","doc":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no AST dependency) matches this repo's hous","kind":"function","line":50,"name":"relativeImportsOf","path_id":"F:fc21812307","signature":"function relativeImportsOf(absFile)"},{"anchor":"S:f99cb9f35c","doc":"Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro","kind":"function","line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307","signature":"export function determinismBoundaryErrors(root = REPO_ROOT)"},{"anchor":"S:9d42aeefd9","doc":"gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen","kind":"function","line":106,"name":"gateGraphErrors","path_id":"F:fc21812307","signature":"export function gateGraphErrors(graph)"},{"anchor":"S:aa00911a72","kind":"function","line":25,"name":"readEvents","path_id":"F:fc5d887ff6","signature":"function readEvents(path)"},{"anchor":"S:99ae98a428","kind":"function","line":71,"name":"walkMd","path_id":"F:fd08562f92","signature":"function walkMd(dir, out = [])"},{"anchor":"S:575af01d8c","kind":"function","line":110,"name":"checkTarget","path_id":"F:fd08562f92","signature":"function checkTarget(fileDir, rawTarget, srcFile)"},{"anchor":"S:bc1fd2c5b3","doc":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research.","kind":"function","line":149,"name":"adrNumbers","path_id":"F:fd08562f92","signature":"function adrNumbers(dir)"},{"anchor":"S:24c6a3dc6c","doc":"Front-matter parsing for canonical uniqueness and advisory presence.","kind":"function","line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92","signature":"function parseFrontMatter(text)"},{"anchor":"S:6647a4e550","kind":"function","line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92","signature":"function extractCitedPaths(text)"},{"anchor":"S:38b734e681","doc":"Commits touching any of `paths` since `sinceDate` (a YYYY-MM-DD string already validated by the caller). Returns 0 (fail open, warn-free) if this is not a git checkout, e.g. an npm-installed copy of t","kind":"function","line":278,"name":"commitsSince","path_id":"F:fd08562f92","signature":"function commitsSince(paths, sinceDate)"},{"anchor":"S:9bcfb77bfa","doc":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ removed so it compares directly to a handle ","kind":"function","line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa","signature":"export function parseCodeowners(text)"},{"anchor":"S:7a464a2d86","doc":"GitHub CODEOWNERS is last-match-wins: the owners of the LAST rule whose pattern matches the path. Supports the common subset modonome's own CODEOWNERS uses (a \"*\" catchall and rooted dir/file prefixes","kind":"function","line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa","signature":"export function ownersForPath(rules, path)"},{"anchor":"S:857ab7696f","kind":"function","line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa","signature":"function matchesPattern(pattern, path)"},{"anchor":"S:a50812babf","doc":"Extract a GitHub handle from a commit email. Only the two GitHub noreply formats carry a handle deterministically; any other address returns null (fail closed), so an unmapped identity is treated as n","kind":"function","line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa","signature":"export function handleFromEmail(email)"},{"anchor":"S:b29e93fbc3","kind":"function","line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa","signature":"function localGitEmail(repoRoot, exec)"},{"anchor":"S:f99d630708","kind":"function","line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa","signature":"function pickCodeowners(repoRoot, exists)"},{"anchor":"S:c36223901c","doc":"Decide whether the local git identity is a code owner of the config at * configRelPath within repoRoot. Fail-closed everywhere it cannot prove ownership: * no CODEOWNERS file, no owner declared for th","kind":"function","line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa","signature":"export function selfGovernanceOwnership("},{"anchor":"S:22e3bba95f","doc":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read the map instead of scanning the whole tre","kind":"function","line":26,"name":"snapshotContext","path_id":"F:fd660a117b","signature":"export function snapshotContext(root = process.cwd())"},{"anchor":"S:2b5847c683","doc":"Substitute every ${VAR} from env. Throw if a referenced variable is unset, so a missing identity or branch fails loudly instead of rendering an empty value into a model prompt.","kind":"function","line":61,"name":"renderPrompt","path_id":"F:fd660a117b","signature":"export function renderPrompt(role, env = process.env)"},{"anchor":"S:cf03857559","doc":"Run validate-config.mjs against a given config path.","kind":"function","line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602","signature":"function runValidateConfig(configPath, opts = {})"},{"anchor":"S:5daa909048","doc":"Run guard-ratchet.mjs with a --diff fixture.","kind":"function","line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602","signature":"function runGuardRatchet(diffPath, opts = {})"},{"anchor":"S:cdac115f81","doc":"Run check-portability.mjs against a fixture directory.","kind":"function","line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602","signature":"function runPortabilityCheck(fixturePath, opts = {})"},{"anchor":"S:7d8d2691e2","kind":"function","line":4,"name":"Tiers","path_id":"F:fe5ec971f8","signature":"export const Tiers = () => ("},{"anchor":"S:23fbaa24ea","kind":"function","line":13,"name":"git","path_id":"F:ff2c4a08a4","signature":"export function git(args, opts = {})"},{"anchor":"S:a529342ccb","kind":"function","line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4","signature":"export function currentBranch()"},{"anchor":"S:79b048583f","doc":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo).","kind":"function","line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4","signature":"export function defaultRange()"},{"anchor":"S:7c3651a5ba","doc":"Commits in `range` as structured records: { an, ae, cn, ce, sha, body }. Returns * the raw tab-delimited identity table too (the shape commit-identity.mjs parses). * Bodies are fetched one commit at a","kind":"function","line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4","signature":"export function commitsInRange(range = defaultRange())"},{"anchor":"S:9dee57c7c2","kind":"class","line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f","signature":"export class PaymentProcessor"},{"anchor":"S:e7e0d4979a","doc":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding line comments, and import edges (single a","kind":"function","line":5,"name":"clean","path_id":"F:ffe5c1269b","signature":"function clean(text)"},{"anchor":"S:a9f138bd93","kind":"function","line":10,"name":"signature","path_id":"F:ffe5c1269b","signature":"function signature(line)"},{"anchor":"S:f9d6a590e4","kind":"function","line":14,"name":"docAbove","path_id":"F:ffe5c1269b","signature":"function docAbove(lines, index)"},{"anchor":"S:28d1266e44","kind":"const","line":24,"name":"adapter","path_id":"F:ffe5c1269b","signature":"export const adapter ="}],"attention":[{"centrality":64,"pagerank":0.037911,"path_id":"F:05bffc70e9"},{"centrality":59,"pagerank":0.011418,"path_id":"F:03f476958e"},{"centrality":32,"pagerank":0.025731,"path_id":"F:7c8d518693"},{"centrality":23,"pagerank":0.016681,"path_id":"F:deab644e60"},{"centrality":48,"pagerank":0.000677,"path_id":"F:add7add561"},{"centrality":21,"pagerank":0.01643,"path_id":"F:1575110130"},{"centrality":15,"pagerank":0.019128,"path_id":"F:34cb2b6c48"},{"centrality":25,"pagerank":0.004961,"path_id":"F:ddeb486c49"},{"centrality":16,"pagerank":0.00481,"path_id":"F:932d33be00"},{"centrality":13,"pagerank":0.006543,"path_id":"F:0a85f3b8e5"},{"centrality":12,"pagerank":0.005677,"path_id":"F:d5b496b125"},{"centrality":12,"pagerank":0.004047,"path_id":"F:2fc610bd94"},{"centrality":11,"pagerank":0.004449,"path_id":"F:4ebb5aa8a0"},{"centrality":11,"pagerank":0.003453,"path_id":"F:304ce7b89d"},{"centrality":10,"pagerank":0.003433,"path_id":"F:245efb551c"},{"centrality":13,"pagerank":0.001132,"path_id":"F:dbb9c92ca1"},{"centrality":9,"pagerank":0.003264,"path_id":"F:8b122c449e"},{"centrality":7,"pagerank":0.003715,"path_id":"F:4a7eaceb5c"},{"centrality":9,"pagerank":0.002517,"path_id":"F:f07f8ebca9"},{"centrality":7,"pagerank":0.003416,"path_id":"F:d480e40c97"},{"centrality":6,"pagerank":0.003787,"path_id":"F:a8cfe45d27"},{"centrality":8,"pagerank":0.002384,"path_id":"F:65193a9799"},{"centrality":10,"pagerank":0.000964,"path_id":"F:113387361d"},{"centrality":7,"pagerank":0.002657,"path_id":"F:fd660a117b"},{"centrality":8,"pagerank":0.001977,"path_id":"F:b5ae6ee133"},{"centrality":5,"pagerank":0.003609,"path_id":"F:68c4da7fe8"},{"centrality":8,"pagerank":0.001721,"path_id":"F:22566cb46e"},{"centrality":6,"pagerank":0.002365,"path_id":"F:c64c042051"},{"centrality":3,"pagerank":0.004106,"path_id":"F:8b5a1f94c4"},{"centrality":8,"pagerank":0.001132,"path_id":"F:2554ddd30c"},{"centrality":5,"pagerank":0.002781,"path_id":"F:f51cba9beb"},{"centrality":4,"pagerank":0.003241,"path_id":"F:6e0bd62fa3"},{"centrality":3,"pagerank":0.003674,"path_id":"F:8a9aff1529"},{"centrality":8,"pagerank":0.000677,"path_id":"F:a0d489df6d"},{"centrality":7,"pagerank":0.001262,"path_id":"F:08064e0c53"},{"centrality":6,"pagerank":0.001714,"path_id":"F:3c479cac6e"},{"centrality":6,"pagerank":0.001623,"path_id":"F:e406ceab72"},{"centrality":5,"pagerank":0.001977,"path_id":"F:40eb542a82"},{"centrality":5,"pagerank":0.001975,"path_id":"F:86838d35ac"},{"centrality":5,"pagerank":0.001948,"path_id":"F:8d2cb93236"},{"centrality":6,"pagerank":0.001262,"path_id":"F:956332d4b5"},{"centrality":3,"pagerank":0.003022,"path_id":"F:e4ff19bbe2"},{"centrality":5,"pagerank":0.001518,"path_id":"F:2d6ef08990"},{"centrality":4,"pagerank":0.002039,"path_id":"F:cb3c5f7715"},{"centrality":6,"pagerank":0.000768,"path_id":"F:4ebf08705b"},{"centrality":6,"pagerank":0.000768,"path_id":"F:95d4304133"},{"centrality":6,"pagerank":0.000677,"path_id":"F:8bb1b57470"},{"centrality":6,"pagerank":0.000677,"path_id":"F:780c791407"},{"centrality":5,"pagerank":0.001262,"path_id":"F:14edab923f"},{"centrality":5,"pagerank":0.001262,"path_id":"F:ce1173e176"}],"dictionary":{"paths":{"F:00a0cb4ee4":"docs/adr/ADR-009-mcp-tool-auth-scope.md","F:0103cf3d56":"tests/rollback.test.mjs","F:015261eab0":"scripts/lib/snapshot-graph.mjs","F:01a7edaeba":"docs/adr/ADR-037-policy-pack-adoption.md","F:02359d48d5":"prompts/modules/gates.md","F:02a5f8fc55":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","F:037178c793":"templates/.modonome/DECISIONS.md","F:0391f3b249":"tests/check-md-governance.test.mjs","F:03f476958e":"scripts/lib/message-catalog/index.mjs","F:044b762a79":"examples/demo-app/tests/OrderService.test.js","F:0526aab88e":"docs/adr/ADR-007-claim-atomicity.md","F:059f9a812c":"tests/check-licenses.test.mjs","F:05a0f0d5a5":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","F:05bffc70e9":"scripts/lib/messages.mjs","F:06572a96a5":"CHANGELOG.md","F:06b982f5a2":"tests/envisioner-role.test.mjs","F:08064e0c53":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","F:08441e59e8":"tests/packet.test.mjs","F:08577063d4":".design-sync/previews/Select.tsx","F:08b7435c86":"apps/control-panel/server/api.mjs","F:08baf2c1e2":"docs/ops/preflight.md","F:093689bb8e":"tests/marketresearcher-role.test.mjs","F:094efaca92":"docs/adr/ADR-026-learning-promotion-audit-trail.md","F:09ba331878":"scripts/detect-near-miss.mjs","F:09ea014068":"scripts/lib/message-catalog/advisory/verify-packet.mjs","F:0a1a9270a7":"design-system/src/components/DecisionCard/index.ts","F:0a640a72f9":"docs/research/README.md","F:0a6a758e7d":".design-sync/previews/ConfirmDialog.tsx","F:0a6b452f14":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","F:0a85f3b8e5":"apps/control-panel/src/state/types.ts","F:0b5ca119d2":"docs/README.md","F:0c07096c4e":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","F:0c1c5ad5d9":"scripts/verify-packet.mjs","F:0c731e3460":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","F:0cacf66a3b":"scripts/lib/ed25519.mjs","F:0cc3e727ed":"design-system/src/components/Input/index.ts","F:0da05a2a05":"apps/control-panel/src/state/arming.ts","F:0e78eb22ec":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","F:0e9e38f100":"design-system/src/components/Toast/index.ts","F:0f284c134c":".modonome/LESSONS.md","F:10e76cfcd3":".design-sync/previews/StatusPill.tsx","F:1127892e72":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","F:113387361d":"apps/control-panel/src/App.tsx","F:114d351bdc":"tests/config.test.mjs","F:116adfb9f8":"scripts/risk-surface-guard.mjs","F:1174d7e2ba":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","F:119e3c0fce":"scripts/lib/snapshot-cache.mjs","F:128b647d9a":"scripts/fleet-ledger.mjs","F:12c7a4e461":"scripts/lib/packet-id.mjs","F:1339474d8c":"docs/ops/merge-governance-setup.md","F:137056535b":"tests/policy-attestation.test.mjs","F:13d31b33ea":".design-sync/previews/ProtectedPathRow.tsx","F:146a198c06":"design-system/src/components/Carousel/index.ts","F:147873af8b":"QUICKSTART.md","F:14812742da":"docs/adr/ADR-003-agentproof-portability.md","F:14edab923f":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","F:1575110130":"scripts/lib/yaml-lite.mjs","F:168fe4d371":"tests/detect-near-miss.test.mjs","F:1714946cc1":"scripts/check-control-panel-coverage.mjs","F:1716017e02":"design-system/src/components/MdnRoot/index.ts","F:179564da6f":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","F:182dcaa949":"design-system/src/components/LeaseTable/index.ts","F:18f569225a":"tests/agent-model-fallback.test.mjs","F:191a17b151":"docs/enterprise.md","F:195e9217ca":"tests/action-queue.test.mjs","F:1a137480ae":"design-system/src/components/ConceptTile/ConceptTile.tsx","F:1a19f02364":"scripts/lib/control-panel-audit.mjs","F:1a368a7935":"docs/adr/ADR-038-checker-as-review-service.md","F:1a58c06540":"docs/adr/ADR-014-knowledge-network-transport.md","F:1aa7cf650d":".design-sync/previews/Table.tsx","F:1bc04b108f":"tests/check-regex-safety.test.mjs","F:1bc6d1449f":"tests/agentproof-attestation.test.mjs","F:1bcaaff9eb":"tests/ws-b-harness.test.mjs","F:1c1d4f7335":"design-system/src/components/Select/index.ts","F:1c3b1b469e":"prompts/modonome.core.md","F:1cf31c4792":"scripts/lib/snapshot-anchors.mjs","F:1d03291691":"design-system/src/components/LearningCard/LearningCard.tsx","F:1db369d970":"design-system/src/components/Tabs/Tabs.tsx","F:1e15c1666f":"tests/github-api.test.mjs","F:1e5ef6ba70":"scripts/remediate.mjs","F:1ecd18c4b9":"examples/demo-app/src/OrderService.js","F:1f40b6eb6e":".design-sync/previews/Slider.tsx","F:1ff2bf39a4":"scripts/lib/message-catalog/advisory/github-api.mjs","F:2127a8caca":"scripts/agent/review-proposals.mjs","F:2148814594":"terraform/README.md","F:214cc0a5f4":"design-system/src/components/Toggle/Toggle.tsx","F:21752cf61a":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","F:2207a6ebce":".design-sync/previews/ActivationLadder.tsx","F:2215d0e1fc":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","F:22566cb46e":"apps/control-panel/server/modonomeWriter.mjs","F:22fab804b1":"tests/checkerproof.test.mjs","F:23917c6197":"scripts/test-prompt-behavior.mjs","F:23dbdd7e76":"scripts/lib/message-catalog/gate/check-portability.mjs","F:240ace7a8f":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","F:244a368695":"BREAK-THE-RATCHET.md","F:245efb551c":"scripts/lib/canonical-json.mjs","F:2470e60179":".design-sync/previews/AppShell.tsx","F:24f28ae0fa":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","F:250c8a0d4a":".design-sync/previews/LearningCard.tsx","F:2554ddd30c":"scripts/lib/lang-adapters/index.mjs","F:25e649633c":"apps/control-panel/src/state/configDiff.ts","F:25fdf1f8f6":"docs/adr/ADR-040-end-to-end-operating-model.md","F:268769c4a6":"design-system/src/components/AppShell/AppShell.tsx","F:26c8e3a19a":"templates/.modonome/LESSONS.md","F:27086b6de3":"docs/adr/ADR-042-agentproof-verified.md","F:2715f09f24":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","F:28b7af3c53":".design-sync/previews/ArmingStateBadge.tsx","F:28d4e1ad3d":"docs/adr/ADR-019-knowledge-network-execution-scope.md","F:28f278b1d9":"checkerproof/scenarios/cp-04-scope-creep.mjs","F:2a74ae3f05":"tests/snapshot-golden.test.mjs","F:2af556d595":"scripts/check-message-catalog-integrity.mjs","F:2b49c74e74":"tests/ws-e-ratchet-languages.test.mjs","F:2b9c43b0ca":"scripts/lib/merkle.mjs","F:2bfaa5759d":"docs/launch/x-thread.md","F:2c2cc77861":"examples/python-service/tests/test_orders.py","F:2d4c555ba1":"scripts/check-portability.mjs","F:2d6c10ab08":"scripts/check-control-panel-coherence.mjs","F:2d6ef08990":"scripts/agent/review-diff.mjs","F:2d93cea2d4":"scripts/lib/cli-args.mjs","F:2e327963ed":"scripts/build-compliance-evidence.mjs","F:2ec4f6540b":"agentproof/SPEC.md","F:2f3e98ab2c":"scripts/lib/risk-surface-rules.mjs","F:2f41a784d9":"CODEX.md","F:2f6c42c5ee":"design-system/src/components/States/States.tsx","F:2fc610bd94":"design-system/src/components/StatusPill/StatusPill.tsx","F:304ce7b89d":"scripts/agent/resolve-role.mjs","F:304fa8ef33":"apps/control-panel/src/screens/GatesScreen.tsx","F:313bcfac46":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","F:31658eff0b":".design-sync/previews/LeaseTable.tsx","F:31d378932b":"scripts/check-learning-traceability.mjs","F:3211d524ad":"apps/control-panel/README.md","F:3213d03b72":"scripts/lib/lang-adapters/python.mjs","F:3319e5c923":".design-sync/previews/SafetyStrip.tsx","F:33c4d744f3":"scripts/lib/message-catalog/agent-run/remediate.mjs","F:34ca4e55d1":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","F:34cb2b6c48":"scripts/lib/jsonschema.mjs","F:35002ba3fe":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","F:35c6d59157":"design-system/src/components/RoleBadge/RoleBadge.tsx","F:35d4a12b63":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","F:36419aa427":"scripts/lib/lang-adapters/js-ts.mjs","F:36693b0d8b":"prompts/modules/control-panel.md","F:373a946d5c":"examples/demo-app/tests/PaymentProcessor.test.js","F:373fee03a1":"design-system/src/components/WorkItemDrawer/index.ts","F:37f4a5c04e":"scripts/agent/route-action.mjs","F:3835919e8e":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","F:398655650f":"tests/ws-h-config.test.mjs","F:3a2345f153":"tests/run-gate-capped-unit.test.mjs","F:3a70dc66ea":"docs/adr/ADR-032-oss-adapter-boundary.md","F:3b382f95c0":"scripts/report.mjs","F:3b4065b679":".design-sync/previews/Checkbox.tsx","F:3b96b6dfed":"scripts/tripwire-check.mjs","F:3c479cac6e":"apps/control-panel/src/lib/confirm.tsx","F:3c53926ecd":"examples/demo-app/tests/CartService.test.js","F:3ce0fd77eb":".design-sync/previews/DecisionCard.tsx","F:3d505706cd":".design-sync/previews/Card.tsx","F:3d95ec2ed5":"tests/secret-patterns-unit.test.mjs","F:3dcdfa18c0":"docs/autonomy-plan.md","F:3dd926c4de":"design-system/src/components/QueueBoard/index.ts","F:3de9042953":"tests/packet-signing.test.mjs","F:3ea503e7c0":"tests/compliance-evidence.test.mjs","F:3f1216fc11":"scripts/lib/message-catalog/gate/check-licenses.mjs","F:3fe6b95e07":"design-system/src/components/HoverCard/index.ts","F:40887a152e":"docs/adr/ADR-041-gauntlet-replay.md","F:4096620673":"scripts/check-self-application.mjs","F:40d8f235fd":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","F:40e4f39b59":"tests/cli-dispatch.test.mjs","F:40eb542a82":"design-system/src/components/Card/Card.tsx","F:41623f0bcd":"prompts/modules/adoption.md","F:41f5ffe77a":".design-sync/previews/Drawer.tsx","F:4377343f4f":"tests/runner-env.test.mjs","F:4387a44284":".design-sync/previews/Modal.tsx","F:44a5987438":"tests/remediate.test.mjs","F:4637e1fecb":"tests/snapshot-incremental.test.mjs","F:46c40327ad":"design-system/src/components/Card/index.ts","F:4749cc43a0":"scripts/check-architecture-drift.mjs","F:48355ccf4d":"tests/self-application.test.mjs","F:492786871a":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","F:4a6129eacb":"apps/control-panel/src/app.css","F:4a7eaceb5c":"scripts/lib/detect-attribution.mjs","F:4aaece5252":"docs/adr/ADR-020-prompt-complexity-budget.md","F:4b7eb18a4b":"design-system/src/components/TierBadge/index.ts","F:4b91a9f65b":"scripts/lib/snapshot-redact.mjs","F:4c741a5b06":"tests/branch-name.test.mjs","F:4d08d5472f":"scripts/lib/message-catalog/advisory/learnings.mjs","F:4d5cfa3611":"docs/specs/ratchet-spec.md","F:4dabd020df":"tests/helpers/mock-github-server.mjs","F:4db1101024":"scripts/lib/policy-manifest.mjs","F:4ebb5aa8a0":"scripts/lib/learnings.mjs","F:4ebf08705b":"apps/control-panel/src/screens/SettingsScreen.tsx","F:4fad18c892":"tests/risk-surface-guard.test.mjs","F:4fd28fc2ff":"scripts/disarm.mjs","F:500dd805f6":"design-system/src/components/RoleBadge/index.ts","F:514a79560d":"docs/adr/ADR-028-portability.md","F:515a65a35b":"templates/.modonome/NETWORK.md","F:522efae76d":"scripts/gauntlet.mjs","F:52338ea290":"tests/openai-client.test.mjs","F:5253743405":"design-system/README.md","F:52caf3b287":"examples/demo-app/tests/CheckoutService.test.js","F:52ef6ad4a1":"tests/near-miss.test.mjs","F:5376e86470":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","F:545c0ccfeb":".design-sync/previews/ModeSwitcher.tsx","F:54a3c626d9":"tests/learnings.test.mjs","F:54c6928de9":"examples/demo-app/src/CheckoutService.js","F:54df44aadd":"apps/control-panel/server/learningsFormat.mjs","F:55673172df":"docs/specs/governed-autonomy-spec.md","F:55b3a4e2c0":"tests/migrate-lessons-rename.test.mjs","F:5621bc51b3":"agentproof/README.md","F:564b053598":"tests/check-architecture-drift.test.mjs","F:56a132aaca":"docs/adr/ADR-039-agent-capability-profiles.md","F:571aa2f3ae":"tests/fleet-ledger.test.mjs","F:57ca5f1716":"design-system/src/components/SafetyStrip/SafetyStrip.tsx","F:580d11b514":"tests/run-cycle-openai.test.mjs","F:583edef643":"design-system/src/components/DecisionCard/DecisionCard.tsx","F:594f505f11":"scripts/lib/lang-adapters/generic.mjs","F:5956278014":"tests/connect.test.mjs","F:596687118c":"design-system/src/components/Modal/index.ts","F:597cc7ae15":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","F:5994385869":"tests/maker-checker.test.mjs","F:599f5b2f28":"examples/demo-app/src/CartService.js","F:59b2499e4e":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","F:5a04bfa7a4":"docs/adr/ADR-030-embedding-safety.md","F:5a3543606b":"scripts/lib/attribution-fp-corpus.mjs","F:5b113a0914":"scripts/agent/action-queue.mjs","F:5b5b4ddcae":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","F:5d02ea0b02":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","F:5d2ce8ee7e":"checkerproof/README.md","F:5d52d97b8a":"scripts/lib/message-catalog/agent-run/queue.mjs","F:5daab9894d":"apps/control-panel/server/remediationView.mjs","F:5e207f73c7":".design-sync/previews/Input.tsx","F:5e450ff82c":"scripts/scaffold.mjs","F:5eff4122c0":"tests/config-key-parity.test.mjs","F:5f7910375b":"scripts/arm.mjs","F:5f88bf32ca":"design-system/src/components/LearningCard/index.ts","F:5fa0ad758b":"docs/compliance/eu-ai-act-classification.md","F:60548316f5":"tests/arming.test.mjs","F:61296e720c":"scripts/check-repo-hygiene.mjs","F:61486b1ec2":"docs/ops/add-control.md","F:61c2a29876":"tests/tripwire.test.mjs","F:627afb27fd":"docs/adr/ADR-031-markdown-governance.md","F:63351e350b":"design-system/src/components/Modal/Modal.tsx","F:63c1c23ccb":"design-system/src/components/ConfirmDialog/ConfirmDialog.tsx","F:64c5acf802":"docs/adr/ADR-002-shadow-mode.md","F:65193a9799":"scripts/validate-knowledge-packet.mjs","F:66264a042c":"design-system/src/components/HoverCard/HoverCard.tsx","F:6627655633":"apps/control-panel/src/screens/OverviewScreen.tsx","F:667ef091ca":"design-system/src/components/ActivationLadder/index.ts","F:669d2a51f4":"site/README.md","F:683343bdf9":"ROADMAP.md","F:686a544e0e":"tests/review-diff.test.mjs","F:68c4da7fe8":"scripts/lib/secret-patterns.mjs","F:68d874f280":"docs/adr/ADR-047-risk-surface-guard.md","F:698ea4b2e9":"tests/triggers.test.mjs","F:69ddfa4ff4":"agentproof/CONTRIBUTING.md","F:6a3a98df8c":"docs/audits/claims-audit-2026-07-01.md","F:6a5934a79d":"templates/.github/copilot-instructions.md","F:6a86908a3e":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","F:6bee8a97f3":"docs/launch/article-seeds.md","F:6bef3f93ab":".design-sync/previews/Icon.tsx","F:6bfa4389b5":"design-system/src/components/StatusPill/index.ts","F:6c0919b64e":".design-sync/previews/Tabs.tsx","F:6da7bd8294":"tests/gauntlet.test.mjs","F:6dd88cde1c":"docs/adr/ADR-004-arming-isolation-enforcement.md","F:6e0bd62fa3":"scripts/lib/branch-name.mjs","F:6e4723a45d":"docs/adapters.md","F:6e4b629d3c":"docs/adr/ADR-001-self-governance-pipeline.md","F:6ebdb617a8":"CLAUDE.md","F:6f247eb514":"scripts/dry-run-sweep.mjs","F:6f5b5f0bc4":"docs/adr/ADR-012-harness-prompt-integrity.md","F:6fdd929a92":"fixtures/portability/prompt-injection-host/docs/guide.md","F:7008a20b1c":".design-sync/previews/IdentityChip.tsx","F:704e42d42b":"tests/route-action.test.mjs","F:7054844360":"design-system/src/components/Checkbox/Checkbox.tsx","F:705a3ca9b3":"RELEASE-EVIDENCE.md","F:70d12a92c6":"design-system/src/components/ArmingStateBadge/index.ts","F:71f0bfb455":"design-system/src/components/Drawer/Drawer.tsx","F:7232ada2da":"scripts/preflight-embedding.mjs","F:72b7ab4c3e":"docs/adr/ADR-017-knowledge-network-packet-signing.md","F:7479c14986":"ADOPTION-GUIDE.md","F:750436d8c1":"docs/adr/ADR-036-policy-attestation.md","F:757a70680a":"apps/control-panel/src/screens/LearningsScreen.tsx","F:758ab56395":"tests/check-attribution-fp-corpus.test.mjs","F:75c1125713":"templates/.modonome/control-panel.md","F:763efdd51c":"design-system/src/components/Input/Input.tsx","F:76da13a8f7":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","F:76f802c3ce":".modonome/control-panel.md","F:778c33cdc0":"tests/dry-run.test.mjs","F:780c791407":"scripts/build-policy-attestation.mjs","F:7832db450f":".design-sync/previews/Toast.tsx","F:7944059823":"scripts/lib/token-estimate.mjs","F:79467a3153":".design-sync/previews/ErrorState.tsx","F:7983a5dd39":"docs/compliance/openssf-badge-evidence.md","F:79cec3a152":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","F:7a1f7d680b":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","F:7a43bf4ce5":".design-sync/previews/EmptyState.tsx","F:7b3e38c9a6":"scripts/sign-packet.mjs","F:7c8d518693":"design-system/src/lib/cx.ts","F:7ccad64380":"examples/python-service/app/orders.py","F:7d236c9aa6":"apps/control-panel/src/state/fixtures/host.ts","F:7fcbf6b32d":"fixtures/portability/schema-collision/README.md","F:815abebda1":"design-system/src/components/ConfirmDialog/index.ts","F:819f72edf6":"design-system/src/components/Select/Select.tsx","F:81c495717c":"design-system/src/components/Slider/Slider.tsx","F:828cf970bc":"tests/resolve-role.test.mjs","F:83d4d07afc":"docs/control-panel-modes.md","F:83ecac7524":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","F:849bc0a60f":"design-system/src/components/Table/index.ts","F:84a5c32a4c":".design-sync/previews/NumberField.tsx","F:851f776227":"scripts/agent/parse-checker-telemetry.mjs","F:85e076f56b":"design-system/src/components/Icon/index.ts","F:868321590c":"scripts/check-work-items.mjs","F:86838d35ac":"design-system/src/lib/format.ts","F:86fd2cf669":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","F:872221b1da":"scripts/agent/apply-patch.mjs","F:87c30bdb4c":"scripts/check-drift.mjs","F:88244532e4":"docs/vscode-workflow.md","F:885187507a":"apps/control-panel/src/main.tsx","F:88c38fbc0f":".modonome/DECISIONS.md","F:8930a72be2":".modonome/NETWORK.md","F:8972d37045":".design-sync/previews/IconButton.tsx","F:89aee72994":"apps/control-panel/src/state/fixtures/product.ts","F:89f25e2f3d":"design-system/src/components/Tabs/index.ts","F:8a10462927":"scripts/guard-ratchet.mjs","F:8a3433b070":"tests/report-impact.test.mjs","F:8a3dd6ccff":"apps/control-panel/server/modonomeReader.mjs","F:8a7591db62":"docs/audits/claims-audit-2026-06-25.md","F:8a9aff1529":"design-system/src/components/Tooltip/Tooltip.tsx","F:8aa9ba4dcb":"tests/transition-work-item-unit.test.mjs","F:8abf9e432a":"scripts/sync-site-data.mjs","F:8b122c449e":"design-system/src/components/Button/Button.tsx","F:8b2f3dbcba":"tests/control-panel-writer-nested.test.mjs","F:8b5a1f94c4":"scripts/agent/providers.mjs","F:8b7ee49cdd":"scripts/check-trust-boundary.mjs","F:8b8d3c46b3":"scripts/check-state-machine-acyclic.mjs","F:8bb1b57470":"examples/demo-app/src/index.js","F:8c2e08ed12":"docs/adr/ADR-008-trusted-author-allowlist.md","F:8c6234a8cb":"design-system/src/components/GatePanel/GatePanel.tsx","F:8d2cb93236":"scripts/agent/openai-client.mjs","F:8f62475ebe":"prompts/modules/roles.md","F:8f6366fd8e":"ARCHITECTURE.md","F:8fe56e5618":"tests/chaos.test.mjs","F:8ffb11f281":"scripts/lib/remediate.mjs","F:9040e0c030":"design-system/src/components/States/index.ts","F:90cbb2cf6a":"challenge/judge.mjs","F:90e1fd2fd9":"scripts/hygiene.mjs","F:90f0999521":"fixtures/portability/prompt-injection-host/src/main.js","F:90fc20ddd8":"design-system/src/components/MdnRoot/MdnRoot.tsx","F:91a7efa0ba":"docs/workflow-fixes.md","F:91e24dcac0":"scripts/lib/message-catalog/advisory/build-prompt.mjs","F:9204ee9f08":"design-system/src/components/MetricTile/index.ts","F:92d6903b5f":"scripts/check-decisions-authority.mjs","F:92dde817ee":"tests/ratchet-attestation.test.mjs","F:930bc5297d":"docs/launch/show-hn.md","F:932d33be00":"scripts/validate-config.mjs","F:933d506be9":"tests/policy-manifest.test.mjs","F:9344d335a6":"scripts/build-release-evidence.mjs","F:93f0f5d3de":"examples/node-typescript/src/checkout.ts","F:94050e680d":"checkerproof/runner.mjs","F:940d5f4399":"tests/arm-disarm.test.mjs","F:9427d264e6":"scripts/check-edit-set-compliance.mjs","F:9444435647":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","F:94b941cbd6":".design-sync/NOTES.md","F:94c9bc6065":"tests/schedule-trigger-schema.test.mjs","F:956332d4b5":"design-system/src/components/LeaseTable/LeaseTable.tsx","F:95d4304133":"apps/control-panel/src/state/adapter.ts","F:95e51a604d":"docs/compliance/compliance.md","F:9616513cb6":"scripts/lib/message-catalog/agent-run/disarm.mjs","F:964f89b6cc":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","F:9666ca7f0d":"examples/demo-app/WALKTHROUGH.md","F:973aaa9d86":".design-sync/previews/RoleBadge.tsx","F:973aca5f3e":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","F:97fc86d7a3":"docs/adr/ADR-045-scope-focus.md","F:9803feef4a":"scripts/lib/message-catalog/agent-run/openai-client.mjs","F:98529ba7ea":"scripts/lib/capability-flags.mjs","F:99251bc045":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","F:9a28b4e90e":"prompts/modules/state-machine.md","F:9a32917e56":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","F:9a3e8ed7d2":"scripts/lib/near-miss.mjs","F:9a72895a04":"scripts/lib/file-classifiers.mjs","F:9b01a5cd4d":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","F:9b3f18856e":"apps/control-panel/src/screens/WorkQueueScreen.tsx","F:9bb94e1b40":"tests/hygiene.test.mjs","F:9c9edea0c9":".design-sync/previews/AuditTimeline.tsx","F:9cbe9238f8":"tests/e2e.test.mjs","F:9d53df2290":"docs/ops/add-gate.md","F:9d69a6b766":"scripts/migrate-config.mjs","F:9dbf431d3e":"scripts/lib/message-catalog/gate/check-style.mjs","F:9dc816763b":"tests/agentproof-registry.test.mjs","F:9deac13db0":"design-system/src/components/ProgressMeter/ProgressMeter.tsx","F:9f0fb6ed8b":"design-system/src/components/MetricTile/MetricTile.tsx","F:9f36b3ef29":"tests/snapshot-cli.test.mjs","F:9f6dd5e5a3":"tests/queue.test.mjs","F:a0068c8817":".design-sync/previews/Toggle.tsx","F:a0abaf6a25":".design-sync/previews/ProgressMeter.tsx","F:a0d489df6d":"scripts/snapshot.mjs","F:a104667369":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","F:a1411f1423":"fixtures/negative-controls/app-syntax-error.js","F:a167609a41":"tests/mcp-compliance.test.mjs","F:a1baa3f01d":"scripts/lib/work-item-staleness.mjs","F:a37ab631dc":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","F:a384388adc":"docs/agents.md","F:a402d2f9ed":"design-system/src/components/Table/Table.tsx","F:a42da90970":"design-system/src/components/ModeSwitcher/index.ts","F:a52954a167":"apps/control-panel/vite.config.ts","F:a54ff182c7":"AGENTS.md","F:a5822fdd03":"scripts/lib/message-catalog/agent-run/release.mjs","F:a6d2bd3021":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","F:a70145dc77":"docs/adr/ADR-024-capability-promotion-gate.md","F:a7ce0f6452":"scripts/install-hooks.mjs","F:a862b1c3b6":"design-system/src/components/ConceptTile/index.ts","F:a8c32b8f15":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","F:a8cfe45d27":"design-system/src/components/IconButton/IconButton.tsx","F:aa27d254da":"scripts/lib/message-catalog/agent-run/arm.mjs","F:aa77f227a6":"scripts/agent/tool-loop-adapter.mjs","F:ab334f34df":"design-system/src/components/Toast/Toast.tsx","F:ab5077147a":"scripts/mcp-server.mjs","F:ac11b5379f":"scripts/promote-learning.mjs","F:acc3f6b466":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","F:acd892d4a0":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","F:ace169adc4":"scripts/check-evidence-secrets.mjs","F:add7add561":"design-system/src/index.ts","F:ae227d695d":"examples/python-service/README.md","F:ae46bbab81":"scripts/lib/repo-detect.mjs","F:aea3c05bca":"scripts/agent/triggers.mjs","F:aecebb26be":"tests/remediation-view.test.mjs","F:aef9cf1e27":"site/index.html","F:af6de66499":"scripts/agentproof-attestation.mjs","F:b014028f57":"scripts/lib/run-gate-capped.mjs","F:b1598d4449":"tests/snapshot-security.test.mjs","F:b16afebae9":"scripts/check-agentproof-registry.mjs","F:b2496e8029":".github/pull_request_template.md","F:b25dcdad19":"scripts/lib/message-catalog/gate/check-md-governance.mjs","F:b28f13b600":"tests/performance.test.mjs","F:b2efd505ef":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","F:b335630551":"README.md","F:b39c90fbe6":"design-system/src/components/ProgressMeter/index.ts","F:b3a2ad52bb":"design-system/src/components/ModeSwitcher/ModeSwitcher.tsx","F:b4279e0af6":"docs/adr/ADR-023-config-schema-migration-contract.md","F:b4f4e16ca1":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","F:b502a0fe75":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","F:b51ccbe79a":"design-system/src/components/WorkItemCard/index.ts","F:b5ae6ee133":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","F:b5f5700e4d":"docs/adr/ADR-033-repo-snapshot.md","F:b60c6a93e9":"GOVERNANCE.md","F:b677f38b10":"design-system/src/components/Checkbox/index.ts","F:b70824b13e":"tests/dependency.test.mjs","F:b806994000":"scripts/queue.mjs","F:b81cf7567f":"docs/guidelines/markdown-governance.md","F:b9d806ba4d":"examples/demo-app/src/NotificationService.js","F:ba97282cf5":"tests/provenance.test.mjs","F:baf7641a01":"tests/tick.test.mjs","F:bb0ec91260":"scripts/check-evidence-integrity.mjs","F:bb2d98fca6":"design-system/src/components/IdentityChip/index.ts","F:bb6a874d58":".design-sync/previews/GatePanel.tsx","F:bbb6476d71":"tests/ws-e-negative-controls.test.mjs","F:bcd1c88877":"docs/research/knowledge-network-architecture.md","F:bd02b28f17":"examples/demo-app/src/InventoryService.js","F:bf3dae9563":"tests/sweep-to-work-item.test.mjs","F:bf4e255c6e":"scripts/lib/message-catalog/gate/validate-work-item.mjs","F:c0714e4bf0":"prompts/modonome.bundle.md","F:c077d16aeb":"docs/adr/ADR-016-knowledge-network-packet-identity.md","F:c0e80ca327":"design-system/src/components/Sparkline/Sparkline.tsx","F:c14dd92bce":"design-system/src/components/Button/index.ts","F:c1a96ec6e2":"scripts/check-work-item-staleness.mjs","F:c1cc304e56":"docs/versioning.md","F:c1ef63106a":"docs/risk-surface-guard.md","F:c2ff3fda15":"design-system/src/components/AppShell/index.ts","F:c324fab0cc":"prompts/modules/snapshot.md","F:c3588d683e":"docs/adr/ADR-035-metadata-remediator.md","F:c3b2fcfb69":"docs/agent-org.md","F:c3cd2dc5c9":"tests/messages.test.mjs","F:c412f056b4":"design-system/src/components/SafetyStrip/index.ts","F:c4395c3023":"scripts/build-prompt.mjs","F:c54a514860":"docs/ops/work-item.md","F:c5938c33fd":"scripts/check-promotion-readiness.mjs","F:c598a2d684":"scripts/lib/lang-adapters/java.mjs","F:c5da07872e":"design-system/src/components/Sparkline/index.ts","F:c5fe610b02":"SUPPORT.md","F:c63a71fb57":".design-sync/previews/CostPanel.tsx","F:c64c042051":"design-system/src/tokens/tokens.ts","F:c6bd51a324":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","F:c72e6949b9":"fixtures/adapters/reference-adapter.mjs","F:c7326495ec":"docs/adr/ADR-043-terraform-module.md","F:c7423b85cf":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","F:c9493b5275":"scripts/audit-learnings.mjs","F:c97cb4d123":"OWNER-ACTIONS.md","F:c98f6b55e3":"prompts/modules/network.md","F:ca05b6ba1c":"tests/terraform-module-shape.test.mjs","F:ca0833ac73":"scripts/check-style.mjs","F:ca13fe2a5b":".design-sync/previews/Sparkline.tsx","F:cac320dd97":".modonome/STATUS.md","F:cacaab56e1":"tests/adapter-verify.test.mjs","F:cb3c5f7715":"scripts/lib/work-item-validate.mjs","F:cb66095cb4":"scripts/lib/snapshot-walk.mjs","F:cb8c4aadaf":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","F:cba8f1d03b":"tests/install-hooks.test.mjs","F:cbaff08a46":"docs/adr/ADR-015-knowledge-network-catalog.md","F:cc361bd05a":"scripts/check-licenses.mjs","F:cc65dd1342":"tests/embedding-safety.test.mjs","F:ccb72910b3":"scripts/lib/message-catalog/gate/check-drift.mjs","F:cdbe769ed3":"scripts/lib/github-api.mjs","F:ce1173e176":"design-system/src/components/CostPanel/CostPanel.tsx","F:ce41983a53":"tests/researcher-role.test.mjs","F:cecdb96382":"scripts/lib/lang-adapters/tree-sitter.mjs","F:cede5f9fa2":"tests/ratchet-format.test.mjs","F:cf2908e0f2":"agentproof/CONFORMANCE-INTERFACE.md","F:d01156348d":"design-system/src/components/Drawer/index.ts","F:d05701e1ab":"design-system/src/components/GatePanel/index.ts","F:d0d703a4e0":"design-system/src/components/HelpHint/index.ts","F:d0da1cab80":"tests/control-panel-ownership.test.mjs","F:d135cffeaa":"scripts/transition-work-item.mjs","F:d1b898f17f":"examples/demo-app/tests/NotificationService.test.js","F:d20e4b6b91":"design-system/src/components/Carousel/Carousel.tsx","F:d288a78085":"scripts/lib/message-catalog/advisory/sign-packet.mjs","F:d2b14b5b34":"docs/adr/ADR-011-ci-env-var-trust-scope.md","F:d328f97d94":"scripts/lib/message-catalog/advisory/hygiene.mjs","F:d480e40c97":"scripts/lib/config-validate.mjs","F:d4ead22b1b":"docs/adr/ADR-005-run-observability.md","F:d52b08ebeb":"examples/node-typescript/README.md","F:d590ca62b9":".design-sync/previews/PermissionDeniedState.tsx","F:d5b496b125":"design-system/src/components/HelpHint/HelpHint.tsx","F:d6401dd73e":"scripts/connect.mjs","F:d66f93d7b7":"docs/adr/ADR-029-adversarial-test-design.md","F:d744931e6a":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","F:d754b827f4":"tests/render-prompt-unit.test.mjs","F:d783999e16":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","F:d7d4e8d2a9":"tests/run-log.test.mjs","F:d8e37c4449":"scripts/lib/message-catalog/advisory/migrate-config.mjs","F:d8fb8339ce":"design-system/src/components/ProtectedPathRow/ProtectedPathRow.tsx","F:da42f69531":"design-system/src/components/TierBadge/TierBadge.tsx","F:da9133a29d":"scripts/lib/message-catalog/agent-run/action-queue.mjs","F:db651caf76":"design-system/src/components/NumberField/NumberField.tsx","F:dbb9c92ca1":"scripts/lib/snapshot-core.mjs","F:dc00dfe394":"docs/adr/ADR-006-checker-independence.md","F:dc0cc6d551":"docs/adr/ADR-025-self-application-conformance.md","F:dca643f34b":".design-sync/previews/Tooltip.tsx","F:dd1be2cd7b":".design-sync/previews/QueueBoard.tsx","F:dd58ae3791":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","F:ddd82fc886":"tests/promoted-learnings.test.mjs","F:ddeb486c49":"scripts/agent/run-cycle.mjs","F:de188c1b79":"scripts/lib/message-catalog/gate/check-self-application.mjs","F:de4538fe53":"docs/adr/ADR-010-knowledge-packet-trust.md","F:de5ebbf586":"tests/scaffold-adoption.test.mjs","F:de988f64d4":"design-system/src/components/AuditTimeline/index.ts","F:deab644e60":"design-system/src/components/Icon/Icon.tsx","F:df4b55ecef":"tests/check-gate-dag.test.mjs","F:e00aec45ce":"tests/control-panel-work-item-writer.test.mjs","F:e053923067":"tests/run-cycle-cli-permissions.test.mjs","F:e11f907cba":"scripts/score-proposals.mjs","F:e146bc5acb":".design-sync/conventions.md","F:e19aab09cb":".design-sync/previews/HelpHint.tsx","F:e2025a4e0c":"scripts/lib/message-catalog/agent-run/route-action.mjs","F:e27748d089":"templates/.modonome/STATUS.md","F:e2f1b5ac07":"tests/role-registry.test.mjs","F:e359adb110":"tests/check-style-lexicon.test.mjs","F:e406ceab72":"apps/control-panel/src/lib/messages.ts","F:e40ce1af48":"apps/control-panel/src/screens/ArmingScreen.tsx","F:e4e18d0b80":"tests/agent-capability-profile.test.mjs","F:e4ff19bbe2":"scripts/lib/commit-identity.mjs","F:e540f7b669":"tests/promote-learning.test.mjs","F:e5e519f441":".design-sync/previews/MetricTile.tsx","F:e5e9ec402f":"docs/LEXICON.md","F:e6677dcd37":"scripts/lib/message-catalog/gate/check-work-items.mjs","F:e7380d1444":"scripts/check-regex-safety.mjs","F:e844676be4":"docs/adr/ADR-013-config-downgrade-and-migration.md","F:e8676a18b7":"scripts/check-attribution-fp-corpus.mjs","F:e9479e1a3b":"scripts/ratchet-attestation.mjs","F:e948251d2b":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","F:e9701967b3":"docs/adr/ADR-046-ship-the-deferred-features.md","F:e9f1cc1e5d":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","F:ea9e0801d5":"design-system/src/components/NumberField/index.ts","F:eb14a0bdeb":"tests/helpers/mock-openai-server.mjs","F:ec3aa9930a":"scripts/lib/message-catalog/gate/validate-config.mjs","F:ec52ca3820":"apps/control-panel/src/state/liveClient.ts","F:eca12c0a30":"CONTRIBUTING.md","F:ed9c47feb2":"tests/tool-loop-adapter.test.mjs","F:edb11415f0":"scripts/run-gate-pipeline.mjs","F:edf42fb1af":"scripts/release.mjs","F:ee02e563c6":"tests/providers.test.mjs","F:ee21289902":"tests/commit-identity.test.mjs","F:eecc78e7e8":".design-sync/previews/LoadingState.tsx","F:efa02030ca":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","F:efd369884e":"docs/audits/claims-audit-2026-07-08.md","F:f00c212d41":"design-system/src/components/Tooltip/index.ts","F:f07f8ebca9":"scripts/validate-work-item.mjs","F:f0fbd8716f":".design-sync/previews/WorkItemDrawer.tsx","F:f13b76e6fd":"design-system/src/components/Toggle/index.ts","F:f1f2b57403":"docs/ops/runner-model-config.md","F:f238d164c9":"tests/ratchet.test.mjs","F:f41378fed0":"scripts/lib/message-catalog/panel/control-panel.mjs","F:f51cba9beb":"scripts/lib/graph.mjs","F:f57cf1a212":"design-system/src/components/CostPanel/index.ts","F:f5d313e9f1":"scripts/adapter-verify.mjs","F:f6abfc128a":"design-system/src/components/Slider/index.ts","F:f6e100ab45":".design-sync/previews/Button.tsx","F:f6ed156e4b":"SECURITY.md","F:f8168b956f":"examples/demo-app/tests/InventoryService.test.js","F:f83d1100e9":"apps/control-panel/src/content/concepts.ts","F:f8609bae0b":"design-system/src/components/QueueBoard/QueueBoard.tsx","F:f90930c3c3":"bin/modonome.mjs","F:f921eecad7":"tests/decisions-authority.test.mjs","F:f942e88a8f":"design-system/src/components/IdentityChip/IdentityChip.tsx","F:f9c98a8642":".design-sync/previews/WorkItemCard.tsx","F:fa49930755":"scripts/assert-governed-change.mjs","F:fa851dabe1":"tests/break-the-ratchet-judge.test.mjs","F:fadcf390da":"tests/metrics.test.mjs","F:fb5935daaf":"design-system/src/components/ProtectedPathRow/index.ts","F:fc21812307":"scripts/check-gate-dag.mjs","F:fc43ea4859":"design-system/src/components/IconButton/index.ts","F:fc5d887ff6":"scripts/check-checker-engagement.mjs","F:fcc5f4b906":"examples/demo-app/README.md","F:fd08562f92":"scripts/check-md-governance.mjs","F:fd4b8473fa":"apps/control-panel/server/ownership.mjs","F:fd660a117b":"scripts/agent/render-prompt.mjs","F:fd6ebce602":"tests/portability.test.mjs","F:fdaf1308e4":"fixtures/evidence-tampered.md","F:fe5ec971f8":".design-sync/previews/TierBadge.tsx","F:ff2c4a08a4":"scripts/lib/git-scope.mjs","F:ff3aef693f":"examples/demo-app/src/PaymentProcessor.js","F:ff644711e7":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","F:ffcad313b6":"docs/adr/ADR-044-agent-org-structure.md","F:ffdbe3a1e7":"CODE_OF_CONDUCT.md","F:ffe5c1269b":"scripts/lib/lang-adapters/go.mjs"},"symbols":{"S:002c9f1daa":{"line":25,"name":"slug","path_id":"F:6f247eb514"},"S:003e6c53c4":{"line":56,"name":"info","path_id":"F:2d4c555ba1"},"S:0044d1a126":{"line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9"},"S:00452332a2":{"line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a"},"S:005abb5200":{"line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0"},"S:0064b473e6":{"line":14,"name":"tmpQueue","path_id":"F:195e9217ca"},"S:00c956ccf3":{"line":6,"name":"ToastProps","path_id":"F:ab334f34df"},"S:00db09c5a8":{"line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792"},"S:00f913bfd8":{"line":11,"name":"tf","path_id":"F:ca05b6ba1c"},"S:0126079093":{"line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15"},"S:015c572711":{"line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca"},"S:01b4ff4d73":{"line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f"},"S:0255163ba3":{"line":229,"name":"parseArgs","path_id":"F:128b647d9a"},"S:02759ae11a":{"line":955,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c"},"S:028a668f8e":{"line":34,"name":"writeItem","path_id":"F:baf7641a01"},"S:02e2e85572":{"line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86"},"S:02e9b6beea":{"line":32,"name":"parseMetrics","path_id":"F:3b382f95c0"},"S:03145d5ec3":{"line":519,"name":"CHECKS","path_id":"F:7232ada2da"},"S:039c3576c4":{"line":23,"name":"modelFamily","path_id":"F:cb3c5f7715"},"S:03b000e190":{"line":153,"name":"verifySiteData","path_id":"F:8abf9e432a"},"S:03b490fb81":{"line":7,"name":"clean","path_id":"F:c598a2d684"},"S:041a6b87af":{"line":14,"name":"tmp","path_id":"F:55b3a4e2c0"},"S:0427f639c4":{"line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca"},"S:04f5060b44":{"line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914"},"S:050ec6eff9":{"line":26,"name":"OverviewScreen","path_id":"F:6627655633"},"S:0518e5f603":{"line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94"},"S:05a5299b28":{"line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae"},"S:05af4c96a8":{"line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0"},"S:05e617fb30":{"line":6,"name":"ButtonSize","path_id":"F:8b122c449e"},"S:05fa5077ed":{"line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1"},"S:05fcfe1c5b":{"line":5,"name":"apply_discount","path_id":"F:7ccad64380"},"S:064519e650":{"line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff"},"S:06700c1faf":{"line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927"},"S:069ca5f436":{"line":2,"name":"MESSAGES","path_id":"F:597cc7ae15"},"S:06c0c85d92":{"line":20,"name":"tmp","path_id":"F:5956278014"},"S:0713a27a1f":{"line":51,"name":"resolveRole","path_id":"F:304ce7b89d"},"S:073124e2d8":{"line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed"},"S:074c2b3c02":{"line":28,"name":"extractDiff","path_id":"F:872221b1da"},"S:075e86ea7c":{"line":48,"name":"topoSort","path_id":"F:f51cba9beb"},"S:0768a4cf0f":{"line":13,"name":"matchesType","path_id":"F:34cb2b6c48"},"S:07a58ff928":{"line":14,"name":"rpc","path_id":"F:a167609a41"},"S:086ff230f0":{"line":417,"name":"main","path_id":"F:522efae76d"},"S:08df8d7472":{"line":70,"name":"runPreflight","path_id":"F:0103cf3d56"},"S:0906a625c3":{"line":8,"name":"GateRow","path_id":"F:8c6234a8cb"},"S:098af8d3e8":{"line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d"},"S:099c6ccde0":{"line":132,"name":"detectText","path_id":"F:4a7eaceb5c"},"S:09a834e684":{"line":14,"name":"makeRepo","path_id":"F:3ea503e7c0"},"S:0a11409d06":{"line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53"},"S:0a5fed1978":{"line":59,"name":"loadFixtures","path_id":"F:23917c6197"},"S:0a677c2e37":{"line":19,"name":"msg","path_id":"F:5f7910375b"},"S:0a6b98d712":{"line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3"},"S:0a9885ca9d":{"line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb"},"S:0a9b63cb4b":{"line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee"},"S:0ab594146c":{"line":33,"name":"runScript","path_id":"F:0391f3b249"},"S:0ac24bec51":{"line":76,"name":"auditCoherence","path_id":"F:1a19f02364"},"S:0aee45c73e":{"line":2,"name":"MESSAGES","path_id":"F:86fd2cf669"},"S:0af608ade0":{"line":1,"name":"MESSAGES","path_id":"F:0c731e3460"},"S:0b0e197734":{"line":35,"name":"Select","path_id":"F:819f72edf6"},"S:0b25fbc8fe":{"line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7"},"S:0b453b55b9":{"line":25,"name":"Checkbox","path_id":"F:7054844360"},"S:0b4b18fb8a":{"line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27"},"S:0b56ac32a5":{"line":1,"name":"MESSAGES","path_id":"F:179564da6f"},"S:0b70780ca5":{"line":14,"name":"TooltipProps","path_id":"F:8a9aff1529"},"S:0b7b39d873":{"line":49,"name":"extractRawValue","path_id":"F:1575110130"},"S:0b8ff85c9c":{"line":666,"name":"classifyCode","path_id":"F:8a10462927"},"S:0ba2f17fcf":{"line":30,"name":"rpad","path_id":"F:3b382f95c0"},"S:0bae1275b2":{"line":1,"name":"Card","path_id":"F:93f0f5d3de"},"S:0be1a2cd09":{"line":244,"name":"diffCapabilities","path_id":"F:780c791407"},"S:0bf3d508cb":{"line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e"},"S:0c7a33bcbe":{"line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb"},"S:0c9de67184":{"line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2"},"S:0ca7d7cb9c":{"line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452"},"S:0cfad6d2cf":{"line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c"},"S:0d46d60d35":{"line":63,"name":"GatePanel","path_id":"F:8c6234a8cb"},"S:0d7b0da50a":{"line":24,"name":"resolveImport","path_id":"F:015261eab0"},"S:0dd1d1c53a":{"line":529,"name":"runPreflight","path_id":"F:7232ada2da"},"S:0e6240f5b7":{"line":70,"name":"writeGate","path_id":"F:08b7435c86"},"S:0ed808bd36":{"line":132,"name":"insertAfterFirst","path_id":"F:522efae76d"},"S:0eec918c49":{"line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a"},"S:0f004d17fa":{"line":24,"name":"git","path_id":"F:580d11b514"},"S:0f77533ed4":{"line":23,"name":"run","path_id":"F:6da7bd8294"},"S:107eb40a1d":{"line":18,"name":"makeRepo","path_id":"F:9f36b3ef29"},"S:118e66be10":{"line":2,"name":"flagValue","path_id":"F:2d93cea2d4"},"S:120830c7dd":{"line":91,"name":"maybeSign","path_id":"F:780c791407"},"S:126357e421":{"line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5"},"S:1274d7cf4b":{"line":3,"name":"Tier","path_id":"F:da42f69531"},"S:12c1e0f104":{"line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed"},"S:130202d7f0":{"line":3,"name":"Queue","path_id":"F:7a43bf4ce5"},"S:135fde5dfb":{"line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb"},"S:13a8db3ab6":{"line":11,"name":"gitDiff","path_id":"F:fa49930755"},"S:13f1b3c9c0":{"line":93,"name":"CostPanel","path_id":"F:ce1173e176"},"S:13fa2b4863":{"line":20,"name":"detectStack","path_id":"F:ae46bbab81"},"S:13fdf696a0":{"line":19,"name":"run","path_id":"F:9f6dd5e5a3"},"S:145586915d":{"line":5,"name":"DrawerProps","path_id":"F:71f0bfb455"},"S:145bc035b8":{"line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0"},"S:14850052c8":{"line":6,"name":"TabItem","path_id":"F:1db369d970"},"S:14b57397ed":{"line":14,"name":"Budget","path_id":"F:84a5c32a4c"},"S:14c08c7efc":{"line":20,"name":"ConceptTile","path_id":"F:1a137480ae"},"S:14cb0e8cbb":{"line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e"},"S:14ef0a45e8":{"line":1,"name":"MESSAGES","path_id":"F:1127892e72"},"S:15286656f4":{"line":127,"name":"localEnv","path_id":"F:ddeb486c49"},"S:153c85af26":{"line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a"},"S:154918aa5a":{"line":32,"name":"isBinary","path_id":"F:dbb9c92ca1"},"S:1562160a7c":{"line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c"},"S:15b3a95566":{"line":100,"name":"findBlock","path_id":"F:22566cb46e"},"S:16267c791e":{"line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715"},"S:16975f80af":{"line":18,"name":"QueueBoard","path_id":"F:f8609bae0b"},"S:16a3c28802":{"line":9,"name":"charge","path_id":"F:93f0f5d3de"},"S:16d8c02a8e":{"line":372,"name":"send","path_id":"F:ab5077147a"},"S:170d5cf4ef":{"line":18,"name":"tmp","path_id":"F:e359adb110"},"S:170dcaab55":{"line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6"},"S:172b08e199":{"line":118,"name":"updateRepoData","path_id":"F:8abf9e432a"},"S:17945c542e":{"line":393,"name":"countBareAsserts","path_id":"F:8a10462927"},"S:17985dad90":{"line":245,"name":"execSync","path_id":"F:61296e720c"},"S:17bc177192":{"line":251,"name":"formatHuman","path_id":"F:116adfb9f8"},"S:17c9a6d377":{"line":45,"name":"stripCharClasses","path_id":"F:e7380d1444"},"S:183f710a08":{"line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f"},"S:1856df868b":{"line":163,"name":"writeRunLog","path_id":"F:5e450ff82c"},"S:18c9f379c0":{"line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766"},"S:18da5ae581":{"line":13,"name":"listMjs","path_id":"F:b70824b13e"},"S:18fce60dc6":{"line":32,"name":"saveConfig","path_id":"F:ec52ca3820"},"S:18ff6b9c89":{"line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a"},"S:19226d4902":{"line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5"},"S:194e854c70":{"line":156,"name":"complete","path_id":"F:5b113a0914"},"S:19aab1f03f":{"line":1,"name":"MESSAGES","path_id":"F:d288a78085"},"S:19e5ddb185":{"line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b"},"S:19ecd8efbf":{"line":134,"name":"main","path_id":"F:6f247eb514"},"S:1ae77ae47b":{"line":7,"name":"CardProps","path_id":"F:40eb542a82"},"S:1b14fa60f7":{"line":92,"name":"git","path_id":"F:18f569225a"},"S:1b794f5743":{"line":21,"name":"getDiff","path_id":"F:9427d264e6"},"S:1b85e41391":{"line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7"},"S:1ba042e0cf":{"line":565,"name":"main","path_id":"F:7232ada2da"},"S:1bafda617f":{"line":15,"name":"docBelow","path_id":"F:3213d03b72"},"S:1be3814c77":{"line":24,"name":"listWorkflows","path_id":"F:2e327963ed"},"S:1beab0dc0c":{"line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b"},"S:1c5d801590":{"line":70,"name":"patchYamlText","path_id":"F:22566cb46e"},"S:1c6f22237b":{"line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04"},"S:1c7919b4ea":{"line":40,"name":"signMessage","path_id":"F:0cacf66a3b"},"S:1c82a73570":{"line":19,"name":"tmp","path_id":"F:40e4f39b59"},"S:1d0f5bc129":{"line":708,"name":"emitSarif","path_id":"F:8a10462927"},"S:1d4c8df8c0":{"line":19,"name":"TableProps","path_id":"F:a402d2f9ed"},"S:1d6822da4e":{"line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49"},"S:1dc2770ace":{"line":1,"name":"MESSAGES","path_id":"F:9a32917e56"},"S:1e5dabea9c":{"line":43,"name":"hasHeading","path_id":"F:c5938c33fd"},"S:1e6749f65a":{"line":31,"name":"run","path_id":"F:02a5f8fc55"},"S:1e67af68fc":{"line":52,"name":"Section","path_id":"F:08064e0c53"},"S:1ebb8bc1af":{"line":122,"name":"git","path_id":"F:f921eecad7"},"S:1ef7d0ea53":{"line":3,"name":"CartService","path_id":"F:599f5b2f28"},"S:1f19b07227":{"line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb"},"S:1fe8548dac":{"line":17,"name":"fixture","path_id":"F:8a3433b070"},"S:2064ebd573":{"line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0"},"S:208ce5b839":{"line":65,"name":"countWorkItems","path_id":"F:8abf9e432a"},"S:209a48ca7f":{"line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed"},"S:2102bdee1c":{"line":49,"name":"readRecord","path_id":"F:5b113a0914"},"S:210b0c6999":{"line":26,"name":"signedBytes","path_id":"F:245efb551c"},"S:211cdf5f9d":{"line":17,"name":"readItem","path_id":"F:e00aec45ce"},"S:214691c25d":{"line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3"},"S:21635cbeda":{"line":19,"name":"adapter","path_id":"F:594f505f11"},"S:21a4872ace":{"line":8,"name":"Blocked","path_id":"F:7832db450f"},"S:2216bfd660":{"line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c"},"S:225c7a7d84":{"line":21,"name":"Open","path_id":"F:3ce0fd77eb"},"S:22ac6bb569":{"line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da"},"S:22e3bba95f":{"line":26,"name":"snapshotContext","path_id":"F:fd660a117b"},"S:2305f3725a":{"line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed"},"S:2306976428":{"line":376,"name":"errorResponse","path_id":"F:ab5077147a"},"S:2358b05e12":{"line":680,"name":"fileOf","path_id":"F:8a10462927"},"S:236237bc1b":{"line":56,"name":"unquote","path_id":"F:119e3c0fce"},"S:237d74cadf":{"line":21,"name":"parseScalar","path_id":"F:1575110130"},"S:23afcde4ab":{"line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff"},"S:23fbaa24ea":{"line":13,"name":"git","path_id":"F:ff2c4a08a4"},"S:24407449b3":{"line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514"},"S:2441bf3938":{"line":17,"name":"run","path_id":"F:61c2a29876"},"S:247c34d405":{"line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3"},"S:2484ffb006":{"line":142,"name":"printPlan","path_id":"F:1e5ef6ba70"},"S:24b854ce78":{"line":36,"name":"BrandMark","path_id":"F:268769c4a6"},"S:24c6a3dc6c":{"line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92"},"S:24f0960624":{"line":29,"name":"runRemediate","path_id":"F:44a5987438"},"S:25117f5b1d":{"line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a"},"S:25139ebf6c":{"line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d"},"S:257f8f1622":{"line":1,"name":"MESSAGES","path_id":"F:973aca5f3e"},"S:25a03d4ee2":{"line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2"},"S:262e039096":{"line":68,"name":"extractSection","path_id":"F:4db1101024"},"S:2681abe2e5":{"line":60,"name":"installHooks","path_id":"F:a7ce0f6452"},"S:26df582c22":{"line":57,"name":"buildRow","path_id":"F:128b647d9a"},"S:26ee7911e3":{"line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae"},"S:27005d8f20":{"line":27,"name":"buildBundle","path_id":"F:c4395c3023"},"S:276edd396a":{"line":45,"name":"postJson","path_id":"F:c72e6949b9"},"S:28578fa81a":{"line":10,"name":"Large","path_id":"F:28b7af3c53"},"S:28d1266e44":{"line":24,"name":"adapter","path_id":"F:ffe5c1269b"},"S:29574da2e9":{"line":7,"name":"scenario","path_id":"F:c7423b85cf"},"S:298b204d13":{"line":22,"name":"runPreflight","path_id":"F:cc65dd1342"},"S:299c43d83e":{"line":40,"name":"stripQuotes","path_id":"F:1575110130"},"S:29fd3ef66c":{"line":41,"name":"writeAtomic","path_id":"F:5b113a0914"},"S:2a04172292":{"line":4,"name":"HostSelected","path_id":"F:545c0ccfeb"},"S:2a28972ca4":{"line":1,"name":"MESSAGES","path_id":"F:3835919e8e"},"S:2a5511d42c":{"line":125,"name":"gitDelta","path_id":"F:a0d489df6d"},"S:2b5847c683":{"line":61,"name":"renderPrompt","path_id":"F:fd660a117b"},"S:2b6631cd33":{"line":1,"name":"MESSAGES","path_id":"F:91e24dcac0"},"S:2bba65c029":{"line":1,"name":"MESSAGES","path_id":"F:99251bc045"},"S:2bd0a26c48":{"line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb"},"S:2bd83b1706":{"line":1,"name":"MESSAGES","path_id":"F:de188c1b79"},"S:2ca5ab6d7f":{"line":18,"name":"previewText","path_id":"F:4ebf08705b"},"S:2ca7aeeeaf":{"line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342"},"S:2cd4d9571d":{"line":189,"name":"withTempFile","path_id":"F:137056535b"},"S:2cd9cbf595":{"line":4,"name":"ToastTone","path_id":"F:ab334f34df"},"S:2ce7a5bbe7":{"line":146,"name":"positional","path_id":"F:a0d489df6d"},"S:2d1eeb5346":{"line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a"},"S:2d24ebcbdf":{"line":143,"name":"renderReport","path_id":"F:2d6ef08990"},"S:2d2b3ccfa2":{"line":318,"name":"toolCompliance","path_id":"F:ab5077147a"},"S:2d4876abe2":{"line":174,"name":"readPack","path_id":"F:780c791407"},"S:2d541b3911":{"line":1,"name":"MESSAGES","path_id":"F:e6677dcd37"},"S:2db1222578":{"line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb"},"S:2dc33a851f":{"line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c"},"S:2df1658785":{"line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed"},"S:2e016b842d":{"line":13,"name":"fileAnchor","path_id":"F:1cf31c4792"},"S:2e1baab2ff":{"line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04"},"S:2e3ac2ba9f":{"line":8,"name":"ModelCostRow","path_id":"F:ce1173e176"},"S:2e93f745f3":{"line":17,"name":"ratchet","path_id":"F:f238d164c9"},"S:2ea6241ebd":{"line":68,"name":"writeJson","path_id":"F:4dabd020df"},"S:2ed4ecfad7":{"line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4"},"S:2eef7d840d":{"line":180,"name":"rewriteBlock","path_id":"F:22566cb46e"},"S:2f0240b93f":{"line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6"},"S:2f1892a712":{"line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9"},"S:2fb48a9b04":{"line":21,"name":"run","path_id":"F:940d5f4399"},"S:2fbd29545b":{"line":42,"name":"nestedMapChanged","path_id":"F:25e649633c"},"S:301cb496d5":{"line":72,"name":"RoleBadge","path_id":"F:35c6d59157"},"S:301d436113":{"line":80,"name":"main","path_id":"F:c72e6949b9"},"S:30e8b022de":{"line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0"},"S:30eded078f":{"line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f"},"S:31032f0509":{"line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce"},"S:310e2149b2":{"line":80,"name":"runCli","path_id":"F:cc361bd05a"},"S:312c004ac1":{"line":46,"name":"HoverCard","path_id":"F:66264a042c"},"S:328dcdf4cc":{"line":76,"name":"countRaisedQuestions","path_id":"F:851f776227"},"S:32c99a4337":{"line":18,"name":"run","path_id":"F:55b3a4e2c0"},"S:33534dd596":{"line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff"},"S:336ebe7ff5":{"line":52,"name":"run","path_id":"F:a6d2bd3021"},"S:33846c9bba":{"line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca"},"S:33d286d62d":{"line":330,"name":"runRatchet","path_id":"F:522efae76d"},"S:33dfee21e3":{"line":1,"name":"MESSAGES","path_id":"F:2715f09f24"},"S:342fb4655a":{"line":23,"name":"gate","path_id":"F:9344d335a6"},"S:3466f40801":{"line":83,"name":"buildOptions","path_id":"F:a0d489df6d"},"S:34df82b1c2":{"line":215,"name":"hasHighOrCritical","path_id":"F:116adfb9f8"},"S:34df99c630":{"line":98,"name":"makeGitFixture","path_id":"F:18f569225a"},"S:354e31ec69":{"line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294"},"S:3575202801":{"line":57,"name":"detectProtected","path_id":"F:ae46bbab81"},"S:357942abbf":{"line":38,"name":"readItem","path_id":"F:baf7641a01"},"S:35902c8cc1":{"line":1,"name":"MESSAGES","path_id":"F:35d4a12b63"},"S:35a01a919e":{"line":45,"name":"primaryModel","path_id":"F:304ce7b89d"},"S:35ac020356":{"line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7"},"S:35e362f448":{"line":79,"name":"emit","path_id":"F:3b96b6dfed"},"S:3602dcc44c":{"line":37,"name":"cleanDoc","path_id":"F:36419aa427"},"S:3696870ce9":{"line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73"},"S:36acbff697":{"line":21,"name":"Carousel","path_id":"F:d20e4b6b91"},"S:36be7c4ac5":{"line":6,"name":"DryRun","path_id":"F:28b7af3c53"},"S:3702b2fefe":{"line":47,"name":"isAllowedImport","path_id":"F:b70824b13e"},"S:370b67baf2":{"line":90,"name":"readVersion","path_id":"F:8abf9e432a"},"S:37268eb979":{"line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff"},"S:3734794a77":{"line":38,"name":"extOf","path_id":"F:dbb9c92ca1"},"S:37693a15d4":{"line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236"},"S:37a0d721be":{"line":16,"name":"run","path_id":"F:d7d4e8d2a9"},"S:37c1996b57":{"line":10,"name":"signature","path_id":"F:3213d03b72"},"S:3800b0c645":{"line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee"},"S:380b82547c":{"line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b"},"S:383c03d511":{"line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d"},"S:38407e52ac":{"line":274,"name":"emitSarif","path_id":"F:116adfb9f8"},"S:38948fee1c":{"line":10,"name":"LiveApiError","path_id":"F:ec52ca3820"},"S:38b734e681":{"line":278,"name":"commitsSince","path_id":"F:fd08562f92"},"S:38e44b5fa7":{"line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c"},"S:391a920cca":{"line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0"},"S:3968554637":{"line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461"},"S:396f1000ae":{"line":1,"name":"MESSAGES","path_id":"F:a5822fdd03"},"S:397210a79e":{"line":24,"name":"pass","path_id":"F:5f7910375b"},"S:3a57c07db5":{"line":48,"name":"derivePosture","path_id":"F:128b647d9a"},"S:3ad2d564a8":{"line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5"},"S:3ad956fb93":{"line":36,"name":"configDefaults","path_id":"F:c5938c33fd"},"S:3ae3f92415":{"line":1,"name":"MESSAGES","path_id":"F:d328f97d94"},"S:3b092e9ab0":{"line":64,"name":"parseDecisions","path_id":"F:92d6903b5f"},"S:3bae21fee6":{"line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b"},"S:3c2bad87be":{"line":40,"name":"snapshotDir","path_id":"F:a0d489df6d"},"S:3c3cd672a7":{"line":11,"name":"isCyclic","path_id":"F:f51cba9beb"},"S:3cceb8dc09":{"line":96,"name":"deriveSignals","path_id":"F:e11f907cba"},"S:3d3f20848d":{"line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca"},"S:3d6f7980b3":{"line":33,"name":"proposeWork","path_id":"F:6f247eb514"},"S:3e2d44a335":{"line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb"},"S:3e43134e83":{"line":69,"name":"arm","path_id":"F:44a5987438"},"S:3e9158c80b":{"line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5"},"S:3ed1d37c7b":{"line":3,"name":"Unreachable","path_id":"F:79467a3153"},"S:3ef15e4c1b":{"line":13,"name":"redactText","path_id":"F:4b91a9f65b"},"S:3f2874e2ce":{"line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716"},"S:3f93aaa307":{"line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5"},"S:3f9e6b3a7b":{"line":104,"name":"testConnection","path_id":"F:08b7435c86"},"S:3fac1340a4":{"line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d"},"S:3fc87c5f7e":{"line":73,"name":"reviewProposal","path_id":"F:2127a8caca"},"S:3fd1032067":{"line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766"},"S:400a8c02c3":{"line":61,"name":"applyFix","path_id":"F:90e1fd2fd9"},"S:403ac351dd":{"line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236"},"S:405ee38bbe":{"line":66,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e"},"S:407ded8730":{"line":79,"name":"evaluateFixture","path_id":"F:23917c6197"},"S:409d8caf58":{"line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff"},"S:40a4170626":{"line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5"},"S:40cce153df":{"line":135,"name":"extractChange","path_id":"F:3b96b6dfed"},"S:41050d03a4":{"line":19,"name":"readIfExists","path_id":"F:2e327963ed"},"S:4118076b3e":{"line":29,"name":"pad","path_id":"F:3b382f95c0"},"S:4124b7df92":{"line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820"},"S:41443bba10":{"line":1,"name":"total","path_id":"F:7ccad64380"},"S:41514ae74b":{"line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024"},"S:41689151ff":{"line":105,"name":"parseArgs","path_id":"F:ddeb486c49"},"S:4195e187b2":{"line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c"},"S:41ad75ea93":{"line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600"},"S:4214f7fa01":{"line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed"},"S:42188b3bb9":{"line":696,"name":"emitJson","path_id":"F:8a10462927"},"S:4287ee7685":{"line":1,"name":"MESSAGES","path_id":"F:40d8f235fd"},"S:4295d27685":{"line":158,"name":"makeFinding","path_id":"F:116adfb9f8"},"S:4296da48b7":{"line":86,"name":"judge","path_id":"F:90cbb2cf6a"},"S:42b8608c58":{"line":92,"name":"Cell","path_id":"F:57ca5f1716"},"S:42d33f191a":{"line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133"},"S:42d4f014b5":{"line":41,"name":"corpusProblems","path_id":"F:e8676a18b7"},"S:4316722ab5":{"line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d"},"S:433f196465":{"line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d"},"S:4350272f8a":{"line":357,"name":"readRuns","path_id":"F:8a3dd6ccff"},"S:435432f041":{"line":6,"name":"CheckboxProps","path_id":"F:7054844360"},"S:4358d9c393":{"line":67,"name":"proposalsFrom","path_id":"F:09ba331878"},"S:43cc2b28a1":{"line":227,"name":"withStubRunner","path_id":"F:48355ccf4d"},"S:43f1c85009":{"line":108,"name":"renderMarkdown","path_id":"F:2e327963ed"},"S:4426823827":{"line":5,"name":"NavItem","path_id":"F:268769c4a6"},"S:442c9dff6c":{"line":5,"name":"makeGateway","path_id":"F:373a946d5c"},"S:44432e7cb0":{"line":75,"name":"runScenario","path_id":"F:94050e680d"},"S:44a852f5e1":{"line":32,"name":"readStdin","path_id":"F:c72e6949b9"},"S:44c14f3d19":{"line":135,"name":"generator","path_id":"F:4db1101024"},"S:44e7188c1d":{"line":50,"name":"hash","path_id":"F:0103cf3d56"},"S:45061132f3":{"line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7"},"S:4514b4c1f0":{"line":19,"name":"LearningsScreen","path_id":"F:757a70680a"},"S:457528354e":{"line":331,"name":"stripInlineComment","path_id":"F:8a10462927"},"S:457f8a5e17":{"line":4,"name":"MESSAGES","path_id":"F:33c4d744f3"},"S:45b2f146f0":{"line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1"},"S:45bcd8bd18":{"line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1"},"S:464c90cba5":{"line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382"},"S:46ca0706e7":{"line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5"},"S:46d884501c":{"line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70"},"S:46d90cc86e":{"line":13,"name":"Timeline","path_id":"F:9c9edea0c9"},"S:4700befa2a":{"line":16,"name":"run","path_id":"F:137056535b"},"S:4741feecf9":{"line":234,"name":"buildCost","path_id":"F:8a3dd6ccff"},"S:474ceb514b":{"line":289,"name":"readCapped","path_id":"F:522efae76d"},"S:47c5321a5f":{"line":264,"name":"listFiles","path_id":"F:522efae76d"},"S:47cde5f81f":{"line":6,"name":"DecisionStatus","path_id":"F:583edef643"},"S:48102a3f37":{"line":37,"name":"parseFraction","path_id":"F:af6de66499"},"S:48356203e2":{"line":13,"name":"repo","path_id":"F:4637e1fecb"},"S:485d7c5e96":{"line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed"},"S:489fa8bc67":{"line":14,"name":"HoverCardSide","path_id":"F:66264a042c"},"S:49158af5a6":{"line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27"},"S:49ad410798":{"line":140,"name":"replaceFirst","path_id":"F:522efae76d"},"S:49f97badd7":{"line":12,"name":"WorkState","path_id":"F:0a85f3b8e5"},"S:4a0171ecb5":{"line":295,"name":"PanelState","path_id":"F:0a85f3b8e5"},"S:4a08c48993":{"line":54,"name":"fingerprint","path_id":"F:0cacf66a3b"},"S:4a7db1c0d0":{"line":45,"name":"emptyDraft","path_id":"F:9b3f18856e"},"S:4abcc2a45b":{"line":21,"name":"redactionErrors","path_id":"F:65193a9799"},"S:4adffc8b06":{"line":27,"name":"seedJsTest","path_id":"F:6da7bd8294"},"S:4afb276004":{"line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a"},"S:4b38793395":{"line":8,"name":"scenario","path_id":"F:34ca4e55d1"},"S:4b391a8eee":{"line":34,"name":"makeGitFixture","path_id":"F:580d11b514"},"S:4b76f865fa":{"line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49"},"S:4b7a72e608":{"line":4,"name":"Role","path_id":"F:35c6d59157"},"S:4bacff1244":{"line":15,"name":"fileExists","path_id":"F:2e327963ed"},"S:4bc9723575":{"line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70"},"S:4bd4d449f1":{"line":27,"name":"fail","path_id":"F:5f7910375b"},"S:4bea381dfd":{"line":33,"name":"MESSAGES","path_id":"F:05bffc70e9"},"S:4bfc88b9a8":{"line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c"},"S:4bfea4387c":{"line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1"},"S:4c9526df5f":{"line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04"},"S:4cd48cf92e":{"line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff"},"S:4d0bae812e":{"line":91,"name":"round","path_id":"F:015261eab0"},"S:4d35869e55":{"line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3"},"S:4d36cf3d1c":{"line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04"},"S:4d3ac94b7c":{"line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927"},"S:4df7a92e8e":{"line":15,"name":"registerAdapter","path_id":"F:2554ddd30c"},"S:4e5c54ea09":{"line":369,"name":"runCategory","path_id":"F:522efae76d"},"S:4eb76c8a83":{"line":9,"name":"Set","path_id":"F:6bef3f93ab"},"S:4eb7e87341":{"line":5,"name":"NumberFieldProps","path_id":"F:db651caf76"},"S:4ed98bc995":{"line":18,"name":"baseCfg","path_id":"F:ce41983a53"},"S:4ee042ed06":{"line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56"},"S:4f138d4cbe":{"line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49"},"S:4f19353e16":{"line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce"},"S:4f265e8008":{"line":8,"name":"Approved","path_id":"F:13d31b33ea"},"S:4f43d4e206":{"line":489,"name":"runCycle","path_id":"F:ddeb486c49"},"S:4fb0095605":{"line":22,"name":"checkRegistry","path_id":"F:b16afebae9"},"S:500f4c1cd3":{"line":30,"name":"cleanSignature","path_id":"F:36419aa427"},"S:5092562c12":{"line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86"},"S:50b0879e24":{"line":28,"name":"clamp","path_id":"F:db651caf76"},"S:5115891196":{"line":8,"name":"Coverage","path_id":"F:a0abaf6a25"},"S:5154763a93":{"line":60,"name":"AppShell","path_id":"F:268769c4a6"},"S:517ace9ff8":{"line":17,"name":"tmp","path_id":"F:940d5f4399"},"S:521fca28ad":{"line":344,"name":"toolSnapshot","path_id":"F:ab5077147a"},"S:522a86b0ed":{"line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da"},"S:524aeb5cd6":{"line":23,"name":"Detail","path_id":"F:f0fbd8716f"},"S:52826c5034":{"line":768,"name":"Component","path_id":"F:aef9cf1e27"},"S:52913852e3":{"line":22,"name":"validate","path_id":"F:34cb2b6c48"},"S:52be3c746f":{"line":32,"name":"git","path_id":"F:af6de66499"},"S:53158831f9":{"line":135,"name":"check","path_id":"F:780c791407"},"S:531cf59eb3":{"line":86,"name":"loadIgnore","path_id":"F:cb66095cb4"},"S:5327d3b72c":{"line":223,"name":"main","path_id":"F:aea3c05bca"},"S:5353762af1":{"line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d"},"S:537ea4dfe0":{"line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4"},"S:53b9eda0f8":{"line":90,"name":"run","path_id":"F:f90930c3c3"},"S:542af83b15":{"line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4"},"S:544b9ce58e":{"line":24,"name":"riskTiers","path_id":"F:c64c042051"},"S:5465e6de42":{"line":11,"name":"workStates","path_id":"F:c64c042051"},"S:54a007aa57":{"line":50,"name":"relativeImportsOf","path_id":"F:fc21812307"},"S:54d2db3f99":{"line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861"},"S:551c7477f2":{"line":16,"name":"HoverCardSource","path_id":"F:66264a042c"},"S:55386d6b24":{"line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c"},"S:555c013724":{"line":31,"name":"Card","path_id":"F:40eb542a82"},"S:556ab0a4ef":{"line":34,"name":"recordPath","path_id":"F:5b113a0914"},"S:559455c526":{"line":25,"name":"loadPanelState","path_id":"F:95d4304133"},"S:55a57d9fd6":{"line":168,"name":"toolRatchet","path_id":"F:ab5077147a"},"S:55b15c0abb":{"line":9,"name":"short","path_id":"F:1cf31c4792"},"S:55eb1af9ca":{"line":32,"name":"loadLexicon","path_id":"F:ca0833ac73"},"S:55ee648216":{"line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e"},"S:55fc57e799":{"line":17,"name":"readIfExists","path_id":"F:8abf9e432a"},"S:5607ca9508":{"line":116,"name":"main","path_id":"F:94050e680d"},"S:562052e079":{"line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f"},"S:568ac62670":{"line":124,"name":"parseArgs","path_id":"F:2d6ef08990"},"S:56a4782fc2":{"line":77,"name":"matchesPattern","path_id":"F:9427d264e6"},"S:5708b6bd2b":{"line":4,"name":"PendingApproval","path_id":"F:13d31b33ea"},"S:574c990b3f":{"line":59,"name":"scoreProposal","path_id":"F:e11f907cba"},"S:575af01d8c":{"line":110,"name":"checkTarget","path_id":"F:fd08562f92"},"S:577a1daeb3":{"line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5"},"S:580f464240":{"line":23,"name":"runStatus","path_id":"F:60548316f5"},"S:581a43b877":{"line":26,"name":"parseJsonLine","path_id":"F:61c2a29876"},"S:5835c8b608":{"line":69,"name":"resolveArming","path_id":"F:f90930c3c3"},"S:583c8b60d3":{"line":34,"name":"stateVar","path_id":"F:c64c042051"},"S:586705c7a0":{"line":5,"name":"CardTone","path_id":"F:40eb542a82"},"S:5919844321":{"line":24,"name":"makeEvent","path_id":"F:fadcf390da"},"S:59617d720e":{"line":5,"name":"estimateTokens","path_id":"F:7944059823"},"S:5962011a99":{"line":41,"name":"summarize","path_id":"F:3b382f95c0"},"S:5967648d07":{"line":116,"name":"isDocumented","path_id":"F:3b382f95c0"},"S:59807c1a98":{"line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70"},"S:59b9039619":{"line":28,"name":"loadCache","path_id":"F:119e3c0fce"},"S:59ba63dbab":{"line":34,"name":"readConfig","path_id":"F:a0d489df6d"},"S:59cd81d0e0":{"line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1"},"S:59dcca7090":{"line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b"},"S:59f6d857da":{"line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7"},"S:5a2d3d98ce":{"line":6,"name":"ModalSize","path_id":"F:63351e350b"},"S:5a49db2766":{"line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5"},"S:5a6c3aef24":{"line":7,"name":"OrderService","path_id":"F:1ecd18c4b9"},"S:5a7bfc5a1b":{"line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2"},"S:5ad0c942a1":{"line":117,"name":"findCycle","path_id":"F:015261eab0"},"S:5aed523637":{"line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d"},"S:5afb2ca954":{"line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a"},"S:5aff27256c":{"line":109,"name":"schema","path_id":"F:780c791407"},"S:5b0828ff4b":{"line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb"},"S:5b0e153cfb":{"line":424,"name":"pruneLearning","path_id":"F:22566cb46e"},"S:5b2eae49a8":{"line":62,"name":"sep","path_id":"F:aa77f227a6"},"S:5b8a5996df":{"line":70,"name":"fail","path_id":"F:780c791407"},"S:5bac9ae6d5":{"line":151,"name":"formatScalarForYaml","path_id":"F:1575110130"},"S:5bad105043":{"line":3,"name":"Reading","path_id":"F:eecc78e7e8"},"S:5c69e2b109":{"line":45,"name":"DecisionCard","path_id":"F:583edef643"},"S:5c7ed4ab16":{"line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2"},"S:5cc853b5b1":{"line":50,"name":"loadScenarios","path_id":"F:94050e680d"},"S:5d118d4b60":{"line":3,"name":"Row","path_id":"F:8972d37045"},"S:5d58defc25":{"line":14,"name":"tmpRepo","path_id":"F:60548316f5"},"S:5d9d040e28":{"line":30,"name":"Modal","path_id":"F:63351e350b"},"S:5daa909048":{"line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602"},"S:5e08a11ce4":{"line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df"},"S:5e20ef9f71":{"line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c"},"S:5e3d6fa91f":{"line":20,"name":"run","path_id":"F:54a3c626d9"},"S:5ea90f5e50":{"line":3,"name":"CheckoutService","path_id":"F:54c6928de9"},"S:5eb8ce722f":{"line":31,"name":"Toast","path_id":"F:ab334f34df"},"S:5eba6876fa":{"line":36,"name":"LeaseTable","path_id":"F:956332d4b5"},"S:5ed8ee5c0a":{"line":23,"name":"HoverCardProps","path_id":"F:66264a042c"},"S:5ef4400e5e":{"line":169,"name":"generatorLine","path_id":"F:780c791407"},"S:5ef7e9a80c":{"line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990"},"S:5f317ed26b":{"line":127,"name":"capabilities","path_id":"F:4db1101024"},"S:5f8c0130c3":{"line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b"},"S:5fe0061772":{"line":4,"name":"Maker","path_id":"F:7008a20b1c"},"S:60070857ec":{"line":9,"name":"IconName","path_id":"F:deab644e60"},"S:602e030d27":{"line":297,"name":"main","path_id":"F:1e5ef6ba70"},"S:6044b46e0f":{"line":100,"name":"readMessages","path_id":"F:8a3dd6ccff"},"S:6117b8ec80":{"line":224,"name":"decideResult","path_id":"F:116adfb9f8"},"S:6122b96d0b":{"line":11,"name":"runGateCapped","path_id":"F:b014028f57"},"S:6140d7ae56":{"line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70"},"S:61579a6235":{"line":21,"name":"CostSummary","path_id":"F:ce1173e176"},"S:618d055a7c":{"line":5,"name":"clean","path_id":"F:3213d03b72"},"S:61e677ae40":{"line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5"},"S:61ec9209fc":{"line":22,"name":"matchSymbol","path_id":"F:36419aa427"},"S:6202790aac":{"line":103,"name":"UsageError","path_id":"F:116adfb9f8"},"S:62210684b4":{"line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86"},"S:62d1cf1f06":{"line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7"},"S:62f42e9591":{"line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0"},"S:634b7012be":{"line":17,"name":"makeAtt","path_id":"F:571aa2f3ae"},"S:63613c3a63":{"line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792"},"S:636b7af50c":{"line":10,"name":"LeaseRow","path_id":"F:956332d4b5"},"S:639160c471":{"line":186,"name":"buildGates","path_id":"F:8a3dd6ccff"},"S:641774928a":{"line":30,"name":"run","path_id":"F:9cbe9238f8"},"S:6425f5a6c7":{"line":10,"name":"WithLeases","path_id":"F:31658eff0b"},"S:64376e38db":{"line":6,"name":"SelectOption","path_id":"F:819f72edf6"},"S:644e7adeef":{"line":56,"name":"tokens","path_id":"F:c64c042051"},"S:6499fa18ee":{"line":264,"name":"toolStatus","path_id":"F:ab5077147a"},"S:64de4c98b6":{"line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0"},"S:64ebce69bf":{"line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a"},"S:65004e9f74":{"line":215,"name":"loadCfg","path_id":"F:aea3c05bca"},"S:655cf75cf0":{"line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9"},"S:655f25fbed":{"line":33,"name":"Sparkline","path_id":"F:c0e80ca327"},"S:6584162247":{"line":97,"name":"nowIso","path_id":"F:a0d489df6d"},"S:65d6e9b42e":{"line":112,"name":"dedupeImports","path_id":"F:36419aa427"},"S:6605365375":{"line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5"},"S:6647a4e550":{"line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92"},"S:66ac4b8d64":{"line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1"},"S:66b4da1ed7":{"line":6,"name":"ModelCostClass","path_id":"F:ce1173e176"},"S:66bb927095":{"line":11,"name":"run","path_id":"F:edf42fb1af"},"S:66cd7b74c6":{"line":5,"name":"SliderProps","path_id":"F:81c495717c"},"S:670e55d75a":{"line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce"},"S:672926584c":{"line":219,"name":"decideExitCode","path_id":"F:116adfb9f8"},"S:67852685cf":{"line":4,"name":"Info","path_id":"F:7832db450f"},"S:6797390adc":{"line":18,"name":"initialsFor","path_id":"F:f942e88a8f"},"S:680cec9dbd":{"line":64,"name":"clamp","path_id":"F:9a3e8ed7d2"},"S:68308360b1":{"line":166,"name":"main","path_id":"F:a0d489df6d"},"S:6831eb78e0":{"line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0"},"S:686192f35d":{"line":97,"name":"toLinePath","path_id":"F:c0e80ca327"},"S:689125598d":{"line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249"},"S:693b8fedee":{"line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49"},"S:6981533501":{"line":24,"name":"Input","path_id":"F:763efdd51c"},"S:699f2f623f":{"line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820"},"S:69db4ad7cc":{"line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70"},"S:69ef79b6f3":{"line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820"},"S:69f3537d3b":{"line":13,"name":"tmp","path_id":"F:8a3433b070"},"S:6a4d8aa30d":{"line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53"},"S:6a7737bb57":{"line":66,"name":"extractTags","path_id":"F:1a19f02364"},"S:6b0614bdf6":{"line":127,"name":"claim","path_id":"F:5b113a0914"},"S:6b1894b02c":{"line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd"},"S:6b5288f35f":{"line":18,"name":"coreLevers","path_id":"F:87c30bdb4c"},"S:6bc87187a8":{"line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5"},"S:6c21b6660b":{"line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c"},"S:6c21f00789":{"line":7,"name":"scenario","path_id":"F:5376e86470"},"S:6c4ca00b53":{"line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba"},"S:6c778494b3":{"line":7,"name":"relativeTime","path_id":"F:86838d35ac"},"S:6cb93e992c":{"line":45,"name":"formatUsd","path_id":"F:86838d35ac"},"S:6cbed7ff26":{"line":13,"name":"LearningSummary","path_id":"F:1d03291691"},"S:6d2334f815":{"line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b"},"S:6dcad3cdf1":{"line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5"},"S:6dcbe228c5":{"line":75,"name":"scaffold","path_id":"F:5e450ff82c"},"S:6dd199eea1":{"line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9"},"S:6dde857e83":{"line":104,"name":"listMessages","path_id":"F:05bffc70e9"},"S:6e1dfe647a":{"line":29,"name":"DecisionCardProps","path_id":"F:583edef643"},"S:6e6111c7dd":{"line":70,"name":"runPipeline","path_id":"F:edb11415f0"},"S:6ee06ecd24":{"line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7"},"S:6ee308cae0":{"line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4"},"S:6ef3b2f2e5":{"line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5"},"S:6fab505fa4":{"line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9"},"S:700c80e34d":{"line":1,"name":"MESSAGES","path_id":"F:b502a0fe75"},"S:700d752004":{"line":11,"name":"cli","path_id":"F:9bb94e1b40"},"S:703e56c471":{"line":45,"name":"scratchRepo","path_id":"F:d0da1cab80"},"S:7048bb8a3d":{"line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da"},"S:704fff1c43":{"line":15,"name":"tmp","path_id":"F:9f6dd5e5a3"},"S:705c285e25":{"line":112,"name":"chatCompletion","path_id":"F:8d2cb93236"},"S:7070a0d16e":{"line":1,"name":"MESSAGES","path_id":"F:da9133a29d"},"S:707883a645":{"line":14,"name":"DecisionSummary","path_id":"F:583edef643"},"S:7078ce1661":{"line":40,"name":"today","path_id":"F:09ba331878"},"S:70c4ff437c":{"line":80,"name":"adapter","path_id":"F:36419aa427"},"S:712330cf3e":{"line":6,"name":"parseStagedLine","path_id":"F:54df44aadd"},"S:725b07739e":{"line":22,"name":"WorkState","path_id":"F:c64c042051"},"S:72886ee448":{"line":66,"name":"formatMessage","path_id":"F:e406ceab72"},"S:72a5c214ac":{"line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5"},"S:72cb0b7406":{"line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0"},"S:72d4f657d5":{"line":91,"name":"setup","path_id":"F:3de9042953"},"S:732a1c21fe":{"line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c"},"S:733f5fd096":{"line":5,"name":"HelpHintProps","path_id":"F:d5b496b125"},"S:735c642c3a":{"line":46,"name":"collectNearMisses","path_id":"F:09ba331878"},"S:7369c62b84":{"line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423"},"S:7379962c7e":{"line":1,"name":"MESSAGES","path_id":"F:4d08d5472f"},"S:73a3da9f65":{"line":46,"name":"ActivationLadder","path_id":"F:14edab923f"},"S:73cbfa5a7d":{"line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca"},"S:73e4b1bbf9":{"line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba"},"S:73feb65706":{"line":4,"name":"OnLabel","path_id":"F:dca643f34b"},"S:744cc47208":{"line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281"},"S:745c98231d":{"line":338,"name":"main","path_id":"F:3b96b6dfed"},"S:749446c25e":{"line":8,"name":"armingModes","path_id":"F:c64c042051"},"S:74b454ee62":{"line":56,"name":"interpolate","path_id":"F:e406ceab72"},"S:74bea9ecdf":{"line":59,"name":"criterion","path_id":"F:2e327963ed"},"S:74c8951fb9":{"line":230,"name":"severityToSarifLevel","path_id":"F:116adfb9f8"},"S:74e8f23a0b":{"line":4,"name":"MergeCap","path_id":"F:84a5c32a4c"},"S:753ca853b2":{"line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1"},"S:75c48595da":{"line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97"},"S:76171943e3":{"line":7,"name":"canonicalize","path_id":"F:245efb551c"},"S:7619cf060d":{"line":133,"name":"escapeHtml","path_id":"F:128b647d9a"},"S:762b3eaf4a":{"line":17,"name":"Models","path_id":"F:1aa7cf650d"},"S:765b4574da":{"line":34,"name":"mcpCall","path_id":"F:9cbe9238f8"},"S:7698d9efeb":{"line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3"},"S:76d7b21daf":{"line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364"},"S:76dbb025c9":{"line":116,"name":"removeFirstMatch","path_id":"F:522efae76d"},"S:77031e48f4":{"line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff"},"S:77054cfc82":{"line":23,"name":"makeItem","path_id":"F:baf7641a01"},"S:7762c6d861":{"line":21,"name":"cachePath","path_id":"F:119e3c0fce"},"S:77a4165d99":{"line":12,"name":"TooltipSide","path_id":"F:8a9aff1529"},"S:7803dea04b":{"line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e"},"S:781c2d6b40":{"line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1"},"S:781c4112a2":{"line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c"},"S:783d91f2ed":{"line":319,"name":"extractSection","path_id":"F:8a3dd6ccff"},"S:78dd5bd63d":{"line":52,"name":"sha256Hex","path_id":"F:4db1101024"},"S:78e9af551d":{"line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee"},"S:7902cd38d0":{"line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8"},"S:7910b636e8":{"line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2"},"S:79144070a6":{"line":55,"name":"centrality","path_id":"F:015261eab0"},"S:792d313360":{"line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281"},"S:7934857ce3":{"line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5"},"S:796295afbe":{"line":6,"name":"GateStatus","path_id":"F:8c6234a8cb"},"S:79676d74df":{"line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee"},"S:7989466d34":{"line":59,"name":"useConfirm","path_id":"F:3c479cac6e"},"S:79997ba94d":{"line":1,"name":"MESSAGES","path_id":"F:09ea014068"},"S:79a288a97f":{"line":16,"name":"runTick","path_id":"F:baf7641a01"},"S:79b048583f":{"line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4"},"S:7a05eaea5a":{"line":34,"name":"auditCoverage","path_id":"F:1a19f02364"},"S:7a464a2d86":{"line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa"},"S:7a68bb8c0c":{"line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820"},"S:7ad858b9a2":{"line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04"},"S:7b7ddcaa20":{"line":79,"name":"segments","path_id":"F:9a3e8ed7d2"},"S:7b87285e6c":{"line":110,"name":"readTextSafe","path_id":"F:7232ada2da"},"S:7b984e047b":{"line":18,"name":"finalizeState","path_id":"F:95d4304133"},"S:7bc320f853":{"line":27,"name":"assertValid","path_id":"F:5b113a0914"},"S:7bcf8115de":{"line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a"},"S:7bdca9af48":{"line":30,"name":"Tooltip","path_id":"F:8a9aff1529"},"S:7bfb1bf049":{"line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b"},"S:7c0d389b98":{"line":17,"name":"runRatchet","path_id":"F:cede5f9fa2"},"S:7c3651a5ba":{"line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4"},"S:7c44412e8a":{"line":4,"name":"WithHeader","path_id":"F:3d505706cd"},"S:7c5c3a31a4":{"line":41,"name":"compilePattern","path_id":"F:cb66095cb4"},"S:7c6ba2a644":{"line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5"},"S:7c716c856e":{"line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81"},"S:7c9eb8f22d":{"line":113,"name":"runScript","path_id":"F:48355ccf4d"},"S:7cd45cbc03":{"line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e"},"S:7cd6925ad6":{"line":19,"name":"runScript","path_id":"F:564b053598"},"S:7d253ea6b0":{"line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed"},"S:7d38304e55":{"line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c"},"S:7d5af2fca1":{"line":22,"name":"Staged","path_id":"F:250c8a0d4a"},"S:7d89fd8d95":{"line":13,"name":"run","path_id":"F:5994385869"},"S:7d8d2691e2":{"line":4,"name":"Tiers","path_id":"F:fe5ec971f8"},"S:7ed39c68da":{"line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6"},"S:7fb0e9b59c":{"line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514"},"S:7fe7ee7f43":{"line":94,"name":"dedupe","path_id":"F:ae46bbab81"},"S:7ff08ea7a1":{"line":5,"name":"MESSAGES","path_id":"F:f41378fed0"},"S:8041c36b7b":{"line":18,"name":"noThrow","path_id":"F:8fe56e5618"},"S:8097fe47fc":{"line":40,"name":"readBody","path_id":"F:08b7435c86"},"S:80ded7ba90":{"line":542,"name":"renderHuman","path_id":"F:7232ada2da"},"S:80e9a1f555":{"line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee"},"S:813f68335e":{"line":8,"name":"Armed","path_id":"F:28b7af3c53"},"S:819d9d37ff":{"line":12,"name":"call","path_id":"F:ec52ca3820"},"S:81bb2e8cc4":{"line":39,"name":"clamp","path_id":"F:e11f907cba"},"S:81c9c1291a":{"line":35,"name":"interpolate","path_id":"F:05bffc70e9"},"S:823d7fa306":{"line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c"},"S:82407637b4":{"line":266,"name":"emitJson","path_id":"F:116adfb9f8"},"S:8252cf2ba8":{"line":52,"name":"warn","path_id":"F:2d4c555ba1"},"S:82727ee8e7":{"line":35,"name":"collectImports","path_id":"F:3213d03b72"},"S:8282a0b575":{"line":85,"name":"formatMessage","path_id":"F:05bffc70e9"},"S:8289602f81":{"line":28,"name":"modeVar","path_id":"F:c64c042051"},"S:837b5a8d1e":{"line":38,"name":"runCli","path_id":"F:b16afebae9"},"S:83ad315769":{"line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3"},"S:83b3a2ab69":{"line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49"},"S:83deb081d9":{"line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9"},"S:84220fc054":{"line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e"},"S:842e875c5a":{"line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b"},"S:84b00e90de":{"line":28,"name":"Toggle","path_id":"F:214cc0a5f4"},"S:85083e2f79":{"line":22,"name":"run","path_id":"F:e359adb110"},"S:852d083fcb":{"line":97,"name":"listQueued","path_id":"F:5b113a0914"},"S:856f3a5bea":{"line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618"},"S:8579f519b1":{"line":25,"name":"scaffold","path_id":"F:de5ebbf586"},"S:857ab7696f":{"line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa"},"S:85c852fd1a":{"line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca"},"S:8641765bb2":{"line":34,"name":"formatDuration","path_id":"F:86838d35ac"},"S:8660e770ea":{"line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da"},"S:867db3037b":{"line":343,"name":"resolveGate","path_id":"F:522efae76d"},"S:86cb290127":{"line":25,"name":"Subject","path_id":"F:0a85f3b8e5"},"S:87013bd4c3":{"line":75,"name":"loadInputs","path_id":"F:780c791407"},"S:870a14c796":{"line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48"},"S:8735f37dad":{"line":288,"name":"adoptCmd","path_id":"F:780c791407"},"S:8761033dfb":{"line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed"},"S:87c8d03eb8":{"line":126,"name":"dirsFromCodeowners","path_id":"F:4096620673"},"S:87ca9c146a":{"line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa"},"S:87ceb91d57":{"line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76"},"S:87fa79bea3":{"line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d"},"S:8822b8498d":{"line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0"},"S:882efb23a5":{"line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0"},"S:88426a3883":{"line":12,"name":"looksLikeDiff","path_id":"F:872221b1da"},"S:88bc43a62b":{"line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227"},"S:88bd705d3f":{"line":64,"name":"badgeJson","path_id":"F:a0d489df6d"},"S:89065c6f4b":{"line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2"},"S:890a9e6691":{"line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1"},"S:890ccb5d6b":{"line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f"},"S:89566a4918":{"line":39,"name":"tierVar","path_id":"F:c64c042051"},"S:895b1937bd":{"line":61,"name":"readConfig","path_id":"F:8a3dd6ccff"},"S:8990e6571f":{"line":118,"name":"parseFlatYaml","path_id":"F:1575110130"},"S:89e92655dd":{"line":57,"name":"normalizeLF","path_id":"F:8a10462927"},"S:8a6e48a119":{"line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da"},"S:8a971e3c54":{"line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b"},"S:8a9e6199b3":{"line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce"},"S:8af9c33a76":{"line":13,"name":"SelectProps","path_id":"F:819f72edf6"},"S:8b3d7e9050":{"line":240,"name":"summaryMessage","path_id":"F:116adfb9f8"},"S:8b67ef3e8b":{"line":266,"name":"workItemFile","path_id":"F:22566cb46e"},"S:8b7542071f":{"line":1,"name":"MESSAGES","path_id":"F:6a86908a3e"},"S:8b9971d92a":{"line":30,"name":"LearningCardProps","path_id":"F:1d03291691"},"S:8bff005013":{"line":16,"name":"runReport","path_id":"F:fadcf390da"},"S:8c2cd9c54f":{"line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca"},"S:8c65a8b2a2":{"line":15,"name":"ActiveWork","path_id":"F:e5e519f441"},"S:8c6ccd3e8b":{"line":64,"name":"listTemplate","path_id":"F:5e450ff82c"},"S:8c83339acb":{"line":25,"name":"IconButton","path_id":"F:a8cfe45d27"},"S:8cd25e6f09":{"line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5"},"S:8cf2204c43":{"line":36,"name":"CostPanelProps","path_id":"F:ce1173e176"},"S:8d10c3ed6e":{"line":13,"name":"makeOrderService","path_id":"F:52caf3b287"},"S:8d131c2429":{"line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d"},"S:8d1ca74a54":{"line":29,"name":"leaseHolder","path_id":"F:d135cffeaa"},"S:8d30c800e7":{"line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1"},"S:8d5d2455bf":{"line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72"},"S:8da618623d":{"line":18,"name":"headSha","path_id":"F:1bc6d1449f"},"S:8dfe0cf637":{"line":27,"name":"ProgressMeter","path_id":"F:9deac13db0"},"S:8e42d127b7":{"line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d"},"S:8e586c7c13":{"line":60,"name":"commandOnPath","path_id":"F:94050e680d"},"S:8e94f927e1":{"line":64,"name":"mapToCriteria","path_id":"F:2e327963ed"},"S:8ec4bd5dec":{"line":25,"name":"signPacket","path_id":"F:7b3e38c9a6"},"S:8f1da92228":{"line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed"},"S:8f6d716f36":{"line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49"},"S:8f93f4689a":{"line":60,"name":"armState","path_id":"F:1e5ef6ba70"},"S:8fc6479414":{"line":72,"name":"getDiff","path_id":"F:116adfb9f8"},"S:8fe737eaa0":{"line":1,"name":"MESSAGES","path_id":"F:964f89b6cc"},"S:90b2cf611f":{"line":255,"name":"diffPosture","path_id":"F:780c791407"},"S:90b86b1f26":{"line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227"},"S:90f1a56d4e":{"line":180,"name":"hostState","path_id":"F:7d236c9aa6"},"S:91108693ba":{"line":1,"name":"MESSAGES","path_id":"F:d8e37c4449"},"S:914d5cd317":{"line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49"},"S:91c42b4f27":{"line":23,"name":"read","path_id":"F:4096620673"},"S:9249714b12":{"line":104,"name":"main","path_id":"F:f90930c3c3"},"S:928743a069":{"line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f"},"S:9287ce102a":{"line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff"},"S:9299cd9a70":{"line":31,"name":"matches","path_id":"F:c9493b5275"},"S:92bb85bdff":{"line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820"},"S:92bd39eb47":{"line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02"},"S:934c97a052":{"line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da"},"S:9382da6a24":{"line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee"},"S:93ab3c1c15":{"line":8,"name":"Checker","path_id":"F:7008a20b1c"},"S:93d0a78f18":{"line":65,"name":"changedPaths","path_id":"F:119e3c0fce"},"S:93e0292f30":{"line":12,"name":"Protected","path_id":"F:13d31b33ea"},"S:93fa315ac7":{"line":48,"name":"fail","path_id":"F:2d4c555ba1"},"S:9435112073":{"line":194,"name":"scanDiff","path_id":"F:116adfb9f8"},"S:94383b0aef":{"line":3,"name":"RefundResult","path_id":"F:93f0f5d3de"},"S:944e1f3b0b":{"line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea"},"S:949f988c9e":{"line":10,"name":"makeDb","path_id":"F:044b762a79"},"S:950b7153af":{"line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c"},"S:9554538925":{"line":196,"name":"readPRContext","path_id":"F:92d6903b5f"},"S:95871faa22":{"line":75,"name":"formatNumber","path_id":"F:9deac13db0"},"S:9598b17b9e":{"line":14,"name":"AutoMerge","path_id":"F:a0068c8817"},"S:959be959f7":{"line":134,"name":"planCycle","path_id":"F:ddeb486c49"},"S:95e22729ee":{"line":52,"name":"sleep","path_id":"F:cdbe769ed3"},"S:95e56b0a9c":{"line":27,"name":"Remote","path_id":"F:c63a71fb57"},"S:969658a48c":{"line":91,"name":"sleep","path_id":"F:8d2cb93236"},"S:96b040bf38":{"line":76,"name":"enqueue","path_id":"F:5b113a0914"},"S:96c461f8cd":{"line":6,"name":"Success","path_id":"F:7832db450f"},"S:96e9e4a020":{"line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca"},"S:96ffd586d6":{"line":19,"name":"tmp","path_id":"F:6da7bd8294"},"S:974654287c":{"line":304,"name":"count","path_id":"F:8a10462927"},"S:979cd75d0e":{"line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444"},"S:97a7516354":{"line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3"},"S:97bc3f0eb4":{"line":22,"name":"deriveArming","path_id":"F:0da05a2a05"},"S:980a6a0449":{"line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d"},"S:982b9fa62d":{"line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3"},"S:98ca1b6552":{"line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d"},"S:98d9caecec":{"line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0"},"S:996743005b":{"line":29,"name":"flagValue","path_id":"F:a0d489df6d"},"S:99ae98a428":{"line":71,"name":"walkMd","path_id":"F:fd08562f92"},"S:99c574f83d":{"line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3"},"S:9ab63d4bb2":{"line":83,"name":"parseVerdict","path_id":"F:2d6ef08990"},"S:9b166b011e":{"line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f"},"S:9b40c124ce":{"line":17,"name":"baseCfg","path_id":"F:093689bb8e"},"S:9b986c2d8a":{"line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49"},"S:9bc07de53c":{"line":181,"name":"GateVM","path_id":"F:0a85f3b8e5"},"S:9bcfb77bfa":{"line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa"},"S:9c4deaa396":{"line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8"},"S:9cda312f51":{"line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca"},"S:9d42aeefd9":{"line":106,"name":"gateGraphErrors","path_id":"F:fc21812307"},"S:9dee57c7c2":{"line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f"},"S:9e3d232a1b":{"line":43,"name":"fixture","path_id":"F:4fad18c892"},"S:9e9207d834":{"line":67,"name":"detectInstructions","path_id":"F:ae46bbab81"},"S:9ec4198171":{"line":93,"name":"collectNodes","path_id":"F:f51cba9beb"},"S:9ef12b47d5":{"line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b"},"S:9f59110fda":{"line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49"},"S:9f6788d90d":{"line":314,"name":"runCli","path_id":"F:116adfb9f8"},"S:9f7fa8d585":{"line":10,"name":"packetContent","path_id":"F:12c7a4e461"},"S:9f9c07db7d":{"line":10,"name":"Model","path_id":"F:08577063d4"},"S:9f9ed94a62":{"line":42,"name":"Table","path_id":"F:a402d2f9ed"},"S:a06feb4e68":{"line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f"},"S:a07487517b":{"line":25,"name":"getAdapter","path_id":"F:2554ddd30c"},"S:a0db477c6e":{"line":90,"name":"summarize","path_id":"F:2e327963ed"},"S:a0ea4d9d0f":{"line":18,"name":"computePacketId","path_id":"F:12c7a4e461"},"S:a0f5484b98":{"line":77,"name":"IconProps","path_id":"F:deab644e60"},"S:a10a756308":{"line":59,"name":"sendJson","path_id":"F:08b7435c86"},"S:a1107105c3":{"line":26,"name":"tmp","path_id":"F:9cbe9238f8"},"S:a1828ef829":{"line":59,"name":"main","path_id":"F:8bb1b57470"},"S:a1cc5660fe":{"line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca"},"S:a1d4334d94":{"line":44,"name":"App","path_id":"F:113387361d"},"S:a26ee6eefd":{"line":44,"name":"workStateLabels","path_id":"F:c64c042051"},"S:a272c887e3":{"line":82,"name":"toPoints","path_id":"F:c0e80ca327"},"S:a2d5fcb920":{"line":13,"name":"GatesScreen","path_id":"F:304fa8ef33"},"S:a2d9480f78":{"line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5"},"S:a2df9a5c24":{"line":23,"name":"Resolved","path_id":"F:3ce0fd77eb"},"S:a2fef04067":{"line":4,"name":"Budget","path_id":"F:1f40b6eb6e"},"S:a320bea4da":{"line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca"},"S:a337ae8f0b":{"line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5"},"S:a34306cc67":{"line":61,"name":"getDiff","path_id":"F:8a10462927"},"S:a364864213":{"line":53,"name":"listRecords","path_id":"F:5b113a0914"},"S:a3bf9f1833":{"line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b"},"S:a3ca73d34c":{"line":6,"name":"LearningStatus","path_id":"F:1d03291691"},"S:a3cae87964":{"line":109,"name":"makePlan","path_id":"F:18f569225a"},"S:a3fb13b441":{"line":4,"name":"Tones","path_id":"F:10e76cfcd3"},"S:a4155f5067":{"line":16,"name":"AppShellProps","path_id":"F:268769c4a6"},"S:a48d9e0b16":{"line":13,"name":"budgetTier","path_id":"F:7944059823"},"S:a4a9a79fbe":{"line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5"},"S:a4b6be1d49":{"line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820"},"S:a4c389d72a":{"line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927"},"S:a4d0ce8fea":{"line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a"},"S:a4e623c70b":{"line":354,"name":"updateWorkItem","path_id":"F:22566cb46e"},"S:a4e7d71500":{"line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3"},"S:a50812babf":{"line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa"},"S:a529342ccb":{"line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4"},"S:a57f8c1bdc":{"line":39,"name":"otherLines","path_id":"F:8b2f3dbcba"},"S:a5baaff840":{"line":12,"name":"modules","path_id":"F:2a74ae3f05"},"S:a63cef8ef8":{"line":4,"name":"Armed","path_id":"F:3319e5c923"},"S:a657233cd5":{"line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2"},"S:a6ff0bb6d7":{"line":28,"name":"slugifyId","path_id":"F:ac11b5379f"},"S:a716bbdaa8":{"line":33,"name":"reaches","path_id":"F:8b8d3c46b3"},"S:a75126f856":{"line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49"},"S:a76a61b560":{"line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024"},"S:a79dad6e97":{"line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9"},"S:a8971aba2c":{"line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff"},"S:a8a643fda8":{"line":55,"name":"validatePacket","path_id":"F:65193a9799"},"S:a8ccdc0c7d":{"line":112,"name":"parseDiff","path_id":"F:116adfb9f8"},"S:a8f75707be":{"line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d"},"S:a8fe6446c0":{"line":17,"name":"headSha","path_id":"F:92dde817ee"},"S:a91334a377":{"line":32,"name":"Slider","path_id":"F:81c495717c"},"S:a92333a9ea":{"line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024"},"S:a931ad2e62":{"line":46,"name":"resolvePromptText","path_id":"F:23917c6197"},"S:a9b3acb352":{"line":16,"name":"writeRunLog","path_id":"F:3b382f95c0"},"S:a9f138bd93":{"line":10,"name":"signature","path_id":"F:ffe5c1269b"},"S:aa00911a72":{"line":25,"name":"readEvents","path_id":"F:fc5d887ff6"},"S:aa4de9995b":{"line":4,"name":"Trends","path_id":"F:ca13fe2a5b"},"S:aa8f9a7b3d":{"line":122,"name":"captureSegments","path_id":"F:22566cb46e"},"S:aaa1eac555":{"line":47,"name":"adapter","path_id":"F:3213d03b72"},"S:aabd2d1e55":{"line":6,"name":"TableColumn","path_id":"F:a402d2f9ed"},"S:aaca852d2b":{"line":31,"name":"IdentityChip","path_id":"F:f942e88a8f"},"S:aacff6bc1c":{"line":84,"name":"attestationBytes","path_id":"F:780c791407"},"S:ab3548c3d0":{"line":16,"name":"baseCfg","path_id":"F:06b982f5a2"},"S:ab79b43633":{"line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792"},"S:ab8d34f24a":{"line":119,"name":"sweepTarget","path_id":"F:6f247eb514"},"S:abe6a83201":{"line":88,"name":"Icon","path_id":"F:deab644e60"},"S:ac015d1f81":{"line":67,"name":"collectImports","path_id":"F:36419aa427"},"S:ac0d90ea9c":{"line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff"},"S:ac1ae69e0f":{"line":3,"name":"SparklineTone","path_id":"F:c0e80ca327"},"S:ac31df31c0":{"line":113,"name":"writeJson","path_id":"F:eb14a0bdeb"},"S:acc91dc6fe":{"line":210,"name":"verifyCmd","path_id":"F:780c791407"},"S:ad1b93bd0c":{"line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba"},"S:ad302fbf54":{"line":5,"name":"makeCartService","path_id":"F:52caf3b287"},"S:ad4edf7e81":{"line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861"},"S:ad7d7732a1":{"line":24,"name":"makeExtract","path_id":"F:cecdb96382"},"S:ad93bbf998":{"line":14,"name":"run","path_id":"F:9f36b3ef29"},"S:ae3c96ae84":{"line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed"},"S:aecf05317d":{"line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236"},"S:af1450421c":{"line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e"},"S:af1e7a50ba":{"line":5,"name":"makeDb","path_id":"F:f8168b956f"},"S:af28852c7f":{"line":169,"name":"deepEqualJson","path_id":"F:22566cb46e"},"S:af6abeace9":{"line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c"},"S:afa2ffd4a2":{"line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca"},"S:afdc9fa742":{"line":172,"name":"scanFile","path_id":"F:116adfb9f8"},"S:afe9763761":{"line":3,"name":"RaiseCap","path_id":"F:4387a44284"},"S:b01ec1a6ac":{"line":25,"name":"Gates","path_id":"F:bb6a874d58"},"S:b02fc1cd06":{"line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff"},"S:b06714d9c5":{"line":225,"name":"patchConfig","path_id":"F:22566cb46e"},"S:b06f3444be":{"line":86,"name":"stateWithSource","path_id":"F:08b7435c86"},"S:b121dfe1ec":{"line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2"},"S:b128b3a196":{"line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715"},"S:b1b5323930":{"line":77,"name":"runGate","path_id":"F:f921eecad7"},"S:b1bbb81b82":{"line":30,"name":"Button","path_id":"F:8b122c449e"},"S:b1e3e516c3":{"line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2"},"S:b27476e527":{"line":5,"name":"SparklineProps","path_id":"F:c0e80ca327"},"S:b288f69305":{"line":76,"name":"agentproofScore","path_id":"F:3b382f95c0"},"S:b29d404deb":{"line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024"},"S:b29e93fbc3":{"line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa"},"S:b29fc4b0d5":{"line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d"},"S:b32b89125f":{"line":1,"name":"MESSAGES","path_id":"F:e948251d2b"},"S:b366c411d2":{"line":150,"name":"renderHtml","path_id":"F:128b647d9a"},"S:b3a28348ad":{"line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d"},"S:b41535d6e7":{"line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5"},"S:b4354229d8":{"line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27"},"S:b455c897cf":{"line":66,"name":"rel","path_id":"F:780c791407"},"S:b4a3093fe9":{"line":66,"name":"indentOf","path_id":"F:1575110130"},"S:b4b12fd408":{"line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7"},"S:b4e887ed4f":{"line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c"},"S:b5883cd7f4":{"line":1,"name":"MESSAGES","path_id":"F:240ace7a8f"},"S:b5d72ba60f":{"line":8,"name":"ModalProps","path_id":"F:63351e350b"},"S:b65916676a":{"line":98,"name":"successBody","path_id":"F:eb14a0bdeb"},"S:b6cbeed65d":{"line":1,"name":"MESSAGES","path_id":"F:313bcfac46"},"S:b6eeacb415":{"line":4,"name":"Requirement","path_id":"F:3b4065b679"},"S:b6efca77f5":{"line":17,"name":"basename","path_id":"F:2f3e98ab2c"},"S:b6fce3a5a9":{"line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a"},"S:b7db5f4d64":{"line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514"},"S:b815c12407":{"line":1,"name":"MESSAGES","path_id":"F:dd58ae3791"},"S:b81af2dbe4":{"line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff"},"S:b840cddd67":{"line":20,"name":"readScreens","path_id":"F:1a19f02364"},"S:b8469e1267":{"line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff"},"S:b88ce47ede":{"line":98,"name":"attentionRank","path_id":"F:015261eab0"},"S:b89188d9e3":{"line":76,"name":"main","path_id":"F:09ba331878"},"S:b8cdbe3fd3":{"line":73,"name":"migrate","path_id":"F:9d69a6b766"},"S:b8ed1c85bb":{"line":1,"name":"MESSAGES","path_id":"F:9616513cb6"},"S:b908c74a11":{"line":5,"name":"makeDb","path_id":"F:3c53926ecd"},"S:b919653baa":{"line":44,"name":"DryRun","path_id":"F:2207a6ebce"},"S:b926c18911":{"line":15,"name":"hashString","path_id":"F:2b9c43b0ca"},"S:b97efe3854":{"line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70"},"S:b9942b1651":{"line":11,"name":"runRatchet","path_id":"F:2b49c74e74"},"S:b9d44c6996":{"line":230,"name":"diffSet","path_id":"F:780c791407"},"S:b9ed6b7b01":{"line":44,"name":"buildHeaders","path_id":"F:8d2cb93236"},"S:ba017108fd":{"line":104,"name":"leaseIsLive","path_id":"F:5b113a0914"},"S:ba347c9b77":{"line":4,"name":"Beside","path_id":"F:e19aab09cb"},"S:ba36fd17d6":{"line":100,"name":"collectRows","path_id":"F:128b647d9a"},"S:ba4cb77f9c":{"line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c"},"S:ba5f7d1ffe":{"line":41,"name":"saveCache","path_id":"F:119e3c0fce"},"S:ba65eaae5b":{"line":4,"name":"MESSAGES","path_id":"F:acc3f6b466"},"S:ba7fe0b6d3":{"line":10,"name":"routedConfig","path_id":"F:704e42d42b"},"S:baa16abe42":{"line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70"},"S:baab120dbc":{"line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff"},"S:baacff5701":{"line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee"},"S:bac2ebbef5":{"line":53,"name":"gitCommit","path_id":"F:0391f3b249"},"S:bafcfbb33c":{"line":224,"name":"formatDelta","path_id":"F:3b382f95c0"},"S:bb036fe763":{"line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c"},"S:bb570e99d8":{"line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c"},"S:bb578790a3":{"line":67,"name":"pagerank","path_id":"F:015261eab0"},"S:bb5d1b5426":{"line":1,"name":"MESSAGES","path_id":"F:59b2499e4e"},"S:bb800288d9":{"line":12,"name":"writeRunLog","path_id":"F:6f247eb514"},"S:bbdb581d9d":{"line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716"},"S:bc1fd2c5b3":{"line":149,"name":"adrNumbers","path_id":"F:fd08562f92"},"S:bc3262b829":{"line":73,"name":"writeArtifact","path_id":"F:a0d489df6d"},"S:bc4bff4faa":{"line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281"},"S:bc56c13940":{"line":22,"name":"preservingArtifact","path_id":"F:137056535b"},"S:bca7722767":{"line":100,"name":"reviewDiff","path_id":"F:2d6ef08990"},"S:bcddbe684b":{"line":62,"name":"listCaptures","path_id":"F:9344d335a6"},"S:bd1a0a35f8":{"line":35,"name":"Tabs","path_id":"F:1db369d970"},"S:bd63b1e408":{"line":15,"name":"cleanSignature","path_id":"F:594f505f11"},"S:bd7f311fdb":{"line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6"},"S:bd8806c490":{"line":13,"name":"Board","path_id":"F:dd1be2cd7b"},"S:bd9f62784d":{"line":5,"name":"scenario","path_id":"F:28f278b1d9"},"S:be897872b9":{"line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444"},"S:bead992b70":{"line":48,"name":"isBillable","path_id":"F:8b5a1f94c4"},"S:bec355e18a":{"line":75,"name":"parseEntries","path_id":"F:1575110130"},"S:bf5cf69681":{"line":13,"name":"refund","path_id":"F:93f0f5d3de"},"S:bfb04089fa":{"line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914"},"S:c028c053e3":{"line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49"},"S:c063b246d1":{"line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1"},"S:c0981a3461":{"line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c"},"S:c0c2347579":{"line":5,"name":"ButtonVariant","path_id":"F:8b122c449e"},"S:c12913d4da":{"line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9"},"S:c1667b970b":{"line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0"},"S:c16b3b7bbf":{"line":10,"name":"Board","path_id":"F:6c0919b64e"},"S:c176253e9c":{"line":12,"name":"tmp","path_id":"F:fadcf390da"},"S:c1c63b1bf8":{"line":35,"name":"planFile","path_id":"F:d6401dd73e"},"S:c1e6062cfc":{"line":109,"name":"baseCfg","path_id":"F:ee02e563c6"},"S:c275cb33da":{"line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da"},"S:c2e502ad5e":{"line":409,"name":"levelFor","path_id":"F:522efae76d"},"S:c2e641f1c8":{"line":106,"name":"runSuite","path_id":"F:23917c6197"},"S:c36223901c":{"line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa"},"S:c388580f86":{"line":114,"name":"main","path_id":"F:90cbb2cf6a"},"S:c38d35b211":{"line":4,"name":"Roles","path_id":"F:973aaa9d86"},"S:c3a1d0f1a7":{"line":151,"name":"serializeEntry","path_id":"F:22566cb46e"},"S:c3d94f0812":{"line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a"},"S:c42dd60d39":{"line":126,"name":"sortRows","path_id":"F:128b647d9a"},"S:c44c6a3e42":{"line":35,"name":"parseEvidence","path_id":"F:8abf9e432a"},"S:c44da37a7d":{"line":12,"name":"Dashboard","path_id":"F:2470e60179"},"S:c47beeac78":{"line":11,"name":"normalizeRelative","path_id":"F:015261eab0"},"S:c4e4845bcc":{"line":181,"name":"manifestDigest","path_id":"F:4db1101024"},"S:c504685956":{"line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee"},"S:c52b041088":{"line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444"},"S:c53d33aa2a":{"line":71,"name":"scoreProposals","path_id":"F:e11f907cba"},"S:c546f7913f":{"line":108,"name":"main","path_id":"F:90e1fd2fd9"},"S:c5854b8940":{"line":27,"name":"snapshot","path_id":"F:0103cf3d56"},"S:c63f60f015":{"line":210,"name":"main","path_id":"F:f5d313e9f1"},"S:c68bb17ca2":{"line":17,"name":"TabsProps","path_id":"F:1db369d970"},"S:c6d0684785":{"line":1,"name":"MESSAGES","path_id":"F:b25dcdad19"},"S:c732826ee5":{"line":41,"name":"buildImportGraph","path_id":"F:015261eab0"},"S:c73cab5b60":{"line":42,"name":"ids","path_id":"F:cc65dd1342"},"S:c79db45132":{"line":11,"name":"helpers","path_id":"F:ae46bbab81"},"S:c7db2cc29d":{"line":3,"name":"InventoryService","path_id":"F:bd02b28f17"},"S:c7ebadadb9":{"line":19,"name":"Checking","path_id":"F:f9c98a8642"},"S:c7ef137e46":{"line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133"},"S:c80f0936ea":{"line":4,"name":"Budget","path_id":"F:a0abaf6a25"},"S:c850118bb2":{"line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94"},"S:c8ee4f2e2e":{"line":40,"name":"makePollutedRepo","path_id":"F:44a5987438"},"S:c928d805b5":{"line":8,"name":"ButtonProps","path_id":"F:8b122c449e"},"S:c932c7339f":{"line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249"},"S:c9785dab7b":{"line":6,"name":"scenario","path_id":"F:d744931e6a"},"S:ca3e7d6f59":{"line":72,"name":"redosFindings","path_id":"F:e7380d1444"},"S:cab56da046":{"line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820"},"S:cab6ecab70":{"line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0"},"S:cb1a5f81e0":{"line":78,"name":"reachableFrom","path_id":"F:f51cba9beb"},"S:cb3211f3c2":{"line":33,"name":"checkLicenses","path_id":"F:cc361bd05a"},"S:cb81b7e05c":{"line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820"},"S:cb8cdfa49f":{"line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9"},"S:cb97c7b3fc":{"line":27,"name":"mark","path_id":"F:9344d335a6"},"S:cbbe6a270b":{"line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e"},"S:cbe5a2e179":{"line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1"},"S:cd1b84d7ff":{"line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021"},"S:cd2e7eba8f":{"line":61,"name":"gitCommitAt","path_id":"F:0391f3b249"},"S:cd836c2fc7":{"line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4"},"S:cdac115f81":{"line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602"},"S:cde4a28e06":{"line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9"},"S:ce2faa5c80":{"line":18,"name":"loadConfig","path_id":"F:d480e40c97"},"S:ce5e964e25":{"line":4,"name":"ArmingMode","path_id":"F:e5e519f441"},"S:cec6405a03":{"line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b"},"S:cecb0a4a33":{"line":248,"name":"main","path_id":"F:128b647d9a"},"S:cefb8c3f64":{"line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5"},"S:cf03857559":{"line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602"},"S:cf3414acc5":{"line":10,"name":"TEST_FILE","path_id":"F:9a72895a04"},"S:cf413b97c8":{"line":113,"name":"write","path_id":"F:780c791407"},"S:cf88d1486b":{"line":16,"name":"run","path_id":"F:5956278014"},"S:cf9af1e29c":{"line":112,"name":"gatesFromVerify","path_id":"F:4db1101024"},"S:cf9f3a025e":{"line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c"},"S:cfdd1d8a7f":{"line":40,"name":"NumberField","path_id":"F:db651caf76"},"S:cfe87f9141":{"line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227"},"S:d029f96a64":{"line":27,"name":"flagValue","path_id":"F:c72e6949b9"},"S:d0478605fa":{"line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04"},"S:d0587dc399":{"line":1,"name":"MESSAGES","path_id":"F:b2efd505ef"},"S:d0c2835a28":{"line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927"},"S:d15b7063e3":{"line":76,"name":"roleCrons","path_id":"F:aea3c05bca"},"S:d1b03afffb":{"line":41,"name":"deriveRepoName","path_id":"F:128b647d9a"},"S:d22e005d52":{"line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5"},"S:d240732a9d":{"line":18,"name":"sampleAction","path_id":"F:195e9217ca"},"S:d25b3fbe33":{"line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c"},"S:d293a69125":{"line":49,"name":"LearningCard","path_id":"F:1d03291691"},"S:d2a299acb3":{"line":266,"name":"diffCmd","path_id":"F:780c791407"},"S:d2ef86c19f":{"line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461"},"S:d31fd4dafa":{"line":4,"name":"MESSAGES","path_id":"F:aa27d254da"},"S:d33c2c4d3e":{"line":534,"name":"runRoles","path_id":"F:ddeb486c49"},"S:d3f17c584a":{"line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86"},"S:d412af5fd3":{"line":1,"name":"MESSAGES","path_id":"F:9803feef4a"},"S:d4349c402c":{"line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba"},"S:d439b00c59":{"line":73,"name":"writeRunLog","path_id":"F:522efae76d"},"S:d444b209b8":{"line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0"},"S:d47456131b":{"line":40,"name":"getChangedFiles","path_id":"F:9427d264e6"},"S:d49b633132":{"line":67,"name":"isValidUrl","path_id":"F:4ebf08705b"},"S:d4e650f5ae":{"line":110,"name":"walkRepo","path_id":"F:cb66095cb4"},"S:d4ed2d5fe7":{"line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024"},"S:d4fd7f4ad3":{"line":12,"name":"Pair","path_id":"F:7008a20b1c"},"S:d56c1854d7":{"line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5"},"S:d5719588cb":{"line":48,"name":"llmsText","path_id":"F:a0d489df6d"},"S:d595535449":{"line":9,"name":"names","path_id":"F:2a74ae3f05"},"S:d5a9bb4227":{"line":47,"name":"capDiff","path_id":"F:2d6ef08990"},"S:d6cf821403":{"line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0"},"S:d7029fdff9":{"line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2"},"S:d7086f2a5b":{"line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e"},"S:d732af6be5":{"line":2,"name":"ClassValue","path_id":"F:7c8d518693"},"S:d737cd7277":{"line":52,"name":"flagValue","path_id":"F:1e5ef6ba70"},"S:d75c32ea9c":{"line":11,"name":"add","path_id":"F:90f0999521"},"S:d761c7660a":{"line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed"},"S:d7a4f68100":{"line":52,"name":"containedCwd","path_id":"F:aa77f227a6"},"S:d7d594dd8d":{"line":15,"name":"multiply","path_id":"F:90f0999521"},"S:d8edda2d76":{"line":12,"name":"makeMinimalRepo","path_id":"F:564b053598"},"S:d92119a484":{"line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2"},"S:d9c2336e09":{"line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff"},"S:d9eda62ca5":{"line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c"},"S:da2f845458":{"line":57,"name":"splitByTabs","path_id":"F:1a19f02364"},"S:da40a0864b":{"line":33,"name":"assertSameSet","path_id":"F:5eff4122c0"},"S:daac1f172a":{"line":12,"name":"cli","path_id":"F:40e4f39b59"},"S:dab0af7046":{"line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0"},"S:dab833b9a8":{"line":25,"name":"RiskTier","path_id":"F:c64c042051"},"S:db0bb71f37":{"line":41,"name":"clampSeverity","path_id":"F:05bffc70e9"},"S:db7c5c1950":{"line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff"},"S:dbf47f93d3":{"line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1"},"S:dc4ac94e5b":{"line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed"},"S:dcc6653dc4":{"line":114,"name":"staticPatternSources","path_id":"F:e7380d1444"},"S:dce77ef3c3":{"line":42,"name":"safetyErrors","path_id":"F:d480e40c97"},"S:dd05df51d3":{"line":26,"name":"Promoted","path_id":"F:250c8a0d4a"},"S:dd1940719c":{"line":46,"name":"parseArgs","path_id":"F:edb11415f0"},"S:dd37641bec":{"line":27,"name":"Spend","path_id":"F:e5e519f441"},"S:dd3b976184":{"line":380,"name":"handleRequest","path_id":"F:ab5077147a"},"S:ddc69b10ca":{"line":182,"name":"readForeignPack","path_id":"F:780c791407"},"S:dddb39652d":{"line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5"},"S:ddfea151e8":{"line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7"},"S:de0b2dc0df":{"line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3"},"S:de8e4d5857":{"line":128,"name":"digestMismatch","path_id":"F:780c791407"},"S:deea6aabbd":{"line":4,"name":"cx","path_id":"F:7c8d518693"},"S:df1472b647":{"line":47,"name":"docAbove","path_id":"F:36419aa427"},"S:df1c5c3628":{"line":33,"name":"adapter","path_id":"F:c598a2d684"},"S:df5cb6eb12":{"line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d"},"S:df7a91f366":{"line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e"},"S:df7e6c1db0":{"line":4,"name":"Disabled","path_id":"F:28b7af3c53"},"S:dff1725e3b":{"line":37,"name":"Escalated","path_id":"F:f9c98a8642"},"S:e03cf612ca":{"line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5"},"S:e0832e1baa":{"line":8,"name":"withRoot","path_id":"F:ddd82fc886"},"S:e099520832":{"line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514"},"S:e09a554f44":{"line":32,"name":"templateLevers","path_id":"F:87c30bdb4c"},"S:e0b068ef78":{"line":31,"name":"TS_SRC","path_id":"F:9a72895a04"},"S:e0eb326a77":{"line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce"},"S:e0f397f4e1":{"line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c"},"S:e15045d8a4":{"line":13,"name":"dryRun","path_id":"F:778c33cdc0"},"S:e152142e8c":{"line":399,"name":"patchMessages","path_id":"F:22566cb46e"},"S:e15dbc7540":{"line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b"},"S:e173063c31":{"line":4,"name":"Queued","path_id":"F:f9c98a8642"},"S:e1813dcc71":{"line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07"},"S:e18ceff2c8":{"line":230,"name":"main","path_id":"F:92d6903b5f"},"S:e193570e9e":{"line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc"},"S:e19487a8ae":{"line":22,"name":"resolveFiles","path_id":"F:ace169adc4"},"S:e23dca26d1":{"line":45,"name":"stripFlags","path_id":"F:116adfb9f8"},"S:e25d17a09c":{"line":17,"name":"SafeDefaults","path_id":"F:3319e5c923"},"S:e2861b1099":{"line":173,"name":"rollback","path_id":"F:1e5ef6ba70"},"S:e2afc6b75b":{"line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c"},"S:e31656bc1d":{"line":33,"name":"readConfig","path_id":"F:940d5f4399"},"S:e3c36060ec":{"line":95,"name":"makeMinimalRepo","path_id":"F:48355ccf4d"},"S:e3f95000e0":{"line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157"},"S:e41c3f2d61":{"line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff"},"S:e44c445050":{"line":21,"name":"HelpHint","path_id":"F:d5b496b125"},"S:e476893b3b":{"line":190,"name":"show","path_id":"F:780c791407"},"S:e4bb79a957":{"line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c"},"S:e5772fff07":{"line":29,"name":"LocalOnly","path_id":"F:c63a71fb57"},"S:e6654c6139":{"line":59,"name":"gateOrder","path_id":"F:edb11415f0"},"S:e6c1406727":{"line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024"},"S:e6e23439bf":{"line":8,"name":"tempRepo","path_id":"F:cba8f1d03b"},"S:e7e0d4979a":{"line":5,"name":"clean","path_id":"F:ffe5c1269b"},"S:e7f49cafe1":{"line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70"},"S:e80517f20b":{"line":6,"name":"ActivationCheck","path_id":"F:14edab923f"},"S:e89c164d25":{"line":54,"name":"titleFromId","path_id":"F:89aee72994"},"S:e8b27564c5":{"line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70"},"S:e8f6de81b4":{"line":259,"name":"selfTest","path_id":"F:aea3c05bca"},"S:e95adce358":{"line":4,"name":"DryRun","path_id":"F:a0068c8817"},"S:e95e85f904":{"line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8"},"S:e96fb86528":{"line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5"},"S:e99608caf1":{"line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b"},"S:e9e4290005":{"line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1"},"S:e9fcedbe8f":{"line":7,"name":"InputProps","path_id":"F:763efdd51c"},"S:ea113218d1":{"line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133"},"S:ea1469d710":{"line":70,"name":"validateConfig","path_id":"F:d480e40c97"},"S:ea5d04ea13":{"line":48,"name":"Armed","path_id":"F:2207a6ebce"},"S:ea76c925e2":{"line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c"},"S:ea841eb82d":{"line":49,"name":"diffConfig","path_id":"F:25e649633c"},"S:eaba90daa0":{"line":101,"name":"exists","path_id":"F:7232ada2da"},"S:eb4b11fdf2":{"line":25,"name":"Drawer","path_id":"F:71f0bfb455"},"S:eb51a5641a":{"line":7,"name":"makePacket","path_id":"F:ba97282cf5"},"S:eb647d4678":{"line":27,"name":"StatusPill","path_id":"F:2fc610bd94"},"S:eb67f0edae":{"line":219,"name":"getFileAt","path_id":"F:92d6903b5f"},"S:ebb9dad93b":{"line":12,"name":"tmp","path_id":"F:baf7641a01"},"S:ebd259dfef":{"line":43,"name":"planProposalReview","path_id":"F:2127a8caca"},"S:ebdb053467":{"line":17,"name":"docAbove","path_id":"F:c598a2d684"},"S:ebe2964819":{"line":198,"name":"CostVM","path_id":"F:0a85f3b8e5"},"S:ec18e42e1a":{"line":32,"name":"extractFile","path_id":"F:2554ddd30c"},"S:ec2e53ab2e":{"line":12,"name":"signature","path_id":"F:c598a2d684"},"S:ec6c0b3d73":{"line":245,"name":"RULES","path_id":"F:2f3e98ab2c"},"S:ecd0da924a":{"line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d"},"S:ed0a2f8660":{"line":28,"name":"git","path_id":"F:e9479e1a3b"},"S:ed1db0b6bb":{"line":176,"name":"reclaimStale","path_id":"F:5b113a0914"},"S:ed24428ce0":{"line":50,"name":"gitHead","path_id":"F:119e3c0fce"},"S:edacefac29":{"line":19,"name":"Sizes","path_id":"F:f6e100ab45"},"S:edb5058173":{"line":685,"name":"helpUri","path_id":"F:8a10462927"},"S:edd792ec6d":{"line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04"},"S:edeb959111":{"line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70"},"S:ee17355d71":{"line":133,"name":"updateSite","path_id":"F:8abf9e432a"},"S:ee3edffdff":{"line":25,"name":"AuditEvent","path_id":"F:76da13a8f7"},"S:ee4deb809d":{"line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da"},"S:ee5246d16c":{"line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b"},"S:ee57130d72":{"line":2,"name":"MESSAGES","path_id":"F:ccb72910b3"},"S:ee9b2c90d1":{"line":53,"name":"walk","path_id":"F:ca0833ac73"},"S:efe9cb11d4":{"line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130"},"S:efea80af4e":{"line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e"},"S:eff02f504b":{"line":689,"name":"toFindings","path_id":"F:8a10462927"},"S:f034e67219":{"line":36,"name":"normalizeLF","path_id":"F:116adfb9f8"},"S:f040dfb6c9":{"line":15,"name":"run","path_id":"F:e540f7b669"},"S:f0db7341e7":{"line":89,"name":"productState","path_id":"F:89aee72994"},"S:f12376c7b1":{"line":136,"name":"readDiff","path_id":"F:2d6ef08990"},"S:f22a53ac17":{"line":305,"name":"createWorkItem","path_id":"F:22566cb46e"},"S:f2642efdc2":{"line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8"},"S:f2e1ea8458":{"line":16,"name":"deriveMode","path_id":"F:0da05a2a05"},"S:f2e55d9b4a":{"line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed"},"S:f2f7e716af":{"line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef"},"S:f36d6a8da6":{"line":12,"name":"buildRemediationView","path_id":"F:5daab9894d"},"S:f3b8628cdb":{"line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9"},"S:f3d272846b":{"line":24,"name":"TierBadge","path_id":"F:da42f69531"},"S:f3e5c99141":{"line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5"},"S:f40a6dfd1b":{"line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff"},"S:f43dc8ad19":{"line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d"},"S:f51dd29844":{"line":145,"name":"normalizePaths","path_id":"F:4db1101024"},"S:f5a168e2ff":{"line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da"},"S:f5a71d2ca6":{"line":19,"name":"runScript","path_id":"F:bbb6476d71"},"S:f613554429":{"line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a"},"S:f6264503e8":{"line":1,"name":"MESSAGES","path_id":"F:a104667369"},"S:f650b22681":{"line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2"},"S:f71a25079c":{"line":549,"name":"main","path_id":"F:ddeb486c49"},"S:f794e6adf4":{"line":6,"name":"typeOf","path_id":"F:34cb2b6c48"},"S:f8004b7b76":{"line":475,"name":"invokeRole","path_id":"F:ddeb486c49"},"S:f80ff247d7":{"line":1,"name":"MESSAGES","path_id":"F:c6bd51a324"},"S:f8524caefc":{"line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9"},"S:f88498de73":{"line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407"},"S:f88ca29ea3":{"line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c"},"S:f93b3b8c7c":{"line":95,"name":"buildEvidence","path_id":"F:2e327963ed"},"S:f988f356bd":{"line":4,"name":"Variants","path_id":"F:f6e100ab45"},"S:f99cb9f35c":{"line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307"},"S:f99d630708":{"line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa"},"S:f9a749a2b1":{"line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820"},"S:f9a8f3309b":{"line":25,"name":"scaffold","path_id":"F:940d5f4399"},"S:f9d6a590e4":{"line":14,"name":"docAbove","path_id":"F:ffe5c1269b"},"S:fa36ece453":{"line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91"},"S:fa6785fa4b":{"line":1,"name":"MESSAGES","path_id":"F:3f1216fc11"},"S:fa71aef711":{"line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2"},"S:fb06279d5d":{"line":48,"name":"normalizeSignals","path_id":"F:e11f907cba"},"S:fb4a6826d7":{"line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80"},"S:fb6bf396bc":{"line":61,"name":"planReview","path_id":"F:2d6ef08990"},"S:fb81ef11a3":{"line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b"},"S:fc01241f03":{"line":13,"name":"cfg","path_id":"F:1bcaaff9eb"},"S:fc28898c78":{"line":44,"name":"resolveToken","path_id":"F:cdbe769ed3"},"S:fc3bb4bc24":{"line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9"},"S:fc6086da9e":{"line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da"},"S:fc6f0e771f":{"line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94"},"S:fc7eb05498":{"line":9,"name":"ArmingMode","path_id":"F:c64c042051"},"S:fc880b17bd":{"line":56,"name":"readOrNull","path_id":"F:4db1101024"},"S:fcf3c9d4a4":{"line":39,"name":"run","path_id":"F:4fad18c892"},"S:fd230402e2":{"line":323,"name":"deconfuse","path_id":"F:8a10462927"},"S:fd2e16186e":{"line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0"},"S:fd42584b25":{"line":1,"name":"MESSAGES","path_id":"F:efa02030ca"},"S:fd58589dfa":{"line":127,"name":"makePlan","path_id":"F:580d11b514"},"S:fd822bf451":{"line":45,"name":"tryTransition","path_id":"F:d135cffeaa"},"S:fd88bace68":{"line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236"},"S:fd9d32de9a":{"line":272,"name":"releaseLease","path_id":"F:22566cb46e"},"S:fdc2a33d21":{"line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157"},"S:fdf5ba078f":{"line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c"},"S:fe07a3bcbc":{"line":13,"name":"gitRepo","path_id":"F:de5ebbf586"},"S:fe1a464205":{"line":60,"name":"applyPatch","path_id":"F:872221b1da"},"S:fe27a88258":{"line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f"},"S:fe41df17f9":{"line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49"},"S:fe9c17eefa":{"line":12,"name":"tmp","path_id":"F:d7d4e8d2a9"},"S:fea88d42b6":{"line":5,"name":"TierBadgeProps","path_id":"F:da42f69531"},"S:fedbb5f441":{"line":4,"name":"NotificationService","path_id":"F:b9d806ba4d"},"S:ff45c441d1":{"line":67,"name":"canReach","path_id":"F:37f4a5c04e"},"S:fff471613b":{"line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53"}}},"edges":[{"from":"F:015261eab0","to":"F:f51cba9beb"},{"from":"F:03f476958e","to":"F:05a0f0d5a5"},{"from":"F:03f476958e","to":"F:09ea014068"},{"from":"F:03f476958e","to":"F:0c731e3460"},{"from":"F:03f476958e","to":"F:1127892e72"},{"from":"F:03f476958e","to":"F:179564da6f"},{"from":"F:03f476958e","to":"F:1ff2bf39a4"},{"from":"F:03f476958e","to":"F:2215d0e1fc"},{"from":"F:03f476958e","to":"F:23dbdd7e76"},{"from":"F:03f476958e","to":"F:240ace7a8f"},{"from":"F:03f476958e","to":"F:2715f09f24"},{"from":"F:03f476958e","to":"F:313bcfac46"},{"from":"F:03f476958e","to":"F:33c4d744f3"},{"from":"F:03f476958e","to":"F:35d4a12b63"},{"from":"F:03f476958e","to":"F:3835919e8e"},{"from":"F:03f476958e","to":"F:3f1216fc11"},{"from":"F:03f476958e","to":"F:40d8f235fd"},{"from":"F:03f476958e","to":"F:4d08d5472f"},{"from":"F:03f476958e","to":"F:597cc7ae15"},{"from":"F:03f476958e","to":"F:59b2499e4e"},{"from":"F:03f476958e","to":"F:5b5b4ddcae"},{"from":"F:03f476958e","to":"F:5d02ea0b02"},{"from":"F:03f476958e","to":"F:5d52d97b8a"},{"from":"F:03f476958e","to":"F:6a86908a3e"},{"from":"F:03f476958e","to":"F:86fd2cf669"},{"from":"F:03f476958e","to":"F:91e24dcac0"},{"from":"F:03f476958e","to":"F:9616513cb6"},{"from":"F:03f476958e","to":"F:964f89b6cc"},{"from":"F:03f476958e","to":"F:973aca5f3e"},{"from":"F:03f476958e","to":"F:9803feef4a"},{"from":"F:03f476958e","to":"F:99251bc045"},{"from":"F:03f476958e","to":"F:9a32917e56"},{"from":"F:03f476958e","to":"F:9b01a5cd4d"},{"from":"F:03f476958e","to":"F:9dbf431d3e"},{"from":"F:03f476958e","to":"F:a104667369"},{"from":"F:03f476958e","to":"F:a5822fdd03"},{"from":"F:03f476958e","to":"F:a8c32b8f15"},{"from":"F:03f476958e","to":"F:aa27d254da"},{"from":"F:03f476958e","to":"F:acc3f6b466"},{"from":"F:03f476958e","to":"F:b25dcdad19"},{"from":"F:03f476958e","to":"F:b2efd505ef"},{"from":"F:03f476958e","to":"F:b4f4e16ca1"},{"from":"F:03f476958e","to":"F:b502a0fe75"},{"from":"F:03f476958e","to":"F:bf4e255c6e"},{"from":"F:03f476958e","to":"F:c6bd51a324"},{"from":"F:03f476958e","to":"F:ccb72910b3"},{"from":"F:03f476958e","to":"F:d288a78085"},{"from":"F:03f476958e","to":"F:d328f97d94"},{"from":"F:03f476958e","to":"F:d8e37c4449"},{"from":"F:03f476958e","to":"F:da9133a29d"},{"from":"F:03f476958e","to":"F:dd58ae3791"},{"from":"F:03f476958e","to":"F:de188c1b79"},{"from":"F:03f476958e","to":"F:e2025a4e0c"},{"from":"F:03f476958e","to":"F:e6677dcd37"},{"from":"F:03f476958e","to":"F:e948251d2b"},{"from":"F:03f476958e","to":"F:e9f1cc1e5d"},{"from":"F:03f476958e","to":"F:ec3aa9930a"},{"from":"F:03f476958e","to":"F:efa02030ca"},{"from":"F:03f476958e","to":"F:f41378fed0"},{"from":"F:044b762a79","to":"F:1ecd18c4b9"},{"from":"F:059f9a812c","to":"F:cc361bd05a"},{"from":"F:05bffc70e9","to":"F:03f476958e"},{"from":"F:05bffc70e9","to":"F:1575110130"},{"from":"F:05bffc70e9","to":"F:34cb2b6c48"},{"from":"F:06b982f5a2","to":"F:ddeb486c49"},{"from":"F:06b982f5a2","to":"F:fd660a117b"},{"from":"F:08064e0c53","to":"F:2fc610bd94"},{"from":"F:08064e0c53","to":"F:71f0bfb455"},{"from":"F:08064e0c53","to":"F:b5ae6ee133"},{"from":"F:08064e0c53","to":"F:c64c042051"},{"from":"F:08064e0c53","to":"F:da42f69531"},{"from":"F:08064e0c53","to":"F:f942e88a8f"},{"from":"F:08441e59e8","to":"F:65193a9799"},{"from":"F:08b7435c86","to":"F:22566cb46e"},{"from":"F:08b7435c86","to":"F:8a3dd6ccff"},{"from":"F:08b7435c86","to":"F:fd4b8473fa"},{"from":"F:093689bb8e","to":"F:ddeb486c49"},{"from":"F:093689bb8e","to":"F:fd660a117b"},{"from":"F:09ba331878","to":"F:05bffc70e9"},{"from":"F:09ba331878","to":"F:4ebb5aa8a0"},{"from":"F:09ba331878","to":"F:ff2c4a08a4"},{"from":"F:0a1a9270a7","to":"F:583edef643"},{"from":"F:0c1c5ad5d9","to":"F:05bffc70e9"},{"from":"F:0c1c5ad5d9","to":"F:0cacf66a3b"},{"from":"F:0c1c5ad5d9","to":"F:245efb551c"},{"from":"F:0c1c5ad5d9","to":"F:65193a9799"},{"from":"F:0cc3e727ed","to":"F:763efdd51c"},{"from":"F:0e9e38f100","to":"F:ab334f34df"},{"from":"F:113387361d","to":"F:0a85f3b8e5"},{"from":"F:113387361d","to":"F:304fa8ef33"},{"from":"F:113387361d","to":"F:3c479cac6e"},{"from":"F:113387361d","to":"F:4ebf08705b"},{"from":"F:113387361d","to":"F:6627655633"},{"from":"F:113387361d","to":"F:757a70680a"},{"from":"F:113387361d","to":"F:95d4304133"},{"from":"F:113387361d","to":"F:9b3f18856e"},{"from":"F:113387361d","to":"F:e40ce1af48"},{"from":"F:114d351bdc","to":"F:1575110130"},{"from":"F:114d351bdc","to":"F:34cb2b6c48"},{"from":"F:114d351bdc","to":"F:932d33be00"},{"from":"F:114d351bdc","to":"F:9d69a6b766"},{"from":"F:116adfb9f8","to":"F:05bffc70e9"},{"from":"F:116adfb9f8","to":"F:2d93cea2d4"},{"from":"F:116adfb9f8","to":"F:2f3e98ab2c"},{"from":"F:12c7a4e461","to":"F:245efb551c"},{"from":"F:146a198c06","to":"F:d20e4b6b91"},{"from":"F:14edab923f","to":"F:7c8d518693"},{"from":"F:14edab923f","to":"F:8b122c449e"},{"from":"F:14edab923f","to":"F:c64c042051"},{"from":"F:14edab923f","to":"F:deab644e60"},{"from":"F:168fe4d371","to":"F:09ba331878"},{"from":"F:1714946cc1","to":"F:05bffc70e9"},{"from":"F:1714946cc1","to":"F:1a19f02364"},{"from":"F:1716017e02","to":"F:90fc20ddd8"},{"from":"F:182dcaa949","to":"F:956332d4b5"},{"from":"F:18f569225a","to":"F:ddeb486c49"},{"from":"F:18f569225a","to":"F:eb14a0bdeb"},{"from":"F:1a137480ae","to":"F:7c8d518693"},{"from":"F:1a137480ae","to":"F:deab644e60"},{"from":"F:1bc04b108f","to":"F:e7380d1444"},{"from":"F:1bcaaff9eb","to":"F:932d33be00"},{"from":"F:1bcaaff9eb","to":"F:ddeb486c49"},{"from":"F:1bcaaff9eb","to":"F:fd660a117b"},{"from":"F:1c1d4f7335","to":"F:819f72edf6"},{"from":"F:1d03291691","to":"F:2fc610bd94"},{"from":"F:1d03291691","to":"F:40eb542a82"},{"from":"F:1d03291691","to":"F:8b122c449e"},{"from":"F:1db369d970","to":"F:7c8d518693"},{"from":"F:1db369d970","to":"F:deab644e60"},{"from":"F:1e15c1666f","to":"F:4dabd020df"},{"from":"F:1e15c1666f","to":"F:cdbe769ed3"},{"from":"F:1e5ef6ba70","to":"F:05bffc70e9"},{"from":"F:1e5ef6ba70","to":"F:4a7eaceb5c"},{"from":"F:1e5ef6ba70","to":"F:8ffb11f281"},{"from":"F:1e5ef6ba70","to":"F:932d33be00"},{"from":"F:1e5ef6ba70","to":"F:ff2c4a08a4"},{"from":"F:2127a8caca","to":"F:304ce7b89d"},{"from":"F:2127a8caca","to":"F:8d2cb93236"},{"from":"F:2127a8caca","to":"F:932d33be00"},{"from":"F:214cc0a5f4","to":"F:7c8d518693"},{"from":"F:214cc0a5f4","to":"F:d5b496b125"},{"from":"F:22566cb46e","to":"F:05bffc70e9"},{"from":"F:22566cb46e","to":"F:1575110130"},{"from":"F:22566cb46e","to":"F:54df44aadd"},{"from":"F:22566cb46e","to":"F:cb3c5f7715"},{"from":"F:22566cb46e","to":"F:d480e40c97"},{"from":"F:22fab804b1","to":"F:94050e680d"},{"from":"F:23917c6197","to":"F:05bffc70e9"},{"from":"F:2554ddd30c","to":"F:3213d03b72"},{"from":"F:2554ddd30c","to":"F:36419aa427"},{"from":"F:2554ddd30c","to":"F:594f505f11"},{"from":"F:2554ddd30c","to":"F:c598a2d684"},{"from":"F:2554ddd30c","to":"F:ffe5c1269b"},{"from":"F:25e649633c","to":"F:0a85f3b8e5"},{"from":"F:268769c4a6","to":"F:7c8d518693"},{"from":"F:268769c4a6","to":"F:deab644e60"},{"from":"F:2a74ae3f05","to":"F:2554ddd30c"},{"from":"F:2a74ae3f05","to":"F:cecdb96382"},{"from":"F:2af556d595","to":"F:05bffc70e9"},{"from":"F:2af556d595","to":"F:1575110130"},{"from":"F:2b9c43b0ca","to":"F:245efb551c"},{"from":"F:2d4c555ba1","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:1a19f02364"},{"from":"F:2d6ef08990","to":"F:304ce7b89d"},{"from":"F:2d6ef08990","to":"F:8d2cb93236"},{"from":"F:2d6ef08990","to":"F:932d33be00"},{"from":"F:2f3e98ab2c","to":"F:68c4da7fe8"},{"from":"F:2f6c42c5ee","to":"F:deab644e60"},{"from":"F:2fc610bd94","to":"F:7c8d518693"},{"from":"F:2fc610bd94","to":"F:deab644e60"},{"from":"F:304ce7b89d","to":"F:8b5a1f94c4"},{"from":"F:304fa8ef33","to":"F:0a85f3b8e5"},{"from":"F:304fa8ef33","to":"F:3c479cac6e"},{"from":"F:304fa8ef33","to":"F:e406ceab72"},{"from":"F:31d378932b","to":"F:05bffc70e9"},{"from":"F:31d378932b","to":"F:4ebb5aa8a0"},{"from":"F:35c6d59157","to":"F:7c8d518693"},{"from":"F:35c6d59157","to":"F:deab644e60"},{"from":"F:373a946d5c","to":"F:ff3aef693f"},{"from":"F:373fee03a1","to":"F:08064e0c53"},{"from":"F:37f4a5c04e","to":"F:05bffc70e9"},{"from":"F:398655650f","to":"F:1575110130"},{"from":"F:398655650f","to":"F:304ce7b89d"},{"from":"F:398655650f","to":"F:932d33be00"},{"from":"F:3a2345f153","to":"F:b014028f57"},{"from":"F:3c53926ecd","to":"F:599f5b2f28"},{"from":"F:3d95ec2ed5","to":"F:68c4da7fe8"},{"from":"F:3dd926c4de","to":"F:f8609bae0b"},{"from":"F:3de9042953","to":"F:0c1c5ad5d9"},{"from":"F:3de9042953","to":"F:12c7a4e461"},{"from":"F:3de9042953","to":"F:245efb551c"},{"from":"F:3de9042953","to":"F:7b3e38c9a6"},{"from":"F:3fe6b95e07","to":"F:66264a042c"},{"from":"F:4096620673","to":"F:05bffc70e9"},{"from":"F:4096620673","to":"F:1575110130"},{"from":"F:4096620673","to":"F:34cb2b6c48"},{"from":"F:40eb542a82","to":"F:7c8d518693"},{"from":"F:40eb542a82","to":"F:d5b496b125"},{"from":"F:4377343f4f","to":"F:ddeb486c49"},{"from":"F:44a5987438","to":"F:4a7eaceb5c"},{"from":"F:4637e1fecb","to":"F:119e3c0fce"},{"from":"F:4637e1fecb","to":"F:245efb551c"},{"from":"F:4637e1fecb","to":"F:dbb9c92ca1"},{"from":"F:46c40327ad","to":"F:40eb542a82"},{"from":"F:4749cc43a0","to":"F:05bffc70e9"},{"from":"F:48355ccf4d","to":"F:34cb2b6c48"},{"from":"F:4a7eaceb5c","to":"F:6e0bd62fa3"},{"from":"F:4a7eaceb5c","to":"F:e4ff19bbe2"},{"from":"F:4b7eb18a4b","to":"F:da42f69531"},{"from":"F:4b91a9f65b","to":"F:68c4da7fe8"},{"from":"F:4c741a5b06","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:245efb551c"},{"from":"F:4db1101024","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:98529ba7ea"},{"from":"F:4ebb5aa8a0","to":"F:05bffc70e9"},{"from":"F:4ebf08705b","to":"F:0a85f3b8e5"},{"from":"F:4ebf08705b","to":"F:25e649633c"},{"from":"F:4ebf08705b","to":"F:3c479cac6e"},{"from":"F:4ebf08705b","to":"F:e406ceab72"},{"from":"F:4ebf08705b","to":"F:ec52ca3820"},{"from":"F:4fd28fc2ff","to":"F:05bffc70e9"},{"from":"F:4fd28fc2ff","to":"F:1575110130"},{"from":"F:500dd805f6","to":"F:35c6d59157"},{"from":"F:52338ea290","to":"F:eb14a0bdeb"},{"from":"F:52caf3b287","to":"F:54c6928de9"},{"from":"F:52ef6ad4a1","to":"F:4ebb5aa8a0"},{"from":"F:57ca5f1716","to":"F:2fc610bd94"},{"from":"F:57ca5f1716","to":"F:d5b496b125"},{"from":"F:580d11b514","to":"F:872221b1da"},{"from":"F:580d11b514","to":"F:ddeb486c49"},{"from":"F:580d11b514","to":"F:eb14a0bdeb"},{"from":"F:583edef643","to":"F:2fc610bd94"},{"from":"F:583edef643","to":"F:40eb542a82"},{"from":"F:583edef643","to":"F:8b122c449e"},{"from":"F:596687118c","to":"F:63351e350b"},{"from":"F:5994385869","to":"F:f07f8ebca9"},{"from":"F:5b113a0914","to":"F:05bffc70e9"},{"from":"F:5b113a0914","to":"F:34cb2b6c48"},{"from":"F:5daab9894d","to":"F:8ffb11f281"},{"from":"F:5e450ff82c","to":"F:a7ce0f6452"},{"from":"F:5f7910375b","to":"F:05bffc70e9"},{"from":"F:5f7910375b","to":"F:1575110130"},{"from":"F:5f7910375b","to":"F:f07f8ebca9"},{"from":"F:5f88bf32ca","to":"F:1d03291691"},{"from":"F:60548316f5","to":"F:f90930c3c3"},{"from":"F:61296e720c","to":"F:05bffc70e9"},{"from":"F:61296e720c","to":"F:6e0bd62fa3"},{"from":"F:61296e720c","to":"F:e4ff19bbe2"},{"from":"F:63351e350b","to":"F:7c8d518693"},{"from":"F:63351e350b","to":"F:a8cfe45d27"},{"from":"F:63c1c23ccb","to":"F:63351e350b"},{"from":"F:63c1c23ccb","to":"F:8b122c449e"},{"from":"F:65193a9799","to":"F:05bffc70e9"},{"from":"F:65193a9799","to":"F:34cb2b6c48"},{"from":"F:65193a9799","to":"F:68c4da7fe8"},{"from":"F:66264a042c","to":"F:7c8d518693"},{"from":"F:66264a042c","to":"F:deab644e60"},{"from":"F:6627655633","to":"F:0a85f3b8e5"},{"from":"F:6627655633","to":"F:f83d1100e9"},{"from":"F:667ef091ca","to":"F:14edab923f"},{"from":"F:686a544e0e","to":"F:2d6ef08990"},{"from":"F:698ea4b2e9","to":"F:ddeb486c49"},{"from":"F:6bfa4389b5","to":"F:2fc610bd94"},{"from":"F:6f247eb514","to":"F:1a19f02364"},{"from":"F:6f247eb514","to":"F:ae46bbab81"},{"from":"F:6f247eb514","to":"F:e11f907cba"},{"from":"F:7054844360","to":"F:7c8d518693"},{"from":"F:7054844360","to":"F:d5b496b125"},{"from":"F:7054844360","to":"F:deab644e60"},{"from":"F:70d12a92c6","to":"F:7a1f7d680b"},{"from":"F:71f0bfb455","to":"F:a8cfe45d27"},{"from":"F:7232ada2da","to":"F:05bffc70e9"},{"from":"F:757a70680a","to":"F:0a85f3b8e5"},{"from":"F:757a70680a","to":"F:3c479cac6e"},{"from":"F:757a70680a","to":"F:e406ceab72"},{"from":"F:758ab56395","to":"F:5a3543606b"},{"from":"F:758ab56395","to":"F:e8676a18b7"},{"from":"F:763efdd51c","to":"F:7c8d518693"},{"from":"F:763efdd51c","to":"F:d5b496b125"},{"from":"F:763efdd51c","to":"F:deab644e60"},{"from":"F:76da13a8f7","to":"F:86838d35ac"},{"from":"F:76da13a8f7","to":"F:deab644e60"},{"from":"F:780c791407","to":"F:05bffc70e9"},{"from":"F:780c791407","to":"F:1575110130"},{"from":"F:780c791407","to":"F:245efb551c"},{"from":"F:780c791407","to":"F:2d93cea2d4"},{"from":"F:780c791407","to":"F:34cb2b6c48"},{"from":"F:780c791407","to":"F:4db1101024"},{"from":"F:7a1f7d680b","to":"F:7c8d518693"},{"from":"F:7a1f7d680b","to":"F:c64c042051"},{"from":"F:7a1f7d680b","to":"F:deab644e60"},{"from":"F:7b3e38c9a6","to":"F:05bffc70e9"},{"from":"F:7b3e38c9a6","to":"F:245efb551c"},{"from":"F:7d236c9aa6","to":"F:0a85f3b8e5"},{"from":"F:815abebda1","to":"F:63c1c23ccb"},{"from":"F:819f72edf6","to":"F:7c8d518693"},{"from":"F:819f72edf6","to":"F:d5b496b125"},{"from":"F:819f72edf6","to":"F:deab644e60"},{"from":"F:81c495717c","to":"F:7c8d518693"},{"from":"F:81c495717c","to":"F:d5b496b125"},{"from":"F:828cf970bc","to":"F:304ce7b89d"},{"from":"F:849bc0a60f","to":"F:a402d2f9ed"},{"from":"F:85e076f56b","to":"F:deab644e60"},{"from":"F:868321590c","to":"F:05bffc70e9"},{"from":"F:868321590c","to":"F:1575110130"},{"from":"F:868321590c","to":"F:f07f8ebca9"},{"from":"F:87c30bdb4c","to":"F:05bffc70e9"},{"from":"F:87c30bdb4c","to":"F:1575110130"},{"from":"F:87c30bdb4c","to":"F:9d69a6b766"},{"from":"F:885187507a","to":"F:113387361d"},{"from":"F:885187507a","to":"F:4a6129eacb"},{"from":"F:89aee72994","to":"F:0a85f3b8e5"},{"from":"F:89f25e2f3d","to":"F:1db369d970"},{"from":"F:8a10462927","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:54df44aadd"},{"from":"F:8a3dd6ccff","to":"F:5daab9894d"},{"from":"F:8a9aff1529","to":"F:7c8d518693"},{"from":"F:8aa9ba4dcb","to":"F:d135cffeaa"},{"from":"F:8abf9e432a","to":"F:05bffc70e9"},{"from":"F:8b122c449e","to":"F:7c8d518693"},{"from":"F:8b122c449e","to":"F:deab644e60"},{"from":"F:8b2f3dbcba","to":"F:1575110130"},{"from":"F:8b2f3dbcba","to":"F:22566cb46e"},{"from":"F:8b2f3dbcba","to":"F:304ce7b89d"},{"from":"F:8b2f3dbcba","to":"F:d480e40c97"},{"from":"F:8b2f3dbcba","to":"F:ddeb486c49"},{"from":"F:8b7ee49cdd","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:f51cba9beb"},{"from":"F:8bb1b57470","to":"F:1ecd18c4b9"},{"from":"F:8bb1b57470","to":"F:54c6928de9"},{"from":"F:8bb1b57470","to":"F:599f5b2f28"},{"from":"F:8bb1b57470","to":"F:b9d806ba4d"},{"from":"F:8bb1b57470","to":"F:bd02b28f17"},{"from":"F:8bb1b57470","to":"F:ff3aef693f"},{"from":"F:8c6234a8cb","to":"F:2fc610bd94"},{"from":"F:8c6234a8cb","to":"F:7c8d518693"},{"from":"F:8c6234a8cb","to":"F:86838d35ac"},{"from":"F:8c6234a8cb","to":"F:deab644e60"},{"from":"F:8d2cb93236","to":"F:05bffc70e9"},{"from":"F:8fe56e5618","to":"F:1575110130"},{"from":"F:8fe56e5618","to":"F:65193a9799"},{"from":"F:8fe56e5618","to":"F:932d33be00"},{"from":"F:8ffb11f281","to":"F:4a7eaceb5c"},{"from":"F:9040e0c030","to":"F:2f6c42c5ee"},{"from":"F:90cbb2cf6a","to":"F:34cb2b6c48"},{"from":"F:90e1fd2fd9","to":"F:05bffc70e9"},{"from":"F:90e1fd2fd9","to":"F:cdbe769ed3"},{"from":"F:90e1fd2fd9","to":"F:ff2c4a08a4"},{"from":"F:90fc20ddd8","to":"F:7c8d518693"},{"from":"F:9204ee9f08","to":"F:9f0fb6ed8b"},{"from":"F:92d6903b5f","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:d480e40c97"},{"from":"F:933d506be9","to":"F:34cb2b6c48"},{"from":"F:933d506be9","to":"F:98529ba7ea"},{"from":"F:9344d335a6","to":"F:05bffc70e9"},{"from":"F:9344d335a6","to":"F:1575110130"},{"from":"F:9344d335a6","to":"F:4ebb5aa8a0"},{"from":"F:94050e680d","to":"F:2d6ef08990"},{"from":"F:94050e680d","to":"F:304ce7b89d"},{"from":"F:94050e680d","to":"F:8d2cb93236"},{"from":"F:94050e680d","to":"F:932d33be00"},{"from":"F:9427d264e6","to":"F:05bffc70e9"},{"from":"F:94c9bc6065","to":"F:34cb2b6c48"},{"from":"F:956332d4b5","to":"F:2fc610bd94"},{"from":"F:956332d4b5","to":"F:86838d35ac"},{"from":"F:956332d4b5","to":"F:8b122c449e"},{"from":"F:956332d4b5","to":"F:a402d2f9ed"},{"from":"F:956332d4b5","to":"F:f942e88a8f"},{"from":"F:95d4304133","to":"F:0a85f3b8e5"},{"from":"F:95d4304133","to":"F:0da05a2a05"},{"from":"F:95d4304133","to":"F:7d236c9aa6"},{"from":"F:95d4304133","to":"F:89aee72994"},{"from":"F:95d4304133","to":"F:ec52ca3820"},{"from":"F:9b3f18856e","to":"F:0a85f3b8e5"},{"from":"F:9b3f18856e","to":"F:3c479cac6e"},{"from":"F:9b3f18856e","to":"F:e406ceab72"},{"from":"F:9bb94e1b40","to":"F:90e1fd2fd9"},{"from":"F:9d69a6b766","to":"F:05bffc70e9"},{"from":"F:9d69a6b766","to":"F:1575110130"},{"from":"F:9dc816763b","to":"F:b16afebae9"},{"from":"F:9deac13db0","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:d5b496b125"},{"from":"F:9f0fb6ed8b","to":"F:deab644e60"},{"from":"F:9f36b3ef29","to":"F:34cb2b6c48"},{"from":"F:a0d489df6d","to":"F:119e3c0fce"},{"from":"F:a0d489df6d","to":"F:1575110130"},{"from":"F:a0d489df6d","to":"F:245efb551c"},{"from":"F:a0d489df6d","to":"F:2554ddd30c"},{"from":"F:a0d489df6d","to":"F:2b9c43b0ca"},{"from":"F:a0d489df6d","to":"F:cb66095cb4"},{"from":"F:a0d489df6d","to":"F:cecdb96382"},{"from":"F:a0d489df6d","to":"F:dbb9c92ca1"},{"from":"F:a402d2f9ed","to":"F:7c8d518693"},{"from":"F:a42da90970","to":"F:b3a2ad52bb"},{"from":"F:a52954a167","to":"F:08b7435c86"},{"from":"F:a862b1c3b6","to":"F:1a137480ae"},{"from":"F:a8cfe45d27","to":"F:7c8d518693"},{"from":"F:a8cfe45d27","to":"F:deab644e60"},{"from":"F:aa77f227a6","to":"F:05bffc70e9"},{"from":"F:ab334f34df","to":"F:7c8d518693"},{"from":"F:ab334f34df","to":"F:deab644e60"},{"from":"F:ac11b5379f","to":"F:05bffc70e9"},{"from":"F:ac11b5379f","to":"F:4ebb5aa8a0"},{"from":"F:ace169adc4","to":"F:05bffc70e9"},{"from":"F:ace169adc4","to":"F:68c4da7fe8"},{"from":"F:add7add561","to":"F:0a1a9270a7"},{"from":"F:add7add561","to":"F:0cc3e727ed"},{"from":"F:add7add561","to":"F:0e9e38f100"},{"from":"F:add7add561","to":"F:146a198c06"},{"from":"F:add7add561","to":"F:1716017e02"},{"from":"F:add7add561","to":"F:182dcaa949"},{"from":"F:add7add561","to":"F:1c1d4f7335"},{"from":"F:add7add561","to":"F:373fee03a1"},{"from":"F:add7add561","to":"F:3dd926c4de"},{"from":"F:add7add561","to":"F:3fe6b95e07"},{"from":"F:add7add561","to":"F:46c40327ad"},{"from":"F:add7add561","to":"F:4b7eb18a4b"},{"from":"F:add7add561","to":"F:500dd805f6"},{"from":"F:add7add561","to":"F:596687118c"},{"from":"F:add7add561","to":"F:5f88bf32ca"},{"from":"F:add7add561","to":"F:667ef091ca"},{"from":"F:add7add561","to":"F:6bfa4389b5"},{"from":"F:add7add561","to":"F:70d12a92c6"},{"from":"F:add7add561","to":"F:7c8d518693"},{"from":"F:add7add561","to":"F:815abebda1"},{"from":"F:add7add561","to":"F:849bc0a60f"},{"from":"F:add7add561","to":"F:85e076f56b"},{"from":"F:add7add561","to":"F:86838d35ac"},{"from":"F:add7add561","to":"F:89f25e2f3d"},{"from":"F:add7add561","to":"F:9040e0c030"},{"from":"F:add7add561","to":"F:9204ee9f08"},{"from":"F:add7add561","to":"F:a42da90970"},{"from":"F:add7add561","to":"F:a862b1c3b6"},{"from":"F:add7add561","to":"F:b39c90fbe6"},{"from":"F:add7add561","to":"F:b51ccbe79a"},{"from":"F:add7add561","to":"F:b677f38b10"},{"from":"F:add7add561","to":"F:bb2d98fca6"},{"from":"F:add7add561","to":"F:c14dd92bce"},{"from":"F:add7add561","to":"F:c2ff3fda15"},{"from":"F:add7add561","to":"F:c412f056b4"},{"from":"F:add7add561","to":"F:c5da07872e"},{"from":"F:add7add561","to":"F:c64c042051"},{"from":"F:add7add561","to":"F:d01156348d"},{"from":"F:add7add561","to":"F:d05701e1ab"},{"from":"F:add7add561","to":"F:d0d703a4e0"},{"from":"F:add7add561","to":"F:de988f64d4"},{"from":"F:add7add561","to":"F:ea9e0801d5"},{"from":"F:add7add561","to":"F:f00c212d41"},{"from":"F:add7add561","to":"F:f13b76e6fd"},{"from":"F:add7add561","to":"F:f57cf1a212"},{"from":"F:add7add561","to":"F:f6abfc128a"},{"from":"F:add7add561","to":"F:fb5935daaf"},{"from":"F:add7add561","to":"F:fc43ea4859"},{"from":"F:aea3c05bca","to":"F:932d33be00"},{"from":"F:aea3c05bca","to":"F:f51cba9beb"},{"from":"F:aecebb26be","to":"F:5daab9894d"},{"from":"F:b1598d4449","to":"F:119e3c0fce"},{"from":"F:b1598d4449","to":"F:cb66095cb4"},{"from":"F:b1598d4449","to":"F:dbb9c92ca1"},{"from":"F:b16afebae9","to":"F:34cb2b6c48"},{"from":"F:b28f13b600","to":"F:65193a9799"},{"from":"F:b28f13b600","to":"F:932d33be00"},{"from":"F:b28f13b600","to":"F:f07f8ebca9"},{"from":"F:b39c90fbe6","to":"F:9deac13db0"},{"from":"F:b3a2ad52bb","to":"F:7c8d518693"},{"from":"F:b3a2ad52bb","to":"F:deab644e60"},{"from":"F:b51ccbe79a","to":"F:b5ae6ee133"},{"from":"F:b5ae6ee133","to":"F:2fc610bd94"},{"from":"F:b5ae6ee133","to":"F:7c8d518693"},{"from":"F:b5ae6ee133","to":"F:c64c042051"},{"from":"F:b5ae6ee133","to":"F:da42f69531"},{"from":"F:b5ae6ee133","to":"F:deab644e60"},{"from":"F:b677f38b10","to":"F:7054844360"},{"from":"F:b806994000","to":"F:05bffc70e9"},{"from":"F:b806994000","to":"F:1575110130"},{"from":"F:b806994000","to":"F:2127a8caca"},{"from":"F:b806994000","to":"F:6f247eb514"},{"from":"F:b806994000","to":"F:f07f8ebca9"},{"from":"F:ba97282cf5","to":"F:65193a9799"},{"from":"F:bb0ec91260","to":"F:05bffc70e9"},{"from":"F:bb2d98fca6","to":"F:f942e88a8f"},{"from":"F:bbb6476d71","to":"F:4ebb5aa8a0"},{"from":"F:bbb6476d71","to":"F:f07f8ebca9"},{"from":"F:bf3dae9563","to":"F:6f247eb514"},{"from":"F:bf3dae9563","to":"F:f07f8ebca9"},{"from":"F:c14dd92bce","to":"F:8b122c449e"},{"from":"F:c1a96ec6e2","to":"F:a1baa3f01d"},{"from":"F:c2ff3fda15","to":"F:268769c4a6"},{"from":"F:c3cd2dc5c9","to":"F:1575110130"},{"from":"F:c412f056b4","to":"F:57ca5f1716"},{"from":"F:c4395c3023","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:1575110130"},{"from":"F:c5938c33fd","to":"F:98529ba7ea"},{"from":"F:c5da07872e","to":"F:c0e80ca327"},{"from":"F:c9493b5275","to":"F:05bffc70e9"},{"from":"F:c9493b5275","to":"F:4ebb5aa8a0"},{"from":"F:ca0833ac73","to":"F:05bffc70e9"},{"from":"F:ca0833ac73","to":"F:4a7eaceb5c"},{"from":"F:cb3c5f7715","to":"F:05bffc70e9"},{"from":"F:cb3c5f7715","to":"F:34cb2b6c48"},{"from":"F:cba8f1d03b","to":"F:a7ce0f6452"},{"from":"F:cc361bd05a","to":"F:05bffc70e9"},{"from":"F:cdbe769ed3","to":"F:05bffc70e9"},{"from":"F:ce1173e176","to":"F:2fc610bd94"},{"from":"F:ce1173e176","to":"F:86838d35ac"},{"from":"F:ce1173e176","to":"F:9deac13db0"},{"from":"F:ce1173e176","to":"F:a402d2f9ed"},{"from":"F:ce41983a53","to":"F:ddeb486c49"},{"from":"F:ce41983a53","to":"F:fd660a117b"},{"from":"F:d01156348d","to":"F:71f0bfb455"},{"from":"F:d05701e1ab","to":"F:8c6234a8cb"},{"from":"F:d0d703a4e0","to":"F:d5b496b125"},{"from":"F:d135cffeaa","to":"F:05bffc70e9"},{"from":"F:d1b898f17f","to":"F:b9d806ba4d"},{"from":"F:d20e4b6b91","to":"F:7c8d518693"},{"from":"F:d20e4b6b91","to":"F:a8cfe45d27"},{"from":"F:d480e40c97","to":"F:05bffc70e9"},{"from":"F:d480e40c97","to":"F:1575110130"},{"from":"F:d480e40c97","to":"F:34cb2b6c48"},{"from":"F:d5b496b125","to":"F:8a9aff1529"},{"from":"F:d5b496b125","to":"F:deab644e60"},{"from":"F:d754b827f4","to":"F:fd660a117b"},{"from":"F:d8fb8339ce","to":"F:2fc610bd94"},{"from":"F:d8fb8339ce","to":"F:7c8d518693"},{"from":"F:d8fb8339ce","to":"F:8b122c449e"},{"from":"F:d8fb8339ce","to":"F:deab644e60"},{"from":"F:da42f69531","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:d5b496b125"},{"from":"F:dbb9c92ca1","to":"F:015261eab0"},{"from":"F:dbb9c92ca1","to":"F:1575110130"},{"from":"F:dbb9c92ca1","to":"F:1cf31c4792"},{"from":"F:dbb9c92ca1","to":"F:245efb551c"},{"from":"F:dbb9c92ca1","to":"F:2554ddd30c"},{"from":"F:dbb9c92ca1","to":"F:2b9c43b0ca"},{"from":"F:dbb9c92ca1","to":"F:4b91a9f65b"},{"from":"F:dbb9c92ca1","to":"F:7944059823"},{"from":"F:dbb9c92ca1","to":"F:ae46bbab81"},{"from":"F:dbb9c92ca1","to":"F:cb66095cb4"},{"from":"F:ddd82fc886","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:304ce7b89d"},{"from":"F:ddeb486c49","to":"F:37f4a5c04e"},{"from":"F:ddeb486c49","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:5b113a0914"},{"from":"F:ddeb486c49","to":"F:851f776227"},{"from":"F:ddeb486c49","to":"F:872221b1da"},{"from":"F:ddeb486c49","to":"F:8b5a1f94c4"},{"from":"F:ddeb486c49","to":"F:8d2cb93236"},{"from":"F:ddeb486c49","to":"F:932d33be00"},{"from":"F:ddeb486c49","to":"F:aa77f227a6"},{"from":"F:ddeb486c49","to":"F:aea3c05bca"},{"from":"F:ddeb486c49","to":"F:fd660a117b"},{"from":"F:de988f64d4","to":"F:76da13a8f7"},{"from":"F:df4b55ecef","to":"F:fc21812307"},{"from":"F:e00aec45ce","to":"F:22566cb46e"},{"from":"F:e053923067","to":"F:ddeb486c49"},{"from":"F:e2f1b5ac07","to":"F:304ce7b89d"},{"from":"F:e2f1b5ac07","to":"F:932d33be00"},{"from":"F:e2f1b5ac07","to":"F:ddeb486c49"},{"from":"F:e406ceab72","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:25e649633c"},{"from":"F:e40ce1af48","to":"F:3c479cac6e"},{"from":"F:e40ce1af48","to":"F:e406ceab72"},{"from":"F:e4e18d0b80","to":"F:304ce7b89d"},{"from":"F:e4e18d0b80","to":"F:d480e40c97"},{"from":"F:e540f7b669","to":"F:4ebb5aa8a0"},{"from":"F:e7380d1444","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:4a7eaceb5c"},{"from":"F:e8676a18b7","to":"F:9a3e8ed7d2"},{"from":"F:ea9e0801d5","to":"F:db651caf76"},{"from":"F:ec52ca3820","to":"F:0a85f3b8e5"},{"from":"F:ed9c47feb2","to":"F:ddeb486c49"},{"from":"F:edb11415f0","to":"F:05bffc70e9"},{"from":"F:edb11415f0","to":"F:b014028f57"},{"from":"F:edb11415f0","to":"F:f51cba9beb"},{"from":"F:edf42fb1af","to":"F:05bffc70e9"},{"from":"F:ee02e563c6","to":"F:304ce7b89d"},{"from":"F:ee02e563c6","to":"F:8b5a1f94c4"},{"from":"F:ee02e563c6","to":"F:932d33be00"},{"from":"F:ee02e563c6","to":"F:ddeb486c49"},{"from":"F:ee21289902","to":"F:e4ff19bbe2"},{"from":"F:f00c212d41","to":"F:8a9aff1529"},{"from":"F:f07f8ebca9","to":"F:05bffc70e9"},{"from":"F:f07f8ebca9","to":"F:cb3c5f7715"},{"from":"F:f13b76e6fd","to":"F:214cc0a5f4"},{"from":"F:f57cf1a212","to":"F:ce1173e176"},{"from":"F:f5d313e9f1","to":"F:34cb2b6c48"},{"from":"F:f5d313e9f1","to":"F:aa77f227a6"},{"from":"F:f5d313e9f1","to":"F:cc361bd05a"},{"from":"F:f6abfc128a","to":"F:81c495717c"},{"from":"F:f8168b956f","to":"F:bd02b28f17"},{"from":"F:f8609bae0b","to":"F:b5ae6ee133"},{"from":"F:f8609bae0b","to":"F:c64c042051"},{"from":"F:f90930c3c3","to":"F:932d33be00"},{"from":"F:f921eecad7","to":"F:92d6903b5f"},{"from":"F:f942e88a8f","to":"F:7c8d518693"},{"from":"F:fa49930755","to":"F:05bffc70e9"},{"from":"F:fa851dabe1","to":"F:90cbb2cf6a"},{"from":"F:fb5935daaf","to":"F:d8fb8339ce"},{"from":"F:fc21812307","to":"F:05bffc70e9"},{"from":"F:fc21812307","to":"F:f51cba9beb"},{"from":"F:fc43ea4859","to":"F:a8cfe45d27"},{"from":"F:fc5d887ff6","to":"F:05bffc70e9"},{"from":"F:fd08562f92","to":"F:05bffc70e9"},{"from":"F:fd660a117b","to":"F:05bffc70e9"}],"merkle_root":"sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595","modules":[{"hash":"sha256:6dc63314489172db52e377b81586f4d971b3e8e8c97932bacbf1af2c6f8dfa34","id":"F:94b941cbd6","path":".design-sync/NOTES.md","purpose":"Design-sync notes for @modonome/design-system"},{"hash":"sha256:d388fef8f0ef810801a06a03ceb24df6cff996f52e1b83d795223e88e2fa3ac8","id":"F:e146bc5acb","path":".design-sync/conventions.md","purpose":"Modonome control-panel design system"},{"hash":"sha256:8ce50e2dd94a258eaa07c493d89f88ed31eb19fac52f66e263613f0a8189ab10","id":"F:2207a6ebce","path":".design-sync/previews/ActivationLadder.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:23d7645f8f2ae7d6d9f7d78bfd8124c24c32d7516226c992d45a1d71d6af83a0","id":"F:2470e60179","path":".design-sync/previews/AppShell.tsx","purpose":"function Dashboard"},{"hash":"sha256:cff8b3e50869d91ecf4e64d89b0bf46e06a0ac59b8f746500b0d29d942a0b72c","id":"F:28b7af3c53","path":".design-sync/previews/ArmingStateBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0b2ebe0d1c0ab726f746e4c802535c32113dcd0be638669fc2b6786d6a0fea55","id":"F:9c9edea0c9","path":".design-sync/previews/AuditTimeline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea473851738c286a9447e28999aca5834455f7d9cb18c34df8fd682e709ce18a","id":"F:f6e100ab45","path":".design-sync/previews/Button.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c31eb8ae99b2058922e089277497af5bab44f530b7a9cc92449594ddf26c61af","id":"F:3d505706cd","path":".design-sync/previews/Card.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:38c7bbf24e1e428bb1d6f81cb6298969901e21b3384c0dbe2480a4245f84862e","id":"F:3b4065b679","path":".design-sync/previews/Checkbox.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5966e42f7d9af4b42e3cf073e7021401a2df169bd1dd2b1798ab6e378d2fe928","id":"F:0a6a758e7d","path":".design-sync/previews/ConfirmDialog.tsx","purpose":"function ArmEngine"},{"hash":"sha256:c6090fad6e43e58babda80072cf2a6b49649eb3445a2f5ba7eee9b45d712eee7","id":"F:c63a71fb57","path":".design-sync/previews/CostPanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc1c2ec9b9f0017a6e607d532315276eea8db28cd99cac8594f37347ef8608ad","id":"F:3ce0fd77eb","path":".design-sync/previews/DecisionCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fae1e57fd27b44fe9f81dcbb786e712eb7fd2adad44ba559876a015489c63863","id":"F:41f5ffe77a","path":".design-sync/previews/Drawer.tsx","purpose":"function ItemDetail"},{"hash":"sha256:3038d7e248fc4717cd723d12c35a016302554050dd32154155539d037d181693","id":"F:7a43bf4ce5","path":".design-sync/previews/EmptyState.tsx","purpose":"function Queue"},{"hash":"sha256:e018db6be835e03424b38476f92e107a77b21f74d771329f961b45fe83f1ea29","id":"F:79467a3153","path":".design-sync/previews/ErrorState.tsx","purpose":"function Unreachable"},{"hash":"sha256:125b8b0930f89ffff0b4b79b27373e09c918f0b87540c4d50646044681d54d73","id":"F:bb6a874d58","path":".design-sync/previews/GatePanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2a40e8bb77149f133fea0da3eb37d69cd908fdf2f8b03f0e9414e7339175f7cc","id":"F:e19aab09cb","path":".design-sync/previews/HelpHint.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8cca0e33e7829d8f211b88580660e5eb88255beaa0eb350c3e5efa8d2b594d4f","id":"F:6bef3f93ab","path":".design-sync/previews/Icon.tsx","purpose":"function Set"},{"hash":"sha256:5c78ec1454886b9eb902dcb12f2959e0c7576329eb3b2a871eba20bf6ef7fd8d","id":"F:8972d37045","path":".design-sync/previews/IconButton.tsx","purpose":"function Row"},{"hash":"sha256:fc96c76182bca5d884808eac367770479920b0a26dd8589b05e67558c8aaea8e","id":"F:7008a20b1c","path":".design-sync/previews/IdentityChip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea7d6e9b5a0493031e4e3f6c4db5588f24e720447e26504b5bebdd074c4153b2","id":"F:5e207f73c7","path":".design-sync/previews/Input.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9ecceb08031c0dfb9aef94def837cc9323aee97400350cb6b081e27e25bc58fe","id":"F:250c8a0d4a","path":".design-sync/previews/LearningCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:336ba2dbb303f6d9cd43b74586e1a257f9558c2ecdc9d51133ea6b246f148d77","id":"F:31658eff0b","path":".design-sync/previews/LeaseTable.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e620053e7a3644efb9e55807fe283051e15a486fc2c14f5529e7368c01a5af99","id":"F:eecc78e7e8","path":".design-sync/previews/LoadingState.tsx","purpose":"function Reading"},{"hash":"sha256:418f59b1949eb49e0a691cc61ec16e66488904c2d8e10eff3df5a2f02ac86ff2","id":"F:e5e519f441","path":".design-sync/previews/MetricTile.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc59bdc51ec89727d6a6c8c93f47aa6c7bb7582d7fefb10bdaf328d3f6ce7a73","id":"F:4387a44284","path":".design-sync/previews/Modal.tsx","purpose":"function RaiseCap"},{"hash":"sha256:e0d0a49bad9e877cc356c787ffa0da6db285abd5c852588f04868584c774ebc3","id":"F:545c0ccfeb","path":".design-sync/previews/ModeSwitcher.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0d833fd549d8b4d5f442813338169460d362a2feb34e0b445b6bef6d096e325e","id":"F:84a5c32a4c","path":".design-sync/previews/NumberField.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fcf3376b833576255dbd3a04eb52a8a890dd86a72ac59e476dc6a23be31124b9","id":"F:d590ca62b9","path":".design-sync/previews/PermissionDeniedState.tsx","purpose":"function OwnerOnly"},{"hash":"sha256:4a78ba515e665d462f489516d0ab2a46a0bcc6b8534447ada6882f0e06d8c3f5","id":"F:a0abaf6a25","path":".design-sync/previews/ProgressMeter.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e071a9ba5ad50fe699a59d71534f1abd9a6cd1d8ee74028b03b8e8e303d1fbf5","id":"F:13d31b33ea","path":".design-sync/previews/ProtectedPathRow.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e481349dafae32464d94985ca42dcbbdd8a4269ab64003ca4360d9e3b56a72fd","id":"F:dd1be2cd7b","path":".design-sync/previews/QueueBoard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5b6f2c0cd438195208e8eef5115bdd969e0efab9a2eec99737e4b05232fa89ab","id":"F:973aaa9d86","path":".design-sync/previews/RoleBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2682007a94180ed7a815bd9396b26b2afb13349dcd07f9f7956cb16425ef6417","id":"F:3319e5c923","path":".design-sync/previews/SafetyStrip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:63be9d4779746eb6c05e1ef0d30a8642298979c377e8904416ec264a6c7e31a8","id":"F:08577063d4","path":".design-sync/previews/Select.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ebafef14ddabd45ded0276708625d66fc59f4e057ffb26231005e385e4b3681f","id":"F:1f40b6eb6e","path":".design-sync/previews/Slider.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:cb0ec11babc429a0a05100fe09f62f6dc9e3d0a4bb3066d24373d25c8ba7a458","id":"F:ca13fe2a5b","path":".design-sync/previews/Sparkline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ce4171194a1594c0faf6f8995b1c2090ce94ed85f019011f9047b023e37bd3f3","id":"F:10e76cfcd3","path":".design-sync/previews/StatusPill.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0c657cf2500f46881f17c88d45a343dd5eb5a12e5cf834bea56c633559beb857","id":"F:1aa7cf650d","path":".design-sync/previews/Table.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:a0075b8076d7d7273a92e39f26947d198feaf6178288edfaf909ae944543e77c","id":"F:6c0919b64e","path":".design-sync/previews/Tabs.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c80497f4fc76dfc93694a6e6a66493c37ca29bba5ae554ef0911318899fd29d7","id":"F:fe5ec971f8","path":".design-sync/previews/TierBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8e9e332a28ed3d1d95c08999f43bad01ec571eb1e1fd6340609763af2973d667","id":"F:7832db450f","path":".design-sync/previews/Toast.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:6611e0c1fe0f89d9896413183cd477107d3262a2e78eb9f60183a6a576da3ad3","id":"F:a0068c8817","path":".design-sync/previews/Toggle.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9e99851405022f58b67decb58571895fd3364ed5b5572255d1b205b4dc067a4b","id":"F:dca643f34b","path":".design-sync/previews/Tooltip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:db39ec6fae408a56c57a8057098117faa57d9c99e6a75dde16f20633369294ad","id":"F:f9c98a8642","path":".design-sync/previews/WorkItemCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:d1e58b99ee3bb38f608f1149ba9c91aec0b880efebfd39fa17ef86485c173d9a","id":"F:f0fbd8716f","path":".design-sync/previews/WorkItemDrawer.tsx","purpose":"function Detail"},{"hash":"sha256:98fa336aa591c02fa29e16ed588cf4b487cff2bd0b1af2281549198d5c2eff3d","id":"F:b2496e8029","path":".github/pull_request_template.md","purpose":"What this PR does"},{"hash":"sha256:b28f932a561debca1261a975b1372f34f7f65cab6b02540287e4dbf5f9f42bbd","id":"F:88c38fbc0f","path":".modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:8d72947d7df89abc064973db46ee441709345271e72590fe88fbac808ad102b9","id":"F:0f284c134c","path":".modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:8930a72be2","path":".modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:1091496939db093d5537491f17bfa0c6973389e9358351d459a7bd684c705a2d","id":"F:cac320dd97","path":".modonome/STATUS.md","purpose":"Modonome Status"},{"hash":"sha256:7612b8a03dec2d129e267e8d2388eb43b3fbb09491e5d645b63154ef2b0f3f28","id":"F:76f802c3ce","path":".modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:8d6bc8e18b55fc496653e39b579a6e78dd0f01963d4e067c193f040e3cc4e4b8","id":"F:7479c14986","path":"ADOPTION-GUIDE.md","purpose":"Adoption guide"},{"hash":"sha256:549f7b5474d361343fe50c72adcd71272c6d7ea9de671526312898108d339572","id":"F:a54ff182c7","path":"AGENTS.md","purpose":"Agent operating manual for modonome"},{"hash":"sha256:68959a7942b2071d37972af02218002fd5ed28e5f8424468a717556326bab99d","id":"F:8f6366fd8e","path":"ARCHITECTURE.md","purpose":"Architecture"},{"hash":"sha256:bf7540b3e98361366bd49f4425b5fea5fa031755c0e1fbb228fa9c09612a980b","id":"F:244a368695","path":"BREAK-THE-RATCHET.md","purpose":"Break the Ratchet"},{"hash":"sha256:ff4be50e055616fc1882022155d02cacc72dbeb81bdcf70775e583e3afab6644","id":"F:06572a96a5","path":"CHANGELOG.md","purpose":"Changelog"},{"hash":"sha256:579aac8dcce334ee66fe60c615dbb9eb6f2ccbc490927155683bbe1eebd4fb55","id":"F:6ebdb617a8","path":"CLAUDE.md","purpose":"Claude Code instructions for modonome"},{"hash":"sha256:4d727da51b5cd06505c3a5e6b5ad7c1a22c1bcefab642463bbd9af9c168eeb72","id":"F:2f41a784d9","path":"CODEX.md","purpose":"Codex instructions for modonome"},{"hash":"sha256:181625af6edfac7d6aec933f3b061d90ff82f197432aef15e7ce30a26fc3f800","id":"F:ffdbe3a1e7","path":"CODE_OF_CONDUCT.md","purpose":"Contributor Covenant Code of Conduct"},{"hash":"sha256:0c2aa53ee1a4c16fe977a05a53a2e5fc4b990fb75847109c67cd522d09d437f3","id":"F:eca12c0a30","path":"CONTRIBUTING.md","purpose":"Contributing to Modonome"},{"hash":"sha256:906963517f6ab1833ef5bd463ab4d5af9e1fca4b8d7c4f7a11c23f6b866d9324","id":"F:b60c6a93e9","path":"GOVERNANCE.md","purpose":"Governance"},{"hash":"sha256:7456d96e6a81d91da38daf2554bb2cd04b76a32fad3bb2b60496fd80b0c0f698","id":"F:c97cb4d123","path":"OWNER-ACTIONS.md","purpose":"Owner actions"},{"hash":"sha256:1aecab9188ddd263328850a7f1141dd9f9ed30df927d1a8502bb04a1c1671050","id":"F:147873af8b","path":"QUICKSTART.md","purpose":"Quickstart"},{"hash":"sha256:3cb87b223660d737234637bde0c24a33b2068e4c4b9f7db8f9ac3d5ed37db4f6","id":"F:b335630551","path":"README.md","purpose":"Try it in 60 seconds (read-only)"},{"hash":"sha256:eafe534d1d5b69ef5c0646285e4c908b4a60d57f24851c15421ecae609a62ad9","id":"F:705a3ca9b3","path":"RELEASE-EVIDENCE.md","purpose":"Release evidence"},{"hash":"sha256:66624a1dc2eda1103b06fd62c6148bc69f1315250fd814e29cc0160d6cfdbc03","id":"F:683343bdf9","path":"ROADMAP.md","purpose":"Roadmap"},{"hash":"sha256:fb1a431d5eba7189459def64f26d66e316f778bd990483f576ac1e6db2918d37","id":"F:f6ed156e4b","path":"SECURITY.md","purpose":"Security model"},{"hash":"sha256:13477e14ac1cce854455ced1d5b73ec311c0531937c72181bfa1f40714c020cb","id":"F:c5fe610b02","path":"SUPPORT.md","purpose":"Support"},{"hash":"sha256:e0123c5d471bb70a85c2817cd4149a7d2894cb03e5a154a9dcf48a0d222d2368","id":"F:cf2908e0f2","path":"agentproof/CONFORMANCE-INTERFACE.md","purpose":"AgentProof Conformance Interface"},{"hash":"sha256:351e5737e60cdb6dd71da251d46b0ba92883cc1a2f243cd6675cdc8dc9a9b600","id":"F:69ddfa4ff4","path":"agentproof/CONTRIBUTING.md","purpose":"Contributing to AgentProof"},{"hash":"sha256:1136550fe9dd1e28d6e35610417f02e781869050ef12b052941103a2b57b3357","id":"F:5621bc51b3","path":"agentproof/README.md","purpose":"AgentProof"},{"hash":"sha256:cec6a751469fad2823f03ef550ad5f2046e8b54aeb6e75028ba7d8247de128e2","id":"F:2ec4f6540b","path":"agentproof/SPEC.md","purpose":"AgentProof Specification"},{"hash":"sha256:f59a0beea3bd8744a2f6129af78d43fb5cafb5ed1f74e0242235bd9b9bd53f57","id":"F:02a5f8fc55","path":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:2e3364d087e95e36bb765de2eee6da2452b3a7bafb0a79a7fd63bd8f1d094db8","id":"F:a6d2bd3021","path":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","purpose":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised."},{"hash":"sha256:70221285edc659c839aaa46f647839ce1474b75c7832080f555c413b5e72b725","id":"F:3211d524ad","path":"apps/control-panel/README.md","purpose":"Modonome control panel"},{"hash":"sha256:d5a4aa57fa42de628b4471c5d83ce312f186f419dca82711b63b0d1ae0d7b724","id":"F:08b7435c86","path":"apps/control-panel/server/api.mjs","purpose":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the "},{"hash":"sha256:b3fc1a0f281280424df192b18996330aad770ec7b4f478d55a92739e39f17a84","id":"F:54df44aadd","path":"apps/control-panel/server/learningsFormat.mjs","purpose":"Shared parsing for the \"## Staged\" bullet lines in .modonome/LESSONS.md, so the"},{"hash":"sha256:228a98eb1b15ed2b88ee08a991cf28533a76b6e6915ff62903ced543efd19535","id":"F:8a3dd6ccff","path":"apps/control-panel/server/modonomeReader.mjs","purpose":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces"},{"hash":"sha256:974fef8a1f81a37bff27ba823e6628d4a3635fdb20e3ae7c641c22fa3430e579","id":"F:22566cb46e","path":"apps/control-panel/server/modonomeWriter.mjs","purpose":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent"},{"hash":"sha256:d3ade0ab81dcf1a4917ae08dbc212a45128eae37dd41a12e5c5c55224c419f8a","id":"F:fd4b8473fa","path":"apps/control-panel/server/ownership.mjs","purpose":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ remo"},{"hash":"sha256:009b188cdf39031d5ac114b143970b90ee5e0af27919c628ccf984f4c3b7599d","id":"F:5daab9894d","path":"apps/control-panel/server/remediationView.mjs","purpose":"Builds the read-only remediation view-model for the panel. Pure: it takes already"},{"hash":"sha256:6d2002d6c0e4d7c635579e95cb7f702b5557cd93ef9d495c2bdea0de888629ac","id":"F:113387361d","path":"apps/control-panel/src/App.tsx","purpose":"function App"},{"hash":"sha256:f4fbceb244e071e90647d343a88b4c0b8c9770a6a4b616d12afdfb1e9cedffcb","id":"F:f83d1100e9","path":"apps/control-panel/src/content/concepts.ts","purpose":"interface ConceptEntry"},{"hash":"sha256:3f26effc15065164e222f35c6afa4e14383abc81717ee9c82b4e4afc8cb227a0","id":"F:3c479cac6e","path":"apps/control-panel/src/lib/confirm.tsx","purpose":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying"},{"hash":"sha256:7c670d232646cedb62767ae274375ef101d1f0692207868dce3858f869fac18c","id":"F:e406ceab72","path":"apps/control-panel/src/lib/messages.ts","purpose":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to"},{"hash":"sha256:23ad78ee68f5ea7345ea24921f536f437550e368c05b57772bb4cd05ca13ea9d","id":"F:e40ce1af48","path":"apps/control-panel/src/screens/ArmingScreen.tsx","purpose":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separati"},{"hash":"sha256:e56fb3c60a9adcf8736b794dbe334b713a3b0f4a990ff27be97f35dd812fd33c","id":"F:304fa8ef33","path":"apps/control-panel/src/screens/GatesScreen.tsx","purpose":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duti"},{"hash":"sha256:4bd02344b5309e24886e004726a69625789261d1033fd4a56ffd81b9bf19db22","id":"F:757a70680a","path":"apps/control-panel/src/screens/LearningsScreen.tsx","purpose":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the le"},{"hash":"sha256:9b042842975fc785913060eba4c6d57051cc2731a5e94fbbd771925f61f1d3e4","id":"F:6627655633","path":"apps/control-panel/src/screens/OverviewScreen.tsx","purpose":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent act"},{"hash":"sha256:140a3167b9aef50622269cefaa249266db05395257e45ac4668418962e562dae","id":"F:4ebf08705b","path":"apps/control-panel/src/screens/SettingsScreen.tsx","purpose":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came fo"},{"hash":"sha256:a79197cd2a46b0c6aff0e216083609ba83f0968f235a1a1b92f741e24f870ff8","id":"F:9b3f18856e","path":"apps/control-panel/src/screens/WorkQueueScreen.tsx","purpose":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-o"},{"hash":"sha256:884d51c65ef17a85b1de66cbf069d6e1d7175821418c4e5b45942a97a710cc79","id":"F:95d4304133","path":"apps/control-panel/src/state/adapter.ts","purpose":"function finalizeState"},{"hash":"sha256:2aad779e74343b4f402fc303d1d8dfd21fe13949ea2a3928509a4c9cbd0fbee6","id":"F:0da05a2a05","path":"apps/control-panel/src/state/arming.ts","purpose":"function deriveMode"},{"hash":"sha256:94e47e65d592c6b417f883501a9aa9d5eee31af912800cc6b6c7d665b8231623","id":"F:25e649633c","path":"apps/control-panel/src/state/configDiff.ts","purpose":"function nestedMapChanged"},{"hash":"sha256:01e89e56bf70e21313d76809f34dfb3136f69e18b70663cc25a6cd7a66ea5925","id":"F:7d236c9aa6","path":"apps/control-panel/src/state/fixtures/host.ts","purpose":"const hostState"},{"hash":"sha256:5fae58196211667608e6b5aa19a2efb13369d01494d9e29ffbf0da6131428a23","id":"F:89aee72994","path":"apps/control-panel/src/state/fixtures/product.ts","purpose":"function titleFromId"},{"hash":"sha256:7f2f64711709f4e04e04ec8fcb7abdbf6c2182cd5ba512923fbd5ec4eefdc4ea","id":"F:ec52ca3820","path":"apps/control-panel/src/state/liveClient.ts","purpose":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway)."},{"hash":"sha256:d25e0a0d452ea3c90eddd7494e804239b14337a6282d043b32707e81a53deb09","id":"F:0a85f3b8e5","path":"apps/control-panel/src/state/types.ts","purpose":"The subject a mode points at: which repo the panel is reading."},{"hash":"sha256:43e8ac7af105c773703a9b6417945ec1746465970293ad9b9375840d6883b092","id":"F:f90930c3c3","path":"bin/modonome.mjs","purpose":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variab"},{"hash":"sha256:2e349c8b02be29e3512bc7eb25716062a4ed806d32990904b866d84ef41df9f4","id":"F:90cbb2cf6a","path":"challenge/judge.mjs","purpose":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {s"},{"hash":"sha256:e95a14ef3dbdb053d86c2199ef8ac89ddbb1e1a8b72032c7586ef31ab5943920","id":"F:5d2ce8ee7e","path":"checkerproof/README.md","purpose":"CheckerProof"},{"hash":"sha256:326f57c93fe3587633a56d23979ab4aa3d4e2397c059fcc10a43b681846578f4","id":"F:94050e680d","path":"checkerproof/runner.mjs","purpose":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output."},{"hash":"sha256:6414d67327b97282597ba13d4fe711331d1a96d6bdb0ad366626aedbe0848b04","id":"F:5376e86470","path":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","purpose":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves "},{"hash":"sha256:36a50a21ae88e90f3996e991501ff5133fe5dde362ea0635fc17bc123d5f01ba","id":"F:c7423b85cf","path":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","purpose":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unre"},{"hash":"sha256:4305f79d6b93ecb9d4211a358db37366621e7d542f655b45fca5fdb886cea192","id":"F:d744931e6a","path":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","purpose":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches pr"},{"hash":"sha256:0d704f6822c09c158318837fbe1507402d12fccac16861158c1490c4680ba5b0","id":"F:28f278b1d9","path":"checkerproof/scenarios/cp-04-scope-creep.mjs","purpose":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker "},{"hash":"sha256:a53be522971a73ada8bb992bdca820bc4a2d31addd30abfe133d13a2b37a3ac3","id":"F:34ca4e55d1","path":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","purpose":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, n"},{"hash":"sha256:93648a7d073062f5d92e5943903ce883ca68a951db56be4d45478ad630fc2989","id":"F:5253743405","path":"design-system/README.md","purpose":"@modonome/design-system"},{"hash":"sha256:cbcff3835f237d797f0c7ca291a991a0fd36dcb8b089ebcf744b05913d7a38a1","id":"F:14edab923f","path":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","purpose":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when ev"},{"hash":"sha256:57f80954a2d97a6a209b4475c07d16038fc6bba643f01328d4aff5fc794d5566","id":"F:268769c4a6","path":"design-system/src/components/AppShell/AppShell.tsx","purpose":"The Modonome brand mark: a teal ring with a check on the dark ground."},{"hash":"sha256:3993b916804f19ac4fa15d99e5a2b042607d43fc717c37d2617076c7ba25e0c1","id":"F:7a1f7d680b","path":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","purpose":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, ar"},{"hash":"sha256:f952f03815def29809be8f74ba31e88ce459b54a31cb4135688a030755eac1df","id":"F:76da13a8f7","path":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","purpose":"The kind of event recorded in the audit trail."},{"hash":"sha256:1c99d03bb6dd97a34c77c6752498ad51b9c1598b86316f7a7c336400a170967c","id":"F:8b122c449e","path":"design-system/src/components/Button/Button.tsx","purpose":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and *"},{"hash":"sha256:457c0d229b21452cd1ebbed360f195ff69dbfdbb14e231ecc10dc2bbbeec9279","id":"F:40eb542a82","path":"design-system/src/components/Card/Card.tsx","purpose":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, t"},{"hash":"sha256:056914568b3ca3d770f135b890f4c1538a4a74f92c13f8af95519900743bcc2f","id":"F:d20e4b6b91","path":"design-system/src/components/Carousel/Carousel.tsx","purpose":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scro"},{"hash":"sha256:efbb27ce7153b11fb7fc2f191d555a1f8f200616b90b6b9645bb44d3899c618d","id":"F:7054844360","path":"design-system/src/components/Checkbox/Checkbox.tsx","purpose":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * sur"},{"hash":"sha256:ca46497990303b19a2897b57a78af5475e4c21389901cdb21d7acd89fe38bc53","id":"F:81c495717c","path":"design-system/src/components/Slider/Slider.tsx","purpose":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announ"},{"hash":"sha256:1749a31827e26d5315b93b32f0835467bd966790860b259052dd1ef58a4429e6","id":"F:c0e80ca327","path":"design-system/src/components/Sparkline/Sparkline.tsx","purpose":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inlin"},{"hash":"sha256:0ce4a9dfe4be427aa7d81a5b7f1bcf1759b8d910b8184c57a02bf20cc732282b","id":"F:2f6c42c5ee","path":"design-system/src/components/States/States.tsx","purpose":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items "},{"hash":"sha256:a402f532e2ae9df7f4e1728c1c9a2891d67c4e70b584f2e879d36e86418b2fab","id":"F:2fc610bd94","path":"design-system/src/components/StatusPill/StatusPill.tsx","purpose":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or do"},{"hash":"sha256:7305e00d55b66cd30ad1083dff3787872a53e884744d212a333ffd022d93da4a","id":"F:a402d2f9ed","path":"design-system/src/components/Table/Table.tsx","purpose":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highli"},{"hash":"sha256:6390a12d96f31f795832d3cbcb460bd8142784a0e5498e05ec1439a43aefbeae","id":"F:1db369d970","path":"design-system/src/components/Tabs/Tabs.tsx","purpose":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-sel"},{"hash":"sha256:b455cb481a9f8ac3c2e29039fdcbff0d82ae37e5ca28409003fbe3529303a3b5","id":"F:da42f69531","path":"design-system/src/components/TierBadge/TierBadge.tsx","purpose":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, "},{"hash":"sha256:0eaf585024cc9b6b47c917317f09565c3e5905a901ea85698cd0dc299688dc2e","id":"F:ab334f34df","path":"design-system/src/components/Toast/Toast.tsx","purpose":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: m"},{"hash":"sha256:7c310667a053c1678db6dc008663b4a314b0c1f612bcb27f6f2d7bc3cc8c5c7d","id":"F:214cc0a5f4","path":"design-system/src/components/Toggle/Toggle.tsx","purpose":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a c"},{"hash":"sha256:2a9b6f1ea5893fbbf927c0709325446a864aed023ca789afc890fa32eb6030f5","id":"F:8a9aff1529","path":"design-system/src/components/Tooltip/Tooltip.tsx","purpose":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the"},{"hash":"sha256:6787fd41c6a7f0de4c0e2b7e8b5e4af929d3a3bda45cbc58fac0077cd897073c","id":"F:b5ae6ee133","path":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","purpose":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, s"},{"hash":"sha256:21f8d11ecf93eee3757dc47b0007b9ac0edf38eab77c113091e64b9a13283884","id":"F:08064e0c53","path":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","purpose":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens "},{"hash":"sha256:bdea45a54795dca5069c1ad0b5c8159fa4a00a292ce6e62c9c3b967748dcd58f","id":"F:7c8d518693","path":"design-system/src/lib/cx.ts","purpose":"Join class names, dropping falsy values. A tiny classnames helper."},{"hash":"sha256:7f07947b761351c40274e1af83ab1278dc6af2f268b61f8b11344506a794bd9f","id":"F:86838d35ac","path":"design-system/src/lib/format.ts","purpose":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\"."},{"hash":"sha256:18a15384b92501e8515b1bfc8b4a1e8947bea352611aeac378b1c71a23e7f9e4","id":"F:c64c042051","path":"design-system/src/tokens/tokens.ts","purpose":"CSS custom-property name for an arming mode color."},{"hash":"sha256:65423e5476fdd50a743b0ef1564643c98394d3f1ed2d347e0506dc1913b93949","id":"F:e5e9ec402f","path":"docs/LEXICON.md","purpose":"Lexicon"},{"hash":"sha256:b0182f65ef557aca79aec4bbf3bae9f1f4bb8a73d8c6e63542dede6a0cbc4b7a","id":"F:0b5ca119d2","path":"docs/README.md","purpose":"Modonome documentation"},{"hash":"sha256:d932cd4f5a2c1606a161167bb4f21ad7443112c207e5520e240f1806c72fecb4","id":"F:6e4723a45d","path":"docs/adapters.md","purpose":"Bringing an external agentic CLI (the adapter contract)"},{"hash":"sha256:173d95b4ae6ce1c5d0c93b6ff34196bde52d4117b07b33ddc6a7ee02b1983cb7","id":"F:6e4b629d3c","path":"docs/adr/ADR-001-self-governance-pipeline.md","purpose":"ADR-001: Self-Governance Pipeline"},{"hash":"sha256:853ce2cc504318bc8e294ab2a734aa7ed2f3c165500fa46eb5276db95093e7fc","id":"F:64c5acf802","path":"docs/adr/ADR-002-shadow-mode.md","purpose":"ADR-002: Shadow Mode"},{"hash":"sha256:7938a6cf42851b4c667e7c86f36f321531bb1cda42d8ec8be2e817ee7f2660a9","id":"F:14812742da","path":"docs/adr/ADR-003-agentproof-portability.md","purpose":"ADR-003: AgentProof Portability"},{"hash":"sha256:7b3919fdf35b4803351784a6e97f0fef53d943945922e8a01771c66b84285df0","id":"F:6dd88cde1c","path":"docs/adr/ADR-004-arming-isolation-enforcement.md","purpose":"ADR-004: Arming Isolation Enforcement"},{"hash":"sha256:4ae9f4aa1833fdb26a3ae2585ddd65ed7c2fa816c43e56755d666634926921e6","id":"F:d4ead22b1b","path":"docs/adr/ADR-005-run-observability.md","purpose":"ADR-005: Run Observability"},{"hash":"sha256:52484d1db4941c2e69b23dce3e059a364832a9213785e1011d53ea10f7c318ea","id":"F:dc00dfe394","path":"docs/adr/ADR-006-checker-independence.md","purpose":"ADR-006: Checker Independence"},{"hash":"sha256:670f9d8f98b830daf3398b8311c228b4533647f879e19e15b84bbaa161b48513","id":"F:0526aab88e","path":"docs/adr/ADR-007-claim-atomicity.md","purpose":"ADR-007: Claim Atomicity"},{"hash":"sha256:77402b5f5b6792751d2228af5fa40d754c4808c799955274db29405cb8510b59","id":"F:8c2e08ed12","path":"docs/adr/ADR-008-trusted-author-allowlist.md","purpose":"ADR-008: Trusted Author Allowlist"},{"hash":"sha256:85c78896e75ef98a0350008fa898323170454e918d5f1d40bfe75e969787ebbe","id":"F:00a0cb4ee4","path":"docs/adr/ADR-009-mcp-tool-auth-scope.md","purpose":"ADR-009: MCP Tool Authentication and Scope"},{"hash":"sha256:e0da3fc9d933331ecf32692d92e7aff081fe47d22936ab6899b274f4e03f5d4a","id":"F:de4538fe53","path":"docs/adr/ADR-010-knowledge-packet-trust.md","purpose":"ADR-010: Knowledge Packet Trust and Promotion"},{"hash":"sha256:3be6708edc9457216f91418d2d82adb51b902f99865cb15f2fa295110ceffadf","id":"F:d2b14b5b34","path":"docs/adr/ADR-011-ci-env-var-trust-scope.md","purpose":"ADR-011: CI Environment Variable Trust Scope"},{"hash":"sha256:6b260de5664608d0c560ba27d479991cfd25c470aae92b3f134be4f2da02410d","id":"F:6f5b5f0bc4","path":"docs/adr/ADR-012-harness-prompt-integrity.md","purpose":"ADR-012: Harness Prompt Integrity"},{"hash":"sha256:1dbf9afdac131fd48920ea6232c09671017209d989ef56150fa26fd5e126ffc4","id":"F:e844676be4","path":"docs/adr/ADR-013-config-downgrade-and-migration.md","purpose":"ADR-013: Config Downgrade and State Migration"},{"hash":"sha256:228b5b0f71563d679198d7a5e258a1f4d6c54e77015e03426e26029c4fc787b8","id":"F:1a58c06540","path":"docs/adr/ADR-014-knowledge-network-transport.md","purpose":"ADR-014: Knowledge Network Transport and Sync Model"},{"hash":"sha256:0b49c78427c07a5d4aa41f6d7ee3ccd490c380b61e0a8adf72b9fa7e2b4b26ed","id":"F:cbaff08a46","path":"docs/adr/ADR-015-knowledge-network-catalog.md","purpose":"ADR-015: Knowledge Network Catalog Design"},{"hash":"sha256:cd3664d5c465e78657dfad0c2394d890db8721ff17efa9b774d927392f9a5b62","id":"F:c077d16aeb","path":"docs/adr/ADR-016-knowledge-network-packet-identity.md","purpose":"ADR-016: Knowledge Network Packet Identity, Lineage, and Dedup"},{"hash":"sha256:dd3dbc63222d451861660dfc13cb3079a0ba00d4857d1dbe411937e4abbebd7c","id":"F:72b7ab4c3e","path":"docs/adr/ADR-017-knowledge-network-packet-signing.md","purpose":"ADR-017: Knowledge Network Packet Signing and Key Management"},{"hash":"sha256:9f6017d79d341d0cf99d4c68cb088b16e8fc7e24a81263855d3ac63e88dddcc8","id":"F:0a6b452f14","path":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","purpose":"ADR-018: Knowledge Network Import Pipeline and Local Re-Validation Ratchet"},{"hash":"sha256:d4975d473b876a68555a6fc8ff1df074ea53df18e5a8cdacacfbf2f75c460365","id":"F:28d4e1ad3d","path":"docs/adr/ADR-019-knowledge-network-execution-scope.md","purpose":"ADR-019: Knowledge Network Scripts Run in Base-Branch CI Scope"},{"hash":"sha256:2144d8d484fba40346bd38b105490b85586a29327f1c3aa290f287e3e6e376eb","id":"F:4aaece5252","path":"docs/adr/ADR-020-prompt-complexity-budget.md","purpose":"ADR-020: Prompt Complexity Budget"},{"hash":"sha256:fad6527345c252a1f413bea83f9d7e936ee47384a7b6f1cb0f96a7f0f9de7662","id":"F:24f28ae0fa","path":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","purpose":"ADR-021: Prompt Behavioral Regression Suite"},{"hash":"sha256:3c6cd64127ab8f6a7bc01e93892358dbf5b47571e10d561a1e5e558de9f3cd76","id":"F:35002ba3fe","path":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","purpose":"ADR-022: Anti-Rubber-Stamp Checker Telemetry"},{"hash":"sha256:f61b594192a7ace32fdaa94ba28e82b8dc27bfe839b49af8e637fca0391bc263","id":"F:b4279e0af6","path":"docs/adr/ADR-023-config-schema-migration-contract.md","purpose":"ADR-023: Config Schema Migration Contract"},{"hash":"sha256:1947cc76998fc11788589b2cfa1ace56293e64f75587e0be319c0f90772327a7","id":"F:a70145dc77","path":"docs/adr/ADR-024-capability-promotion-gate.md","purpose":"ADR-024: Capability Promotion Gate"},{"hash":"sha256:1b958ef93312b193f44193e203e8c253572f5f59211ff8137d6e67053e434574","id":"F:dc0cc6d551","path":"docs/adr/ADR-025-self-application-conformance.md","purpose":"ADR-025: Self-Application Conformance"},{"hash":"sha256:289e8dc568d7a9d4a02b0236d03fda1ae2b0323653fc3a023d3f3dba98c4de5d","id":"F:094efaca92","path":"docs/adr/ADR-026-learning-promotion-audit-trail.md","purpose":"ADR-026: Learning Promotion Audit Trail"},{"hash":"sha256:747626f0ebcb6a2b4458e4b6144ac86416a2a8953e602d6fae502e61a8038414","id":"F:d783999e16","path":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","purpose":"ADR-027: AgentProof Suite Expansion to 25 Scenarios"},{"hash":"sha256:bdf3ba61386081102e423597184d6b7b78ee53b60eaa2c23204d08cd4d7d1e16","id":"F:514a79560d","path":"docs/adr/ADR-028-portability.md","purpose":"ADR-028: Portability Validation Strategy"},{"hash":"sha256:7bd61ffe34ff4b25962fa8d5fa8f131b61782213fdff7c6fb31658380f2020a9","id":"F:d66f93d7b7","path":"docs/adr/ADR-029-adversarial-test-design.md","purpose":"ADR-029: Adversarial Test Design Principles"},{"hash":"sha256:c6b6bafc88dd8eed9f8dcd04b988d725c557dfbcd9972b6afdb8077f7fb1b3aa","id":"F:5a04bfa7a4","path":"docs/adr/ADR-030-embedding-safety.md","purpose":"ADR-030: Embedding Safety Framework"},{"hash":"sha256:c793fe2343c351a829714c39555b9f29dc73b23d3fa339065f14ca2a76d60633","id":"F:627afb27fd","path":"docs/adr/ADR-031-markdown-governance.md","purpose":"ADR-031: Markdown governance"},{"hash":"sha256:0d4fe4e04bc4cc160978de2d177a0aaacaa9da105dfe52e4801d95de95fe5a93","id":"F:3a70dc66ea","path":"docs/adr/ADR-032-oss-adapter-boundary.md","purpose":"ADR-032: OSS adapter boundary"},{"hash":"sha256:cc2816e62a042699a38168ce64bf0e43eb502277a49c7c9f464e33d2afb7d5c0","id":"F:b5f5700e4d","path":"docs/adr/ADR-033-repo-snapshot.md","purpose":"ADR-033: Repo snapshot"},{"hash":"sha256:48413d3e10d2c802c860ae06796c54b4a4f5c98a79122688fa75018c09af3e2d","id":"F:21752cf61a","path":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","purpose":"ADR-034: Compliance and audit doc staleness gate"},{"hash":"sha256:3b7df614cd01444cb19035016351d7148e86fa750ffdbde23fa262d0e6763e03","id":"F:c3588d683e","path":"docs/adr/ADR-035-metadata-remediator.md","purpose":"ADR-035: Metadata-only Commit-History Remediator"},{"hash":"sha256:ea9f950814081a796dab54219ab216345f187428dd8c3c262093f2fbc5f7ddcc","id":"F:750436d8c1","path":"docs/adr/ADR-036-policy-attestation.md","purpose":"ADR-036: Policy-Pack Manifest and Disclosure Attestation"},{"hash":"sha256:6c578562d5e2883fae66693c03afdeadec928657639626ff4dfa14d07ed2b208","id":"F:01a7edaeba","path":"docs/adr/ADR-037-policy-pack-adoption.md","purpose":"ADR-037: Policy-Pack Adoption Tooling"},{"hash":"sha256:f4ed302d621cdba1b05a7cb7338887ede84afae871cc2ad23fb5cfe5be0cfd03","id":"F:1a368a7935","path":"docs/adr/ADR-038-checker-as-review-service.md","purpose":"ADR-038: Checker as an Author-Agnostic Review Service"},{"hash":"sha256:cf60da2b108af71da94f3657a8edba35840ae517e00f172665351d6a0365de0e","id":"F:56a132aaca","path":"docs/adr/ADR-039-agent-capability-profiles.md","purpose":"ADR-039: Agent Capability Profiles and the Always-Run Crew"},{"hash":"sha256:d6c607ef85aef2400d7c407348195d6799c02bfcbb53c23151ca5190078c6504","id":"F:25fdf1f8f6","path":"docs/adr/ADR-040-end-to-end-operating-model.md","purpose":"ADR-040: The End-to-End Governed Operating Model"},{"hash":"sha256:364956eb17c4267d523eaed728c773af38e5f38bceeda9642bd4e50a5ed17935","id":"F:40887a152e","path":"docs/adr/ADR-041-gauntlet-replay.md","purpose":"ADR-041: The Gauntlet, a Host-Repo Gate-Integrity Replay"},{"hash":"sha256:ebc8e5161c570c7cb7b731014b9050033849966a11570ad3755d41560318dea4","id":"F:27086b6de3","path":"docs/adr/ADR-042-agentproof-verified.md","purpose":"ADR-042: AgentProof Verified and the Hardened Registry"},{"hash":"sha256:1c1c3ea0aee28bcf86addabaa79510b739e24299dc71d5122d7f326fc9650d87","id":"F:c7326495ec","path":"docs/adr/ADR-043-terraform-module.md","purpose":"ADR-043: Terraform module for org-level provisioning"},{"hash":"sha256:3370011df1de3044ed112eae438df4a907ac3621689864e4d97155472355e060","id":"F:ffcad313b6","path":"docs/adr/ADR-044-agent-org-structure.md","purpose":"ADR-044: The agent org structure and its configurability"},{"hash":"sha256:7813270906fcf35082b0fee1de9ff31db4b9e307e9f0038ce9b8e58619704136","id":"F:97fc86d7a3","path":"docs/adr/ADR-045-scope-focus.md","purpose":"ADR-045: Scope focus for launch. Proof before surface."},{"hash":"sha256:c608f49155da28e237edcaf817ba565fdf9d48c3a24856c142d26cd4fb793e44","id":"F:e9701967b3","path":"docs/adr/ADR-046-ship-the-deferred-features.md","purpose":"ADR-046: Ship adapter-verify, Break the Ratchet, and CheckerProof"},{"hash":"sha256:dec01f22db0eb7d3d510ae9c87c79e2e13ed72aa655189d46d13430176c2a1f3","id":"F:68d874f280","path":"docs/adr/ADR-047-risk-surface-guard.md","purpose":"ADR-047: Risk Surface Guard, a second deterministic PR-diff scanner"},{"hash":"sha256:07236c8a59dc7952655f1b442e82fb773b9ee2cfcfd82a4de87587d2feeb7c70","id":"F:c3b2fcfb69","path":"docs/agent-org.md","purpose":"The Modonome agent org"},{"hash":"sha256:735569ae4c95b9b3cc468abc2d8a6b863475a25cd8d14988e356e33c5c1ed5db","id":"F:a384388adc","path":"docs/agents.md","purpose":"Agents, roles, runners, and models"},{"hash":"sha256:1a3057039a6a458ddc3be94b408cd17f7078bc4f5d84dc5a1bb28da1a8534927","id":"F:8a7591db62","path":"docs/audits/claims-audit-2026-06-25.md","purpose":"Claims audit, 2026-06-25"},{"hash":"sha256:d82a943730259de4fd7d57f0e4a7b2c3b1d7d6d58f1bb95e5895190a3480a0da","id":"F:6a3a98df8c","path":"docs/audits/claims-audit-2026-07-01.md","purpose":"Claims audit, 2026-07-01"},{"hash":"sha256:736538bc53e263123890881fca15f42561555a6b1e4d13b22fbb19c266d6a62d","id":"F:efd369884e","path":"docs/audits/claims-audit-2026-07-08.md","purpose":"Claims audit, 2026-07-08"},{"hash":"sha256:2dac20871ea07e1ce3708fbf8cb8f546b893e418486c7ad1f29f64df74284829","id":"F:3dcdfa18c0","path":"docs/autonomy-plan.md","purpose":"Autonomy plan: governed autonomy on free models"},{"hash":"sha256:3f5e1ae50727d09485d21fc98a19f4bf5e18079d7f09598f9d834e30cdb933bf","id":"F:95e51a604d","path":"docs/compliance/compliance.md","purpose":"Compliance"},{"hash":"sha256:22d7361557fb51fe0f6e60c086efcecd8d647f9deee172c5aa69119928c75a57","id":"F:5fa0ad758b","path":"docs/compliance/eu-ai-act-classification.md","purpose":"EU AI Act Classification"},{"hash":"sha256:9d6370381372c370f5daae8bde8638d4c805d17726d6b11c74e6675028778b2f","id":"F:7983a5dd39","path":"docs/compliance/openssf-badge-evidence.md","purpose":"OpenSSF Best Practices badge evidence"},{"hash":"sha256:c56f5c3dbbfa26d338d5a039e3b01258daeb8f45888117f5753a9ccab50ded83","id":"F:83d4d07afc","path":"docs/control-panel-modes.md","purpose":"Control panel: modes, and what you can and cannot do"},{"hash":"sha256:97f78ccf4a2589ea2b8f147e070e012554082ce45a921fc15d9cf5d96a874972","id":"F:191a17b151","path":"docs/enterprise.md","purpose":"Enterprise estates"},{"hash":"sha256:646676d2908eee2dd7caa4559f055a986cc6551b03d4b1ef3712c26e1c366778","id":"F:b81cf7567f","path":"docs/guidelines/markdown-governance.md","purpose":"Markdown governance policy"},{"hash":"sha256:9582fbef8508d57553d7dce7978de17865198f2aede85767ad548e7c79b402b0","id":"F:6bee8a97f3","path":"docs/launch/article-seeds.md","purpose":"Article seeds"},{"hash":"sha256:4770f83af6300c58e41041ac390f81917943b925aa5fe4420999b4696962c6f3","id":"F:930bc5297d","path":"docs/launch/show-hn.md","purpose":"Show HN draft"},{"hash":"sha256:c2a8514369ddf12ce8565a62f9e7b10b2f11c1628312e9257ea5f612d23d8071","id":"F:2bfaa5759d","path":"docs/launch/x-thread.md","purpose":"X thread skeleton (@ModonomeLab)"},{"hash":"sha256:911e3c3d9d96e433b3d5734a91a6d8f7f3cdad8f080d9aa46e3b0665fad51cae","id":"F:61486b1ec2","path":"docs/ops/add-control.md","purpose":"Add-control runbook"},{"hash":"sha256:9ce795a33cc46ee5bb875f06197a022074d104169b32fb552108e78a918857b2","id":"F:9d53df2290","path":"docs/ops/add-gate.md","purpose":"Add-gate runbook"},{"hash":"sha256:8925cf704bc9c68e322c2a14ee3c7f544649f6a382a8c82cfb2753f886312027","id":"F:1339474d8c","path":"docs/ops/merge-governance-setup.md","purpose":"Merge governance setup (owner action)"},{"hash":"sha256:7ddc7ca071ed94c0fc6f0684198c6c6cfb06112a700347754d78a3c9f3155576","id":"F:08baf2c1e2","path":"docs/ops/preflight.md","purpose":"Preflight runbook: am I ready to push?"},{"hash":"sha256:0afb51d17728db3e9e95ed786890325cf78cbb0abb9f8ebd4e0f2000072d411c","id":"F:f1f2b57403","path":"docs/ops/runner-model-config.md","purpose":"Runner and Model Configuration (WS-H)"},{"hash":"sha256:699f12ea40894445b8d909cfe98cb36ea3291778a463432c111a3cad820a6943","id":"F:c54a514860","path":"docs/ops/work-item.md","purpose":"Work-item runbook: the queue discipline"},{"hash":"sha256:d5152c802dc8b1474c04a4bdd443a4e6ec7cc540e2c7c02871d1b8714519154b","id":"F:0a640a72f9","path":"docs/research/README.md","purpose":"Modonome Research Directions"},{"hash":"sha256:dbf7884a73eebe19e227d71297f93b00d74e089b7cf93cd1df1e81e76dd857ef","id":"F:83ecac7524","path":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","purpose":"Agentic Governance Mesh: Research Direction"},{"hash":"sha256:355a11f71e2855a77b700a36713b17efc9ac0c06d6bd1fc562279202ff4fbc6e","id":"F:492786871a","path":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","purpose":"RD-027: Governance Packet Protocol"},{"hash":"sha256:f6efbea820092a98600911ff787dcf104d6f66b636e737a5869337223a5811ec","id":"F:0e78eb22ec","path":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","purpose":"RD-028: Trust Network & Discovery"},{"hash":"sha256:d6fefc664720aeb755233cc106ccaa872b5ac5a84c92550f3177ee77954e7c09","id":"F:ff644711e7","path":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","purpose":"RD-029: Packet Lifecycle & Versioning"},{"hash":"sha256:96d7c204886019a60f16679bc715bc9856dd9f11c01cf7c0be9dd23bd4a7a8d3","id":"F:cb8c4aadaf","path":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","purpose":"RD-030: Cross-Repo Governance Feedback"},{"hash":"sha256:9d73bf60d826564abdf1274e681a59ab2fcd27b23b2776ff0beb124bb3623b93","id":"F:0c07096c4e","path":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","purpose":"RD-031: Semantic Compatibility & Conflicts"},{"hash":"sha256:c3df99eed2b4134afc312ef5626a3ea6ada93228563fc838c6a536abcae49e03","id":"F:79cec3a152","path":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","purpose":"RD-032: Network-Level Ratchet"},{"hash":"sha256:16b1b26c33c80b3f4f946231b9fe7b2f3f29b891445cf9d7784583940693dd4f","id":"F:acd892d4a0","path":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","purpose":"The Governance Mesh Vision: Modonome as a WWW for Repositories"},{"hash":"sha256:c7f8fdb4ff6ac66235b70abbc785628dc62d7afd2707b8349c489ce7f64a77cc","id":"F:bcd1c88877","path":"docs/research/knowledge-network-architecture.md","purpose":"Cross-Repo Knowledge Network: v0.2 Architecture"},{"hash":"sha256:97a2452d454b3687d0a7f91a275575ad98a3a1046da35d8aaa3638b3a4078e09","id":"F:c1ef63106a","path":"docs/risk-surface-guard.md","purpose":"Risk Surface Guard"},{"hash":"sha256:412df5caddf6378895f6a9a61f3e6175f0967ec36e8c550dc647f85d892869a8","id":"F:55673172df","path":"docs/specs/governed-autonomy-spec.md","purpose":"Governed Autonomy: A Specification for Safe Autonomous Software Engineering Agents"},{"hash":"sha256:a8be4604abf2f1f3f5069ca9519542d5cb297e1b8510b3d1fc62115e172cbc1d","id":"F:4d5cfa3611","path":"docs/specs/ratchet-spec.md","purpose":"Anti-Gaming Ratchet Specification"},{"hash":"sha256:117057588d3bde9166f502b23296313a7eb0d39c311d164c6ba6e3d9e2cff711","id":"F:c1cc304e56","path":"docs/versioning.md","purpose":"Versioning and embedding"},{"hash":"sha256:4cd43f8db80add0570df0f1adc1bddd8ba37dd1b3a04752a5b55846a09aba316","id":"F:88244532e4","path":"docs/vscode-workflow.md","purpose":"VS Code manual trigger workflow"},{"hash":"sha256:ab6445332dd2838b319c1a3c1ad357ce8d4190b81c7bd5674cb33c2012e0f4fb","id":"F:91a7efa0ba","path":"docs/workflow-fixes.md","purpose":"Workflow Push Event Fix"},{"hash":"sha256:8de7c8d5c9b8940c958fa8d7e6ce9fcdac2614927f9e38c6b4dd61ca51df634d","id":"F:fcc5f4b906","path":"examples/demo-app/README.md","purpose":"modonome-demo"},{"hash":"sha256:204b9ae011a6583c51ce31dcc14895f744c4b521410f72c2af62e1527b5c218f","id":"F:9666ca7f0d","path":"examples/demo-app/WALKTHROUGH.md","purpose":"Modonome on this demo app: dry-run, maker/checker cycle, and a real ratchet block"},{"hash":"sha256:8abb4449c6701801c43b4b9f03ce80f97f1ed09cf7e95630cffff687b422ed4b","id":"F:a37ab631dc","path":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","purpose":"Captured maker and checker run: demo-refund-coverage"},{"hash":"sha256:58dd762e7666111d5d22579223a5469d13cdc8141dcb2f9c293456b3ce62566f","id":"F:1174d7e2ba","path":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","purpose":"Captured gate-integrity run: the ratchet blocking a gaming diff"},{"hash":"sha256:ebe33167ee32caa55022fd15d7124f5f80e2e38bafdadd493e2a1cd73e868d02","id":"F:9444435647","path":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","purpose":"Captured run: the two-key arming mechanism, live, at a $0 budget"},{"hash":"sha256:add0234530427f1c666cc530f399c8c7242c071b75b2d953a1859dd27d2cd119","id":"F:599f5b2f28","path":"examples/demo-app/src/CartService.js","purpose":"CartService: manages user shopping carts stored in memory."},{"hash":"sha256:abcd98accc06e996929792a54325933e5c9062c7788870a06d911197d622996e","id":"F:54c6928de9","path":"examples/demo-app/src/CheckoutService.js","purpose":"CheckoutService: drives the checkout flow from cart to order."},{"hash":"sha256:21e75a44d724365e4a2fbf5f1869f91eaeaf9fd69c03f07f8cde66b70870d64b","id":"F:bd02b28f17","path":"examples/demo-app/src/InventoryService.js","purpose":"InventoryService: tracks stock levels for products in memory."},{"hash":"sha256:ac71e8f3cb979ba0a56453517c21600c02311dbe2a9fd83cd2ecf66ee002ddd6","id":"F:b9d806ba4d","path":"examples/demo-app/src/NotificationService.js","purpose":"NotificationService: records notifications sent to users."},{"hash":"sha256:7a9e84c178fbc67605c88dc5b987f5d274dcb5c1777b41f2ca2e4b5c3efaa987","id":"F:1ecd18c4b9","path":"examples/demo-app/src/OrderService.js","purpose":"OrderService: creates and manages orders."},{"hash":"sha256:a58caa051fa780ade55ccfbc3f97afd559f68bd99894f9195909169964ec46b4","id":"F:ff3aef693f","path":"examples/demo-app/src/PaymentProcessor.js","purpose":"PaymentProcessor: wraps a payment gateway with amount conversion."},{"hash":"sha256:75e7eb2c2d84332172ed6a023336c5ef9e7e4ccbccbdd47eed778eec4c1e7232","id":"F:8bb1b57470","path":"examples/demo-app/src/index.js","purpose":"Composition root for the demo app."},{"hash":"sha256:1afae5fa52dc4fb9da6958558524c5cef0cf50cc63beafe735d92d3a8922a8be","id":"F:3c53926ecd","path":"examples/demo-app/tests/CartService.test.js","purpose":"function makeDb"},{"hash":"sha256:b2320331f4ba103ef635b1377172c522abcbb95be380f15493e6deaf38278292","id":"F:52caf3b287","path":"examples/demo-app/tests/CheckoutService.test.js","purpose":"function makeCartService"},{"hash":"sha256:1bb3ddc7d9966c00d23c01cf9d9ed06cb002a002f01f759d8382bb4c547d0f09","id":"F:f8168b956f","path":"examples/demo-app/tests/InventoryService.test.js","purpose":"function makeDb"},{"hash":"sha256:3748cc9dfe7d9cc71b49559646c276a835ceb00cf11a7ad6ec31af6f0035edae","id":"F:044b762a79","path":"examples/demo-app/tests/OrderService.test.js","purpose":"Tests for OrderService."},{"hash":"sha256:41ca78f6845a8d5b2a3386a2e5dbd906e8e15936f8af9edd91a868e3dda27627","id":"F:373a946d5c","path":"examples/demo-app/tests/PaymentProcessor.test.js","purpose":"function makeGateway"},{"hash":"sha256:6cbc7df60ec7300fd8a38f82a14cd39b637b69acc15477bfb94e5b69a69000a9","id":"F:d52b08ebeb","path":"examples/node-typescript/README.md","purpose":"Example: Node and TypeScript service"},{"hash":"sha256:f04c42db742b1a61a21e1a5e4daa6e556879454a2ddb5213a8141c82e08fc689","id":"F:93f0f5d3de","path":"examples/node-typescript/src/checkout.ts","purpose":"type Card"},{"hash":"sha256:d244fe19489b99550187b195234440ed263227b76c6fc2f4e4b3231a4bda724d","id":"F:ae227d695d","path":"examples/python-service/README.md","purpose":"Example: Python service"},{"hash":"sha256:22be80cafe6ef2f172dcea2a76083692cb4cbaad6fda65011a3e4ebac72dff6f","id":"F:7ccad64380","path":"examples/python-service/app/orders.py","purpose":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after d"},{"hash":"sha256:6ac7d0d8b8789da8454f3774ed4e4c92e595378f15b9c065fc150bfe2c2eebcf","id":"F:2c2cc77861","path":"examples/python-service/tests/test_orders.py","purpose":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50"},{"hash":"sha256:572478361a59803f53a72fd7e2ef8a7f189f3765c6b65d07ee7caf80ebd41584","id":"F:c72e6949b9","path":"fixtures/adapters/reference-adapter.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9e256013a4969962340b88bc4fbd1a18faa54136e9c40145752d699faa37ad0a","id":"F:fdaf1308e4","path":"fixtures/evidence-tampered.md","purpose":"RELEASE-EVIDENCE"},{"hash":"sha256:b69a37444b540b95bbc9414c30f90effbae363f0a41c61d107d2fb41def038ad","id":"F:a1411f1423","path":"fixtures/negative-controls/app-syntax-error.js","purpose":"Negative control: intentional syntax error in example app"},{"hash":"sha256:c68d242c675ce2ac4f466c43367a1f62b3c88685dd8d7a91cf56d82aa25a09e6","id":"F:6fdd929a92","path":"fixtures/portability/prompt-injection-host/docs/guide.md","purpose":"Host Documentation"},{"hash":"sha256:f3a7f116395c8dc6344c12e3bb59a33c043c77322adf73ae260d8390c3518cd7","id":"F:90f0999521","path":"fixtures/portability/prompt-injection-host/src/main.js","purpose":"This file contains adversarial content in comments that should not affect Modonome."},{"hash":"sha256:d5ef951e3b520b4c771cfbfd415cfadb7ba2e7f40b7c3ec6e58f2eaddecf54c9","id":"F:7fcbf6b32d","path":"fixtures/portability/schema-collision/README.md","purpose":"Schema Collision Fixture"},{"hash":"sha256:433f5d3005e295d639f837ed731df3d1fc9f69d87454a9059c20919cc1eb8e69","id":"F:c0714e4bf0","path":"prompts/modonome.bundle.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:05ea9c92a67465908f531a11893fb6e9e79800ae0754db9922348bfc37b408fc","id":"F:1c3b1b469e","path":"prompts/modonome.core.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:4f717a8789ae5bff9f95be1bdc42f7d8c5524217a166b837b487bc0aac54d6fd","id":"F:41623f0bcd","path":"prompts/modules/adoption.md","purpose":"Adoption pass"},{"hash":"sha256:6a9f76705145d5337c587b7f29a2e41b5a80fea39888b8ab99069027f4d99e13","id":"F:36693b0d8b","path":"prompts/modules/control-panel.md","purpose":"Operator control panel"},{"hash":"sha256:053fa9757f27a93ab0f30c796d714ae61d0d1f30b47ea3a93b81d39cf899bae4","id":"F:02359d48d5","path":"prompts/modules/gates.md","purpose":"Deterministic gates"},{"hash":"sha256:e66de7085c9cb23c1bf9e93144adfa2415b80134202d294c3cdc8b8a3aff2e0c","id":"F:c98f6b55e3","path":"prompts/modules/network.md","purpose":"Cross-repo knowledge network (Milestone 2, not shipped)"},{"hash":"sha256:5367fd6d871586fed38e0da4f9a287dec6baf532fe519d06569378f8f54f5481","id":"F:8f62475ebe","path":"prompts/modules/roles.md","purpose":"Agent roles"},{"hash":"sha256:cfaa37419ed0b88debeb9f9e2ce712a9e6e88e34b46a3b779722f794e47e0b88","id":"F:c324fab0cc","path":"prompts/modules/snapshot.md","purpose":"Repo snapshot"},{"hash":"sha256:bd2ccd3653b7c86cd3ad87326f69db6b788065c060516a2a7c5cffe2c27d7f45","id":"F:9a28b4e90e","path":"prompts/modules/state-machine.md","purpose":"Durable state machine"},{"hash":"sha256:3d7b33777faa2baf4d1b4f057fc4ea0381f6777f6ca342c607e760131208ddd9","id":"F:f5d313e9f1","path":"scripts/adapter-verify.mjs","purpose":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * "},{"hash":"sha256:9cb8c6696aa47049d5f8193269996b2849efba0073ef8bf5bd3b2a240c2267ee","id":"F:5b113a0914","path":"scripts/agent/action-queue.mjs","purpose":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued."},{"hash":"sha256:56b52308decd179cc645822572b7b57e2fef714fe9b8c58eaf4250493d6c47f9","id":"F:872221b1da","path":"scripts/agent/apply-patch.mjs","purpose":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker."},{"hash":"sha256:ba80f6381cc467a9c683002821c35d5b27c6019096ba81dc9c2c6ea2d1b401f6","id":"F:8d2cb93236","path":"scripts/agent/openai-client.mjs","purpose":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUr"},{"hash":"sha256:d9f7d2a9b42c3f1c8733b4082327011bc64cd445c82cded91b0ae1102e304ff8","id":"F:851f776227","path":"scripts/agent/parse-checker-telemetry.mjs","purpose":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true."},{"hash":"sha256:a21893a1726194e08208e2a6805c3e186aa9818c611b30234a4edeb9f63acbb1","id":"F:8b5a1f94c4","path":"scripts/agent/providers.mjs","purpose":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here."},{"hash":"sha256:92fe8a966146d773b203e831a54eb2a655572beae435b439aa325115a7fafd24","id":"F:fd660a117b","path":"scripts/agent/render-prompt.mjs","purpose":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read t"},{"hash":"sha256:990c960a7bdd181c31fba92eeeb60d7fa01360ecb16c2e93e6f41dff01e6c0b7","id":"F:304ce7b89d","path":"scripts/agent/resolve-role.mjs","purpose":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative whe"},{"hash":"sha256:e5779dca1895b87903260631ce711391e9a9eb5639c5c91158f7955f9a78928e","id":"F:2d6ef08990","path":"scripts/agent/review-diff.mjs","purpose":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into ap"},{"hash":"sha256:cebe0dc7f6340cb3f141af88716bcda80f3b1fb13ced87e84097dbcc9e0e6104","id":"F:2127a8caca","path":"scripts/agent/review-proposals.mjs","purpose":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mj"},{"hash":"sha256:abb3bebb9b8ef6e4bd91e48facd8e44d7d645556859045d19b6097676af5f55e","id":"F:37f4a5c04e","path":"scripts/agent/route-action.mjs","purpose":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the"},{"hash":"sha256:43cf44b9edf6feca7efb0f71f7e26c4a26ba530d6ef7a206ecb8e20382811cab","id":"F:ddeb486c49","path":"scripts/agent/run-cycle.mjs","purpose":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the res"},{"hash":"sha256:edeb925a87b920bb9b64a63c2a3218b0281b7237af6ad86ca1608b170e14d6fd","id":"F:aa77f227a6","path":"scripts/agent/tool-loop-adapter.mjs","purpose":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value "},{"hash":"sha256:3b7c9ec492dec9c378f582afef587b2ff23ec768bd982857ecdc4c0d77ecd04e","id":"F:aea3c05bca","path":"scripts/agent/triggers.mjs","purpose":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.ym"},{"hash":"sha256:87bc294cf5068d051e6d20d6056432da9925110e6f8db55b99660f8e36fc0bd1","id":"F:af6de66499","path":"scripts/agentproof-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9275fe5c20751f990b51b1021467f17e59250f4c38a45aa3b5b3a35daf6ace69","id":"F:5f7910375b","path":"scripts/arm.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:bd263b1245941e1b4041001b4afb0ba97b394dc5c9d8a1e1471ee33451bfd247","id":"F:fa49930755","path":"scripts/assert-governed-change.mjs","purpose":"function gitDiff"},{"hash":"sha256:f1141bf6b8313e4155e84d70e8fc631dd391abf85a19ee92218eb681161d6fe3","id":"F:c9493b5275","path":"scripts/audit-learnings.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:f8e07c6c13183b7fbf33578abd8ff3d70686fba63ffae44d0982a7368fc8eed5","id":"F:2e327963ed","path":"scripts/build-compliance-evidence.mjs","purpose":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object."},{"hash":"sha256:061241e18cce8d0dcf12c11db8c58927dea9d4ded02e2078c7def7f325a1ef58","id":"F:780c791407","path":"scripts/build-policy-attestation.mjs","purpose":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure."},{"hash":"sha256:dd530f7ea86c3a22ac08fdf514d8f7551be74ce4deb5f12d10fc1b22731d5a2b","id":"F:c4395c3023","path":"scripts/build-prompt.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:be7f3355b469f9afc2e06391aceaa8174ce7e70695aa6b0d573ac92274b07834","id":"F:9344d335a6","path":"scripts/build-release-evidence.mjs","purpose":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), s"},{"hash":"sha256:c77a817b7fc82d4ebee7775b907c151db19eac9863dbca666c8e0eef641f3529","id":"F:b16afebae9","path":"scripts/check-agentproof-registry.mjs","purpose":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:5c29d7dbd4be83018e5d25810618ca7a31df62a8e437b9144ea2554e2144d5ca","id":"F:4749cc43a0","path":"scripts/check-architecture-drift.mjs","purpose":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match "},{"hash":"sha256:b29bdd09ee9c05a106aff2d333fe6dd9842839d3dfe6b08a539674391590245c","id":"F:e8676a18b7","path":"scripts/check-attribution-fp-corpus.mjs","purpose":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (provin"},{"hash":"sha256:d216d2f5903d4bdc8eadf06f3dac38cae0f3df9786ab318881ab622a310559a7","id":"F:fc5d887ff6","path":"scripts/check-checker-engagement.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3310b9321df769c49419a6203cd88c79bcbd1a10655abba8798aa6665ef29198","id":"F:92d6903b5f","path":"scripts/check-decisions-authority.mjs","purpose":"Parse DECISIONS.md text into heading violations and Resolved-section entries."},{"hash":"sha256:d60e08a38e4005ed25ee758d7cf8e61ef9b751d0d32245c45a68c391066fa251","id":"F:87c30bdb4c","path":"scripts/check-drift.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:579e7403d192e1755d1ddf4a5f8567dd8ff14642db3442800583a173a1802c14","id":"F:9427d264e6","path":"scripts/check-edit-set-compliance.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3216227092f32ee7c6f96f49e7604bab76e808b6459685c22c1853f07ea067c0","id":"F:ace169adc4","path":"scripts/check-evidence-secrets.mjs","purpose":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync."},{"hash":"sha256:6cc5d9ddecbd7b9711cbd42d94e8aa0be9b4c3937308dceb03eda4cbe246e311","id":"F:fc21812307","path":"scripts/check-gate-dag.mjs","purpose":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no "},{"hash":"sha256:9702cbaa25ff0244bbfd29c1f63ae498861dd5e5ea84914860c672c2a762c875","id":"F:cc361bd05a","path":"scripts/check-licenses.mjs","purpose":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:50afc330cf4fac557f8b99eb5906ca2932616c858ea4811adcd03e542080fd37","id":"F:fd08562f92","path":"scripts/check-md-governance.mjs","purpose":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research."},{"hash":"sha256:3c601bbcdfc8b45a42b893b35a86a22321f7c5f56c6e03e591f64eeb2da92d94","id":"F:2d4c555ba1","path":"scripts/check-portability.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:abfc4b3e72056ce2540816630ffb66f166c0cfcc906ddc57ab2274ccbb88ced4","id":"F:c5938c33fd","path":"scripts/check-promotion-readiness.mjs","purpose":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate."},{"hash":"sha256:07bdd20c05fa3927668884c14b436f491487d1b590b057d9a8d8a4ed02a7ea01","id":"F:e7380d1444","path":"scripts/check-regex-safety.mjs","purpose":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped."},{"hash":"sha256:3313c93f4758a857263196d58fcb974ec3a68b431b6555e7db7c20cb922e55fc","id":"F:61296e720c","path":"scripts/check-repo-hygiene.mjs","purpose":"Helper"},{"hash":"sha256:cf3a2a2c4b0db7a9cced4f9df643afb5da1a2be8a3a9ae44bcc5c0138aac40d5","id":"F:4096620673","path":"scripts/check-self-application.mjs","purpose":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is p"},{"hash":"sha256:a44590cf10dbd2cd48800f5864c83a939307510be49125345ace97e1dbbec8e2","id":"F:8b8d3c46b3","path":"scripts/check-state-machine-acyclic.mjs","purpose":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned boun"},{"hash":"sha256:28cc840559474e83a1ee21dba95c35e28b268902f1a72fb2372147047d23f808","id":"F:ca0833ac73","path":"scripts/check-style.mjs","purpose":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase "},{"hash":"sha256:eaf537f197bd578bec1076407cda89e4c85973635231d5cdc3999ba527596b0b","id":"F:d6401dd73e","path":"scripts/connect.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:97433b7af1d83122e5a0b5dae4a3b004d4033de57d3c30803d82b670693bf2fd","id":"F:09ba331878","path":"scripts/detect-near-miss.mjs","purpose":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch."},{"hash":"sha256:3c6707888df8aaaaa3f402c119fbe05164b9c19b4c95df42abb4c3372a97602c","id":"F:6f247eb514","path":"scripts/dry-run-sweep.mjs","purpose":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing "},{"hash":"sha256:e1dcceba4e0522d0c121c0788768de2a53a50d140904067ae9643d931335aa74","id":"F:128b647d9a","path":"scripts/fleet-ledger.mjs","purpose":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse."},{"hash":"sha256:5cfd1768d2a265c8c9c50898d37377c3da90f9a0870fe804e32cea74fc5bbbc8","id":"F:522efae76d","path":"scripts/gauntlet.mjs","purpose":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rul"},{"hash":"sha256:563d044fe89ec39aa32f05e04406003e5cc38ff7850a003d9ad12da714eb5505","id":"F:8a10462927","path":"scripts/guard-ratchet.mjs","purpose":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote "},{"hash":"sha256:99de1dee24fee158bebf0282beea7c691e1db08ffcd225c96a3c861939b7b07c","id":"F:90e1fd2fd9","path":"scripts/hygiene.mjs","purpose":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves)."},{"hash":"sha256:ea137b388471eabcc768a50eaa87370d0d8ff22c5930538f2b02b7ee389abb7e","id":"F:a7ce0f6452","path":"scripts/install-hooks.mjs","purpose":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than"},{"hash":"sha256:d244edfb949175f0c6f949f0552a3b44c868873ac1fd477b8f9f3be0ebf499cb","id":"F:5a3543606b","path":"scripts/lib/attribution-fp-corpus.mjs","purpose":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word."},{"hash":"sha256:39eb059a2ae2d05ffea008a764c8ee54d4512f392d93c49cba0d1d0df7a26e78","id":"F:6e0bd62fa3","path":"scripts/lib/branch-name.mjs","purpose":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first"},{"hash":"sha256:1ad1f8a9b02017c0d197db0d6cc81425f8a7f7006aba988237647420fc958885","id":"F:245efb551c","path":"scripts/lib/canonical-json.mjs","purpose":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another."},{"hash":"sha256:ec29a7bc4bd47ae47abf9977d1ce9ea482f08c973cdaa5b07198c394fdc23bfa","id":"F:98529ba7ea","path":"scripts/lib/capability-flags.mjs","purpose":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/c"},{"hash":"sha256:a602b02d47546bf2f61d1ce0115814be8d94f25d26f8944bc2745caa4af2ddc0","id":"F:2d93cea2d4","path":"scripts/lib/cli-args.mjs","purpose":"Minimal argv helper shared by scripts that take `--flag value` pairs."},{"hash":"sha256:cac7448be7d7d4dd22883cdcf78a7f351b926cd087505967814a1c2ff5dee2be","id":"F:e4ff19bbe2","path":"scripts/lib/commit-identity.mjs","purpose":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendo"},{"hash":"sha256:437e6ab7ef1994b7b6f1c508dfb7b50e66b454cc1c6bbbca20921583425f5741","id":"F:d480e40c97","path":"scripts/lib/config-validate.mjs","purpose":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers:"},{"hash":"sha256:784a3f9087775417d015cb26550348ea7b24b163a99df58d7004ad5a09dc3e69","id":"F:1a19f02364","path":"scripts/lib/control-panel-audit.mjs","purpose":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary "},{"hash":"sha256:ccc5c76cd7b844283a20f6e510b6aae9bf403f654cbb16bf1e632162e722a085","id":"F:4a7eaceb5c","path":"scripts/lib/detect-attribution.mjs","purpose":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the fir"},{"hash":"sha256:4b4b88d9bb97bd5f214e3321b995b646f067843323838c567bf2a73206bc1369","id":"F:0cacf66a3b","path":"scripts/lib/ed25519.mjs","purpose":"Raw 32-byte public key as base64, accepting either a public or private KeyObject."},{"hash":"sha256:71b31aebe22a8c98aafef65bed9f562e02b56bc00515de949a947f30ad9ecc9e","id":"F:9a72895a04","path":"scripts/lib/file-classifiers.mjs","purpose":"Test files: any language."},{"hash":"sha256:a3488a4f708323ac66b888445195aa30435c0447782db57b995a3599ad92f935","id":"F:ff2c4a08a4","path":"scripts/lib/git-scope.mjs","purpose":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo)"},{"hash":"sha256:521f61f9241e90e815aa0be486910b589b4eeaaa40b81d80b7c3c21cdf4887cf","id":"F:cdbe769ed3","path":"scripts/lib/github-api.mjs","purpose":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin."},{"hash":"sha256:151594baff293acbee5d59624d372828624fc07b8ca255ce1c69e894136afcd2","id":"F:f51cba9beb","path":"scripts/lib/graph.mjs","purpose":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the"},{"hash":"sha256:943e69c8656c227f4aaec006181a2ccfce440d491533c7d254a3ed1a57446a01","id":"F:34cb2b6c48","path":"scripts/lib/jsonschema.mjs","purpose":"A small, dependency-free JSON Schema validator."},{"hash":"sha256:d7e0fde286931884db99d3a1a496f428bd6c68fbddf5de8e75cb0fd7a6209a51","id":"F:594f505f11","path":"scripts/lib/lang-adapters/generic.mjs","purpose":"Fallback extractor for languages without a dedicated adapter. It captures common"},{"hash":"sha256:8e61f09199636a2a7bd4ed653ebb4176fd0f5c41f8f8719956613f0227db1122","id":"F:ffe5c1269b","path":"scripts/lib/lang-adapters/go.mjs","purpose":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding l"},{"hash":"sha256:39f6d32bbcecdcc56e34c94fa12cd68b0e0f303302324d2ce24d5fb85cae150d","id":"F:2554ddd30c","path":"scripts/lib/lang-adapters/index.mjs","purpose":"Resolve the adapter for a path by extension, defaulting to the generic fallback."},{"hash":"sha256:31bd1870b3685735b96c6fa032a6c9b7601c963658638d182dedf17103802d1c","id":"F:c598a2d684","path":"scripts/lib/lang-adapters/java.mjs","purpose":"Dependency-free signature extractor for Java. It captures type declarations"},{"hash":"sha256:7f8e7109694e05aadc965af340c67bab5cda5a9c0d0495535b5cf7385ed5a95b","id":"F:36419aa427","path":"scripts/lib/lang-adapters/js-ts.mjs","purpose":"Dependency-free signature extractor for JavaScript and TypeScript. It scans top"},{"hash":"sha256:752af1565feb9bf566c2683e75abb951d701ab390777e88c42baf1a6921b50ae","id":"F:3213d03b72","path":"scripts/lib/lang-adapters/python.mjs","purpose":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and im"},{"hash":"sha256:110290b3d6d591798432e680943ee28a30281a47504da121b58e834fa09c31e9","id":"F:cecdb96382","path":"scripts/lib/lang-adapters/tree-sitter.mjs","purpose":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered."},{"hash":"sha256:d6c309ff2f4bd2cc17f802ca282a312583327a153f10049310dbe98a6dad1f08","id":"F:4ebb5aa8a0","path":"scripts/lib/learnings.mjs","purpose":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evic"},{"hash":"sha256:e18e2c920e97766971ead19dfa0b82eb4911a2fe957cfb73ce7fe1ca2b5eac71","id":"F:2b9c43b0ca","path":"scripts/lib/merkle.mjs","purpose":"Hash raw file bytes (Buffer or string) into a prefixed digest."},{"hash":"sha256:60fea90ed1969e529114e0c8c88a58607618b0570bbc9c735bc56011da83d561","id":"F:e9f1cc1e5d","path":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:38ac9166a3c80ca01dc4aaeb0167cf9f4f1f138b707f2212528a70bbb3f678f3","id":"F:91e24dcac0","path":"scripts/lib/message-catalog/advisory/build-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:896322295191ba28f7c351678ad86b1b1fcdb22b729484173b52b8dc0068431b","id":"F:99251bc045","path":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:83f8ea50cb0ade3033e437971998189dd92da02f85c41655960254d08f8531c3","id":"F:c6bd51a324","path":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","purpose":"const MESSAGES"},{"hash":"sha256:56d58644294be2ef66bde21bac0dff8edca53bd83f4990fb809531cb2a0495c2","id":"F:1ff2bf39a4","path":"scripts/lib/message-catalog/advisory/github-api.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8ef6c2e14a8d0b58ece3bb7b3e1a7f98d780e799045c8ec2aa83d95379709441","id":"F:d328f97d94","path":"scripts/lib/message-catalog/advisory/hygiene.mjs","purpose":"const MESSAGES"},{"hash":"sha256:90d0f7c077bacdb650e433022ac8e2c968d7d8253dda7cd4e6c71aad0721ccb9","id":"F:4d08d5472f","path":"scripts/lib/message-catalog/advisory/learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8f8037a5cb63473a4912543f0203211419999bb61bde7d77fc6637a770f9283f","id":"F:d8e37c4449","path":"scripts/lib/message-catalog/advisory/migrate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:013ac5fd17e1afecd4793e8f132990132e1b4191fddeca1e89248bc236ec9c3f","id":"F:9b01a5cd4d","path":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","purpose":"const MESSAGES"},{"hash":"sha256:dcf18fb07eb5c297b55075a40d7a267da2f4632f1e23e0b9dd19b73578ba9793","id":"F:d288a78085","path":"scripts/lib/message-catalog/advisory/sign-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7aba6be92f59e9b9e0c22e1d4163686fce03fc729fc6097689f9df011b2c1a1a","id":"F:9a32917e56","path":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","purpose":"const MESSAGES"},{"hash":"sha256:e6844e187fe342bf462bbec7dc26ae8ca192285c46ed51cd6d2f82c7460df954","id":"F:dd58ae3791","path":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c63edcd93cab1923edcfa9e9e1fab374e4eac71b15fdfa171e26d787cf1314d9","id":"F:09ea014068","path":"scripts/lib/message-catalog/advisory/verify-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b6a5e7e1c42beacee11eb5a45f0f13999566e46c9fd486797a2ceb483f36f294","id":"F:da9133a29d","path":"scripts/lib/message-catalog/agent-run/action-queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9151a420940e33c897078aea7224430d08cb455aae601e44a078073cbe37cedb","id":"F:aa27d254da","path":"scripts/lib/message-catalog/agent-run/arm.mjs","purpose":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or dow"},{"hash":"sha256:6658d1a5b449f2ef7e2a8340fcb477ddb2e64d5dea0b79e31da5adb92a982ee8","id":"F:9616513cb6","path":"scripts/lib/message-catalog/agent-run/disarm.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0934bc4ec371ff52ae9f3e431d7c429ac048d7e0d663487f29c3a481bf380dae","id":"F:9803feef4a","path":"scripts/lib/message-catalog/agent-run/openai-client.mjs","purpose":"const MESSAGES"},{"hash":"sha256:4572c1be5d02623ba2bb952d81f8690ee828af9a8122439c64ec4d534d7f1b0a","id":"F:e948251d2b","path":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3586e3392442081e34ff5d91ca35569cf944c745c236df06978711a3726e0a5e","id":"F:5d52d97b8a","path":"scripts/lib/message-catalog/agent-run/queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:17f6398c9cb42806adabf7da20358039e55b6f7ac17715e85707cc6edd63df34","id":"F:a5822fdd03","path":"scripts/lib/message-catalog/agent-run/release.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c58f58b0e6aae4da93c0bc1922a47b9485abbe4b8cfa10bf31edb37942c5fbe5","id":"F:33c4d744f3","path":"scripts/lib/message-catalog/agent-run/remediate.mjs","purpose":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, "},{"hash":"sha256:7dd6e91aca949390bc9be664d950656960f20631ee69a4c14efae7ed61005d5b","id":"F:59b2499e4e","path":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:40bedb377bf613e45e81cfa30972c95cd5de3a4b36eaf721ef85503deb44c64d","id":"F:e2025a4e0c","path":"scripts/lib/message-catalog/agent-run/route-action.mjs","purpose":"const MESSAGES"},{"hash":"sha256:09d36c5933378524789996b727dac4db3cdedd84e1a2e9a0f22c3cc66d977bd5","id":"F:acc3f6b466","path":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","purpose":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advi"},{"hash":"sha256:4b3f343aa8615dec423fbddc2c090cb6ef30bd01589e8b164da68b6b79f915f2","id":"F:313bcfac46","path":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9735efc423677e7249cb9b85b4d7b4144a3aaa377780279637bc281408429a2d","id":"F:6a86908a3e","path":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9f526f99d6bbdeb34a67e2b03cc8bc011ba3d45875923a4397fd3220df6670ac","id":"F:1127892e72","path":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","purpose":"const MESSAGES"},{"hash":"sha256:db26343cd0406efc3d0147aca404aaac49ab5111b5e27bf7d6281473febdf79f","id":"F:964f89b6cc","path":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","purpose":"const MESSAGES"},{"hash":"sha256:eb0cfb783b0b42137f4f059e1a0bb6c713c511a335672b35298e5cd0bde4a6ee","id":"F:40d8f235fd","path":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3d6c96d1905aba0e8b1b3dfdb98a50cff5c6619329afdf92eb0c53c6c21e7d1e","id":"F:35d4a12b63","path":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","purpose":"const MESSAGES"},{"hash":"sha256:15411f6601e2524b7760c0b4ce06f61bfbaae59c924360d294dc104aadefcf16","id":"F:2715f09f24","path":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","purpose":"const MESSAGES"},{"hash":"sha256:62195cc465a6caa11f1bb8ac74b69e363a2015c75f072b2cd3a0a2e76bffc0ae","id":"F:a8c32b8f15","path":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:de8580a9807af52726a195ff6bbea0ba59024896e43e64ad563209a1ae931607","id":"F:b502a0fe75","path":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9b1d901e95fe1a39f690959333ef957b63c9b647fb6bdb8c90d95297d9262e7a","id":"F:2215d0e1fc","path":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0b53053e37e90fe399af325eecb321bd0259c7ec1009f414d40353c11e1da95d","id":"F:ccb72910b3","path":"scripts/lib/message-catalog/gate/check-drift.mjs","purpose":"Catalog entries for scripts/check-drift.mjs."},{"hash":"sha256:986f0df07a4720d88fbbc1b5742636295b56b156f0a85ef1dca5537551f89939","id":"F:05a0f0d5a5","path":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","purpose":"Catalog entries for scripts/check-edit-set-compliance.mjs."},{"hash":"sha256:2733747219e41422cb94f686f76ae82cabcdf6a6b04a8eb5e5ac7f45e93ed55a","id":"F:efa02030ca","path":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","purpose":"const MESSAGES"},{"hash":"sha256:74ed10d3af65d1c4cfd60c3bc16c0d223ba6ab2119cbba1436786a2d287328b0","id":"F:240ace7a8f","path":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","purpose":"const MESSAGES"},{"hash":"sha256:88f3cd8aef67912ef0e255cb4741653c5477fc1a4c6beb8a30f35aa142f1598e","id":"F:0c731e3460","path":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0dbe8208bead033ac950619986c6aa89ca356ba356dc77a184134a542606677b","id":"F:3835919e8e","path":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b276d73e960984be67d9728b2e2df11212942149bafcbbeeaa64265cb7d0ab8b","id":"F:3f1216fc11","path":"scripts/lib/message-catalog/gate/check-licenses.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5f842574f39f155e2a8da073e72208396eae4900cff3e05b455e3da8af71ae12","id":"F:b25dcdad19","path":"scripts/lib/message-catalog/gate/check-md-governance.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0da9a0f1224bb89807786944653c7da3e344f26722b53faaed0406518f23f0da","id":"F:23dbdd7e76","path":"scripts/lib/message-catalog/gate/check-portability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:d0b4806531e17afd05fe7e81b647f61dc3fc6633c4cce3282a93277fbba86617","id":"F:973aca5f3e","path":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","purpose":"const MESSAGES"},{"hash":"sha256:bc09937690d9279d167eebde956fd80e6d9da09ba5139df802dd1a5ff6bdfe80","id":"F:b4f4e16ca1","path":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","purpose":"const MESSAGES"},{"hash":"sha256:973c6d0a27ab11310c8414b6bf85549764f86882b6fa6bd55163b716b5eebee3","id":"F:597cc7ae15","path":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","purpose":"Catalog entries for scripts/check-repo-hygiene.mjs."},{"hash":"sha256:da60e62990a8ee27166781413a9718cd755c64104e7ad801a8447c56200e4100","id":"F:de188c1b79","path":"scripts/lib/message-catalog/gate/check-self-application.mjs","purpose":"const MESSAGES"},{"hash":"sha256:6e35dc5881832f52e637ba331d6361c7ee8fa741fd4cbf88e86a520ed02374f6","id":"F:179564da6f","path":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5e7ec0986719e01a5f2d8bd52df29ca0e60cc88f511822992031be12848a4e41","id":"F:9dbf431d3e","path":"scripts/lib/message-catalog/gate/check-style.mjs","purpose":"Catalog entries for scripts/check-style.mjs."},{"hash":"sha256:53cf657d4da273c63e8f24ee82f7582658d90fed61a0ed127950462ab7c2f197","id":"F:b2efd505ef","path":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c7bbeb3b7d9f0e776386632aa64287228eac6fc294f6b166c67209a2606a80d7","id":"F:e6677dcd37","path":"scripts/lib/message-catalog/gate/check-work-items.mjs","purpose":"const MESSAGES"},{"hash":"sha256:306896f7104deb562b7631cbc392ed01b500270b0225a1da73ac44002dd5c568","id":"F:86fd2cf669","path":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","purpose":"Catalog entries for scripts/guard-ratchet.mjs."},{"hash":"sha256:257f8f916af5a3759c0fe7845403f145f751db39db0b423034170e37ff6b4434","id":"F:5d02ea0b02","path":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","purpose":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a find"},{"hash":"sha256:74717fcb0f99085d9d122db58e8e4ba94805d7322aef6bc620cf0d3cc199c774","id":"F:5b5b4ddcae","path":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","purpose":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (age"},{"hash":"sha256:ef1721e2305e6bb4ce9d7161f7539715485f76a36d1fec7ed074ab34049cd756","id":"F:a104667369","path":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","purpose":"const MESSAGES"},{"hash":"sha256:1bcf14f7da5da91f3110ecfeab482e2df7ebdedddb1ab0566a7f1a29dd2f5c1a","id":"F:ec3aa9930a","path":"scripts/lib/message-catalog/gate/validate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7c112cd9b24871b493e467957094dfd12be3a18b9b982fdf43a73dc252b1a206","id":"F:bf4e255c6e","path":"scripts/lib/message-catalog/gate/validate-work-item.mjs","purpose":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune"},{"hash":"sha256:24902ba5e2972a58c469e213a43a9029b202d1cdd8b4684dd204880a6175d7db","id":"F:03f476958e","path":"scripts/lib/message-catalog/index.mjs","purpose":"AUTO-GENERATED by a one-off script during migration. Aggregates every"},{"hash":"sha256:1169c59a31929d875f93c908e8979f38939fdbeedc3fc8c296e40b25b01522e5","id":"F:f41378fed0","path":"scripts/lib/message-catalog/panel/control-panel.mjs","purpose":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wo"},{"hash":"sha256:0694d9599d0f9d3dea44ee03d796aff6c9bde8ae2229bc7766948b9100274297","id":"F:05bffc70e9","path":"scripts/lib/messages.mjs","purpose":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries."},{"hash":"sha256:4f7779cf5392e036bb31212825c280df1825f69daaceeba4812ea39ed04d0882","id":"F:9a3e8ed7d2","path":"scripts/lib/near-miss.mjs","purpose":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identiti"},{"hash":"sha256:d60fc11156d34e1e740eb83a35af450377fa564f0d6cf64bf73422407451a6ed","id":"F:12c7a4e461","path":"scripts/lib/packet-id.mjs","purpose":"Content-addressed packet identity (ADR-016). The id is sha256 over the JCS of the"},{"hash":"sha256:facc1024c7256850c5287a76a89e091c1db28a5046cf9451b11379f16b242a70","id":"F:4db1101024","path":"scripts/lib/policy-manifest.mjs","purpose":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored"},{"hash":"sha256:3658a4a3013851c5dcb36c815d539c96ada209792b97326f384bfc670fb9e365","id":"F:8ffb11f281","path":"scripts/lib/remediate.mjs","purpose":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis"},{"hash":"sha256:22f072717e361c8cb6eca4926f99b8aa51fdb569f05b7586fb82f769c768f2e9","id":"F:ae46bbab81","path":"scripts/lib/repo-detect.mjs","purpose":"Build the small file helpers a detector needs, bound to one target directory."},{"hash":"sha256:65a01363eb81852d5ebbd1a54f3127224aa8e3d69b26e341353d7374865a87de","id":"F:2f3e98ab2c","path":"scripts/lib/risk-surface-rules.mjs","purpose":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- a"},{"hash":"sha256:7ea23105d1a1d923578a3c606d67aca39d5d6a01c06edc0da696b4fa2b6f8290","id":"F:b014028f57","path":"scripts/lib/run-gate-capped.mjs","purpose":"Thin wrapper around spawnSync with a hard timeout and output-size cap."},{"hash":"sha256:495d8f38fcbb601695c8f161eb1b02aea33adac82569ddd8bd6a002495589f9e","id":"F:68c4da7fe8","path":"scripts/lib/secret-patterns.mjs","purpose":"Returns an array of { name } objects for every pattern that matches text."},{"hash":"sha256:be57418797ef4ee54f3c3e71d7b3b13a89b5adc1ce0fbf9616db542bacc23156","id":"F:1cf31c4792","path":"scripts/lib/snapshot-anchors.mjs","purpose":"A short, stable id from a string. Hex keeps it deterministic across platforms."},{"hash":"sha256:d3e330978bbbc5f009688d69510b6c683fb59eaa66f154df8f911bd0a53fd278","id":"F:119e3c0fce","path":"scripts/lib/snapshot-cache.mjs","purpose":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option"},{"hash":"sha256:237f5b4282a76f71b0a2953e54c663750f138b5454aed474ea906a7f02587692","id":"F:dbb9c92ca1","path":"scripts/lib/snapshot-core.mjs","purpose":"Detect binary content by scanning a prefix for a null byte."},{"hash":"sha256:b538e22f73b15770c75edab736311cf48d00324e81e8aab01c6f4f274a5445ed","id":"F:015261eab0","path":"scripts/lib/snapshot-graph.mjs","purpose":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\"."},{"hash":"sha256:60c433da29ddd383027d0bb950d4cc1b4e74437b7448fc71e57e69ad4cf49ef6","id":"F:4b91a9f65b","path":"scripts/lib/snapshot-redact.mjs","purpose":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked."},{"hash":"sha256:97f8769695906c86e13308edb05def7aaa9fbcd592f29ee56d5c4d346e62a3a5","id":"F:cb66095cb4","path":"scripts/lib/snapshot-walk.mjs","purpose":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), *"},{"hash":"sha256:642e97312574db19dec8b678ebf04827ddcceecb6b5d7f960823006045ac03f2","id":"F:7944059823","path":"scripts/lib/token-estimate.mjs","purpose":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which"},{"hash":"sha256:3cf0f082a2ffc271f28e040c0432af60005821bc9e72152b73598d200bd4e204","id":"F:a1baa3f01d","path":"scripts/lib/work-item-staleness.mjs","purpose":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing o"},{"hash":"sha256:773578d3c2dc5529756fcbce2ad2f9d157a79d6b06b5772feee7d0c9bf2577c3","id":"F:cb3c5f7715","path":"scripts/lib/work-item-validate.mjs","purpose":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (the"},{"hash":"sha256:d53fbc6f62dfaab45537134168c78b39e1d4aa41ceb079fb829fb5876466c5de","id":"F:1575110130","path":"scripts/lib/yaml-lite.mjs","purpose":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string."},{"hash":"sha256:0209679156fb05ba27ff06b76b8eda2eeee8afd83c15b6e4a7e73edc23d8ddb1","id":"F:ab5077147a","path":"scripts/mcp-server.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ee850affb3bf19cd5b253535cf806dc341e885ff118589641c3208cbce63019a","id":"F:9d69a6b766","path":"scripts/migrate-config.mjs","purpose":"Safe defaults for every lever. Migration fills any missing key from here."},{"hash":"sha256:93cd048e0c8b17b97337fbb587101af43b3ea3d289e155fbb9baebeb8d4755d9","id":"F:7232ada2da","path":"scripts/preflight-embedding.mjs","purpose":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`."},{"hash":"sha256:b348d37fc2e50832baadc43039a306a4b5049507debcabde313087323b882d78","id":"F:ac11b5379f","path":"scripts/promote-learning.mjs","purpose":"Slugify a lesson into a deterministic ID."},{"hash":"sha256:47e7d2ead1129a6bd6a4a2202883e524778c990715b2027c5bca3b701ee5e079","id":"F:e9479e1a3b","path":"scripts/ratchet-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:08c26d5e35bea28010341cc485b8bacbc1def7ecf03d812a9b9d4d3ed7899054","id":"F:edf42fb1af","path":"scripts/release.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:a109bb6467a8c6c433d7839dfeeb8f605c0ed8f4fec6ceb69fdf3870be25d3d1","id":"F:1e5ef6ba70","path":"scripts/remediate.mjs","purpose":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-"},{"hash":"sha256:c03c8e271e9be99be123b63baca4bf1e24818c705bcd486d45eef82df7423d27","id":"F:3b382f95c0","path":"scripts/report.mjs","purpose":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he"},{"hash":"sha256:edda86a8c8fcb3334fd459b232cd3b7951b8d23441baf7cc9d0b2ae69c65472f","id":"F:116adfb9f8","path":"scripts/risk-surface-guard.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ace3ba225e4ff802da64a42e737843913c708e466602ab98a23151fb34d642ad","id":"F:edb11415f0","path":"scripts/run-gate-pipeline.mjs","purpose":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name."},{"hash":"sha256:cbe2d6ea83610d9a33c48f6dce83e514d1672687c85a032a873539b2cb2e5914","id":"F:5e450ff82c","path":"scripts/scaffold.mjs","purpose":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp"},{"hash":"sha256:d215c06b5aafdb9ff71a4c1ada37e33b202a688248f8098d8d238b4f30f72d74","id":"F:e11f907cba","path":"scripts/score-proposals.mjs","purpose":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale."},{"hash":"sha256:f6388f045a2cd30e25ab513e6b47875572c02ff15a17340b081446188fd31b4f","id":"F:7b3e38c9a6","path":"scripts/sign-packet.mjs","purpose":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rath"},{"hash":"sha256:cb7db504e88426d42954eb37c6b4695b11c738a38483e905b146d18f1654689d","id":"F:a0d489df6d","path":"scripts/snapshot.mjs","purpose":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yield"},{"hash":"sha256:3952dac12800b17c8153ed462ab6073b0ed24af0a188e898e5491f324fe84cc1","id":"F:8abf9e432a","path":"scripts/sync-site-data.mjs","purpose":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read wher"},{"hash":"sha256:aa0aa9abb59be3ae19db00c9ef7db9d6cc08045d3416b359875a1ec76b9da0f2","id":"F:23917c6197","path":"scripts/test-prompt-behavior.mjs","purpose":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns "},{"hash":"sha256:56007d9acd788c62cb891a03f1d22790b844390830a7c5aafda1347e4b3a4d89","id":"F:d135cffeaa","path":"scripts/transition-work-item.mjs","purpose":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older i"},{"hash":"sha256:f89c1fd863164fde2d373634069d30c4d3631be96a9768d5630901b52064d54b","id":"F:3b96b6dfed","path":"scripts/tripwire-check.mjs","purpose":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor bef"},{"hash":"sha256:18d20c24e1fc001459bc1926c55be66dac198f93ec7bf15e02be87818761585b","id":"F:65193a9799","path":"scripts/validate-knowledge-packet.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:240b429dd6418ed77a6ecad1a0635969884c96035107da3eb3e06183e7158e01","id":"F:0c1c5ad5d9","path":"scripts/verify-packet.mjs","purpose":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather t"},{"hash":"sha256:ce19e9a81b804f9827f62afc8d794ffbb68bdab9e5a744c9a0efc2303356ac66","id":"F:669d2a51f4","path":"site/README.md","purpose":"Modonome landing page (modonome.com)"},{"hash":"sha256:60feb6f02f574a9b483a6c31048de9ef990f7bed92e0ac12c5d85a3942da6051","id":"F:aef9cf1e27","path":"site/index.html","purpose":"class Component"},{"hash":"sha256:41cc004d9a3d9f8d0701d181a235ae206d248470c009de18176e540f6b4a1888","id":"F:6a5934a79d","path":"templates/.github/copilot-instructions.md","purpose":"Copilot review guidance: gate integrity"},{"hash":"sha256:1e6ba7bac7bbcc6d85acac2228227493609359e98bcaae632ede494533923f87","id":"F:037178c793","path":"templates/.modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:1d2f92bf5237ba63d8447070c29beff13597b9668ab64f9f017a2e485bfe6ff7","id":"F:26c8e3a19a","path":"templates/.modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:515a65a35b","path":"templates/.modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:8918ad8e3a343b8450ba620de91ea940fb320d0cfd4c2b312a035aa6fe9fdc6f","id":"F:e27748d089","path":"templates/.modonome/STATUS.md","purpose":"Modonome status"},{"hash":"sha256:d528b04b9da3809145bc30439e8a0577daa9d4cfd059d7436aec7858660ec7b0","id":"F:75c1125713","path":"templates/.modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:1a28680281da45ca68d4e4d912b5cc4147c97f5d61c2b95d17513a69804347a7","id":"F:2148814594","path":"terraform/README.md","purpose":"Modonome org-provisioning module"},{"hash":"sha256:faafda4763433ac754f4936ae5a7545fe0f2aac848ef92003a78b1ac6f8fdef3","id":"F:195e9217ca","path":"tests/action-queue.test.mjs","purpose":"function tmpQueue"},{"hash":"sha256:66d197135fce5140ea1ee62cdf60ce50c1f2565d5589e95fce7657b99d8bc830","id":"F:cacaab56e1","path":"tests/adapter-verify.test.mjs","purpose":"Coverage for the adapter conformance verifier (docs/adapters.md). Tier 1"},{"hash":"sha256:f03b2f065139b4a025ce69bef63c9ab58d672c1674bcaf9628bc18e6a3013f8d","id":"F:18f569225a","path":"tests/agent-model-fallback.test.mjs","purpose":"WI-041 (ADR-039 follow-up): runtime model fallback in the loop. resolveRoleModelChain"},{"hash":"sha256:c6049e544a248e0df041509b989f0e4717b4df24aaa212aeb2ac984a48fad4d0","id":"F:1bc6d1449f","path":"tests/agentproof-attestation.test.mjs","purpose":"Tests for the AgentProof conformance attestation (ADR-042). The Statement shape and"},{"hash":"sha256:270640c566b3fb72ea5a277b4db30f7ed12cf51cc0e63472de3b6ebb4248bc88","id":"F:940d5f4399","path":"tests/arm-disarm.test.mjs","purpose":"Tests for `modonome arm` and `modonome disarm`: the guided ceremony that flips"},{"hash":"sha256:43bbfe482e04ee3d5f5310c89bb7ea589d5a9a57078fea7d007331560f81332b","id":"F:60548316f5","path":"tests/arming.test.mjs","purpose":"function tmpRepo"},{"hash":"sha256:0d90c61482079b4e23bcd539618b23439c4b11c4e026cbc7e677a3328f5df0ea","id":"F:8fe56e5618","path":"tests/chaos.test.mjs","purpose":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure."},{"hash":"sha256:825ad054cf87ff7205f4d60e6cb87fa820f7aeb1addb4b1d005dc71a480cbe5d","id":"F:564b053598","path":"tests/check-architecture-drift.test.mjs","purpose":"function makeMinimalRepo"},{"hash":"sha256:a9ca00820366b64f0e6c4b6d9108c7d0e7b152671ff5fe423e428ef0710f9f4c","id":"F:df4b55ecef","path":"tests/check-gate-dag.test.mjs","purpose":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says."},{"hash":"sha256:30690fee946ac10a3ecc618e5909fc2bb31f51b111173e2f2e52d999f2d01443","id":"F:0391f3b249","path":"tests/check-md-governance.test.mjs","purpose":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under te"},{"hash":"sha256:91b3a910fa42af06c4cfeba5b735c93e31a0268ef94c5c1c94f77bef05fb8497","id":"F:e359adb110","path":"tests/check-style-lexicon.test.mjs","purpose":"Tests for the Lexicon Gate wired into scripts/check-style.mjs: a banned term from"},{"hash":"sha256:4cba8865613c76bc3e95b3308f1be5cc76e5ba7b2a1003a85602f95e4c0f8aa6","id":"F:40e4f39b59","path":"tests/cli-dispatch.test.mjs","purpose":"function cli"},{"hash":"sha256:c803e7cccf71bd7bfc883e20cf0612e043e0ca62ef8b64215e32f1a71209b75e","id":"F:3ea503e7c0","path":"tests/compliance-evidence.test.mjs","purpose":"Helper reused by the mapping test."},{"hash":"sha256:cb57af34873242513701019e39d38d9336899d37c263372f90fcbbc74ef417ff","id":"F:5eff4122c0","path":"tests/config-key-parity.test.mjs","purpose":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`."},{"hash":"sha256:b1abc614f5f29ceacb2dbe8490be13605cbbab487feee98818689423b5fb451a","id":"F:5956278014","path":"tests/connect.test.mjs","purpose":"Tests for `modonome connect`, which registers the read-only MCP server with an agent"},{"hash":"sha256:2037529df3e0aa6dd33508e799f1cf299758373e3daf4c18dfa3b6920e803cdb","id":"F:d0da1cab80","path":"tests/control-panel-ownership.test.mjs","purpose":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config."},{"hash":"sha256:a0d9d96354cbf39c606470a59f64a93247ac045059b0e654319de426b68fb0c8","id":"F:e00aec45ce","path":"tests/control-panel-work-item-writer.test.mjs","purpose":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory."},{"hash":"sha256:6b5ed813cc8f8442ef1975e65f3a1cad7db442e8f7323a668e8acf41d13f5274","id":"F:8b2f3dbcba","path":"tests/control-panel-writer-nested.test.mjs","purpose":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state."},{"hash":"sha256:4e1f4b2cf905b3e5f11747628e019caeb327d4f1d9b77220575715ab16506836","id":"F:f921eecad7","path":"tests/decisions-authority.test.mjs","purpose":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }."},{"hash":"sha256:c80f660e875231f20615c19af04c4a405427dd7822dbbf8b48334c6d9aa4f8f3","id":"F:b70824b13e","path":"tests/dependency.test.mjs","purpose":"Read all .mjs files in a directory (non-recursive by default)."},{"hash":"sha256:c2a5852ebeed046ca14df04e80f524f33a60f0608226bb36a19b55bf6ed7ba95","id":"F:778c33cdc0","path":"tests/dry-run.test.mjs","purpose":"function dryRun"},{"hash":"sha256:56a9c14022247f4b8398927593ddee297edf4c37cc70fcc82446998691b173eb","id":"F:9cbe9238f8","path":"tests/e2e.test.mjs","purpose":"function tmp"},{"hash":"sha256:4cc22fbbf064820e9641e044e84851171e2b401d1f18d0d946875e9bce143951","id":"F:cc65dd1342","path":"tests/embedding-safety.test.mjs","purpose":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into"},{"hash":"sha256:e2138a1e49810b80b6b1bdd808e8139b7d586bc22874a53008f044e7faa897bb","id":"F:06b982f5a2","path":"tests/envisioner-role.test.mjs","purpose":"Envisioner role (ADR-039/ADR-040, Milestone 5): scoped innovation proposals from an"},{"hash":"sha256:c884fce8a5b2e930ae9a000272d3a4faa55a3e017229ab755bb695a370aec720","id":"F:571aa2f3ae","path":"tests/fleet-ledger.test.mjs","purpose":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals."},{"hash":"sha256:c4b0075f9fbb43245412a6ea6c9b4a8e7e43d6a6aab66477de3323fbf14d5046","id":"F:6da7bd8294","path":"tests/gauntlet.test.mjs","purpose":"Tests for `modonome gauntlet` (see docs/adr/ADR-041-gauntlet-replay.md): a read-only"},{"hash":"sha256:7aa6848dd94a7b5dc83ae094f4175a91cb90d6c063ac64311cdf78757efd7f66","id":"F:4dabd020df","path":"tests/helpers/mock-github-server.mjs","purpose":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @pa"},{"hash":"sha256:8f4842a323938cbfa8f9b1a0c8200938b87cee281a26dea3bd75f76d6c92e0c8","id":"F:eb14a0bdeb","path":"tests/helpers/mock-openai-server.mjs","purpose":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] "},{"hash":"sha256:159dd5948af7b763cca4920cd28fd95d9df9dc496cfbf88e69c7d776357163cc","id":"F:9bb94e1b40","path":"tests/hygiene.test.mjs","purpose":"function cli"},{"hash":"sha256:aa5c6b359e7da8f7b228dcb2a6e39a272695c3c9a4bb1a8bc512808e505b6b82","id":"F:cba8f1d03b","path":"tests/install-hooks.test.mjs","purpose":"function tempRepo"},{"hash":"sha256:27e8759927ffe5f7f0342d88dee88b66d761fa6eb8458b5696da274656995701","id":"F:54a3c626d9","path":"tests/learnings.test.mjs","purpose":"function run"},{"hash":"sha256:15169d4a2e50f7cebfddf83be2b0616b2d0d5dcf18202f83ab1a00288382fa19","id":"F:5994385869","path":"tests/maker-checker.test.mjs","purpose":"function run"},{"hash":"sha256:0e60f6fabd39f650beed080526df7fe86b8fc589a3b71b89f47cc52922ced78e","id":"F:093689bb8e","path":"tests/marketresearcher-role.test.mjs","purpose":"Market-researcher role (ADR-039/ADR-040, Milestone 5): an opt-in ecosystem scan,"},{"hash":"sha256:a1eb606786fdd89c7f98afcc4aa05eae41cfe658a4576a060335d499329b27d9","id":"F:a167609a41","path":"tests/mcp-compliance.test.mjs","purpose":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the st"},{"hash":"sha256:92582915bee1a0805d1bdba172b6b977e595259d11e36c09e790fcd065796ae2","id":"F:fadcf390da","path":"tests/metrics.test.mjs","purpose":"Schema-conformant event line using \"event\" field (not \"type\")."},{"hash":"sha256:201277007ce3e5c29c3424e6a238772c624c5d5398b20cd4baa147e91895310f","id":"F:55b3a4e2c0","path":"tests/migrate-lessons-rename.test.mjs","purpose":"Tests for `modonome migrate --rename-lessons`: the file-rename half of the LEARNINGS ->"},{"hash":"sha256:7701733aef7d6c28befcc6e63452082dbd3b00b8d8d351c6aa1577be6969e120","id":"F:3de9042953","path":"tests/packet-signing.test.mjs","purpose":"function setup"},{"hash":"sha256:eea7438755704a2c9aebdf7685484a77e9aff97e7b7d53d4db8ccc7930a55a2a","id":"F:b28f13b600","path":"tests/performance.test.mjs","purpose":"Build a synthetic 1000-line diff that is clean (no gaming patterns)."},{"hash":"sha256:75b053f720a36f2d63161f5be3a70fcec9c6fa29dba432e517124b391589a996","id":"F:137056535b","path":"tests/policy-attestation.test.mjs","purpose":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind."},{"hash":"sha256:e7d7eb8b5d39ac2311b724a6c4f4665ec1c8d7bb5d0b70763c250a63a484768a","id":"F:fd6ebce602","path":"tests/portability.test.mjs","purpose":"Run validate-config.mjs against a given config path."},{"hash":"sha256:8b3911ae2cc0de4fb6990f765ec3412ec60af1ebb34a2d997e75f322a5ce00a4","id":"F:e540f7b669","path":"tests/promote-learning.test.mjs","purpose":"function run"},{"hash":"sha256:72142379302da73a19ab7a02001f93b893a909a0066d609fcd6b3ff4a412f468","id":"F:ddd82fc886","path":"tests/promoted-learnings.test.mjs","purpose":"function withRoot"},{"hash":"sha256:cb2324595499e121c6c87625451a14ad222a01194ae72ef88d2ad3fccc2e2c0f","id":"F:ba97282cf5","path":"tests/provenance.test.mjs","purpose":"Base valid packet factory: returns a fresh object each call."},{"hash":"sha256:a2902a5457d0fcb137970762dc3a90f1f6f111c1b2cea892a1313bea8349350b","id":"F:ee02e563c6","path":"tests/providers.test.mjs","purpose":"function baseCfg"},{"hash":"sha256:e8cb0e1034dc9e30ccb24b0d3f85669463a1ed529752fd8edf71c2a2c568129c","id":"F:9f6dd5e5a3","path":"tests/queue.test.mjs","purpose":"Tests for `modonome queue`: converts scored dry-run proposals into schema-valid"},{"hash":"sha256:772d914bb9dbe6a2f28760d78c9f636fa97137e89f585137b041c0323d9585ce","id":"F:92dde817ee","path":"tests/ratchet-attestation.test.mjs","purpose":"Tests for the gate-integrity in-toto receipt. The Statement shape and predicate type"},{"hash":"sha256:3f465e8c640ee3a806371b2dd83ea7aba8fd2ee34a1c4bf726919ff0abb02743","id":"F:cede5f9fa2","path":"tests/ratchet-format.test.mjs","purpose":"Tests for the machine-readable ratchet output (--json and --sarif). These lock in"},{"hash":"sha256:a1600871aa4fc565b91d374e0b7944f56464a5dde0feab3b57d8174cdc51cb35","id":"F:f238d164c9","path":"tests/ratchet.test.mjs","purpose":"function ratchet"},{"hash":"sha256:63511f631cfdeb4f83708b6f72d1de0b0624fbf3036cc45ed2d24cc7b6a1b897","id":"F:44a5987438","path":"tests/remediate.test.mjs","purpose":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commi"},{"hash":"sha256:abe1d5445a00324d9c4fa6fcd367756fab6cae0f0939280c43695f586b009318","id":"F:8a3433b070","path":"tests/report-impact.test.mjs","purpose":"function tmp"},{"hash":"sha256:2f40d127b1ebdbf3e1719bcdaf07937b5d0e20fff5d66fb2d161bca1c541234b","id":"F:ce41983a53","path":"tests/researcher-role.test.mjs","purpose":"WI-042 (ADR-039/ADR-040 follow-up): the researcher actually running in the loop."},{"hash":"sha256:8a080243725f1755a2510cf3b8082e58a08643ccfa60112569072228a4ca2cc8","id":"F:4fad18c892","path":"tests/risk-surface-guard.test.mjs","purpose":"function run"},{"hash":"sha256:b87d5890928df18b21f8c57d5b46e743d330f1d4a108e3b682fb4254279a7df1","id":"F:e2f1b5ac07","path":"tests/role-registry.test.mjs","purpose":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are "},{"hash":"sha256:94e8507428bca4a9f2a0183ad7754b1e4380364e5c170115acc0f978a0d79f26","id":"F:0103cf3d56","path":"tests/rollback.test.mjs","purpose":"Recursively snapshot path -> \"size:sha-like(content)\" for every file."},{"hash":"sha256:5aa570f9f5b52b1376719c311c4348cccd1eedcaec959f655fcd0b04a236bdb7","id":"F:704e42d42b","path":"tests/route-action.test.mjs","purpose":"A config where each runner declares its environment and reach."},{"hash":"sha256:192c851aec2639e573cfac1e35f7b91fd162eaca7bfff35561dd3a38df433558","id":"F:580d11b514","path":"tests/run-cycle-openai.test.mjs","purpose":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be "},{"hash":"sha256:84c54d851c6f663b48b14ec859edb9176d4fe3f214b8c5502d7cafd8163d29d1","id":"F:d7d4e8d2a9","path":"tests/run-log.test.mjs","purpose":"function tmp"},{"hash":"sha256:b0ccad59d3b2eb7f575bb28dc4c0cdeae656b734372ef1c4f5a28283aca7763f","id":"F:de5ebbf586","path":"tests/scaffold-adoption.test.mjs","purpose":"function gitRepo"},{"hash":"sha256:1e02b7398beb3677a6c47fd19e64031339d004a57c9fd18db6941d7c32084eb6","id":"F:48355ccf4d","path":"tests/self-application.test.mjs","purpose":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true})."},{"hash":"sha256:939dff56c806160478559ac542a3ac09753c42c0cad986b79c0515d83225a153","id":"F:9f36b3ef29","path":"tests/snapshot-cli.test.mjs","purpose":"function run"},{"hash":"sha256:98db4465944b66bc892fa065a25ff21499c9c8b36790c7e484cce522c06d4c94","id":"F:2a74ae3f05","path":"tests/snapshot-golden.test.mjs","purpose":"function names"},{"hash":"sha256:c58456e425434ea92d0315727dbf7493b7bf5163acccc471865359b53708fdc3","id":"F:4637e1fecb","path":"tests/snapshot-incremental.test.mjs","purpose":"function repo"},{"hash":"sha256:1ac7429a13d1ee6d63273a9f1c12642328bbf454c9be2f3954c3518912bf5160","id":"F:ca05b6ba1c","path":"tests/terraform-module-shape.test.mjs","purpose":"function tf"},{"hash":"sha256:c5fcee70cbe65990dba4744c7b0e29280ad8e2165a7fce074f20773d5356cfe7","id":"F:baf7641a01","path":"tests/tick.test.mjs","purpose":"function tmp"},{"hash":"sha256:53a0c9a0ab5516f2c454f41ecf22f0516829d55376940b4daa24f91af95bbb8e","id":"F:ed9c47feb2","path":"tests/tool-loop-adapter.test.mjs","purpose":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close)."},{"hash":"sha256:325d8278b663211e574a2afc843024be684cf1dd5d51278b4a39a622dd38a824","id":"F:61c2a29876","path":"tests/tripwire.test.mjs","purpose":"Tripwires: the local, best-effort editor hook kernel (scripts/tripwire-check.mjs)."},{"hash":"sha256:c2c7ad14be6fbc5d9e6fe5cc3e40a4a0f72e82745c9c74948decc2628c1357b4","id":"F:1bcaaff9eb","path":"tests/ws-b-harness.test.mjs","purpose":"A config fixture with distinct maker/checker models and a models registry."},{"hash":"sha256:b2fde6e1764d60ca1135a54c765a9183d684d3c44012fe19e79dcf49b4114c77","id":"F:bbb6476d71","path":"tests/ws-e-negative-controls.test.mjs","purpose":"WS-E: negative-control fixtures that prove governance gates have teeth."},{"hash":"sha256:670746ec74b6650d92a5081683d9d20bf923b2141dcd011cee1a82126c8cbcfc","id":"F:2b49c74e74","path":"tests/ws-e-ratchet-languages.test.mjs","purpose":"function runRatchet"}],"schema_version":1,"token_budget":120000,"token_estimate":138602,"truncated":false}
diff --git a/.modonome/snapshot/map.md b/.modonome/snapshot/map.md
index 3a0ecdd5..faaa35ec 100644
--- a/.modonome/snapshot/map.md
+++ b/.modonome/snapshot/map.md
@@ -2,8 +2,8 @@
Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.
-Merkle root: sha256:77f438f5f02372a26baf9b3f1e7ebccf8c303be25ed47f16122ccc4c80ee0f41
-Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
+Merkle root: sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595
+Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
## Modules
@@ -213,6 +213,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- docs/adr/ADR-044-agent-org-structure.md [F:ffcad313b6]: ADR-044: The agent org structure and its configurability
- docs/adr/ADR-045-scope-focus.md [F:97fc86d7a3]: ADR-045: Scope focus for launch. Proof before surface.
- docs/adr/ADR-046-ship-the-deferred-features.md [F:e9701967b3]: ADR-046: Ship adapter-verify, Break the Ratchet, and CheckerProof
+- docs/adr/ADR-047-risk-surface-guard.md [F:68d874f280]: ADR-047: Risk Surface Guard, a second deterministic PR-diff scanner
- docs/agent-org.md [F:c3b2fcfb69]: The Modonome agent org
- docs/agents.md [F:a384388adc]: Agents, roles, runners, and models
- docs/audits/claims-audit-2026-06-25.md [F:8a7591db62]: Claims audit, 2026-06-25
@@ -244,6 +245,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md [F:79cec3a152]: RD-032: Network-Level Ratchet
- docs/research/agentic-governance-mesh/governance-mesh-vision.md [F:acd892d4a0]: The Governance Mesh Vision: Modonome as a WWW for Repositories
- docs/research/knowledge-network-architecture.md [F:bcd1c88877]: Cross-Repo Knowledge Network: v0.2 Architecture
+- docs/risk-surface-guard.md [F:c1ef63106a]: Risk Surface Guard
- docs/specs/governed-autonomy-spec.md [F:55673172df]: Governed Autonomy: A Specification for Safe Autonomous Software Engineering Agents
- docs/specs/ratchet-spec.md [F:4d5cfa3611]: Anti-Gaming Ratchet Specification
- docs/versioning.md [F:c1cc304e56]: Versioning and embedding
@@ -410,6 +412,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- scripts/lib/message-catalog/gate/check-trust-boundary.mjs [F:b2efd505ef]: const MESSAGES
- scripts/lib/message-catalog/gate/check-work-items.mjs [F:e6677dcd37]: const MESSAGES
- scripts/lib/message-catalog/gate/guard-ratchet.mjs [F:86fd2cf669]: Catalog entries for scripts/guard-ratchet.mjs.
+- scripts/lib/message-catalog/gate/risk-surface-guard.mjs [F:5d02ea0b02]: Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a find
- scripts/lib/message-catalog/gate/run-gate-pipeline.mjs [F:5b5b4ddcae]: Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (age
- scripts/lib/message-catalog/gate/test-prompt-behavior.mjs [F:a104667369]: const MESSAGES
- scripts/lib/message-catalog/gate/validate-config.mjs [F:ec3aa9930a]: const MESSAGES
@@ -422,6 +425,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- scripts/lib/policy-manifest.mjs [F:4db1101024]: v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored
- scripts/lib/remediate.mjs [F:8ffb11f281]: Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis
- scripts/lib/repo-detect.mjs [F:ae46bbab81]: Build the small file helpers a detector needs, bound to one target directory.
+- scripts/lib/risk-surface-rules.mjs [F:2f3e98ab2c]: Simple "#" to end of line stripper for YAML and shell-like formats. Not quote-aware (a "#" inside a quoted YAML string is still treated as a comment start) -- a
- scripts/lib/run-gate-capped.mjs [F:b014028f57]: Thin wrapper around spawnSync with a hard timeout and output-size cap.
- scripts/lib/secret-patterns.mjs [F:68c4da7fe8]: Returns an array of { name } objects for every pattern that matches text.
- scripts/lib/snapshot-anchors.mjs [F:1cf31c4792]: A short, stable id from a string. Hex keeps it deterministic across platforms.
@@ -442,6 +446,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- scripts/release.mjs [F:edf42fb1af]: !/usr/bin/env node
- scripts/remediate.mjs [F:1e5ef6ba70]: Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-
- scripts/report.mjs [F:3b382f95c0]: A source module counts as "documented" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he
+- scripts/risk-surface-guard.mjs [F:116adfb9f8]: !/usr/bin/env node
- scripts/run-gate-pipeline.mjs [F:edb11415f0]: parseArgs(argv) -> { diff, "work-item" } map of fixture paths by gate arg name.
- scripts/scaffold.mjs [F:5e450ff82c]: Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp
- scripts/score-proposals.mjs [F:e11f907cba]: Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.
@@ -513,6 +518,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- tests/remediate.test.mjs [F:44a5987438]: Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commi
- tests/report-impact.test.mjs [F:8a3433b070]: function tmp
- tests/researcher-role.test.mjs [F:ce41983a53]: WI-042 (ADR-039/ADR-040 follow-up): the researcher actually running in the loop.
+- tests/risk-surface-guard.test.mjs [F:4fad18c892]: function run
- tests/role-registry.test.mjs [F:e2f1b5ac07]: A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are
- tests/rollback.test.mjs [F:0103cf3d56]: Recursively snapshot path -> "size:sha-like(content)" for every file.
- tests/route-action.test.mjs [F:704e42d42b]: A config where each runner declares its environment and reach.
@@ -556,7 +562,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:bac2ebbef5 function gitCommit `function gitCommit(tmp, message)` L53
- S:cd2e7eba8f function gitCommitAt `function gitCommitAt(tmp, message, isoDate)` L61 : Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as
### scripts/lib/message-catalog/index.mjs [F:03f476958e]
-- S:405ee38bbe const CATALOG_PARTIALS `export const CATALOG_PARTIALS = [` L65
+- S:405ee38bbe const CATALOG_PARTIALS `export const CATALOG_PARTIALS = [` L66
### examples/demo-app/tests/OrderService.test.js [F:044b762a79]
- S:949f988c9e function makeDb `function makeDb(orders = new Map())` L10
### scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs [F:05a0f0d5a5]
@@ -657,6 +663,24 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:14ef0a45e8 const MESSAGES `export const MESSAGES =` L1
### apps/control-panel/src/App.tsx [F:113387361d]
- S:a1d4334d94 function App `export function App()` L44
+### scripts/risk-surface-guard.mjs [F:116adfb9f8]
+- S:f034e67219 function normalizeLF `function normalizeLF(s)` L36
+- S:e23dca26d1 function stripFlags `export function stripFlags(argv)` L45
+- S:8fc6479414 function getDiff `function getDiff(positional)` L72
+- S:6202790aac class UsageError `class UsageError extends Error {}` L103
+- S:a8ccdc0c7d function parseDiff `export function parseDiff(diffText)` L112
+- S:4295d27685 function makeFinding `function makeFinding(rule, file, line, rawText)` L158
+- S:afdc9fa742 function scanFile `export function scanFile(filePath, addedLines)` L172
+- S:9435112073 function scanDiff `export function scanDiff(diffText)` L194
+- S:34df82b1c2 function hasHighOrCritical `function hasHighOrCritical(findings)` L215
+- S:672926584c function decideExitCode `export function decideExitCode(mode, findings)` L219
+- S:6117b8ec80 function decideResult `export function decideResult(mode, findings)` L224
+- S:74c8951fb9 function severityToSarifLevel `export function severityToSarifLevel(severity)` L230
+- S:8b3d7e9050 function summaryMessage `function summaryMessage(mode, findings)` L240
+- S:17bc177192 function formatHuman `export function formatHuman(findings, { mode })` L251
+- S:82407637b4 function emitJson `export function emitJson(findings, { mode })` L266
+- S:38407e52ac function emitSarif `export function emitSarif(findings)` L274
+- S:9f6788d90d function runCli `function runCli()` L314
### scripts/lib/snapshot-cache.mjs [F:119e3c0fce]
- S:670e55d75a const CACHE_SCHEMA_VERSION `export const CACHE_SCHEMA_VERSION = 1;` L10
- S:31032f0509 function isPlausibleRevision `export function isPlausibleRevision(value)` L17 : A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading "-", which git would parse as an option (some git options can read or write fil
@@ -876,6 +900,27 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:a0db477c6e function summarize `export function summarize(criteria)` L90
- S:f93b3b8c7c function buildEvidence `export function buildEvidence(root, generatedAt)` L95
- S:43f1c85009 function renderMarkdown `export function renderMarkdown(evidence)` L108
+### scripts/lib/risk-surface-rules.mjs [F:2f3e98ab2c]
+- S:b6efca77f5 function basename `function basename(path)` L17
+- S:e2afc6b75b function isContentExempt `export function isContentExempt(path)` L44
+- S:1562160a7c function isJsTsScope `export function isJsTsScope(path)` L48
+- S:c0981a3461 function isPythonScope `export function isPythonScope(path)` L52
+- S:4195e187b2 function isWorkflowScope `export function isWorkflowScope(path)` L56
+- S:732a1c21fe function isDockerComposeScope `export function isDockerComposeScope(path)` L63
+- S:d25b3fbe33 function isDockerfileScope `export function isDockerfileScope(path)` L68
+- S:55386d6b24 function isK8sScope `export function isK8sScope(path)` L73
+- S:2216bfd660 function isTerraformScope `export function isTerraformScope(path)` L79
+- S:f88ca29ea3 function isBroadScope `export function isBroadScope(path)` L90
+- S:823d7fa306 const PROTECTED_PATH_GLOBS `export const PROTECTED_PATH_GLOBS = [` L100
+- S:2dc33a851f function globToRegExp `function globToRegExp(glob)` L120
+- S:5e20ef9f71 function matchesProtectedPath `export function matchesProtectedPath(path)` L132
+- S:bb036fe763 function stripSameLineNoise `export function stripSameLineNoise(rawLine)` L144
+- S:7d38304e55 function stripPythonSameLineNoise `export function stripPythonSameLineNoise(line)` L173
+- S:cf9f3a025e function stripHashComment `export function stripHashComment(line)` L199 : Simple "#" to end of line stripper for YAML and shell-like formats. Not quote-aware (a "#" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the
+- S:d9eda62ca5 function stripForScope `export function stripForScope(path, line)` L205
+- S:e4bb79a957 function redactMatchedText `export function redactMatchedText(text, opts = {})` L219
+- S:ec6c0b3d73 const RULES `export const RULES = [` L245
+- S:02759ae11a const RULES_BY_ID `export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));` L955
### design-system/src/components/States/States.tsx [F:2f6c42c5ee]
- S:c504685956 interface EmptyStateProps `export interface EmptyStateProps` L4
- S:80e9a1f555 function EmptyState `export function EmptyState({ title, message, icon = "queue", action }: EmptyStateProps)` L20 : Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it
@@ -994,7 +1039,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:fa6785fa4b const MESSAGES `export const MESSAGES =` L1
### scripts/check-self-application.mjs [F:4096620673]
- S:91c42b4f27 function read `function read(rel)` L23
-- S:87c8d03eb8 function dirsFromCodeowners `function dirsFromCodeowners()` L119 : 4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that
+- S:87c8d03eb8 function dirsFromCodeowners `function dirsFromCodeowners()` L126 : 4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that
### scripts/lib/message-catalog/gate/check-architecture-drift.mjs [F:40d8f235fd]
- S:4287ee7685 const MESSAGES `export const MESSAGES =` L1
### tests/cli-dispatch.test.mjs [F:40e4f39b59]
@@ -1017,9 +1062,9 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
### scripts/check-architecture-drift.mjs [F:4749cc43a0]
- S:fd2e16186e function escapeRegExp `function escapeRegExp(s)` L66 : Escape regex metacharacters so an unexpected schema value (e.g. containing "." or "+") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is
### tests/self-application.test.mjs [F:48355ccf4d]
-- S:e3c36060ec function makeMinimalRepo `function makeMinimalRepo()` L92 : Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).
-- S:7c9eb8f22d function runScript `function runScript(tmp)` L110
-- S:43cc2b28a1 function withStubRunner `function withStubRunner(tmp, score, extendedScore, totalScore)` L224
+- S:e3c36060ec function makeMinimalRepo `function makeMinimalRepo()` L95 : Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).
+- S:7c9eb8f22d function runScript `function runScript(tmp)` L113
+- S:43cc2b28a1 function withStubRunner `function withStubRunner(tmp, score, extendedScore, totalScore)` L227
### scripts/lib/detect-attribution.mjs [F:4a7eaceb5c]
- S:bb570e99d8 const AI_SIGNATURE_RE `export const AI_SIGNATURE_RE = new RegExp(P, "iu");` L40
- S:ba4cb77f9c function branchHasModelSegment `export function branchHasModelSegment(name)` L51 : True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions
@@ -1063,6 +1108,9 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:2ca5ab6d7f function previewText `function previewText(template: string)` L18
- S:d49b633132 function isValidUrl `function isValidUrl(value: string): boolean` L67
- S:6d2334f815 function SettingsScreen `export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })` L125 : The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-
+### tests/risk-surface-guard.test.mjs [F:4fad18c892]
+- S:fcf3c9d4a4 function run `function run(diffPath, extraArgs = [])` L39
+- S:9e3d232a1b function fixture `function fixture(dir, name)` L43
### scripts/gauntlet.mjs [F:522efae76d]
- S:d439b00c59 function writeRunLog `function writeRunLog(runsDir, command, payload)` L73 : A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same "log writes must never crash the command" rule.
- S:76dbb025c9 function removeFirstMatch `function removeFirstMatch(text, re)` L116
@@ -1150,6 +1198,8 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:ed1db0b6bb function reclaimStale `export function reclaimStale(dir = DEFAULT_QUEUE_DIR, now = new Date())` L176 : Revert every claimed record whose lease has expired back to queued, clearing * its owner and expiry. Returns the list of reclaimed records. * * @param {string} [dir] * @param {Date} [now] * @returns {
### scripts/lib/message-catalog/gate/run-gate-pipeline.mjs [F:5b5b4ddcae]
- S:26ee7911e3 const MESSAGES `export const MESSAGES =` L5 : Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (agentproof, CI log scraping), not a human-f
+### scripts/lib/message-catalog/gate/risk-surface-guard.mjs [F:5d02ea0b02]
+- S:92bd39eb47 const MESSAGES `export const MESSAGES =` L6 : Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a finding's reason, reviewer_guidance, and lim
### scripts/lib/message-catalog/agent-run/queue.mjs [F:5d52d97b8a]
- S:64ebce69bf const MESSAGES `export const MESSAGES =` L1
### apps/control-panel/server/remediationView.mjs [F:5daab9894d]
@@ -2062,9 +2112,9 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- S:8bff005013 function runReport `function runReport(targetDir)` L16
- S:5919844321 function makeEvent `function makeEvent(event, extra = {})` L24 : Schema-conformant event line using "event" field (not "type").
### scripts/check-gate-dag.mjs [F:fc21812307]
-- S:54a007aa57 function relativeImportsOf `function relativeImportsOf(absFile)` L49 : Extract the relative import specifiers from one module's source: static `from "..."`, side-effect `import "..."`, and dynamic `import("...")`. A regex scan (no AST dependency) matches this repo's hous
-- S:f99cb9f35c function determinismBoundaryErrors `export function determinismBoundaryErrors(root = REPO_ROOT)` L62 : Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro
-- S:9d42aeefd9 function gateGraphErrors `export function gateGraphErrors(graph)` L105 : gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen
+- S:54a007aa57 function relativeImportsOf `function relativeImportsOf(absFile)` L50 : Extract the relative import specifiers from one module's source: static `from "..."`, side-effect `import "..."`, and dynamic `import("...")`. A regex scan (no AST dependency) matches this repo's hous
+- S:f99cb9f35c function determinismBoundaryErrors `export function determinismBoundaryErrors(root = REPO_ROOT)` L63 : Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro
+- S:9d42aeefd9 function gateGraphErrors `export function gateGraphErrors(graph)` L106 : gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen
### scripts/check-checker-engagement.mjs [F:fc5d887ff6]
- S:aa00911a72 function readEvents `function readEvents(path)` L25
### scripts/check-md-governance.mjs [F:fd08562f92]
@@ -2127,6 +2177,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-repo-hygiene.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/agent-run/render-prompt.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/run-gate-pipeline.mjs
+- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/risk-surface-guard.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/agent-run/queue.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/agent-run/transition-work-item.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/guard-ratchet.mjs
@@ -2206,6 +2257,9 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- tests/config.test.mjs -> scripts/lib/jsonschema.mjs
- tests/config.test.mjs -> scripts/validate-config.mjs
- tests/config.test.mjs -> scripts/migrate-config.mjs
+- scripts/risk-surface-guard.mjs -> scripts/lib/messages.mjs
+- scripts/risk-surface-guard.mjs -> scripts/lib/cli-args.mjs
+- scripts/risk-surface-guard.mjs -> scripts/lib/risk-surface-rules.mjs
- scripts/lib/packet-id.mjs -> scripts/lib/canonical-json.mjs
- design-system/src/components/Carousel/index.ts -> design-system/src/components/Carousel/Carousel.tsx
- design-system/src/components/ActivationLadder/ActivationLadder.tsx -> design-system/src/lib/cx.ts
@@ -2269,6 +2323,7 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
- scripts/agent/review-diff.mjs -> scripts/agent/resolve-role.mjs
- scripts/agent/review-diff.mjs -> scripts/agent/openai-client.mjs
- scripts/agent/review-diff.mjs -> scripts/validate-config.mjs
+- scripts/lib/risk-surface-rules.mjs -> scripts/lib/secret-patterns.mjs
- design-system/src/components/States/States.tsx -> design-system/src/components/Icon/Icon.tsx
- design-system/src/components/StatusPill/StatusPill.tsx -> design-system/src/lib/cx.ts
- design-system/src/components/StatusPill/StatusPill.tsx -> design-system/src/components/Icon/Icon.tsx
@@ -2717,54 +2772,54 @@ Files: 1029 Bytes: 3805193 Map tokens: 135721/120000
## Attention (centrality + pagerank)
-1. scripts/lib/messages.mjs centrality=63 pagerank=0.039157
-2. scripts/lib/message-catalog/index.mjs centrality=58 pagerank=0.011797
-3. design-system/src/lib/cx.ts centrality=32 pagerank=0.026711
-4. design-system/src/components/Icon/Icon.tsx centrality=23 pagerank=0.017316
-5. design-system/src/index.ts centrality=48 pagerank=0.000702
-6. scripts/lib/yaml-lite.mjs centrality=21 pagerank=0.016999
-7. scripts/lib/jsonschema.mjs centrality=15 pagerank=0.0198
-8. scripts/agent/run-cycle.mjs centrality=25 pagerank=0.00515
-9. scripts/validate-config.mjs centrality=16 pagerank=0.004993
-10. apps/control-panel/src/state/types.ts centrality=13 pagerank=0.006792
-11. design-system/src/components/HelpHint/HelpHint.tsx centrality=12 pagerank=0.005893
-12. design-system/src/components/StatusPill/StatusPill.tsx centrality=12 pagerank=0.004201
-13. scripts/lib/learnings.mjs centrality=11 pagerank=0.004619
-14. scripts/agent/resolve-role.mjs centrality=11 pagerank=0.003584
-15. scripts/lib/canonical-json.mjs centrality=10 pagerank=0.003564
-16. scripts/lib/snapshot-core.mjs centrality=13 pagerank=0.001175
-17. design-system/src/components/Button/Button.tsx centrality=9 pagerank=0.003388
-18. scripts/lib/detect-attribution.mjs centrality=7 pagerank=0.003857
-19. scripts/validate-work-item.mjs centrality=9 pagerank=0.002613
-20. scripts/lib/config-validate.mjs centrality=7 pagerank=0.003546
-21. design-system/src/components/IconButton/IconButton.tsx centrality=6 pagerank=0.003931
-22. scripts/validate-knowledge-packet.mjs centrality=8 pagerank=0.002475
-23. apps/control-panel/src/App.tsx centrality=10 pagerank=0.001001
-24. scripts/agent/render-prompt.mjs centrality=7 pagerank=0.002758
-25. design-system/src/components/WorkItemCard/WorkItemCard.tsx centrality=8 pagerank=0.002052
-26. apps/control-panel/server/modonomeWriter.mjs centrality=8 pagerank=0.001787
-27. design-system/src/tokens/tokens.ts centrality=6 pagerank=0.002455
-28. scripts/lib/lang-adapters/index.mjs centrality=8 pagerank=0.001175
-29. scripts/agent/providers.mjs centrality=3 pagerank=0.004263
-30. scripts/lib/graph.mjs centrality=5 pagerank=0.002887
-31. scripts/lib/branch-name.mjs centrality=4 pagerank=0.003365
-32. design-system/src/components/Tooltip/Tooltip.tsx centrality=3 pagerank=0.003814
-33. scripts/snapshot.mjs centrality=8 pagerank=0.000702
-34. design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx centrality=7 pagerank=0.00131
-35. apps/control-panel/src/lib/confirm.tsx centrality=6 pagerank=0.001779
-36. scripts/lib/secret-patterns.mjs centrality=4 pagerank=0.002981
-37. apps/control-panel/src/lib/messages.ts centrality=6 pagerank=0.001684
-38. design-system/src/components/Card/Card.tsx centrality=5 pagerank=0.002052
-39. design-system/src/lib/format.ts centrality=5 pagerank=0.002051
-40. scripts/agent/openai-client.mjs centrality=5 pagerank=0.002022
-41. design-system/src/components/LeaseTable/LeaseTable.tsx centrality=6 pagerank=0.00131
-42. scripts/lib/commit-identity.mjs centrality=3 pagerank=0.003137
-43. scripts/agent/review-diff.mjs centrality=5 pagerank=0.001575
-44. scripts/lib/work-item-validate.mjs centrality=4 pagerank=0.002116
-45. apps/control-panel/src/screens/SettingsScreen.tsx centrality=6 pagerank=0.000797
-46. apps/control-panel/src/state/adapter.ts centrality=6 pagerank=0.000797
-47. examples/demo-app/src/index.js centrality=6 pagerank=0.000702
-48. scripts/build-policy-attestation.mjs centrality=6 pagerank=0.000702
-49. design-system/src/components/ActivationLadder/ActivationLadder.tsx centrality=5 pagerank=0.00131
-50. design-system/src/components/CostPanel/CostPanel.tsx centrality=5 pagerank=0.00131
+1. scripts/lib/messages.mjs centrality=64 pagerank=0.037911
+2. scripts/lib/message-catalog/index.mjs centrality=59 pagerank=0.011418
+3. design-system/src/lib/cx.ts centrality=32 pagerank=0.025731
+4. design-system/src/components/Icon/Icon.tsx centrality=23 pagerank=0.016681
+5. design-system/src/index.ts centrality=48 pagerank=0.000677
+6. scripts/lib/yaml-lite.mjs centrality=21 pagerank=0.01643
+7. scripts/lib/jsonschema.mjs centrality=15 pagerank=0.019128
+8. scripts/agent/run-cycle.mjs centrality=25 pagerank=0.004961
+9. scripts/validate-config.mjs centrality=16 pagerank=0.00481
+10. apps/control-panel/src/state/types.ts centrality=13 pagerank=0.006543
+11. design-system/src/components/HelpHint/HelpHint.tsx centrality=12 pagerank=0.005677
+12. design-system/src/components/StatusPill/StatusPill.tsx centrality=12 pagerank=0.004047
+13. scripts/lib/learnings.mjs centrality=11 pagerank=0.004449
+14. scripts/agent/resolve-role.mjs centrality=11 pagerank=0.003453
+15. scripts/lib/canonical-json.mjs centrality=10 pagerank=0.003433
+16. scripts/lib/snapshot-core.mjs centrality=13 pagerank=0.001132
+17. design-system/src/components/Button/Button.tsx centrality=9 pagerank=0.003264
+18. scripts/lib/detect-attribution.mjs centrality=7 pagerank=0.003715
+19. scripts/validate-work-item.mjs centrality=9 pagerank=0.002517
+20. scripts/lib/config-validate.mjs centrality=7 pagerank=0.003416
+21. design-system/src/components/IconButton/IconButton.tsx centrality=6 pagerank=0.003787
+22. scripts/validate-knowledge-packet.mjs centrality=8 pagerank=0.002384
+23. apps/control-panel/src/App.tsx centrality=10 pagerank=0.000964
+24. scripts/agent/render-prompt.mjs centrality=7 pagerank=0.002657
+25. design-system/src/components/WorkItemCard/WorkItemCard.tsx centrality=8 pagerank=0.001977
+26. scripts/lib/secret-patterns.mjs centrality=5 pagerank=0.003609
+27. apps/control-panel/server/modonomeWriter.mjs centrality=8 pagerank=0.001721
+28. design-system/src/tokens/tokens.ts centrality=6 pagerank=0.002365
+29. scripts/agent/providers.mjs centrality=3 pagerank=0.004106
+30. scripts/lib/lang-adapters/index.mjs centrality=8 pagerank=0.001132
+31. scripts/lib/graph.mjs centrality=5 pagerank=0.002781
+32. scripts/lib/branch-name.mjs centrality=4 pagerank=0.003241
+33. design-system/src/components/Tooltip/Tooltip.tsx centrality=3 pagerank=0.003674
+34. scripts/snapshot.mjs centrality=8 pagerank=0.000677
+35. design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx centrality=7 pagerank=0.001262
+36. apps/control-panel/src/lib/confirm.tsx centrality=6 pagerank=0.001714
+37. apps/control-panel/src/lib/messages.ts centrality=6 pagerank=0.001623
+38. design-system/src/components/Card/Card.tsx centrality=5 pagerank=0.001977
+39. design-system/src/lib/format.ts centrality=5 pagerank=0.001975
+40. scripts/agent/openai-client.mjs centrality=5 pagerank=0.001948
+41. design-system/src/components/LeaseTable/LeaseTable.tsx centrality=6 pagerank=0.001262
+42. scripts/lib/commit-identity.mjs centrality=3 pagerank=0.003022
+43. scripts/agent/review-diff.mjs centrality=5 pagerank=0.001518
+44. scripts/lib/work-item-validate.mjs centrality=4 pagerank=0.002039
+45. apps/control-panel/src/screens/SettingsScreen.tsx centrality=6 pagerank=0.000768
+46. apps/control-panel/src/state/adapter.ts centrality=6 pagerank=0.000768
+47. examples/demo-app/src/index.js centrality=6 pagerank=0.000677
+48. scripts/build-policy-attestation.mjs centrality=6 pagerank=0.000677
+49. design-system/src/components/ActivationLadder/ActivationLadder.tsx centrality=5 pagerank=0.001262
+50. design-system/src/components/CostPanel/CostPanel.tsx centrality=5 pagerank=0.001262
diff --git a/.modonome/snapshot/signature.json b/.modonome/snapshot/signature.json
index 27234d0f..393c9a4a 100644
--- a/.modonome/snapshot/signature.json
+++ b/.modonome/snapshot/signature.json
@@ -1 +1 @@
-{"commands":{"build":"","lint":"","test":"npm test"},"entrypoints":["bin/modonome.mjs"],"generated_at":"2026-07-16T02:18:05.384Z","generated_for":"modonome","governance":{"armed":false,"autonomy_enabled":false,"dry_run":true},"instructions":["AGENTS.md","CLAUDE.md","CODEX.md","CONTRIBUTING.md","README.md"],"language_mix":{"(none)":12,"cff":1,"css":50,"diff":18,"html":9,"js":19,"json":139,"jsonl":8,"md":144,"mjs":351,"patch":40,"png":5,"py":4,"sh":1,"svg":2,"tf":4,"toml":2,"ts":61,"tsx":98,"txt":18,"webmanifest":1,"webp":1,"woff2":9,"xml":1,"yaml":9,"yml":22},"merkle_root":"sha256:77f438f5f02372a26baf9b3f1e7ebccf8c303be25ed47f16122ccc4c80ee0f41","preamble":"Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.","protected_paths":[".github",".github/CODEOWNERS","package-lock.json"],"schema_version":1,"size":{"bytes":3805193,"files":1029},"snapshot_version":48,"stack":{"name":"Node or TypeScript","pm":"npm"},"tier_hashes":{"map":"sha256:c20fea6d25c684bdfe1869f9bbf38795af8e115fd20319f2a0b9ff74c2aa384b","map_md":"sha256:4b9306d71a881e0734759dd869e5e3d6db6007af9c93a7cb84cbd327f9f91edf"}}
+{"commands":{"build":"","lint":"","test":"npm test"},"entrypoints":["bin/modonome.mjs"],"generated_at":"2026-07-27T13:36:25.593Z","generated_for":"modonome","governance":{"armed":false,"autonomy_enabled":false,"dry_run":true},"instructions":["AGENTS.md","CLAUDE.md","CODEX.md","CONTRIBUTING.md","README.md"],"language_mix":{"(none)":12,"cff":1,"css":50,"diff":63,"html":9,"js":19,"json":140,"jsonl":8,"md":146,"mjs":355,"patch":40,"png":5,"py":4,"sh":1,"svg":2,"tf":4,"toml":2,"ts":61,"tsx":98,"txt":18,"webmanifest":1,"webp":1,"woff2":9,"xml":1,"yaml":9,"yml":22},"merkle_root":"sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595","preamble":"Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.","protected_paths":[".github",".github/CODEOWNERS","package-lock.json"],"schema_version":1,"size":{"bytes":3926905,"files":1081},"snapshot_version":51,"stack":{"name":"Node or TypeScript","pm":"npm"},"tier_hashes":{"map":"sha256:4107f381d43119a5e5850dda534611f3767ef536e4432f181948df5f59c7a86d","map_md":"sha256:d43930234923d1087387eb6c02d059e044874abbbfc9e198953e4bfde86c563d"}}
diff --git a/.modonome/work-items/WI-055-risk-surface-guard.json b/.modonome/work-items/WI-055-risk-surface-guard.json
new file mode 100644
index 00000000..c6717513
--- /dev/null
+++ b/.modonome/work-items/WI-055-risk-surface-guard.json
@@ -0,0 +1,44 @@
+{
+ "schema_version": 1,
+ "id": "WI-055-risk-surface-guard",
+ "state": "claimed",
+ "type": "develop-feature",
+ "attempts": 0,
+ "max_attempts": 3,
+ "touches_protected_path": true,
+ "allowed_edit_set": [
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/message-catalog/gate/risk-surface-guard.mjs",
+ "scripts/lib/message-catalog/index.mjs",
+ "scripts/check-self-application.mjs",
+ "scripts/check-gate-dag.mjs",
+ "schemas/gate-graph.json",
+ "tests/risk-surface-guard.test.mjs",
+ "fixtures/risk-surface/should-flag/*",
+ "fixtures/risk-surface/should-allow/*",
+ "docs/risk-surface-guard.md",
+ "docs/adr/ADR-047-risk-surface-guard.md",
+ "docs/README.md",
+ "action.yml",
+ ".github/workflows/ci.yml",
+ "package.json",
+ "README.md",
+ "SECURITY.md",
+ "CHANGELOG.md",
+ "RELEASE-EVIDENCE.md",
+ ".modonome/snapshot/*",
+ ".modonome/policy-attestation.json",
+ ".modonome/work-items/WI-055-risk-surface-guard.json"
+ ],
+ "gates": [
+ "node scripts/check-style.mjs .",
+ "node --test tests/risk-surface-guard.test.mjs",
+ "node scripts/check-gate-dag.mjs",
+ "node scripts/check-self-application.mjs",
+ "npm run verify"
+ ],
+ "queued_at": "2026-07-27",
+ "maker_id": "techseek4vr",
+ "lease_owner": "techseek4vr"
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9c1c7483..d5cab75e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,12 @@ maker/checker loop; deterministic gate-rejection evidence on the demo app; and a
documentation truth pass (claims reconciled to committed evidence, self-graded benchmark
framing, honest scope labels). Full detail below, newest first.
+### Risk Surface Guard: alpha-stage execution and credential blast-radius scanner (WI-055)
+
+- Added alpha Risk Surface Guard for repository-level execution and credential blast-radius changes. The new script `scripts/risk-surface-guard.mjs` and rule catalog `scripts/lib/risk-surface-rules.mjs` provide a deterministic, diff-based scanner that flags pull request additions expanding execution, credential, workflow, model/dataset loading, container, or sandbox risk. It is warn-only by default in the GitHub Action, reports in SARIF and JSON, and runs via `node scripts/risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json]`. See ADR-047.
+- The guard scans only added lines and reports findings with severity, category, line number, and reviewer guidance. It does not prevent breaches and does not replace SAST, secret scanning, dependency review, or cloud security tooling.
+- This is additive with no change to existing Modonome Guard (anti-gaming ratchet) behavior. Both tools run independently.
+
### Name the judgment-layer mistakes the gates cannot see (WI-054)
- Added three entries to the mistake catalog in `AGENTS.md` (section 4), each in the
diff --git a/README.md b/README.md
index b3386c5e..73b41c85 100644
--- a/README.md
+++ b/README.md
@@ -142,6 +142,12 @@ If you can construct a diff that weakens a gate and slips past the ratchet, we w
by the ratchet itself; a confirmed break is a named, credited hall-of-fame entry and, once fixed,
a new AgentProof scenario.
+## Risk Surface Guard
+
+Modonome also includes an alpha Risk Surface Guard that flags pull request changes which expand execution, credential, workflow, model/dataset loading, container, or sandbox risk. It is warn-only by default in the Marketplace Action and can be set to fail on high-risk findings.
+
+The guard is **deterministic and diff-based**, scanning only added lines and never executing code. It does not prevent breaches, and it does not replace SAST, secret scanning, dependency review, or cloud security tooling. It flags patterns that expand the repository's risk surface (dynamic code execution, credential expansion, workflow permission elevation, privilege escalation, disabled TLS verification, and changes to security-sensitive paths) and helps reviewers notice those expansions before merge. See **[docs/risk-surface-guard.md](docs/risk-surface-guard.md)** for a detailed walk-through of what it detects, how to interpret findings, and how to move from warn mode to fail mode after confirming the false-positive rate on your own diffs.
+
## The loop (armed mode)
1. **Adopt.** Read the host repo's instructions, CI, code owners, gates, and conventions, then defer to them.
diff --git a/RELEASE-EVIDENCE.md b/RELEASE-EVIDENCE.md
index 2de3a6ea..81db7bda 100644
--- a/RELEASE-EVIDENCE.md
+++ b/RELEASE-EVIDENCE.md
@@ -18,18 +18,19 @@ be added here once the owner arms the loop on this repo.
| Gate | Result |
|---|---|
| Drift guard | pass |
-| Style check | pass |
-| Repo hygiene | pass |
-| Self-application conformance | pass |
+| Style check | FAIL |
+| Repo hygiene | FAIL |
+| Self-application conformance | FAIL |
| Learning traceability | pass |
| Capability promotion readiness | pass |
| Work item validation | pass |
| Checker engagement | pass |
-| AgentProof | 25/25 HARDENED |
+| AgentProof | unavailable HARDENED |
## Work queue
- checking: 1
+- claimed: 1
- done: 45
- queued: 4
diff --git a/SECURITY.md b/SECURITY.md
index 235ae92f..56ce9d84 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -31,7 +31,7 @@ Modonome runs alongside the security tooling you already have. Pull requests it
through your existing SAST, DAST, secret scanning, and dependency review unchanged, and the
anti-gaming ratchet adds one more required check beside them. Arming reads from your existing
secrets store through an environment variable, and protected-path review reuses your
-CODEOWNERS. Modonome extends these controls and works within them.
+CODEOWNERS. Modonome extends these controls and works within them. A complementary **Risk Surface Guard** scans pull request diffs with deterministic, repository-diff-based rules that flag expansions of execution, credential, workflow, and infrastructure risk. It cannot detect live infrastructure compromise or semantic intent, and it works in tandem with (not as a replacement for) SAST and cloud security tooling. By scanning only the diff, it surfaces risk-surface expansion candidates for human review before merge, helping reviewers notice patterns that structural gates alone cannot reach.
## Untrusted input (prompt-enforced)
diff --git a/action.yml b/action.yml
index 37b40fcc..c22c184b 100644
--- a/action.yml
+++ b/action.yml
@@ -30,6 +30,10 @@ inputs:
description: 'Emit and keyless-sign an in-toto AgentProof conformance attestation (needs id-token: write and attestations: write).'
required: false
default: 'false'
+ risk-surface:
+ description: 'Run Risk Surface Guard. Values: off, warn, fail.'
+ required: false
+ default: 'warn'
runs:
using: 'composite'
@@ -64,8 +68,29 @@ runs:
node "$RATCHET" "$BASE" | tee -a "$GITHUB_STEP_SUMMARY"
VERDICT=${PIPESTATUS[0]}
echo "verdict=$VERDICT" >> "$GITHUB_OUTPUT"
+ echo "base=$BASE" >> "$GITHUB_OUTPUT"
exit "$VERDICT"
+ # Risk Surface Guard (ADR-047): a second, separate scanner from the gate integrity
+ # check above. Flags diffs that expand execution, credential, workflow, dataset or
+ # model-loading, container, network, or sandbox risk. Reuses the base ref this
+ # action already resolved above rather than recomputing it.
+ - name: Risk Surface Guard
+ id: risk-surface
+ if: ${{ always() && inputs.risk-surface != 'off' }}
+ shell: bash
+ env:
+ MODONOME_BASE: ${{ steps.ratchet.outputs.base }}
+ MODONOME_ACTION_PATH: ${{ github.action_path }}
+ MODONOME_RISK_MODE: ${{ inputs.risk-surface }}
+ run: |
+ set -uo pipefail
+ MODE="$MODONOME_RISK_MODE"
+ if [ "$MODE" != "fail" ]; then MODE="warn"; fi
+ node "$MODONOME_ACTION_PATH/scripts/risk-surface-guard.mjs" "$MODONOME_BASE" --mode "$MODE" \
+ | tee -a "$GITHUB_STEP_SUMMARY"
+ exit "${PIPESTATUS[0]}"
+
- name: Upload SARIF to code scanning
if: ${{ always() && inputs.upload-sarif == 'true' }}
uses: github/codeql-action/upload-sarif@v3
diff --git a/docs/README.md b/docs/README.md
index 5306724a..7d73d98d 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -10,6 +10,7 @@ governs where docs live.
- [specs/governed-autonomy-spec.md](specs/governed-autonomy-spec.md): the normative spec.
- [specs/ratchet-spec.md](specs/ratchet-spec.md): the anti-gaming ratchet spec.
+- [risk-surface-guard.md](risk-surface-guard.md): alpha-stage deterministic diff scanner that flags pull request changes expanding execution, credential, workflow, or infrastructure risk.
## Governance and compliance
diff --git a/docs/adr/ADR-047-risk-surface-guard.md b/docs/adr/ADR-047-risk-surface-guard.md
new file mode 100644
index 00000000..9534b090
--- /dev/null
+++ b/docs/adr/ADR-047-risk-surface-guard.md
@@ -0,0 +1,108 @@
+# ADR-047: Risk Surface Guard, a second deterministic PR-diff scanner
+
+**Status:** Accepted
+**Date:** 2026-07-27
+
+## Context
+
+The anti-gaming ratchet (`scripts/guard-ratchet.mjs`, ADR-045) catches one threat: a
+diff that makes gates pass by weakening the gates themselves, through removed
+assertions, skip injection, coverage lowering, or type escapes. It says nothing about a
+diff that leaves every gate intact but expands what the repository's execution,
+credential, workflow, or container surface can do once merged: a new `eval()` call, a
+`pull_request_target` trigger, a privileged container, a `curl | bash` install step.
+This is a different threat model. Blast radius and infrastructure exposure are not test
+gate integrity, and conflating the two would widen a dense, single-purpose file into two
+threat models sharing one set of regexes, one message-catalog namespace, and one set of
+false-positive constraints that do not actually overlap.
+
+Risk Surface Guard ships as a fully separate script and rule catalog for this reason:
+`scripts/risk-surface-guard.mjs` and `scripts/lib/risk-surface-rules.mjs` do not import
+from or modify `guard-ratchet.mjs`.
+
+## Decision
+
+1. **Deterministic, line-based diff scanning, not AST-based.** Same family as the
+ ratchet, for the same reason ADR-045 gives: an AST tier means vendoring a parser,
+ which contradicts the zero-runtime-dependency guarantee (ADR-032). The limits stay
+ documented rather than implied away: in `docs/risk-surface-guard.md`, and again in
+ every rule's own `limitation` field.
+2. **File-scope gating on every content rule, for two reasons.** First, false-positive
+ discipline: a rule scoped to `.py` files does not fire on a `.md` doc example, a
+ fixture file, or a rename. Second, and specific to this repository: its own CI runs
+ Risk Surface Guard against its own pull requests, including the one that introduces
+ `fixtures/risk-surface/should-flag/*.diff`. Those fixtures carry risky-looking text
+ as fixture data. Every content rule is scoped to real source or config extensions and
+ excludes `.md`, `.mdx`, `.txt`, `.rst`, `.diff`, and `.patch` universally, and every
+ fixture in this feature uses a `.diff` extension, so the fixtures cannot trigger the
+ scanner that ships beside them, on this pull request or any later one that adds more.
+ The same trap applies a second way: the rule catalog, the CLI, and the test file are
+ real `.mjs` source and necessarily contain the detection vocabulary itself as literal
+ text (a regex for `--privileged`, a reason string naming `KUBECONFIG`, a test fixture
+ quoting `169.254.169.254`), so `scripts/risk-surface-guard.mjs`,
+ `scripts/lib/risk-surface-rules.mjs`,
+ `scripts/lib/message-catalog/gate/risk-surface-guard.mjs`, and
+ `tests/risk-surface-guard.test.mjs` are exempted from content rules by path, the same
+ way fixtures are exempted by extension. This does not weaken review for the first
+ three: each is also an exact match in the protected-path list, so RS801 (path-based,
+ content-independent) fires whenever any of them is touched, regardless of the content
+ exemption. The test file is not itself a protected path, matching every other test
+ file in this repository, so it gets neither signal, the same as a fixture would.
+3. **Warn-default posture.** The CLI defaults to `--mode warn` (exit 0 even with
+ findings), and `action.yml`'s new `risk-surface` input defaults to `warn`. A tool
+ positioned as "flags what expands risk surface, for a reviewer to notice" earns a
+ fail default only after real-world use shows the false-positive rate is low enough to
+ block on. That is an adopter's decision to opt into, not this repository's decision
+ to impose.
+4. **Both `scripts/risk-surface-guard.mjs` and `scripts/lib/risk-surface-rules.mjs` are
+ base-pinned**, registered in `check-self-application.mjs`'s `BASE_PINNED` and checked
+ out from the base branch in `ci.yml` before use. The tool's value is catching
+ pull-request-introduced risk; a pull request must not be able to neuter the detector
+ in the same diff that adds the risky pattern. This holds even though this
+ repository's own CI runs the tool in warn mode: a neutered detector cannot fail the
+ build in warn mode either way, but it can still hide a real risk-surface expansion
+ from the reviewer reading the job summary, which is the actual backstop warn-mode
+ findings depend on. This mirrors the ratchet's own trust model (ADR-006, ADR-045).
+5. **Registered in `check-self-application.mjs`'s `REQUIRED_GATES` as advisory, not
+ blocking**, matching the existing near-miss-widener entry: the entry proves the step
+ is wired into CI and never fails the build by itself.
+6. **Not added to `package.json`'s `verify` chain.** Like the ratchet, it needs a real
+ base ref that a bare local `npm run verify` invocation cannot reliably supply: the
+ working checkout may already be on `main`, or `origin/main` may not be fetched. It
+ gets its own `ci.yml` step instead, in the same position and for the same reason the
+ ratchet does.
+7. **Message-catalog boundary.** `AGENTS.md` requires operator-facing output to go
+ through the message catalog. For this tool that means the CLI's own status, summary,
+ and usage-error strings, defined in
+ `scripts/lib/message-catalog/gate/risk-surface-guard.mjs`. Each finding's `reason`,
+ `reviewer_guidance`, and `limitation` text is authored content that belongs to the
+ rule that produced it, not an operator-tunable template, and lives as a plain string
+ field on the rule object in `risk-surface-rules.mjs`.
+8. **Explicit non-goals**, stated here so they can be cited rather than re-litigated:
+ this tool does not detect live infrastructure compromise, does not replace SAST,
+ secret scanning, dependency review, cloud security posture management, or sandboxing,
+ and is never described as breach prevention. Inline suppression comments are out of
+ scope for this version, since an agent could add one to silence a real finding. If
+ suppression is ever needed, the design note for later is a base-branch-loaded
+ allowlist, never a PR-head-loaded one, for the same reason point 4 requires
+ base-pinning the detector itself.
+
+## What this does not change
+
+- The zero-runtime-dependency guarantee (ADR-032) is untouched.
+- `guard-ratchet.mjs`'s own detection logic, message catalog entries, and CI position
+ are untouched. Existing Modonome Guard behavior is unchanged by this ADR.
+- `package.json`'s `verify` chain keeps its no-network, no-real-base-ref-required
+ property; Risk Surface Guard follows the same carve-out the ratchet already has.
+
+## Consequences
+
+Reviewers get a second, independent signal on pull requests, positioned conservatively:
+it flags repository changes that expand risk surface and helps a reviewer notice them
+before merge, nothing stronger. The residual risk is stated plainly, matching this
+repository's evidence-first norm: regex-based detection can be evaded by determined
+obfuscation, there is no semantic or AST analysis, per-finding line-number accuracy
+depends on well-formed `@@` hunk headers in the diff, and the broad-scope credential and
+network and TLS rules trade some false-positive risk for coverage deliberately, since a
+missed expansion is worse than an extra reviewer glance. None of this is marketed as
+breach prevention or as a replacement for the security tooling named in point 8.
diff --git a/docs/risk-surface-guard.md b/docs/risk-surface-guard.md
new file mode 100644
index 00000000..298faf28
--- /dev/null
+++ b/docs/risk-surface-guard.md
@@ -0,0 +1,121 @@
+---
+status: active
+owner: "@nateshpp"
+last_reviewed: 2026-07-27
+canonical: [risk-surface-guard]
+---
+
+# Risk Surface Guard
+
+An alpha-stage deterministic diff scanner that flags pull request changes which expand execution, credential, workflow, model/dataset loading, container, or sandbox risk. It is a complementary control that works alongside SAST, secret scanning, dependency review, and cloud security tooling.
+
+## What it detects
+
+Risk Surface Guard scans added lines in a pull request diff and flags patterns that expand the repository's blast radius when merged:
+
+- **Execution risk**: dynamic code execution (eval, exec, pickle.loads), unsafe deserialization (unsafe yaml.load), shell=True subprocess calls, curl or wget piped to bash.
+- **Credential surface expansion**: newly-added `secrets.*` references, wildcard IAM policies, cloud credential identifier patterns (AWS env vars, Azure identities, the cloud instance metadata service address `169.254.169.254`).
+- **Workflow risk**: GitHub Actions pull_request_target and workflow_run triggers, permission expansion (write-all, contents: write), unpinned third-party Actions.
+- **Model and dataset loading risk**: `trust_remote_code=True` patterns in model or dataset load calls.
+- **Container and Kubernetes privilege**: --privileged flag, hostPath mounts, hostNetwork, runAsUser: 0, capability additions, Docker socket exposure.
+- **TLS verification disabled**: rejectUnauthorized: false, NODE_TLS_REJECT_UNAUTHORIZED, curl -k, Python verify=False.
+- **Network egress expansion**: outbound allow-all patterns (`0.0.0.0/0`) added near an egress rule in Terraform or Kubernetes network policy files.
+- **Security-sensitive path changes**: any modification to .github/workflows/, action.yml, scripts/lib/, SECURITY.md, CODEOWNERS, Dockerfile, docker-compose.yml, k8s/, terraform/, .modonome/, or similar paths, regardless of content.
+
+The tool reports **id** (e.g., RS101), **severity** (low, medium, high, critical), **category**, **file**, **line**, **matched_text** (redacted for safety), **reason**, **reviewer_guidance**, and **limitation** for each finding.
+
+## What it does not detect
+
+Risk Surface Guard is a deterministic, line-based pattern scanner. It does not detect:
+
+- **Live infrastructure compromise** or runtime behavior (it reads a git diff only; it never executes code or calls network services).
+- **Semantic intent** (it is not an AST or semantic analyzer, so obfuscated patterns can evade it).
+- **Removals of risky code** (only added lines are flagged, never removals).
+- **Code in comments or markdown** within prose files (though security-sensitive file paths are always flagged regardless of content).
+- **Anything outside the pull request diff** being reviewed.
+
+## Why this complements the anti-gaming ratchet
+
+The anti-gaming ratchet (`scripts/guard-ratchet.mjs`) detects structural test-weakening: removed assertions, injected skips, coverage lowering. Risk Surface Guard is a separate script and rule catalog that flags a different kind of structural change: one that expands what the repository's execution, credential, workflow, or infrastructure surface can do, even when every test gate stays intact.
+
+They run independently and never share rule logic. The ratchet prevents agents from gaming tests. Risk Surface Guard helps reviewers notice risk-surface expansion before merge.
+
+## How to enable it in GitHub Actions
+
+The shipped composite action (`action.yml`) includes a new input `risk-surface` with three allowed values:
+
+- `off`: skip the check entirely.
+- `warn` (default in alpha): run the check, add findings to the job summary without failing the job.
+- `fail`: fail the job when a high or critical finding exists.
+
+Example workflow:
+
+```yaml
+- uses: enumind/modonome@v1
+ with:
+ risk-surface: warn # or 'fail', or 'off'
+```
+
+The check also runs as a standalone CLI:
+
+```bash
+node scripts/risk-surface-guard.mjs origin/main --mode warn
+node scripts/risk-surface-guard.mjs origin/main --mode fail --sarif
+node scripts/risk-surface-guard.mjs origin/main --mode warn --json
+node scripts/risk-surface-guard.mjs --staged --mode warn
+node scripts/risk-surface-guard.mjs --diff --mode fail
+```
+
+Exit codes: 0 when no findings, or in warn mode even with findings; 1 in fail mode when a high or critical finding exists; 2 for usage or internal errors.
+
+## How to interpret findings
+
+Each finding includes:
+
+- **id**: Rule identifier (e.g., RS101, RS411). Pinned across versions for stable CI tooling.
+- **severity**: low, medium, high, or critical. The action's fail mode checks high and critical findings.
+- **category**: One of 15 categories: dynamic-code-execution, unsafe-deserialization, shell-execution, remote-model-or-dataset-code, workflow-permission-expansion, workflow-trigger-risk, credential-surface-expansion, privileged-container, kubernetes-privilege, docker-socket-access, network-egress-expansion, tls-verification-disabled, install-from-network, sandbox-weakening, protected-security-config.
+- **file**: The file in the diff containing the finding.
+- **line**: The actual line number in the modified file (tracked from the diff's hunk headers, not a placeholder).
+- **matched_text**: The matched pattern, truncated to 200 characters and replaced with a fixed placeholder whenever it looks like it might contain real secret material.
+- **reason**: A short explanation of the risk flagged.
+- **reviewer_guidance**: Suggested questions or alternatives for the reviewer.
+- **limitation**: Constraints on what this rule can detect (e.g., "does not catch commented or obfuscated patterns").
+
+The CLI can emit findings as SARIF 2.1.0 (`--sarif`) or plain JSON (`--json`) for scripting. Unlike the anti-gaming ratchet, the GitHub Action does not currently upload Risk Surface Guard's SARIF output to the Security tab; that is a possible future enhancement, not something this version does.
+
+## Why warn mode is the default in alpha
+
+The tool is new and its real-world false-positive rate is not yet proven at scale. Warn mode reports findings to the job summary without blocking the job, giving teams time to confirm the finding rate matches their actual risk and to refine any local rule exemptions before switching to fail mode.
+
+Run in warn mode for a PR cycle or two. If the findings align with your risk model and false positives are rare, move to fail mode.
+
+## How to move to fail mode
+
+After running in warn mode and confirming the finding rate is low and accurate:
+
+1. Set the GitHub Action's `risk-surface` input to `fail`:
+
+```yaml
+- uses: enumind/modonome@v1
+ with:
+ risk-surface: fail
+```
+
+2. Or invoke the CLI directly with `--mode fail` in your own CI step:
+
+```bash
+node scripts/risk-surface-guard.mjs origin/main --mode fail
+```
+
+The job will exit with code 1 if any high or critical finding exists, blocking merge. Findings with low or medium severity are reported but do not fail the job, allowing reviewers to judge them case by case.
+
+## Limits and non-goals
+
+Risk Surface Guard does not prevent breaches. It does not replace SAST, secret scanning, dependency review, cloud security posture tooling, sandboxing, or human review. It is a deterministic, line-based pattern matcher that helps surface candidates for human review before a pull request merges.
+
+The tool scans diffs, not running code. Semantic obfuscation can evade it. A determined actor can rewrite a risky pattern to slip past the patterns the rules check. Reviewers must still read the diff.
+
+False-positive discipline applies: only added lines are flagged; removals of risky code never trigger a finding; same-line comments are skipped; and pinned official GitHub Actions and SHA-pinned third-party actions are exempted from the unpinned-action rule.
+
+No inline suppression comments are supported in this version. If a finding is a false positive specific to your repository, discuss it in a GitHub issue or reach out to the maintainers.
diff --git a/fixtures/risk-surface/should-allow/action-yml-sarif-permission-context.diff b/fixtures/risk-surface/should-allow/action-yml-sarif-permission-context.diff
new file mode 100644
index 00000000..18bfb330
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/action-yml-sarif-permission-context.diff
@@ -0,0 +1,9 @@
+diff --git a/action.yml b/action.yml
+--- a/action.yml
++++ b/action.yml
+@@ -1,4 +1,5 @@
+ inputs:
+ upload-sarif:
+- description: 'Upload SARIF to code scanning.'
++ description: 'Upload the SARIF report to GitHub code scanning. Needs security-events: write and code scanning enabled.'
+ default: 'true'
diff --git a/fixtures/risk-surface/should-allow/comment-only-eval-js.diff b/fixtures/risk-surface/should-allow/comment-only-eval-js.diff
new file mode 100644
index 00000000..42cbc467
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/comment-only-eval-js.diff
@@ -0,0 +1,8 @@
+diff --git a/src/handler.js b/src/handler.js
+--- a/src/handler.js
++++ b/src/handler.js
+@@ -1,3 +1,4 @@
+ function handle(userInput) {
++ // eval() is banned in this file, see ADR-047
+ return true;
+ }
diff --git a/fixtures/risk-surface/should-allow/comment-only-pull-request-target.diff b/fixtures/risk-surface/should-allow/comment-only-pull-request-target.diff
new file mode 100644
index 00000000..4556d987
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/comment-only-pull-request-target.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -1,3 +1,4 @@
+ on:
++ # do not add pull_request_target here, see SECURITY.md
+ push:
+ branches: [main]
diff --git a/fixtures/risk-surface/should-allow/doc-example-eval-no-code.diff b/fixtures/risk-surface/should-allow/doc-example-eval-no-code.diff
new file mode 100644
index 00000000..7b80ca62
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/doc-example-eval-no-code.diff
@@ -0,0 +1,7 @@
+diff --git a/docs/security-notes.md b/docs/security-notes.md
+--- a/docs/security-notes.md
++++ b/docs/security-notes.md
+@@ -1,2 +1,4 @@
+ # Security notes
++Avoid patterns like eval() and curl | bash in application code; both are
++common remote-code-execution vectors reviewers should watch for.
diff --git a/fixtures/risk-surface/should-allow/doc-example-in-readme.diff b/fixtures/risk-surface/should-allow/doc-example-in-readme.diff
new file mode 100644
index 00000000..927bfa93
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/doc-example-in-readme.diff
@@ -0,0 +1,11 @@
+diff --git a/README.md b/README.md
+--- a/README.md
++++ b/README.md
+@@ -1,3 +1,7 @@
+ # Example workflows
++
++A workflow that reacts to fork PRs typically declares a trigger like
++```yaml
++on: pull_request_target
++```
++which this project's own workflows deliberately avoid.
diff --git a/fixtures/risk-surface/should-allow/markdown-prose-curl-bash.diff b/fixtures/risk-surface/should-allow/markdown-prose-curl-bash.diff
new file mode 100644
index 00000000..86a3b643
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/markdown-prose-curl-bash.diff
@@ -0,0 +1,6 @@
+diff --git a/docs/threats.md b/docs/threats.md
+--- a/docs/threats.md
++++ b/docs/threats.md
+@@ -1,2 +1,3 @@
+ # Threats
++A curl | bash install step is a common supply-chain risk pattern to review for.
diff --git a/fixtures/risk-surface/should-allow/pinned-official-action.diff b/fixtures/risk-surface/should-allow/pinned-official-action.diff
new file mode 100644
index 00000000..3956a663
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/pinned-official-action.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -1,3 +1,4 @@
+ jobs:
+ build:
+ steps:
++ - uses: actions/checkout@v7
diff --git a/fixtures/risk-surface/should-allow/removal-of-eval.diff b/fixtures/risk-surface/should-allow/removal-of-eval.diff
new file mode 100644
index 00000000..e973b495
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/removal-of-eval.diff
@@ -0,0 +1,8 @@
+diff --git a/src/handler.js b/src/handler.js
+--- a/src/handler.js
++++ b/src/handler.js
+@@ -1,4 +1,3 @@
+ function handle(userInput) {
+- eval(userInput);
+ return true;
+ }
diff --git a/fixtures/risk-surface/should-allow/removal-of-privileged-flag.diff b/fixtures/risk-surface/should-allow/removal-of-privileged-flag.diff
new file mode 100644
index 00000000..3bcc6797
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/removal-of-privileged-flag.diff
@@ -0,0 +1,8 @@
+diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml
+--- a/deploy/docker-compose.yml
++++ b/deploy/docker-compose.yml
+@@ -1,5 +1,4 @@
+ services:
+ app:
+ image: myimage
+- privileged: true
diff --git a/fixtures/risk-surface/should-allow/sha-pinned-third-party-action.diff b/fixtures/risk-surface/should-allow/sha-pinned-third-party-action.diff
new file mode 100644
index 00000000..59d33575
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/sha-pinned-third-party-action.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -1,3 +1,4 @@
+ jobs:
+ build:
+ steps:
++ - uses: someorg/some-action@42d0ad89e55d369c9d3edfc927bb4fab92537624
diff --git a/fixtures/risk-surface/should-allow/test-asserts-eval-blocked.diff b/fixtures/risk-surface/should-allow/test-asserts-eval-blocked.diff
new file mode 100644
index 00000000..788b76da
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/test-asserts-eval-blocked.diff
@@ -0,0 +1,7 @@
+diff --git a/tests/security.test.mjs b/tests/security.test.mjs
+--- a/tests/security.test.mjs
++++ b/tests/security.test.mjs
+@@ -1,3 +1,4 @@
+ test("flags eval", () => {
++ assert.match(scan(src), /eval\(/);
+ });
diff --git a/fixtures/risk-surface/should-flag/aws-credential-env-refs.diff b/fixtures/risk-surface/should-flag/aws-credential-env-refs.diff
new file mode 100644
index 00000000..9b3c6bd5
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/aws-credential-env-refs.diff
@@ -0,0 +1,8 @@
+diff --git a/deploy/env.yml b/deploy/env.yml
+--- a/deploy/env.yml
++++ b/deploy/env.yml
+@@ -1,3 +1,5 @@
+ env:
+ REGION: us-east-1
++ AWS_ACCESS_KEY_ID: placeholder
++ AWS_SECRET_ACCESS_KEY: placeholder
diff --git a/fixtures/risk-surface/should-flag/bash-process-substitution.diff b/fixtures/risk-surface/should-flag/bash-process-substitution.diff
new file mode 100644
index 00000000..e0c7d87b
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/bash-process-substitution.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/install.sh b/scripts/install.sh
+--- a/scripts/install.sh
++++ b/scripts/install.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++bash <(curl -fsSL https://example.com/install.sh)
diff --git a/fixtures/risk-surface/should-flag/curl-pipe-bash.diff b/fixtures/risk-surface/should-flag/curl-pipe-bash.diff
new file mode 100644
index 00000000..200898a9
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/curl-pipe-bash.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/install.sh b/scripts/install.sh
+--- a/scripts/install.sh
++++ b/scripts/install.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++curl -fsSL https://example.com/install.sh | bash
diff --git a/fixtures/risk-surface/should-flag/docker-compose-privileged-true.diff b/fixtures/risk-surface/should-flag/docker-compose-privileged-true.diff
new file mode 100644
index 00000000..ff6e4110
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/docker-compose-privileged-true.diff
@@ -0,0 +1,8 @@
+diff --git a/docker-compose.yml b/docker-compose.yml
+--- a/docker-compose.yml
++++ b/docker-compose.yml
+@@ -1,4 +1,5 @@
+ services:
+ app:
+ image: myimage
++ privileged: true
diff --git a/fixtures/risk-surface/should-flag/docker-privileged-flag.diff b/fixtures/risk-surface/should-flag/docker-privileged-flag.diff
new file mode 100644
index 00000000..63848ad7
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/docker-privileged-flag.diff
@@ -0,0 +1,7 @@
+diff --git a/scripts/run-container.sh b/scripts/run-container.sh
+--- a/scripts/run-container.sh
++++ b/scripts/run-container.sh
+@@ -1,3 +1,4 @@
+ #!/bin/bash
+-docker run myimage
++docker run --privileged myimage
diff --git a/fixtures/risk-surface/should-flag/docker-socket-mount.diff b/fixtures/risk-surface/should-flag/docker-socket-mount.diff
new file mode 100644
index 00000000..46e7e03d
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/docker-socket-mount.diff
@@ -0,0 +1,8 @@
+diff --git a/docker-compose.yml b/docker-compose.yml
+--- a/docker-compose.yml
++++ b/docker-compose.yml
+@@ -1,4 +1,5 @@
+ services:
+ ci-runner:
+ volumes:
++ - /var/run/docker.sock:/var/run/docker.sock
diff --git a/fixtures/risk-surface/should-flag/gh-actions-actions-write.diff b/fixtures/risk-surface/should-flag/gh-actions-actions-write.diff
new file mode 100644
index 00000000..c74a21be
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-actions-write.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml
+--- a/.github/workflows/meta.yml
++++ b/.github/workflows/meta.yml
+@@ -1,3 +1,4 @@
+ name: meta
+ permissions:
++ actions: write
+ on:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-contents-write.diff b/fixtures/risk-surface/should-flag/gh-actions-contents-write.diff
new file mode 100644
index 00000000..3d0d19f1
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-contents-write.diff
@@ -0,0 +1,9 @@
+diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
+--- a/.github/workflows/publish.yml
++++ b/.github/workflows/publish.yml
+@@ -1,3 +1,5 @@
+ name: publish
+ permissions:
++ contents: write
++ pull-requests: read
+ on:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-id-token-write.diff b/fixtures/risk-surface/should-flag/gh-actions-id-token-write.diff
new file mode 100644
index 00000000..c073e567
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-id-token-write.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
+--- a/.github/workflows/deploy.yml
++++ b/.github/workflows/deploy.yml
+@@ -1,3 +1,4 @@
+ name: deploy
+ permissions:
++ id-token: write
+ on:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-permissions-write-all.diff b/fixtures/risk-surface/should-flag/gh-actions-permissions-write-all.diff
new file mode 100644
index 00000000..e7678011
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-permissions-write-all.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
+--- a/.github/workflows/release.yml
++++ b/.github/workflows/release.yml
+@@ -1,3 +1,4 @@
+ name: release
++permissions: write-all
+ on:
+ push:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-pull-request-target.diff b/fixtures/risk-surface/should-flag/gh-actions-pull-request-target.diff
new file mode 100644
index 00000000..22d641bb
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-pull-request-target.diff
@@ -0,0 +1,9 @@
+diff --git a/.github/workflows/comment.yml b/.github/workflows/comment.yml
+--- a/.github/workflows/comment.yml
++++ b/.github/workflows/comment.yml
+@@ -1,4 +1,5 @@
+ name: comment
+ on:
++ pull_request_target:
+ push:
+ branches: [main]
diff --git a/fixtures/risk-surface/should-flag/gh-actions-secrets-usage.diff b/fixtures/risk-surface/should-flag/gh-actions-secrets-usage.diff
new file mode 100644
index 00000000..14b7bc1f
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-secrets-usage.diff
@@ -0,0 +1,11 @@
+diff --git a/.github/workflows/notify.yml b/.github/workflows/notify.yml
+--- a/.github/workflows/notify.yml
++++ b/.github/workflows/notify.yml
+@@ -1,4 +1,6 @@
+ jobs:
+ notify:
+ steps:
+- - run: echo hello
++ - run: curl -X POST -d "$MSG" "$WEBHOOK"
++ env:
++ WEBHOOK: ${{ secrets.DEPLOY_WEBHOOK }}
diff --git a/fixtures/risk-surface/should-flag/gh-actions-security-events-write.diff b/fixtures/risk-surface/should-flag/gh-actions-security-events-write.diff
new file mode 100644
index 00000000..5218987c
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-security-events-write.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml
+--- a/.github/workflows/scan.yml
++++ b/.github/workflows/scan.yml
+@@ -1,3 +1,4 @@
+ name: scan
+ permissions:
++ security-events: write
+ on:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-self-hosted-runner.diff b/fixtures/risk-surface/should-flag/gh-actions-self-hosted-runner.diff
new file mode 100644
index 00000000..506d4d7e
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-self-hosted-runner.diff
@@ -0,0 +1,9 @@
+diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
+--- a/.github/workflows/build.yml
++++ b/.github/workflows/build.yml
+@@ -1,4 +1,4 @@
+ jobs:
+ build:
+- runs-on: ubuntu-latest
++ runs-on: self-hosted
+ steps:
diff --git a/fixtures/risk-surface/should-flag/gh-actions-unpinned-third-party-action.diff b/fixtures/risk-surface/should-flag/gh-actions-unpinned-third-party-action.diff
new file mode 100644
index 00000000..456bf041
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-unpinned-third-party-action.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
+--- a/.github/workflows/lint.yml
++++ b/.github/workflows/lint.yml
+@@ -1,3 +1,4 @@
+ jobs:
+ lint:
+ steps:
++ - uses: someorg/some-action@v2
diff --git a/fixtures/risk-surface/should-flag/gh-actions-workflow-run.diff b/fixtures/risk-surface/should-flag/gh-actions-workflow-run.diff
new file mode 100644
index 00000000..5aa03e26
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/gh-actions-workflow-run.diff
@@ -0,0 +1,8 @@
+diff --git a/.github/workflows/followup.yml b/.github/workflows/followup.yml
+--- a/.github/workflows/followup.yml
++++ b/.github/workflows/followup.yml
+@@ -1,3 +1,4 @@
+ name: followup
+ on:
++ workflow_run:
+ workflows: ["ci"]
diff --git a/fixtures/risk-surface/should-flag/iam-wildcard-policy.diff b/fixtures/risk-surface/should-flag/iam-wildcard-policy.diff
new file mode 100644
index 00000000..fe7dc729
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/iam-wildcard-policy.diff
@@ -0,0 +1,13 @@
+diff --git a/infra/policy.json b/infra/policy.json
+--- a/infra/policy.json
++++ b/infra/policy.json
+@@ -1,6 +1,8 @@
+ {
+ "Statement": [
+ {
+ "Effect": "Allow",
++ "Action": "*",
++ "Resource": "*"
+ }
+ ]
+ }
diff --git a/fixtures/risk-surface/should-flag/js-eval.diff b/fixtures/risk-surface/should-flag/js-eval.diff
new file mode 100644
index 00000000..d5858d55
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/js-eval.diff
@@ -0,0 +1,8 @@
+diff --git a/src/handler.js b/src/handler.js
+--- a/src/handler.js
++++ b/src/handler.js
+@@ -1,3 +1,4 @@
+ function handle(userInput) {
++ eval(userInput);
+ return true;
+ }
diff --git a/fixtures/risk-surface/should-flag/k8s-allow-privilege-escalation.diff b/fixtures/risk-surface/should-flag/k8s-allow-privilege-escalation.diff
new file mode 100644
index 00000000..d38f4586
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/k8s-allow-privilege-escalation.diff
@@ -0,0 +1,7 @@
+diff --git a/k8s/pod.yaml b/k8s/pod.yaml
+--- a/k8s/pod.yaml
++++ b/k8s/pod.yaml
+@@ -1,4 +1,5 @@
+ securityContext:
++ allowPrivilegeEscalation: true
+ runAsNonRoot: true
diff --git a/fixtures/risk-surface/should-flag/k8s-host-network.diff b/fixtures/risk-surface/should-flag/k8s-host-network.diff
new file mode 100644
index 00000000..782a6c84
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/k8s-host-network.diff
@@ -0,0 +1,7 @@
+diff --git a/k8s/pod.yaml b/k8s/pod.yaml
+--- a/k8s/pod.yaml
++++ b/k8s/pod.yaml
+@@ -1,3 +1,4 @@
+ spec:
++ hostNetwork: true
+ containers:
diff --git a/fixtures/risk-surface/should-flag/k8s-hostpath.diff b/fixtures/risk-surface/should-flag/k8s-hostpath.diff
new file mode 100644
index 00000000..fe309c58
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/k8s-hostpath.diff
@@ -0,0 +1,10 @@
+diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml
+--- a/k8s/deployment.yaml
++++ b/k8s/deployment.yaml
+@@ -1,5 +1,8 @@
+ spec:
+ volumes:
+ - name: data
++ hostPath:
++ path: /var/lib/data
++ type: Directory
diff --git a/fixtures/risk-surface/should-flag/k8s-run-as-root.diff b/fixtures/risk-surface/should-flag/k8s-run-as-root.diff
new file mode 100644
index 00000000..e4ab54f7
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/k8s-run-as-root.diff
@@ -0,0 +1,7 @@
+diff --git a/k8s/pod.yaml b/k8s/pod.yaml
+--- a/k8s/pod.yaml
++++ b/k8s/pod.yaml
+@@ -1,3 +1,4 @@
+ securityContext:
++ runAsUser: 0
+ fsGroup: 1000
diff --git a/fixtures/risk-surface/should-flag/metadata-service-access.diff b/fixtures/risk-surface/should-flag/metadata-service-access.diff
new file mode 100644
index 00000000..f2d705f8
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/metadata-service-access.diff
@@ -0,0 +1,7 @@
+diff --git a/src/creds.js b/src/creds.js
+--- a/src/creds.js
++++ b/src/creds.js
+@@ -1,3 +1,4 @@
+ function fetchRole() {
++ return fetch("http://169.254.169.254/latest/meta-data/iam/security-credentials/");
+ }
diff --git a/fixtures/risk-surface/should-flag/npm-install-http-url.diff b/fixtures/risk-surface/should-flag/npm-install-http-url.diff
new file mode 100644
index 00000000..90bdf288
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/npm-install-http-url.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/setup.sh b/scripts/setup.sh
+--- a/scripts/setup.sh
++++ b/scripts/setup.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++npm install http://example.com/pkg.tgz
diff --git a/fixtures/risk-surface/should-flag/pip-install-unpinned-git.diff b/fixtures/risk-surface/should-flag/pip-install-unpinned-git.diff
new file mode 100644
index 00000000..0c346d28
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/pip-install-unpinned-git.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/setup.sh b/scripts/setup.sh
+--- a/scripts/setup.sh
++++ b/scripts/setup.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++pip install git+https://github.com/example/pkg.git
diff --git a/fixtures/risk-surface/should-flag/protected-path-touch-codeowners.diff b/fixtures/risk-surface/should-flag/protected-path-touch-codeowners.diff
new file mode 100644
index 00000000..c877d77b
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/protected-path-touch-codeowners.diff
@@ -0,0 +1,6 @@
+diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
+--- a/.github/CODEOWNERS
++++ b/.github/CODEOWNERS
+@@ -1,2 +1,3 @@
+ * @owner1
++/scripts/ @owner1 @owner2
diff --git a/fixtures/risk-surface/should-flag/protected-path-touch-security-md.diff b/fixtures/risk-surface/should-flag/protected-path-touch-security-md.diff
new file mode 100644
index 00000000..7ca94bb6
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/protected-path-touch-security-md.diff
@@ -0,0 +1,6 @@
+diff --git a/SECURITY.md b/SECURITY.md
+--- a/SECURITY.md
++++ b/SECURITY.md
+@@ -1,2 +1,3 @@
+ # Security policy
++A routine documentation update, no risky content.
diff --git a/fixtures/risk-surface/should-flag/python-subprocess-shell-true.diff b/fixtures/risk-surface/should-flag/python-subprocess-shell-true.diff
new file mode 100644
index 00000000..8cf330cb
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/python-subprocess-shell-true.diff
@@ -0,0 +1,7 @@
+diff --git a/scripts/deploy.py b/scripts/deploy.py
+--- a/scripts/deploy.py
++++ b/scripts/deploy.py
+@@ -1,3 +1,4 @@
+ def deploy(cmd):
++ subprocess.run(cmd, shell=True)
+ return 0
diff --git a/fixtures/risk-surface/should-flag/tls-curl-insecure.diff b/fixtures/risk-surface/should-flag/tls-curl-insecure.diff
new file mode 100644
index 00000000..1d14a955
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/tls-curl-insecure.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/fetch.sh b/scripts/fetch.sh
+--- a/scripts/fetch.sh
++++ b/scripts/fetch.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++curl -k https://example.com/data.json
diff --git a/fixtures/risk-surface/should-flag/tls-node-env-disable.diff b/fixtures/risk-surface/should-flag/tls-node-env-disable.diff
new file mode 100644
index 00000000..96a21926
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/tls-node-env-disable.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/fetch.sh b/scripts/fetch.sh
+--- a/scripts/fetch.sh
++++ b/scripts/fetch.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++export NODE_TLS_REJECT_UNAUTHORIZED=0
diff --git a/fixtures/risk-surface/should-flag/tls-python-verify-false.diff b/fixtures/risk-surface/should-flag/tls-python-verify-false.diff
new file mode 100644
index 00000000..4727ecad
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/tls-python-verify-false.diff
@@ -0,0 +1,7 @@
+diff --git a/scripts/client.py b/scripts/client.py
+--- a/scripts/client.py
++++ b/scripts/client.py
+@@ -1,3 +1,4 @@
+ def fetch(url):
+- return requests.get(url)
++ return requests.get(url, verify=False)
diff --git a/fixtures/risk-surface/should-flag/tls-reject-unauthorized-false.diff b/fixtures/risk-surface/should-flag/tls-reject-unauthorized-false.diff
new file mode 100644
index 00000000..15c15eff
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/tls-reject-unauthorized-false.diff
@@ -0,0 +1,8 @@
+diff --git a/src/client.js b/src/client.js
+--- a/src/client.js
++++ b/src/client.js
+@@ -1,4 +1,5 @@
+ const options = {
+ host: "example.com",
++ rejectUnauthorized: false,
+ };
diff --git a/fixtures/risk-surface/should-flag/trust-remote-code.diff b/fixtures/risk-surface/should-flag/trust-remote-code.diff
new file mode 100644
index 00000000..f2af1e98
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/trust-remote-code.diff
@@ -0,0 +1,7 @@
+diff --git a/model/load.py b/model/load.py
+--- a/model/load.py
++++ b/model/load.py
+@@ -1,3 +1,4 @@
+ def load(name):
+- return AutoModel.from_pretrained(name)
++ return AutoModel.from_pretrained(name, trust_remote_code=True)
diff --git a/fixtures/risk-surface/should-flag/wget-pipe-sh.diff b/fixtures/risk-surface/should-flag/wget-pipe-sh.diff
new file mode 100644
index 00000000..5330472c
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/wget-pipe-sh.diff
@@ -0,0 +1,6 @@
+diff --git a/scripts/install.sh b/scripts/install.sh
+--- a/scripts/install.sh
++++ b/scripts/install.sh
+@@ -1,2 +1,3 @@
+ #!/bin/bash
++wget -qO- https://example.com/install.sh | sh
diff --git a/package.json b/package.json
index a5efb903..b0dad535 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
"agentproof": "node agentproof/runner.mjs",
"checkerproof": "node checkerproof/runner.mjs",
"report": "node scripts/report.mjs",
+ "risk": "node scripts/risk-surface-guard.mjs",
"demo:agent": "node scripts/agent/run-cycle.mjs",
"prepare": "node scripts/install-hooks.mjs",
"release": "node scripts/release.mjs",
diff --git a/schemas/gate-graph.json b/schemas/gate-graph.json
index 8eabcae2..ea79daf4 100644
--- a/schemas/gate-graph.json
+++ b/schemas/gate-graph.json
@@ -1 +1 @@
-{"ratchet":[],"work-item":["ratchet"]}
+{"ratchet":[],"work-item":["ratchet"],"risk-surface-guard":[]}
diff --git a/scripts/check-gate-dag.mjs b/scripts/check-gate-dag.mjs
index b6b16b4b..0df38618 100644
--- a/scripts/check-gate-dag.mjs
+++ b/scripts/check-gate-dag.mjs
@@ -31,6 +31,7 @@ const DETERMINISTIC_ENTRY_FILES = [
"scripts/lib/branch-name.mjs",
"scripts/lib/commit-identity.mjs",
"scripts/lib/detect-attribution.mjs",
+ "scripts/risk-surface-guard.mjs",
];
// Files a deterministic detector must never reach through its import graph. The reverse
// edges are required and allowed: near-miss.mjs (the widener) imports the strict
diff --git a/scripts/check-self-application.mjs b/scripts/check-self-application.mjs
index 4131160d..f21444dd 100644
--- a/scripts/check-self-application.mjs
+++ b/scripts/check-self-application.mjs
@@ -60,6 +60,11 @@ const REQUIRED_GATES = [
// Advisory, not blocking: this only proves the near-miss widener step is wired into
// CI at all. It never fails the build; promotion into the denylist stays human-only.
{ name: "near-miss widener (advisory)", needle: "detect-near-miss.mjs" },
+ // Advisory, not blocking: proves the Risk Surface Guard step (ADR-047) is wired into
+ // CI at all. Runs in --mode warn, contractually exit 0, so it never fails this
+ // repository's own build; a downstream adopter can opt into --mode fail via
+ // action.yml's risk-surface input.
+ { name: "risk surface guard (advisory)", needle: "risk-surface-guard.mjs" },
// Scans the PR body and comments for AI-participation signatures (operational-note 6):
// the one attribution surface no tracked-file gate can see.
{ name: "PR body and comment hygiene", needle: "hygiene check --pr" },
@@ -90,6 +95,8 @@ const BASE_PINNED = [
"scripts/lib/branch-name.mjs",
"scripts/lib/commit-identity.mjs",
"scripts/lib/detect-attribution.mjs",
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/risk-surface-rules.mjs",
];
for (const rel of BASE_PINNED) {
const escaped = rel.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
diff --git a/scripts/lib/message-catalog/gate/risk-surface-guard.mjs b/scripts/lib/message-catalog/gate/risk-surface-guard.mjs
new file mode 100644
index 00000000..a8707068
--- /dev/null
+++ b/scripts/lib/message-catalog/gate/risk-surface-guard.mjs
@@ -0,0 +1,67 @@
+// Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's
+// own status, summary, and usage-error strings, per ADR-047 decision 7: a finding's
+// reason, reviewer_guidance, and limitation text is authored content that belongs to
+// the rule that produced it, defined directly in scripts/lib/risk-surface-rules.mjs,
+// not routed through this catalog.
+export const MESSAGES = {
+ "gate.risk-surface-guard.usage-error": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "usage: risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json], or --diff , or --staged",
+ },
+ "gate.risk-surface-guard.unsafe-ref": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "refusing to diff against unsafe ref: {ref}",
+ },
+ "gate.risk-surface-guard.invalid-mode": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "invalid --mode value: {value} (expected warn or fail)",
+ },
+ "gate.risk-surface-guard.diff-failed": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "git diff {base}...HEAD failed",
+ },
+ "gate.risk-surface-guard.staged-diff-failed": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "git diff --cached failed",
+ },
+ "gate.risk-surface-guard.internal-error": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "internal error: {message}",
+ },
+ "gate.risk-surface-guard.pass-summary": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "PASS: no risk-surface findings.",
+ },
+ "gate.risk-surface-guard.warn-summary": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "WARN: {count} risk-surface finding(s). Mode is warn, so this does not block.",
+ },
+ "gate.risk-surface-guard.fail-block-summary": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "FAIL: {count} risk-surface finding(s), including a high or critical severity match. Mode is fail.",
+ },
+ "gate.risk-surface-guard.fail-mode-below-threshold-summary": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "WARN: {count} risk-surface finding(s), none high or critical. Mode is fail but the threshold was not reached.",
+ },
+};
diff --git a/scripts/lib/message-catalog/index.mjs b/scripts/lib/message-catalog/index.mjs
index 7e127f0e..b0930c8e 100644
--- a/scripts/lib/message-catalog/index.mjs
+++ b/scripts/lib/message-catalog/index.mjs
@@ -30,6 +30,7 @@ import { MESSAGES as M_GATE_CHECK_STYLE } from "./gate/check-style.mjs";
import { MESSAGES as M_GATE_CHECK_TRUST_BOUNDARY } from "./gate/check-trust-boundary.mjs";
import { MESSAGES as M_GATE_CHECK_WORK_ITEMS } from "./gate/check-work-items.mjs";
import { MESSAGES as M_GATE_GUARD_RATCHET } from "./gate/guard-ratchet.mjs";
+import { MESSAGES as M_GATE_RISK_SURFACE_GUARD } from "./gate/risk-surface-guard.mjs";
import { MESSAGES as M_GATE_RUN_GATE_PIPELINE } from "./gate/run-gate-pipeline.mjs";
import { MESSAGES as M_GATE_TEST_PROMPT_BEHAVIOR } from "./gate/test-prompt-behavior.mjs";
import { MESSAGES as M_GATE_VALIDATE_CONFIG } from "./gate/validate-config.mjs";
@@ -89,6 +90,7 @@ export const CATALOG_PARTIALS = [
M_GATE_CHECK_TRUST_BOUNDARY,
M_GATE_CHECK_WORK_ITEMS,
M_GATE_GUARD_RATCHET,
+ M_GATE_RISK_SURFACE_GUARD,
M_GATE_RUN_GATE_PIPELINE,
M_GATE_TEST_PROMPT_BEHAVIOR,
M_GATE_VALIDATE_CONFIG,
diff --git a/scripts/lib/risk-surface-rules.mjs b/scripts/lib/risk-surface-rules.mjs
new file mode 100644
index 00000000..00565765
--- /dev/null
+++ b/scripts/lib/risk-surface-rules.mjs
@@ -0,0 +1,955 @@
+// Rule catalog for scripts/risk-surface-guard.mjs (ADR-047). Kept fully separate from
+// guard-ratchet.mjs: a different threat model (execution, credential, workflow, and
+// infrastructure blast radius) from the anti-gaming ratchet's test-gate integrity
+// focus, so the two never share a rule set, a message-catalog namespace, or a
+// false-positive-discipline budget.
+//
+// Every content rule is scoped to real source or config file extensions and
+// universally excludes documentation and diff/patch formats (isContentExempt below).
+// This is load-bearing, not cosmetic: this repository's own CI runs this scanner
+// against its own pull requests, including the one that first adds
+// fixtures/risk-surface/should-flag/*.diff. Those fixtures carry risky-looking text as
+// fixture data, and every fixture in this feature uses a .diff extension specifically
+// so the extension exclusion keeps the scanner from flagging its own fixtures (see
+// ADR-047, decision 2).
+import { scanForSecrets } from "./secret-patterns.mjs";
+
+function basename(path) {
+ const parts = String(path).split("/");
+ return parts[parts.length - 1];
+}
+
+// ---------------------------------------------------------------------------
+// File-scope predicates
+// ---------------------------------------------------------------------------
+
+const CONTENT_EXEMPT_EXT = /\.(md|mdx|txt|rst|diff|patch)$/i;
+
+// This scanner's own implementation and test files necessarily contain the
+// detection vocabulary itself (rule patterns, reason text, and test fixture
+// data quoting things like "169.254.169.254" or "--privileged" as literal
+// source, not as a real risky call site). Scanning them for their own
+// vocabulary is a structural false positive, the same class of problem the
+// extension exemption above solves for fixtures, so these paths get the same
+// treatment. This does not weaken review: all four are still exact or glob
+// matches in PROTECTED_PATH_GLOBS below, so RS801 (path-based, content-
+// independent) still fires on every one of them whenever they are touched.
+const SELF_EXEMPT_PATHS = new Set([
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/message-catalog/gate/risk-surface-guard.mjs",
+ "tests/risk-surface-guard.test.mjs",
+]);
+
+export function isContentExempt(path) {
+ return CONTENT_EXEMPT_EXT.test(path) || SELF_EXEMPT_PATHS.has(path);
+}
+
+export function isJsTsScope(path) {
+ return !isContentExempt(path) && /\.(m|c)?[jt]sx?$/.test(path);
+}
+
+export function isPythonScope(path) {
+ return !isContentExempt(path) && /\.py$/.test(path);
+}
+
+export function isWorkflowScope(path) {
+ if (isContentExempt(path)) return false;
+ if (/^\.github\/workflows\/.+\.ya?ml$/.test(path)) return true;
+ const b = basename(path);
+ return b === "action.yml" || b === "action.yaml";
+}
+
+export function isDockerComposeScope(path) {
+ if (isContentExempt(path)) return false;
+ return /(^|\/)(docker-)?compose([.\-][\w.\-]+)?\.ya?ml$/i.test(path);
+}
+
+export function isDockerfileScope(path) {
+ if (isContentExempt(path)) return false;
+ return /(^|\/)Dockerfile([.\-][\w.\-]+)?$/.test(path);
+}
+
+export function isK8sScope(path) {
+ if (isContentExempt(path)) return false;
+ if (!/\.ya?ml$/.test(path)) return false;
+ return /^(k8s|kubernetes|helm|charts)(\/|$)/.test(path);
+}
+
+export function isTerraformScope(path) {
+ if (isContentExempt(path)) return false;
+ return /\.tf$/.test(path) || /^(terraform|infra)\//.test(path);
+}
+
+// Broad scope for rules whose patterns can legitimately appear in many file kinds
+// (credential references, network/TLS flags, network-install one-liners): JS/TS,
+// Python, Dockerfiles, and common shell/config/infra text formats. Still excludes
+// documentation and diff/patch formats via isContentExempt.
+const BROAD_EXTRA_EXT = /\.(rb|go|java|sh|bash|ya?ml|json|toml|ini|env|tf|cfg|conf)$/i;
+
+export function isBroadScope(path) {
+ if (isContentExempt(path)) return false;
+ if (isJsTsScope(path) || isPythonScope(path) || isDockerfileScope(path)) return true;
+ return BROAD_EXTRA_EXT.test(path);
+}
+
+// ---------------------------------------------------------------------------
+// Protected-path matching (RS801, content-independent)
+// ---------------------------------------------------------------------------
+
+export const PROTECTED_PATH_GLOBS = [
+ ".github/workflows/**",
+ "action.yml",
+ "action.yaml",
+ "scripts/guard-ratchet.mjs",
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/**",
+ "SECURITY.md",
+ "Dockerfile",
+ "docker-compose.yml",
+ "docker-compose.yaml",
+ "k8s/**",
+ "kubernetes/**",
+ "helm/**",
+ "charts/**",
+ "terraform/**",
+ "infra/**",
+ ".modonome/**",
+];
+
+function globToRegExp(glob) {
+ // Split on the literal "**" substring first, so each segment holds at most
+ // single "*" wildcards, then escape and rejoin with ".*" for where "**" was.
+ // This sidesteps the placeholder round-trip that corrupted an earlier draft.
+ const segments = glob
+ .split("**")
+ .map((part) => part.replace(/[.+^$\{\}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*"));
+ return new RegExp(`^${segments.join(".*")}$`);
+}
+
+const PROTECTED_PATH_REGEXPS = PROTECTED_PATH_GLOBS.map(globToRegExp);
+
+export function matchesProtectedPath(path) {
+ if (basename(path) === "CODEOWNERS") return true;
+ return PROTECTED_PATH_REGEXPS.some((re) => re.test(path));
+}
+
+// ---------------------------------------------------------------------------
+// Same-line noise stripping (ADR-045 technique, reimplemented small and
+// self-contained here per ADR-047: open-and-close-on-the-same-line spans only;
+// bail to the raw line whenever a span looks unterminated, so this can only
+// suppress a match, never hide a real one).
+// ---------------------------------------------------------------------------
+
+export function stripSameLineNoise(rawLine) {
+ const line = rawLine.replace(/\/\*.*?\*\//g, "");
+ let result = "";
+ let inSingle = false;
+ let inDouble = false;
+ let inTemplate = false;
+ for (let i = 0; i < line.length; i++) {
+ const ch = line[i];
+ const next = line[i + 1];
+ if (!inSingle && !inDouble && !inTemplate && ch === "/" && next === "/") break;
+ if (!inDouble && !inTemplate && ch === "'" && line[i - 1] !== "\\") {
+ inSingle = !inSingle;
+ continue;
+ }
+ if (!inSingle && !inTemplate && ch === '"' && line[i - 1] !== "\\") {
+ inDouble = !inDouble;
+ continue;
+ }
+ if (!inSingle && !inDouble && ch === "`" && line[i - 1] !== "\\") {
+ inTemplate = !inTemplate;
+ continue;
+ }
+ if (inSingle || inDouble || inTemplate) continue;
+ result += ch;
+ }
+ if (inSingle || inDouble || inTemplate) return rawLine;
+ return result;
+}
+
+export function stripPythonSameLineNoise(line) {
+ let result = "";
+ let inSingle = false;
+ let inDouble = false;
+ for (let i = 0; i < line.length; i++) {
+ const ch = line[i];
+ if (!inDouble && !inSingle && ch === "#") break;
+ if (!inDouble && ch === "'" && line[i - 1] !== "\\") {
+ inSingle = !inSingle;
+ continue;
+ }
+ if (!inSingle && ch === '"' && line[i - 1] !== "\\") {
+ inDouble = !inDouble;
+ continue;
+ }
+ if (inSingle || inDouble) continue;
+ result += ch;
+ }
+ if (inSingle || inDouble) return line;
+ return result;
+}
+
+// Simple "#" to end of line stripper for YAML and shell-like formats. Not
+// quote-aware (a "#" inside a quoted YAML string is still treated as a comment
+// start) -- an accepted simplification, matching the same trade-off guard-ratchet
+// itself accepts for its own comment stripping.
+export function stripHashComment(line) {
+ const idx = line.indexOf("#");
+ if (idx === -1) return line;
+ return line.slice(0, idx);
+}
+
+export function stripForScope(path, line) {
+ if (isJsTsScope(path)) return stripSameLineNoise(line);
+ if (isPythonScope(path)) return stripPythonSameLineNoise(line);
+ return stripHashComment(line);
+}
+
+// ---------------------------------------------------------------------------
+// Output-safety redaction, applied uniformly to every finding's matched_text
+// regardless of which rule produced it.
+// ---------------------------------------------------------------------------
+
+const MAX_MATCHED_TEXT_LEN = 200;
+const REDACTED_PLACEHOLDER = "[redacted: possible secret material on this line]";
+
+export function redactMatchedText(text, opts = {}) {
+ const maxLen = opts.maxLen || MAX_MATCHED_TEXT_LEN;
+ const trimmed = String(text).trim();
+ if (scanForSecrets(trimmed).length > 0) return REDACTED_PLACEHOLDER;
+ if (trimmed.length <= maxLen) return trimmed;
+ return trimmed.slice(0, maxLen) + "... [truncated]";
+}
+
+// ---------------------------------------------------------------------------
+// Rule catalog
+//
+// Rule shape: { id, category, severity, scope, pattern | test | fileTest,
+// reason, reviewer_guidance, limitation }
+// - pattern: RegExp tested against the noise-stripped line.
+// - test(strippedLine): custom single-line predicate, for multi-condition or
+// negative-lookahead-shaped checks a single RegExp reads poorly as.
+// - fileTest(lines, filePath): file-level predicate over the whole array of
+// { text, line } added-line records, for co-occurrence checks. Returns the
+// array of triggering line records (empty array for no match).
+// GitHub Actions permission keys and other YAML mapping keys use a
+// leading-token anchor (^\s*\s*:) so a value that merely mentions the key
+// in prose -- for example this repo's own action.yml SARIF-permission
+// description text -- never matches; only the key actually appearing as a
+// YAML mapping key does.
+// ---------------------------------------------------------------------------
+
+export const RULES = [
+ // ---- RS1xx: dynamic-code-execution / unsafe-deserialization / shell-execution ----
+ {
+ id: "RS101",
+ category: "dynamic-code-execution",
+ severity: "high",
+ scope: isJsTsScope,
+ pattern: /\beval\s*\(/,
+ reason:
+ "This line calls eval(), which executes a string as JavaScript. If any part of the input can be influenced by an external source (a PR body, an API response, a file from an untrusted repo), this is an arbitrary-code-execution path.",
+ reviewer_guidance:
+ "Confirm the argument is a fixed, repo-authored string, never data from a request, file read, or environment variable. Prefer JSON.parse, a small parser, or a lookup table instead of eval.",
+ limitation:
+ "Detects the literal token eval(. Does not resolve aliases (const e = eval; e(x)), indirect eval via (0, eval)(x), or dynamic property access (window['ev' + 'al'](x)).",
+ },
+ {
+ id: "RS102",
+ category: "dynamic-code-execution",
+ severity: "high",
+ scope: isJsTsScope,
+ pattern: /\bnew\s+Function\s*\(/,
+ reason:
+ "The Function constructor compiles a string into a new function body at runtime, the same class of risk as eval with a different call shape.",
+ reviewer_guidance:
+ "Confirm every argument is a fixed, repo-authored string. Prefer a plain function declaration instead of runtime code generation.",
+ limitation: "Detects the literal token new Function(. Does not resolve aliases assigned to Function before the call.",
+ },
+ {
+ id: "RS103",
+ category: "shell-execution",
+ severity: "high",
+ scope: isJsTsScope,
+ pattern: /\bchild_process\.exec\s*\(/,
+ reason:
+ "child_process.exec runs its argument through a shell. If any part of the command is built from external input, this is a shell-injection path.",
+ reviewer_guidance:
+ "Prefer execFile or spawn with an explicit argument array (no shell involved). If a shell is genuinely required, confirm every interpolated value is fixed and repo-authored.",
+ limitation: "Detects the literal token child_process.exec(. Does not follow a destructured import (`const { exec } = require(...)`).",
+ },
+ {
+ id: "RS104",
+ category: "shell-execution",
+ severity: "high",
+ scope: isJsTsScope,
+ pattern: /\bchild_process\.execSync\s*\(/,
+ reason: "Same risk as child_process.exec, synchronous form: the command is passed through a shell.",
+ reviewer_guidance:
+ "Prefer execFileSync with an explicit argument array. Confirm every interpolated value is fixed and repo-authored if a shell is genuinely required.",
+ limitation: "Detects the literal token child_process.execSync(. Does not follow a destructured import.",
+ },
+ {
+ id: "RS105",
+ category: "shell-execution",
+ severity: "high",
+ scope: isJsTsScope,
+ test: (line) => /\bspawn\s*\(/.test(line) && /\bshell\s*:\s*true\b/.test(line),
+ reason:
+ "spawn() with shell: true routes the command through a shell instead of executing an argument list directly, reintroducing shell-injection risk that spawn's default (no shell) avoids.",
+ reviewer_guidance: "Drop shell: true and pass the command as an argument array. If a shell is genuinely required, confirm every interpolated value is fixed and repo-authored.",
+ limitation:
+ "Single-line heuristic: a call whose shell: true option is on a different line than spawn( (a common multi-line call-signature style) is not detected.",
+ },
+ {
+ id: "RS106",
+ category: "credential-surface-expansion",
+ severity: "low",
+ scope: (p) => isJsTsScope(p) && /auth|secret|credential|token/i.test(basename(p)),
+ pattern: /\bprocess\.env\b/,
+ reason:
+ "New process.env access in a file whose name suggests it handles authentication, secrets, or credentials. Not inherently unsafe, but a new environment-variable read in this kind of file is worth a quick look at what it reads and where the value goes.",
+ reviewer_guidance: "Confirm the value read is used narrowly (not logged, not echoed into a response or a wider object) and that the variable name matches what the file already handles.",
+ limitation:
+ "Scoped only by filename convention, not by actual file purpose, and only to JS/TS files. This is the rule most likely to be noisy in a repo with a different naming convention; it stays intentionally low severity and narrow for that reason.",
+ },
+ {
+ id: "RS109",
+ category: "dynamic-code-execution",
+ severity: "high",
+ scope: isPythonScope,
+ pattern: /\beval\s*\(/,
+ reason: "eval() executes a string as Python. If any part of the input can be influenced by an external source, this is an arbitrary-code-execution path.",
+ reviewer_guidance: "Confirm the argument is a fixed, repo-authored string. Prefer ast.literal_eval for trusted structured data, or a dedicated parser.",
+ limitation: "Detects the literal token eval(. Does not resolve aliases assigned to eval before the call.",
+ },
+ {
+ id: "RS110",
+ category: "dynamic-code-execution",
+ severity: "high",
+ scope: isPythonScope,
+ pattern: /\bexec\s*\(/,
+ reason: "exec() compiles and runs a string as Python statements, a broader capability than eval() (whole statements, where eval() is limited to expressions).",
+ reviewer_guidance: "Confirm the argument is fixed and repo-authored. This is very rarely required outside of plugin-loading systems that already assume trusted code.",
+ limitation: "Detects the literal token exec(. Does not distinguish this from an unrelated local function or method also named exec.",
+ },
+ {
+ id: "RS111",
+ category: "unsafe-deserialization",
+ severity: "high",
+ scope: isPythonScope,
+ pattern: /\bpickle\.loads?\s*\(/,
+ reason: "pickle.load/loads can execute arbitrary code during deserialization; unpickling untrusted data is a well-known remote-code-execution path.",
+ reviewer_guidance: "Confirm the data source is fully trusted (written by this same process, never from a network response, upload, or another repo). Prefer JSON or another data-only format for anything crossing a trust boundary.",
+ limitation: "Detects the literal token pickle.load( / pickle.loads(. Does not evaluate where the deserialized bytes came from.",
+ },
+ {
+ id: "RS112",
+ category: "unsafe-deserialization",
+ severity: "high",
+ scope: isPythonScope,
+ test: (line) => /\byaml\.load\s*\(/.test(line) && !/SafeLoader/.test(line),
+ reason: "yaml.load without an explicit SafeLoader can construct arbitrary Python objects from the input, which can lead to code execution depending on the objects the YAML encodes.",
+ reviewer_guidance: "Pass Loader=yaml.SafeLoader (or use yaml.safe_load) unless there is a specific, reviewed reason to construct non-primitive objects.",
+ limitation: "Single-line heuristic: a Loader argument passed on a later line of a multi-line call is not detected, and would read as a false positive here.",
+ },
+ {
+ id: "RS113",
+ category: "shell-execution",
+ severity: "high",
+ scope: isPythonScope,
+ test: (line) => /\bsubprocess\.(run|call|Popen|check_call|check_output)\s*\(/.test(line) && /shell\s*=\s*True/.test(line),
+ reason: "This subprocess call sets shell=True, passing the command through a shell instead of executing an argument list directly. If any part of the command string is built from external input, this is a shell-injection path.",
+ reviewer_guidance: "Prefer passing a list of arguments with shell=False (the default). If a shell is genuinely required, confirm every interpolated value is from a fixed, trusted source.",
+ limitation: "Single-line heuristic: a call whose shell=True argument is on a different line than the function name (a common multi-line call-signature style) is not detected.",
+ },
+ {
+ id: "RS114",
+ category: "shell-execution",
+ severity: "high",
+ scope: isPythonScope,
+ pattern: /\bos\.system\s*\(/,
+ reason: "os.system runs its argument through the platform shell with no argument-array separation, a direct shell-injection path if any part of the string is externally influenced.",
+ reviewer_guidance: "Prefer subprocess.run with an explicit argument list and shell=False.",
+ limitation: "Detects the literal token os.system(. Does not evaluate whether the argument is a fixed string.",
+ },
+ {
+ id: "RS116",
+ category: "unsafe-deserialization",
+ severity: "medium",
+ scope: isPythonScope,
+ test: (line) => {
+ const m = line.match(/\btorch\.load\s*\(\s*([^)]*)/);
+ if (!m) return false;
+ const arg = m[1].trim();
+ return arg.length > 0 && !/^["']/.test(arg);
+ },
+ reason: "torch.load can execute arbitrary code embedded in a pickled checkpoint. This call's argument does not look like a fixed string literal, so the path may be externally supplied (a download, a config value, a function argument).",
+ reviewer_guidance: "Confirm the checkpoint source is trusted and, where the model library supports it, pass weights_only=True. Prefer a pinned, hash-verified checkpoint source over an arbitrary path.",
+ limitation: "Heuristic and single-line: flags any non-string-literal argument, whether or not it is genuinely externally supplied. A local, clearly-fixed variable will still be flagged.",
+ },
+
+ // ---- RS2xx: remote-model-or-dataset-code ----
+ {
+ id: "RS201",
+ category: "remote-model-or-dataset-code",
+ severity: "high",
+ scope: (p) => isPythonScope(p) || (!isContentExempt(p) && /\.(ya?ml|json)$/i.test(p)),
+ pattern: /\btrust_remote_code\s*[=:]\s*(True|true)\b/,
+ reason:
+ "trust_remote_code=True tells a Hugging Face-style loader (from_pretrained, load_dataset, pipeline, and similar) to download and execute custom Python code shipped alongside the model or dataset repository, outside the library's own vetted code paths. This single pattern covers the task's three related bullets (the flag itself, a load_dataset call carrying it, and a from_pretrained call carrying it): all three are the same underlying keyword argument.",
+ reviewer_guidance:
+ "Confirm the model or dataset source is one you trust to ship executable code, beyond trusting it to ship data. Pin to a specific revision or commit hash rather than a mutable branch or tag when this flag is enabled.",
+ limitation: "Does not catch remote-code execution enabled through a differently-named or wrapped flag.",
+ },
+ {
+ id: "RS203",
+ category: "remote-model-or-dataset-code",
+ severity: "medium",
+ scope: isPythonScope,
+ fileTest: (lines) => {
+ const downloadRe = /\b(requests\.get\(|urlretrieve\(|hf_hub_download\()/;
+ const execRe = /\b(exec\(|eval\(|os\.system\(|subprocess\.)/;
+ const hasDownload = lines.some((l) => downloadRe.test(stripPythonSameLineNoise(l.text)));
+ if (!hasDownload) return [];
+ const execLine = lines.find((l) => execRe.test(stripPythonSameLineNoise(l.text)));
+ return execLine ? [execLine] : [];
+ },
+ reason: "This file's added lines include both a network download call and a code-execution call. Downloading and then executing model, dataset, or pipeline content without a validation step in between is a remote-code-execution path.",
+ reviewer_guidance: "Confirm there is a validation step (a checksum, a signature, a schema check) between the download and the execution, or that the execution call operates on something other than the downloaded content.",
+ limitation: "File-level co-occurrence heuristic: does not confirm the downloaded content is actually what gets executed, only that both kinds of call appear among the same file's added lines.",
+ },
+
+ // ---- RS3xx: install-from-network ----
+ {
+ id: "RS301",
+ category: "install-from-network",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bcurl\b[^|\n]*\|\s*(sudo\s+)?bash\b/,
+ reason:
+ "Pipes the output of a network fetch directly into a shell for execution. There is no integrity check between download and execution: a compromised server, a MITM, or a redirected URL changes what actually runs, with no diff or review step.",
+ reviewer_guidance:
+ "Download to a file first, verify a checksum or signature, then execute. If this is a package manager's documented install method, prefer a pinned, hash-verified installer or a registered package instead.",
+ limitation: "Line-local pattern; a curl-to-file followed by execution on a later line is not caught by this rule (see RS308 for the related chmod-then-execute variant, which shares the same gap for arbitrarily separated steps).",
+ },
+ {
+ id: "RS302",
+ category: "install-from-network",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bcurl\b[^|\n]*\|\s*(sudo\s+)?sh\b/,
+ reason: "Same risk as RS301 with sh instead of bash: no integrity check between download and execution.",
+ reviewer_guidance: "Download to a file first, verify a checksum or signature, then execute.",
+ limitation: "Line-local pattern; a two-step download-then-execute form is not caught.",
+ },
+ {
+ id: "RS303",
+ category: "install-from-network",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bwget\b[^|\n]*\|\s*(sudo\s+)?bash\b/,
+ reason: "Same risk as RS301 with wget instead of curl: no integrity check between download and execution.",
+ reviewer_guidance: "Download to a file first, verify a checksum or signature, then execute.",
+ limitation: "Line-local pattern; a two-step download-then-execute form is not caught.",
+ },
+ {
+ id: "RS304",
+ category: "install-from-network",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bwget\b[^|\n]*\|\s*(sudo\s+)?sh\b/,
+ reason: "Same risk as RS301 with wget and sh: no integrity check between download and execution.",
+ reviewer_guidance: "Download to a file first, verify a checksum or signature, then execute.",
+ limitation: "Line-local pattern; a two-step download-then-execute form is not caught.",
+ },
+ {
+ id: "RS305",
+ category: "install-from-network",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bbash\s+<\(\s*curl\b/,
+ reason: "Process substitution feeds a live network fetch straight into a new bash process. Same integrity gap as a curl-pipe-bash, different syntax.",
+ reviewer_guidance: "Download to a file first, verify a checksum or signature, then execute.",
+ limitation: "Detects the curl form of this pattern only, not wget or other fetch tools used with process substitution.",
+ },
+ {
+ id: "RS306",
+ category: "install-from-network",
+ severity: "medium",
+ scope: isBroadScope,
+ pattern: /\bnpm\s+i(nstall)?\s+[^\s]*https?:\/\//,
+ reason: "Installs an npm package directly from an http(s) URL instead of the registry, bypassing package-integrity and provenance checks the registry provides.",
+ reviewer_guidance: "Prefer a registry-published, version-pinned dependency. If a URL install is genuinely required, pin to a specific commit and confirm the source is trusted.",
+ limitation: "Detects the literal npm install/npm i invocation with an inline URL; does not catch a URL placed in package.json and installed by a separate, unrelated npm install call.",
+ },
+ {
+ id: "RS307",
+ category: "install-from-network",
+ severity: "medium",
+ scope: isBroadScope,
+ test: (line) => /\bpip\s+install\b/.test(line) && /(git\+|https?:\/\/)/.test(line) && !/@[0-9a-fA-F]{7,40}\b/.test(line),
+ reason: "Installs a Python package from a git or http(s) source without pinning to a specific commit, so the resolved content can change between installs with no version-controlled record of what changed.",
+ reviewer_guidance: "Pin to a specific commit hash with @, or prefer a published, version-pinned package from PyPI.",
+ limitation: "Pin detection looks for a short or full hex commit hash after @; a branch or tag name that happens to be hex-shaped could be miscounted as pinned, and a real tag pin (@v1.2.3) is not recognized as pinned by this heuristic.",
+ },
+ {
+ id: "RS308",
+ category: "install-from-network",
+ severity: "medium",
+ scope: isBroadScope,
+ fileTest: (lines) => {
+ const chmodRe = /\bchmod\s+\+x\s+(\S+)/;
+ let chmodIdx = -1;
+ let target = null;
+ for (let i = 0; i < lines.length; i++) {
+ const m = lines[i].text.match(chmodRe);
+ if (m) {
+ chmodIdx = i;
+ target = m[1];
+ break;
+ }
+ }
+ if (target == null) return [];
+ for (let i = chmodIdx + 1; i < lines.length; i++) {
+ if (lines[i].text.includes(target)) return [lines[i]];
+ }
+ return [];
+ },
+ reason: "This file's added lines mark a path executable (chmod +x) and later reference that same path again, a pattern consistent with downloading a file and then running it.",
+ reviewer_guidance: "Confirm the file made executable comes from a trusted, ideally pinned and verified source before it runs.",
+ limitation: "File-level substring heuristic: does not confirm the file was actually downloaded, or that the later reference is an execution rather than an unrelated mention of the same path.",
+ },
+
+ // ---- RS4xx: GitHub Actions ----
+ {
+ id: "RS401",
+ category: "workflow-trigger-risk",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /\bpull_request_target\b/,
+ reason:
+ "This workflow adds the pull_request_target trigger, which runs with access to repository secrets and the base branch's permissions even when triggered by a fork PR. Combined with checking out and running the PR's own head content, this is a well-documented path to secret exfiltration or write-access abuse.",
+ reviewer_guidance:
+ "Confirm the workflow does not check out the PR head SHA (or run any script from the PR head) while this trigger is active. Commenting on or labeling a PR does not require checking out untrusted code.",
+ limitation:
+ "Flags the trigger unconditionally; it cannot itself confirm whether the workflow also checks out and executes the PR head, which is the actual exploit precondition. Treat this as worth a close read, not confirmed exploitable.",
+ },
+ {
+ id: "RS402",
+ category: "workflow-trigger-risk",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /\bworkflow_run\b/,
+ reason: "The workflow_run trigger can run with the triggering workflow's own elevated permissions and secrets context, depending on configuration.",
+ reviewer_guidance: "Confirm the triggered workflow does not check out and run untrusted content from the triggering event with elevated permissions.",
+ limitation: "Flags the trigger unconditionally; does not evaluate the permissions block actually granted to the triggered job.",
+ },
+ {
+ id: "RS411",
+ category: "workflow-permission-expansion",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /^\s*permissions\s*:\s*write-all\s*$/,
+ reason: "Grants write-all, the broadest possible GITHUB_TOKEN permission set for this workflow or job, in place of the principle of least privilege.",
+ reviewer_guidance: "Replace with an explicit per-scope block naming only the permissions actually used (for example contents: read, pull-requests: write).",
+ limitation: "Detects the shorthand write-all scalar form only; does not evaluate whether the equivalent explicit per-key grants (RS412-415) add up to the same effective breadth.",
+ },
+ {
+ id: "RS412",
+ category: "workflow-permission-expansion",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /^\s*contents\s*:\s*write\b/,
+ reason: "Grants push access to repository contents for this workflow or job.",
+ reviewer_guidance: "Confirm the workflow genuinely needs to push or modify repository content, and scope this to the minimum job that needs it.",
+ limitation: "Structural line-anchor only; cannot verify the permission is actually consumed by a step that writes.",
+ },
+ {
+ id: "RS413",
+ category: "workflow-permission-expansion",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /^\s*id-token\s*:\s*write\b/,
+ reason: "Grants the ability to mint an OIDC token, commonly used to exchange for short-lived cloud credentials. A new grant here is a new path to cloud access.",
+ reviewer_guidance: "Confirm the workflow uses this to authenticate to a specific, intended cloud provider action, and that the trigger cannot run with attacker-controlled input reaching it.",
+ limitation: "Structural line-anchor only; cannot verify which step actually consumes the token.",
+ },
+ {
+ id: "RS414",
+ category: "workflow-permission-expansion",
+ severity: "high",
+ scope: isWorkflowScope,
+ pattern: /^\s*actions\s*:\s*write\b/,
+ reason: "Grants control over workflow runs themselves (cancelling, re-running, approving). A broad capability rarely needed outside meta-automation workflows.",
+ reviewer_guidance: "Confirm the workflow's purpose genuinely requires controlling other workflow runs.",
+ limitation: "Structural line-anchor only; cannot verify actual usage.",
+ },
+ {
+ id: "RS415",
+ category: "workflow-permission-expansion",
+ severity: "medium",
+ scope: isWorkflowScope,
+ pattern: /^\s*security-events\s*:\s*write\b/,
+ reason: "Adds security-events: write. This is commonly needed for SARIF and code-scanning upload steps, so it is scored lower than the other permission grants, but it is still a capability expansion worth a quick confirmation.",
+ reviewer_guidance: "Confirm the workflow actually uploads to code scanning (for example via github/codeql-action/upload-sarif) and does not use this scope for anything broader.",
+ limitation: "Structural line-anchor only; cannot verify the permission is actually consumed by an upload step in the same workflow.",
+ },
+ {
+ id: "RS421",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isWorkflowScope,
+ pattern: /\bsecrets\.[A-Za-z_][A-Za-z0-9_]*\b/,
+ reason:
+ "This line references a repository or organization secret that was not previously used here. Every new reference is a new place that secret's value can leak (via a log, a malicious script step, or a compromised third-party action) if the step isn't trustworthy.",
+ reviewer_guidance:
+ "Confirm the step consuming this secret is a pinned, trusted action or a repo-owned script, and that the workflow's trigger can't run with attacker-controlled input reaching this step (see RS401/RS402).",
+ limitation:
+ "Matches by name only, including the ambient secrets.GITHUB_TOKEN, and does not know whether the reference sits inside a conditional that never actually runs on an untrusted trigger.",
+ },
+ {
+ id: "RS422",
+ category: "workflow-permission-expansion",
+ severity: "medium",
+ scope: isWorkflowScope,
+ pattern: /^\s*runs-on\s*:.*self-hosted/,
+ reason: "Runs this job on a self-hosted runner instead of a GitHub-hosted one. A self-hosted runner is a persistent machine under the repository owner's control, a materially larger blast radius if a workflow step is compromised.",
+ reviewer_guidance: "Confirm the runner is genuinely required (hardware access, network-restricted environment) and is not reachable by an untrusted trigger such as pull_request_target from a fork.",
+ limitation: "Structural line match only; does not evaluate the runner's own isolation or the trigger that can reach this job.",
+ },
+ {
+ id: "RS423",
+ category: "workflow-permission-expansion",
+ severity: "medium",
+ scope: isWorkflowScope,
+ test: (line) => {
+ const m = line.match(/^\s*(?:-\s*)?uses\s*:\s*([^\/\s]+)\/[^@\s]+@([^\s]+)\s*$/);
+ if (!m) return false;
+ const org = m[1];
+ const ref = m[2];
+ if (org === "actions" || org === "github") return false;
+ return !/^[0-9a-f]{40}$/i.test(ref);
+ },
+ reason: "This third-party action is pinned to a mutable tag or branch rather than a commit SHA. The action's maintainer (or anyone who compromises their account) can change what code that tag points to after this workflow starts trusting it.",
+ reviewer_guidance: "Pin to a full 40-character commit SHA, or vendor the action into this repository if it's small and stable.",
+ limitation: "Exempts the actions and github publisher organizations as a pinned-and-official carve-out; does not verify any other organization's actual trustworthiness or maintenance practices.",
+ },
+
+ // ---- RS5xx: privileged-container / kubernetes-privilege / docker-socket-access / sandbox-weakening ----
+ {
+ id: "RS501",
+ category: "privileged-container",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /--privileged\b/,
+ reason: "Grants the container full access to the host's devices and kernel capabilities, effectively disabling container isolation. A compromised process inside the container can usually escalate to the host.",
+ reviewer_guidance: "Replace with specific --cap-add flags for only the capabilities actually needed. --privileged is very rarely required outside Docker-in-Docker or hardware-passthrough use cases.",
+ limitation: "Textual match only; cannot confirm whether other settings partially mitigate the grant.",
+ },
+ {
+ id: "RS502",
+ category: "privileged-container",
+ severity: "high",
+ scope: (p) => isDockerComposeScope(p) || isWorkflowScope(p),
+ pattern: /^\s*privileged\s*:\s*true\s*$/,
+ reason: "Same risk as RS501 (--privileged), expressed as a compose or workflow-service YAML key: full host device and kernel-capability access, effectively disabling container isolation.",
+ reviewer_guidance: "Replace with specific capability grants for only what's needed.",
+ limitation: "Structural line-anchor only; cannot confirm whether other settings partially mitigate the grant.",
+ },
+ {
+ id: "RS511",
+ category: "kubernetes-privilege",
+ severity: "high",
+ scope: isK8sScope,
+ pattern: /^\s*hostPath\s*:/,
+ reason: "Mounts a path from the host node's filesystem into the pod. This can expose host secrets, container-runtime sockets, or let a compromised pod write to the host filesystem, depending on the path mounted.",
+ reviewer_guidance: "Confirm the mounted host path is narrowly scoped and read-only where possible (readOnly: true), and that it is not /, /etc, /var/run, or another sensitive root.",
+ limitation: "Flags the volume-type key only; does not parse the actual path: value to grade risk by which host directory is mounted.",
+ },
+ {
+ id: "RS512",
+ category: "kubernetes-privilege",
+ severity: "high",
+ scope: isK8sScope,
+ pattern: /^\s*(hostNetwork|hostPID|hostIPC)\s*:\s*true\s*$/,
+ reason: "Shares the host's network, process, or IPC namespace with the pod, letting a compromised container see or interact with processes and network traffic outside its own isolation boundary.",
+ reviewer_guidance: "Confirm this is genuinely required (typically only for node-level monitoring or networking add-ons) rather than a convenience setting.",
+ limitation: "Structural line-anchor only; does not evaluate the workload's other isolation settings.",
+ },
+ {
+ id: "RS513",
+ category: "kubernetes-privilege",
+ severity: "high",
+ scope: isDockerComposeScope,
+ pattern: /^\s*(network_mode|pid|ipc)\s*:\s*["']?host["']?\s*$/,
+ reason: "Shares the host's network, process, or IPC namespace with the container, the compose-file equivalent of RS512's Kubernetes-native settings.",
+ reviewer_guidance: "Confirm this is genuinely required rather than a convenience setting; most services do not need host-namespace sharing.",
+ limitation: "Structural line-anchor only; does not evaluate the service's other isolation settings.",
+ },
+ {
+ id: "RS521",
+ category: "docker-socket-access",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\/var\/run\/docker\.sock\b/,
+ reason: "Exposes the Docker socket inside a container. Anything with access to this socket can control the host's Docker daemon, which is equivalent to root on the host in most configurations.",
+ reviewer_guidance: "Confirm this is genuinely required (a CI runner or a monitoring tool that manages containers) and that the container's own access is otherwise tightly controlled.",
+ limitation: "Textual match only; does not distinguish a read-only mount from a read-write one, though the socket grants control either way in most Docker configurations.",
+ },
+ {
+ id: "RS531",
+ category: "sandbox-weakening",
+ severity: "high",
+ scope: isK8sScope,
+ pattern: /^\s*allowPrivilegeEscalation\s*:\s*true\s*$/,
+ reason: "Allows a process in the container to gain more privileges than its parent process, undoing a default Kubernetes sandboxing protection.",
+ reviewer_guidance: "Set this to false unless a specific, reviewed reason requires privilege escalation inside the container.",
+ limitation: "Structural line-anchor only.",
+ },
+ {
+ id: "RS532",
+ category: "sandbox-weakening",
+ severity: "high",
+ scope: isK8sScope,
+ pattern: /^\s*runAsUser\s*:\s*0\s*$/,
+ reason: "Runs the container process as root (UID 0) inside the container, widening the blast radius of a container-escape vulnerability.",
+ reviewer_guidance: "Run as a non-root UID unless the workload has a specific, reviewed reason to need root inside the container.",
+ limitation: "Structural line-anchor only; does not evaluate whether the container image itself defaults to a non-root user regardless of this setting.",
+ },
+ {
+ id: "RS533",
+ category: "sandbox-weakening",
+ severity: "high",
+ scope: (p) => isK8sScope(p) || isDockerComposeScope(p),
+ test: (line) =>
+ /^\s*-\s*["']?(SYS_ADMIN|NET_ADMIN)["']?\s*$/.test(line) || /\b(cap_add|add)\s*:.*\b(SYS_ADMIN|NET_ADMIN)\b/.test(line),
+ reason: "Adds the SYS_ADMIN or NET_ADMIN Linux capability, both broad enough to enable container-escape techniques in combination with other settings.",
+ reviewer_guidance: "Confirm the workload genuinely needs this specific capability and cannot use a narrower one.",
+ limitation: "Matches a bare capability list item or an inline add list; does not confirm the surrounding key several lines above a bare list item is actually capabilities: or cap_add:, so a coincidental list entry with this exact value elsewhere would also match.",
+ },
+ {
+ id: "RS534",
+ category: "sandbox-weakening",
+ severity: "high",
+ scope: isK8sScope,
+ fileTest: (lines) => {
+ const hasProfile = lines.some((l) => /\bseccompProfile\b/.test(l.text));
+ if (!hasProfile) return [];
+ const unconfinedLine = lines.find((l) => /\bUnconfined\b/.test(l.text));
+ return unconfinedLine ? [unconfinedLine] : [];
+ },
+ reason: "Sets the seccomp profile to Unconfined, disabling the syscall filtering Kubernetes applies by default and widening the kernel surface a compromised container can reach.",
+ reviewer_guidance: "Use the default RuntimeDefault profile unless a specific, reviewed workload requirement needs an unconfined syscall surface.",
+ limitation: "File-level co-occurrence heuristic: confirms seccompProfile and Unconfined both appear among the file's added lines, not that they belong to the same block.",
+ },
+ {
+ id: "RS535",
+ category: "sandbox-weakening",
+ severity: "high",
+ scope: isK8sScope,
+ pattern: /apparmor\S*\s*:\s*["']?unconfined["']?/i,
+ reason: "Sets an AppArmor annotation to unconfined, disabling the mandatory access control profile Kubernetes would otherwise apply and widening what a compromised container process can do on the host.",
+ reviewer_guidance: "Use the default or a specific named profile unless a reviewed workload requirement needs to run unconfined.",
+ limitation: "Textual match on the annotation value only; does not evaluate whether an unconfined profile is a documented, accepted exception for this workload.",
+ },
+
+ // ---- RS6xx: credential-surface-expansion (cloud) ----
+ {
+ id: "RS601",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /\bAWS_ACCESS_KEY_ID\b/,
+ reason: "References the AWS access key ID environment variable. A new reference is a new place this credential can leak if the surrounding code or step isn't trustworthy.",
+ reviewer_guidance: "Prefer short-lived credentials via OIDC federation over long-lived access keys where the platform supports it. Confirm the value's scope and where it flows.",
+ limitation: "Matches the identifier name only, including inside a string literal (this rule intentionally skips comment and string stripping, since a credential identifier this often appears as a quoted lookup key). Does not evaluate how the value is used afterward.",
+ },
+ {
+ id: "RS602",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /\bAWS_SECRET_ACCESS_KEY\b/,
+ reason: "References the AWS secret access key environment variable, the counterpart to RS601.",
+ reviewer_guidance: "Prefer short-lived credentials via OIDC federation over long-lived secret keys where the platform supports it.",
+ limitation: "Matches the identifier name only, including inside a string literal or comment. Does not evaluate how the value is used afterward.",
+ },
+ {
+ id: "RS603",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /\bGOOGLE_APPLICATION_CREDENTIALS\b/,
+ reason: "References the Google Cloud application-default-credentials environment variable, typically pointing at a service-account key file.",
+ reviewer_guidance: "Prefer workload identity federation over a downloaded service-account key file where the platform supports it.",
+ limitation: "Matches the identifier name only, including inside a string literal or comment. Does not evaluate the key file's own permissions or scope.",
+ },
+ {
+ id: "RS604",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /\bAZURE_CLIENT_SECRET\b/,
+ reason: "References the Azure service-principal client-secret environment variable.",
+ reviewer_guidance: "Prefer a managed identity or workload identity federation over a long-lived client secret where the platform supports it.",
+ limitation: "Matches the identifier name only, including inside a string literal or comment. Does not evaluate how the value is used afterward.",
+ },
+ {
+ id: "RS605",
+ category: "credential-surface-expansion",
+ severity: "low",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /[\w-]*(service[-_]?account[\w-]*|[\w-]*-key)\.json\b/i,
+ reason: "References a file path shaped like a cloud service-account key file. If this file is committed or downloaded from an untrusted location, it is a credential-exposure path.",
+ reviewer_guidance: "Confirm this path is never committed to the repository and is fetched, at runtime, from a secret store rather than a fixed URL.",
+ limitation: "Matches by filename shape only, including inside a string literal (most such paths are quoted). A JSON file with an unrelated purpose that happens to match the naming pattern will also be flagged.",
+ },
+ {
+ id: "RS606",
+ category: "credential-surface-expansion",
+ severity: "medium",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /\bKUBECONFIG\b|\.kube\/config\b/,
+ reason: "References a Kubernetes config file or the KUBECONFIG environment variable pointing at one. A kubeconfig typically carries cluster-admin-equivalent credentials.",
+ reviewer_guidance: "Confirm the config is scoped to the minimum RBAC role needed and is not committed to the repository.",
+ limitation: "Matches the identifier or path only, including inside a string literal. Does not evaluate the referenced config's actual permission scope.",
+ },
+ {
+ id: "RS607",
+ category: "credential-surface-expansion",
+ severity: "high",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /169\.254\.169\.254/,
+ reason: "References the cloud instance metadata service address. Code that reaches this address can often retrieve the host's own cloud credentials, a common path for credential theft from a compromised application (the class of issue behind several well-known cloud SSRF incidents).",
+ reviewer_guidance: "Confirm this call is a legitimate, narrowly-scoped use of the metadata service (for example an official cloud SDK's own credential-provider chain), not a new, hand-rolled request path.",
+ limitation: "Textual match on the literal address only, including inside a string literal (a metadata-service address is almost always part of a URL string). Does not evaluate who or what can trigger the code path that reaches it.",
+ },
+ {
+ id: "RS608",
+ category: "credential-surface-expansion",
+ severity: "high",
+ scope: isBroadScope,
+ raw: true,
+ pattern: /["']?(Action|Resource)["']?\s*:\s*\[?\s*["']\*["']/,
+ reason: "Grants a wildcard IAM action or resource. A policy this broad usually grants far more than the workload actually needs, and widens the blast radius of any credential compromise built on this policy.",
+ reviewer_guidance: "Replace with the specific actions and resource ARNs the workload actually uses.",
+ limitation: "Matches the literal wildcard key/value shape only; does not evaluate the surrounding policy's Effect (an explicit Deny with a wildcard is not a risk, and would still be flagged here).",
+ },
+
+ // ---- RS7xx: network-egress-expansion / tls-verification-disabled ----
+ {
+ id: "RS701",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: (p) => isJsTsScope(p) || (!isContentExempt(p) && /\.json$/i.test(p)),
+ pattern: /rejectUnauthorized\s*:\s*false\b/,
+ reason: "Disables TLS certificate verification for this connection, making it vulnerable to machine-in-the-middle interception of anything sent over it, including credentials and tokens.",
+ reviewer_guidance: "Fix the underlying certificate problem (add the CA to the trust store, fix a hostname mismatch) instead of disabling verification. If this is genuinely a local development-only code path, confirm it cannot run in production.",
+ limitation: "Detects the literal key/value pair. Does not evaluate surrounding conditionals that might scope it to a non-production code path.",
+ },
+ {
+ id: "RS702",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*['"]?0['"]?/,
+ reason: "Sets NODE_TLS_REJECT_UNAUTHORIZED=0, disabling TLS certificate verification process-wide for every Node.js TLS connection this process makes, beyond the one call site that added it.",
+ reviewer_guidance: "Fix the underlying certificate problem rather than disabling verification globally. This setting should never reach a production or CI environment.",
+ limitation: "Textual match on the assignment only; does not evaluate whether the assignment is guarded by an environment check.",
+ },
+ {
+ id: "RS703",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: isPythonScope,
+ fileTest: (lines) => {
+ const verifyFalseRe = /\bverify\s*=\s*False\b/;
+ const httpCallRe = /\b(requests|session)\./;
+ const matches = [];
+ for (let i = 0; i < lines.length; i++) {
+ const stripped = stripPythonSameLineNoise(lines[i].text);
+ if (!verifyFalseRe.test(stripped)) continue;
+ const nearby = [lines[i - 1], lines[i], lines[i + 1]].filter(Boolean);
+ if (nearby.some((l) => httpCallRe.test(stripPythonSameLineNoise(l.text)))) matches.push(lines[i]);
+ }
+ return matches;
+ },
+ reason: "Disables TLS certificate verification on a requests/session call, near an added verify=False. Machine-in-the-middle interception becomes possible for anything sent over this connection.",
+ reviewer_guidance: "Fix the underlying certificate problem instead of disabling verification. If this is genuinely a local development-only code path, confirm it cannot run in production.",
+ limitation: "Co-occurrence heuristic scoped to the same and adjacent added lines; a requests/session call several lines away from its verify=False argument (a common multi-line call-signature style) is not detected, and an unrelated verify=False on an unrelated object would still be flagged if a requests/session call happens to sit on an adjacent added line.",
+ },
+ {
+ id: "RS704",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bcurl\b[^\n]*(\s-k\b|--insecure\b)/,
+ reason: "Passes -k/--insecure to curl, disabling TLS certificate verification for the request.",
+ reviewer_guidance: "Fix the underlying certificate problem instead of disabling verification.",
+ limitation: "Textual match only; does not evaluate whether the flag is scoped to a local development or test-only invocation.",
+ },
+ {
+ id: "RS705",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bwget\b[^\n]*--no-check-certificate\b/,
+ reason: "Passes --no-check-certificate to wget, disabling TLS certificate verification for the request.",
+ reviewer_guidance: "Fix the underlying certificate problem instead of disabling verification.",
+ limitation: "Textual match only; does not evaluate the invocation's context.",
+ },
+ {
+ id: "RS706",
+ category: "tls-verification-disabled",
+ severity: "high",
+ scope: isBroadScope,
+ pattern: /\bstrict[_-]ssl\s*[:=]\s*false\b/i,
+ reason: "Disables strict SSL/TLS certificate checking for this tool (commonly npm or a similar package manager config), the same class of risk as the other TLS-disabling rules in this catalog.",
+ reviewer_guidance: "Fix the underlying certificate problem instead of disabling verification.",
+ limitation: "Textual match only; does not evaluate which tool reads this setting or whether the surrounding config is scoped to a non-production install step.",
+ },
+ {
+ id: "RS707",
+ category: "network-egress-expansion",
+ severity: "medium",
+ scope: (p) => isTerraformScope(p) || isK8sScope(p),
+ fileTest: (lines) => {
+ const wildcardCidrRe = /0\.0\.0\.0\/0/;
+ const egressWordRe = /\b(egress|outbound)\b/i;
+ const matches = [];
+ for (let i = 0; i < lines.length; i++) {
+ if (!wildcardCidrRe.test(lines[i].text)) continue;
+ const nearby = [lines[i - 1], lines[i], lines[i + 1]].filter(Boolean);
+ if (nearby.some((l) => egressWordRe.test(l.text))) matches.push(lines[i]);
+ }
+ return matches;
+ },
+ reason: "This infrastructure config allows outbound traffic to any address (0.0.0.0/0) near an egress or outbound rule. A broad egress allowance makes data exfiltration from a compromised workload easier and harder to contain.",
+ reviewer_guidance: "Scope egress to the specific destinations the workload actually needs to reach.",
+ limitation: "Co-occurrence heuristic on nearby lines only, hedged deliberately per the task's own \"if detectable\" framing: a wildcard CIDR used for an unrelated, legitimately broad purpose (a public ingress rule, for instance) sitting near the word egress or outbound could still be flagged.",
+ },
+
+ // ---- RS8xx: protected-security-config (path-based, content-independent) ----
+ {
+ id: "RS801",
+ category: "protected-security-config",
+ severity: "medium",
+ pathOnly: true,
+ reason: "This file is on the list of security-sensitive or high-leverage paths (workflows, the shipped Action manifest, this scanner and its rules, security policy, code ownership, container and infrastructure manifests, and Modonome's own governance state). Changes here deserve a closer look regardless of what the diff itself contains.",
+ reviewer_guidance: "Confirm the change to this path is intentional and understood, independent of any other finding on this diff.",
+ limitation: "Fires on the path alone, including a pure deletion or a purely cosmetic edit; it carries no information about what actually changed inside the file.",
+ },
+];
+
+export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));
diff --git a/scripts/risk-surface-guard.mjs b/scripts/risk-surface-guard.mjs
new file mode 100644
index 00000000..79a69bf7
--- /dev/null
+++ b/scripts/risk-surface-guard.mjs
@@ -0,0 +1,355 @@
+#!/usr/bin/env node
+// Risk Surface Guard (ADR-047). Scans a pull request diff for changes that expand
+// execution, credential, workflow, dataset/model-loading, container, network, or
+// sandbox risk. Deterministic, line-based, and diff-scoped, in the same family as the
+// anti-gaming ratchet (scripts/guard-ratchet.mjs) but a fully separate script and rule
+// set: a different threat model (blast radius and infrastructure exposure) from the
+// ratchet's test-gate integrity focus. This does not detect live infrastructure
+// compromise and does not replace SAST, secret scanning, dependency review, cloud
+// security posture management, sandboxing, or human review. It flags repository
+// changes that expand risk surface and helps a reviewer notice them before merge.
+//
+// Usage:
+// node scripts/risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json]
+// node scripts/risk-surface-guard.mjs --diff [--mode warn|fail] [--sarif] [--json]
+// node scripts/risk-surface-guard.mjs --staged [--mode warn|fail] [--sarif] [--json]
+//
+// Exit codes: 0 no findings, or warn mode regardless of findings; 1 fail mode with a
+// high or critical finding; 2 usage or internal error.
+import { spawnSync } from "node:child_process";
+import { readFileSync } from "node:fs";
+import { fileURLToPath } from "node:url";
+import { dirname, join } from "node:path";
+import { formatMessage, loadMessageOverrides } from "./lib/messages.mjs";
+import { flagValue } from "./lib/cli-args.mjs";
+import { RULES, RULES_BY_ID, matchesProtectedPath, stripForScope, redactMatchedText } from "./lib/risk-surface-rules.mjs";
+
+const here = dirname(fileURLToPath(import.meta.url));
+const root = join(here, "..");
+const overrides = loadMessageOverrides(join(root, ".modonome"));
+
+// Same allowlist guard-ratchet uses for its base-ref argument: ref names already
+// forbid spaces and most shell metacharacters, so this keeps the value to the safe
+// subset plus the "..."-range syntax this tool builds from it.
+const SAFE_REF = /^[A-Za-z0-9._/-]+$/;
+
+function normalizeLF(s) {
+ return s.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
+}
+
+// ---------------------------------------------------------------------------
+// Flag parsing. --mode, --sarif, --json, --format=json/sarif, and the
+// positional base-ref (or --diff / --staged) compose in any order.
+// ---------------------------------------------------------------------------
+
+export function stripFlags(argv) {
+ const mode = flagValue(argv, "--mode");
+ const format = argv.includes("--sarif") || argv.includes("--format=sarif")
+ ? "sarif"
+ : argv.includes("--json") || argv.includes("--format=json")
+ ? "json"
+ : "human";
+ const positional = [];
+ for (let i = 0; i < argv.length; i++) {
+ const a = argv[i];
+ if (a === "--mode") {
+ i++; // also skip its value
+ continue;
+ }
+ if (/^--(json|sarif|format=(json|sarif))$/.test(a)) continue;
+ positional.push(a);
+ }
+ return { mode, format, positional };
+}
+
+// ---------------------------------------------------------------------------
+// Diff acquisition (--diff / --staged / ), mirroring
+// guard-ratchet.mjs's own getDiff() shape and safety properties. Duplicated
+// rather than shared: guard-ratchet.mjs is base-pinned and out of this
+// feature's edit set, and the logic is small.
+// ---------------------------------------------------------------------------
+
+function getDiff(positional) {
+ const arg = positional[0];
+ if (arg === "--diff") {
+ const path = positional[1];
+ if (!path) {
+ throw new UsageError(formatMessage("gate.risk-surface-guard.usage-error", {}, overrides).message);
+ }
+ return normalizeLF(readFileSync(path, "utf8"));
+ }
+ if (arg === "--staged") {
+ const result = spawnSync("git", ["diff", "--cached"], { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
+ if (result.error) throw result.error;
+ if (result.status !== 0) {
+ throw new Error(result.stderr || formatMessage("gate.risk-surface-guard.staged-diff-failed", {}, overrides).message);
+ }
+ return normalizeLF(result.stdout);
+ }
+ const base = arg || "origin/main";
+ if (!SAFE_REF.test(base)) {
+ throw new UsageError(formatMessage("gate.risk-surface-guard.unsafe-ref", { ref: base }, overrides).message);
+ }
+ // Git args are always an array, never a shell string, so the ref can never be
+ // interpreted as a command.
+ const result = spawnSync("git", ["diff", `${base}...HEAD`], { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
+ if (result.error) throw result.error;
+ if (result.status !== 0) {
+ throw new Error(result.stderr || formatMessage("gate.risk-surface-guard.diff-failed", { base }, overrides).message);
+ }
+ return normalizeLF(result.stdout);
+}
+
+class UsageError extends Error {}
+
+// ---------------------------------------------------------------------------
+// Diff parsing. Like guard-ratchet's parser, but additionally tracks a running
+// new-file line number from @@ hunk headers, so findings can carry a real line
+// instead of a hardcoded one. Added and context lines advance the counter;
+// removed lines do not.
+// ---------------------------------------------------------------------------
+
+export function parseDiff(diffText) {
+ const files = {};
+ let current = null;
+ let preimage = null;
+ let newLineNum = 0;
+
+ for (const line of diffText.split("\n")) {
+ const minusMatch = line.match(/^--- a\/(.+)$/);
+ if (minusMatch) {
+ preimage = minusMatch[1];
+ continue;
+ }
+ const plusMatch = line.match(/^\+\+\+ (.+)$/);
+ if (plusMatch) {
+ const target = plusMatch[1];
+ current = target === "/dev/null" ? preimage : target.startsWith("b/") ? target.slice(2) : target;
+ if (current && !files[current]) files[current] = { added: [], removed: [] };
+ newLineNum = 0;
+ continue;
+ }
+ const hunkMatch = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
+ if (hunkMatch) {
+ newLineNum = parseInt(hunkMatch[1], 10);
+ continue;
+ }
+ if (!current) continue;
+ if (line.startsWith("+")) {
+ files[current].added.push({ text: line.slice(1), line: newLineNum });
+ newLineNum++;
+ continue;
+ }
+ if (line.startsWith("-")) {
+ files[current].removed.push(line.slice(1));
+ continue;
+ }
+ if (line.startsWith(" ") || line === "") {
+ newLineNum++;
+ }
+ }
+ return files;
+}
+
+// ---------------------------------------------------------------------------
+// Scanning
+// ---------------------------------------------------------------------------
+
+function makeFinding(rule, file, line, rawText) {
+ return {
+ id: rule.id,
+ severity: rule.severity,
+ category: rule.category,
+ file,
+ line: line || null,
+ matched_text: redactMatchedText(rawText),
+ reason: rule.reason,
+ reviewer_guidance: rule.reviewer_guidance,
+ limitation: rule.limitation,
+ };
+}
+
+export function scanFile(filePath, addedLines) {
+ const findings = [];
+ for (const rule of RULES) {
+ if (rule.pathOnly) continue;
+ if (!rule.scope(filePath)) continue;
+ if (rule.fileTest) {
+ for (const m of rule.fileTest(addedLines, filePath)) {
+ findings.push(makeFinding(rule, filePath, m.line, m.text));
+ }
+ continue;
+ }
+ for (const lineRec of addedLines) {
+ const candidate = rule.raw ? lineRec.text : stripForScope(filePath, lineRec.text);
+ const isMatch = rule.pattern ? rule.pattern.test(candidate) : rule.test(candidate);
+ if (isMatch) findings.push(makeFinding(rule, filePath, lineRec.line, lineRec.text));
+ }
+ }
+ return findings;
+}
+
+const PATH_ONLY_RULE = RULES.find((r) => r.pathOnly);
+
+export function scanDiff(diffText) {
+ const files = parseDiff(diffText);
+ const findings = [];
+ for (const [filePath, { added }] of Object.entries(files)) {
+ findings.push(...scanFile(filePath, added));
+ }
+ if (PATH_ONLY_RULE) {
+ for (const filePath of Object.keys(files)) {
+ if (matchesProtectedPath(filePath)) {
+ findings.push(makeFinding(PATH_ONLY_RULE, filePath, null, filePath));
+ }
+ }
+ }
+ return { findings };
+}
+
+// ---------------------------------------------------------------------------
+// Exit code / result decision (pure, so scenarios 14-16 have a direct unit
+// test in addition to their CLI-spawn version).
+// ---------------------------------------------------------------------------
+
+function hasHighOrCritical(findings) {
+ return findings.some((f) => f.severity === "high" || f.severity === "critical");
+}
+
+export function decideExitCode(mode, findings) {
+ if (mode === "fail" && hasHighOrCritical(findings)) return 1;
+ return 0;
+}
+
+export function decideResult(mode, findings) {
+ if (findings.length === 0) return "pass";
+ if (mode === "fail" && hasHighOrCritical(findings)) return "fail";
+ return "warn";
+}
+
+export function severityToSarifLevel(severity) {
+ if (severity === "critical" || severity === "high") return "error";
+ if (severity === "medium") return "warning";
+ return "note";
+}
+
+// ---------------------------------------------------------------------------
+// Output formatting
+// ---------------------------------------------------------------------------
+
+function summaryMessage(mode, findings) {
+ if (findings.length === 0) return formatMessage("gate.risk-surface-guard.pass-summary", {}, overrides).message;
+ if (mode === "fail") {
+ if (hasHighOrCritical(findings)) {
+ return formatMessage("gate.risk-surface-guard.fail-block-summary", { count: findings.length }, overrides).message;
+ }
+ return formatMessage("gate.risk-surface-guard.fail-mode-below-threshold-summary", { count: findings.length }, overrides).message;
+ }
+ return formatMessage("gate.risk-surface-guard.warn-summary", { count: findings.length }, overrides).message;
+}
+
+export function formatHuman(findings, { mode }) {
+ const lines = ["Risk Surface Guard", "===================", `Mode: ${mode}`, ""];
+ for (const f of findings) {
+ lines.push(`[${f.severity.toUpperCase()}] ${f.id} ${f.category}`);
+ lines.push(` ${f.file}${f.line ? ":" + f.line : ""}`);
+ lines.push(` ${f.matched_text}`);
+ lines.push(` ${f.reason}`);
+ lines.push(` Reviewer guidance: ${f.reviewer_guidance}`);
+ lines.push(` Limitation: ${f.limitation}`);
+ lines.push("");
+ }
+ lines.push(summaryMessage(mode, findings));
+ return lines.join("\n");
+}
+
+export function emitJson(findings, { mode }) {
+ return JSON.stringify(
+ { tool: "modonome-risk-surface-guard", version: "1", result: decideResult(mode, findings), mode, findings },
+ null,
+ 2,
+ );
+}
+
+export function emitSarif(findings) {
+ const usedIds = [...new Set(findings.map((f) => f.id))];
+ const rules = usedIds.map((id) => {
+ const rule = RULES_BY_ID.get(id);
+ return {
+ id,
+ name: rule ? rule.category : id,
+ shortDescription: { text: rule ? rule.reason : id },
+ helpUri: `https://modonome.com/codes/${id}`,
+ };
+ });
+ const results = findings.map((f) => ({
+ ruleId: f.id,
+ level: severityToSarifLevel(f.severity),
+ message: { text: f.reason },
+ partialFingerprints: { modonomeRiskSurfaceGuardV1: `${f.id}:${f.file}:${f.line || 0}` },
+ locations: f.file
+ ? [{ physicalLocation: { artifactLocation: { uri: f.file }, region: { startLine: f.line || 1 } } }]
+ : [],
+ }));
+ return JSON.stringify(
+ {
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
+ version: "2.1.0",
+ runs: [
+ {
+ tool: { driver: { name: "Modonome Risk Surface Guard", informationUri: "https://modonome.com", rules } },
+ results,
+ },
+ ],
+ },
+ null,
+ 2,
+ );
+}
+
+// ---------------------------------------------------------------------------
+// CLI
+// ---------------------------------------------------------------------------
+
+function runCli() {
+ const { mode: rawMode, format, positional } = stripFlags(process.argv.slice(2));
+ const mode = rawMode || "warn";
+ if (mode !== "warn" && mode !== "fail") {
+ process.stderr.write(formatMessage("gate.risk-surface-guard.invalid-mode", { value: rawMode }, overrides).message + "\n");
+ process.exit(2);
+ }
+
+ let diffText;
+ try {
+ diffText = getDiff(positional);
+ } catch (e) {
+ if (e instanceof UsageError) {
+ process.stderr.write(e.message + "\n");
+ process.exit(2);
+ }
+ process.stderr.write(formatMessage("gate.risk-surface-guard.internal-error", { message: e.message }, overrides).message + "\n");
+ process.exit(2);
+ }
+
+ let findings;
+ try {
+ findings = scanDiff(diffText).findings;
+ } catch (e) {
+ process.stderr.write(formatMessage("gate.risk-surface-guard.internal-error", { message: e.message }, overrides).message + "\n");
+ process.exit(2);
+ }
+
+ if (format === "sarif") {
+ process.stdout.write(emitSarif(findings) + "\n");
+ } else if (format === "json") {
+ process.stdout.write(emitJson(findings, { mode }) + "\n");
+ } else {
+ process.stdout.write(formatHuman(findings, { mode }) + "\n");
+ }
+
+ process.exit(decideExitCode(mode, findings));
+}
+
+if (process.argv[1] === fileURLToPath(import.meta.url)) {
+ runCli();
+}
diff --git a/site/index.html b/site/index.html
index c338d2cb..2de48f93 100644
--- a/site/index.html
+++ b/site/index.html
@@ -797,7 +797,7 @@ readdirSync(dir).map((f) => join(dir, f));
+
+function run(diffPath, extraArgs = []) {
+ return spawnSync("node", [guard, "--diff", diffPath, ...extraArgs], { encoding: "utf8" });
+}
+
+function fixture(dir, name) {
+ return join(dir, name);
+}
+
+// ---------------------------------------------------------------------------
+// Pure-function unit tests
+// ---------------------------------------------------------------------------
+
+test("parseDiff tracks real new-file line numbers across a multi-hunk fixture", () => {
+ // Hunk 1 declares 3 new-file lines starting at 1: line one(1), added at 2(2),
+ // line two(3). Hunk 2 declares 3 new-file lines starting at 20: context at
+ // 20(20), added at 21(21), context at 22(22).
+ const diffText = [
+ "diff --git a/a.js b/a.js",
+ "--- a/a.js",
+ "+++ b/a.js",
+ "@@ -1,2 +1,3 @@",
+ " line one",
+ "+added at 2",
+ " line two",
+ "@@ -19,2 +20,3 @@",
+ " context at 20",
+ "+added at 21",
+ " context at 22",
+ "",
+ ].join("\n");
+ const files = parseDiff(diffText);
+ assert.deepEqual(
+ files["a.js"].added.map((l) => l.line),
+ [2, 21],
+ );
+});
+
+test("parseDiff attributes removed-only diffs (deletions) to the preimage path", () => {
+ const diffText = [
+ "diff --git a/old.py b/old.py",
+ "--- a/old.py",
+ "+++ /dev/null",
+ "@@ -1,2 +0,0 @@",
+ "-import os",
+ "-os.system(cmd)",
+ "",
+ ].join("\n");
+ const files = parseDiff(diffText);
+ assert.ok(files["old.py"]);
+ assert.equal(files["old.py"].added.length, 0);
+ assert.equal(files["old.py"].removed.length, 2);
+});
+
+test("parseDiff handles CRLF-normalized-away input the same as LF", () => {
+ const diffText = "diff --git a/a.js b/a.js\n--- a/a.js\n+++ b/a.js\n@@ -1,1 +1,2 @@\n line\n+eval(x)\n";
+ const files = parseDiff(diffText);
+ assert.equal(files["a.js"].added[0].text, "eval(x)");
+ assert.equal(files["a.js"].added[0].line, 2);
+});
+
+test("stripSameLineNoise removes a same-line // comment", () => {
+ assert.equal(stripSameLineNoise(' // eval("x") is banned').trim(), "");
+});
+
+test("stripSameLineNoise removes same-line quoted string content", () => {
+ assert.equal(stripSameLineNoise('assert.match(out, "eval(")'), "assert.match(out, )");
+});
+
+test("stripSameLineNoise bails to the raw line on an unterminated quote", () => {
+ const raw = 'const s = "eval(unterminated';
+ assert.equal(stripSameLineNoise(raw), raw);
+});
+
+test("stripSameLineNoise strips a same-line block comment", () => {
+ assert.equal(stripSameLineNoise("eval(x) /* eval is fine here, trust me */").trim(), "eval(x)");
+});
+
+test("stripPythonSameLineNoise removes a same-line # comment", () => {
+ assert.equal(stripPythonSameLineNoise(" # subprocess.run(cmd, shell=True) is deprecated").trim(), "");
+});
+
+test("stripPythonSameLineNoise removes same-line quoted string content", () => {
+ assert.equal(stripPythonSameLineNoise('assert "eval(" in out'), "assert in out");
+});
+
+test("stripPythonSameLineNoise bails to the raw line on an unterminated quote", () => {
+ const raw = "s = 'eval(unterminated";
+ assert.equal(stripPythonSameLineNoise(raw), raw);
+});
+
+test("stripHashComment strips from an unquoted # to end of line", () => {
+ assert.equal(stripHashComment("permissions: write-all # legacy").trim(), "permissions: write-all");
+});
+
+test("stripHashComment is not quote-aware (documented simplification)", () => {
+ assert.equal(stripHashComment('value: "a#b"'), 'value: "a');
+});
+
+test("matchesProtectedPath covers every declared glob and the CODEOWNERS basename case", () => {
+ const positives = [
+ ".github/workflows/ci.yml",
+ "action.yml",
+ "scripts/guard-ratchet.mjs",
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/message-catalog/gate/risk-surface-guard.mjs",
+ "SECURITY.md",
+ "Dockerfile",
+ "docker-compose.yml",
+ "docker-compose.yaml",
+ "k8s/deployment.yaml",
+ "kubernetes/pod.yaml",
+ "helm/values.yaml",
+ "charts/app/Chart.yaml",
+ "terraform/main.tf",
+ "infra/network.tf",
+ ".modonome/work-items/WI-055-risk-surface-guard.json",
+ ".github/CODEOWNERS",
+ ];
+ for (const p of positives) assert.ok(matchesProtectedPath(p), `expected protected: ${p}`);
+
+ const negatives = ["README.md", "src/index.js", "deploy/docker-compose.yml", "tests/risk-surface-guard.test.mjs"];
+ for (const p of negatives) assert.equal(matchesProtectedPath(p), false, `expected NOT protected: ${p}`);
+});
+
+// Regression: this scanner's own rule catalog, CLI, message-catalog partial, and
+// test file necessarily contain the detection vocabulary itself as literal source
+// (regex patterns, reason text, test fixture data). scanFile must not flag them for
+// their own vocabulary. Three of the four are also protected paths (scripts/lib/**
+// and the exact scripts/risk-surface-guard.mjs entry), so matchesProtectedPath still
+// catches a touch to them via RS801 (path-based, does not consult isContentExempt).
+// The test file itself is not a protected path, matching every other test file in
+// this repo, so it gets neither signal, the same as a fixture would.
+test("the scanner's own implementation files are exempt from content rules but still protected by RS801", () => {
+ const selfAndProtected = [
+ "scripts/risk-surface-guard.mjs",
+ "scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/message-catalog/gate/risk-surface-guard.mjs",
+ ];
+ for (const p of selfAndProtected) {
+ assert.ok(isContentExempt(p), `expected content-exempt: ${p}`);
+ assert.ok(matchesProtectedPath(p), `expected still protected-path: ${p}`);
+ }
+
+ assert.ok(isContentExempt("tests/risk-surface-guard.test.mjs"));
+ assert.equal(matchesProtectedPath("tests/risk-surface-guard.test.mjs"), false);
+
+ for (const p of [...selfAndProtected, "tests/risk-surface-guard.test.mjs"]) {
+ const findings = scanFile(p, [{ text: "docker run --privileged; export KUBECONFIG=x; # 169.254.169.254", line: 1 }]);
+ assert.equal(findings.length, 0, `expected no content findings for ${p}: ${findings.map((f) => f.id).join(",")}`);
+ }
+});
+
+test("redactMatchedText truncates long matched text", () => {
+ const long = "x".repeat(300);
+ const out = redactMatchedText(long);
+ assert.ok(out.length < 300);
+ assert.ok(out.endsWith("[truncated]"));
+});
+
+test("redactMatchedText replaces text that looks like a real secret", () => {
+ const out = redactMatchedText('const token = "abc"; secret: sk_live_abcdefghijklmnop');
+ assert.equal(out, "[redacted: possible secret material on this line]");
+});
+
+test("every rule has a real reason, reviewer_guidance, and limitation (no placeholders)", () => {
+ for (const r of RULES) {
+ for (const field of ["reason", "reviewer_guidance", "limitation"]) {
+ assert.ok(typeof r[field] === "string" && r[field].length > 20, `${r.id} missing real ${field}`);
+ }
+ }
+});
+
+test("rule ids are unique and stable-shaped", () => {
+ const ids = RULES.map((r) => r.id);
+ assert.equal(new Set(ids).size, ids.length);
+ for (const id of ids) assert.match(id, /^RS\d{3}$/);
+ assert.equal(RULES_BY_ID.size, RULES.length);
+});
+
+test("scanFile applies a representative rule from each ID family", () => {
+ const cases = [
+ ["src/a.js", [{ text: "eval(x)", line: 1 }], "RS101"],
+ ["model/x.py", [{ text: "AutoModel.from_pretrained(n, trust_remote_code=True)", line: 1 }], "RS201"],
+ ["scripts/i.sh", [{ text: "curl https://x/i.sh | bash", line: 1 }], "RS301"],
+ [".github/workflows/w.yml", [{ text: "pull_request_target:", line: 1 }], "RS401"],
+ ["docker-compose.yml", [{ text: "privileged: true", line: 1 }], "RS502"],
+ ["src/b.js", [{ text: 'fetch("http://169.254.169.254/x")', line: 1 }], "RS607"],
+ ["src/c.js", [{ text: "rejectUnauthorized: false", line: 1 }], "RS701"],
+ ];
+ for (const [path, lines, expectedId] of cases) {
+ const findings = scanFile(path, lines);
+ assert.ok(
+ findings.some((f) => f.id === expectedId),
+ `expected ${expectedId} for ${path}: got ${findings.map((f) => f.id).join(",")}`,
+ );
+ }
+});
+
+test("decideExitCode: pure implementation of the exit-code contract", () => {
+ const high = [{ severity: "high" }];
+ const medium = [{ severity: "medium" }];
+ assert.equal(decideExitCode("warn", []), 0);
+ assert.equal(decideExitCode("warn", high), 0);
+ assert.equal(decideExitCode("fail", medium), 0);
+ assert.equal(decideExitCode("fail", high), 1);
+});
+
+test("decideResult never contradicts decideExitCode", () => {
+ const high = [{ severity: "high" }];
+ const medium = [{ severity: "medium" }];
+ assert.equal(decideResult("warn", []), "pass");
+ assert.equal(decideResult("warn", high), "warn");
+ assert.equal(decideResult("fail", medium), "warn");
+ assert.equal(decideResult("fail", high), "fail");
+});
+
+test("severityToSarifLevel maps all four severities", () => {
+ assert.equal(severityToSarifLevel("critical"), "error");
+ assert.equal(severityToSarifLevel("high"), "error");
+ assert.equal(severityToSarifLevel("medium"), "warning");
+ assert.equal(severityToSarifLevel("low"), "note");
+});
+
+test("stripFlags composes --mode with --sarif/--json/positional args in any order", () => {
+ assert.deepEqual(stripFlags(["origin/main", "--mode", "fail", "--sarif"]), {
+ mode: "fail",
+ format: "sarif",
+ positional: ["origin/main"],
+ });
+ assert.deepEqual(stripFlags(["--sarif", "--mode", "fail", "origin/main"]), {
+ mode: "fail",
+ format: "sarif",
+ positional: ["origin/main"],
+ });
+ assert.deepEqual(stripFlags(["--mode", "warn", "--diff", "x.diff", "--json"]), {
+ mode: "warn",
+ format: "json",
+ positional: ["--diff", "x.diff"],
+ });
+ assert.deepEqual(stripFlags(["origin/main"]), { mode: null, format: "human", positional: ["origin/main"] });
+});
+
+test("formatHuman, emitJson, and emitSarif are pure string builders over the same findings", () => {
+ const { findings } = scanDiff(readFileSync(fixture(flagDir, "js-eval.diff"), "utf8"));
+ assert.ok(formatHuman(findings, { mode: "warn" }).includes("RS101"));
+ assert.ok(JSON.parse(emitJson(findings, { mode: "warn" })).findings.some((f) => f.id === "RS101"));
+ assert.ok(JSON.parse(emitSarif(findings)).runs[0].results.some((r) => r.ruleId === "RS101"));
+});
+
+// ---------------------------------------------------------------------------
+// CLI integration
+// ---------------------------------------------------------------------------
+
+test("scenario 1: JS eval is flagged", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"));
+ assert.equal(r.status, 0, r.stderr);
+ assert.match(r.stdout, /RS101/);
+});
+
+test("scenario 2: Python subprocess shell=True is flagged", () => {
+ const r = run(fixture(flagDir, "python-subprocess-shell-true.diff"));
+ assert.match(r.stdout, /RS113/);
+});
+
+test("scenario 3: GitHub Actions pull_request_target is flagged", () => {
+ const r = run(fixture(flagDir, "gh-actions-pull-request-target.diff"));
+ assert.match(r.stdout, /RS401/);
+});
+
+test("scenario 4: workflow permissions write-all is flagged", () => {
+ const r = run(fixture(flagDir, "gh-actions-permissions-write-all.diff"));
+ assert.match(r.stdout, /RS411/);
+});
+
+test("scenario 5: trust_remote_code=True is flagged", () => {
+ const r = run(fixture(flagDir, "trust-remote-code.diff"));
+ assert.match(r.stdout, /RS201/);
+});
+
+test("scenario 6: Docker privileged mode is flagged", () => {
+ const r = run(fixture(flagDir, "docker-compose-privileged-true.diff"));
+ assert.match(r.stdout, /RS502/);
+});
+
+test("scenario 7: Kubernetes hostPath is flagged", () => {
+ const r = run(fixture(flagDir, "k8s-hostpath.diff"));
+ assert.match(r.stdout, /RS511/);
+});
+
+test("scenario 8: curl | bash is flagged", () => {
+ const r = run(fixture(flagDir, "curl-pipe-bash.diff"));
+ assert.match(r.stdout, /RS301/);
+});
+
+test("scenario 9: TLS verification disabled is flagged", () => {
+ const r = run(fixture(flagDir, "tls-reject-unauthorized-false.diff"));
+ assert.match(r.stdout, /RS701/);
+});
+
+test("scenario 10: newly added secrets access is flagged", () => {
+ const r = run(fixture(flagDir, "gh-actions-secrets-usage.diff"));
+ assert.match(r.stdout, /RS421/);
+});
+
+test("scenario 11: documentation-only examples are allowed", () => {
+ const r = run(fixture(allowDir, "doc-example-eval-no-code.diff"), ["--json"]);
+ const parsed = JSON.parse(r.stdout);
+ assert.equal(parsed.findings.length, 0, r.stdout);
+});
+
+test("scenario 12: removal of dangerous code is allowed", () => {
+ const r = run(fixture(allowDir, "removal-of-eval.diff"), ["--json"]);
+ const parsed = JSON.parse(r.stdout);
+ assert.equal(parsed.findings.length, 0, r.stdout);
+});
+
+test("scenario 13: SARIF output is valid JSON and contains expected rule IDs and a real line number", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--sarif"]);
+ const parsed = JSON.parse(r.stdout);
+ assert.equal(parsed.version, "2.1.0");
+ assert.equal(parsed.runs[0].tool.driver.name, "Modonome Risk Surface Guard");
+ assert.ok(parsed.runs[0].tool.driver.rules.some((rule) => rule.id === "RS101"));
+ const result = parsed.runs[0].results.find((res) => res.ruleId === "RS101");
+ assert.ok(result);
+ assert.equal(result.locations[0].physicalLocation.region.startLine, 2);
+ assert.notEqual(result.locations[0].physicalLocation.region.startLine, 1);
+});
+
+test("scenario 14: warn mode exits 0 with findings", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "warn"]);
+ assert.equal(r.status, 0, r.stderr);
+});
+
+test("scenario 15: fail mode exits 1 with high findings", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "fail"]);
+ assert.equal(r.status, 1, r.stderr);
+});
+
+test("scenario 16: no findings exits 0", () => {
+ const r = run(fixture(allowDir, "doc-example-eval-no-code.diff"), ["--mode", "fail"]);
+ assert.equal(r.status, 0, r.stderr);
+});
+
+test("invalid --mode value exits 2 with a usage message", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "banana"]);
+ assert.equal(r.status, 2, r.stdout + r.stderr);
+ assert.match(r.stderr, /invalid --mode value/);
+});
+
+test("--diff with no path exits 2 with a usage message", () => {
+ const r = spawnSync("node", [guard, "--diff"], { encoding: "utf8" });
+ assert.equal(r.status, 2, r.stdout + r.stderr);
+ assert.match(r.stderr, /usage:/);
+});
+
+test("format flags and --mode compose with the diff source flag in any order", () => {
+ const a = run(fixture(flagDir, "js-eval.diff"), ["--sarif", "--mode", "fail"]);
+ const b = spawnSync("node", [guard, "--sarif", "--mode", "fail", "--diff", fixture(flagDir, "js-eval.diff")], { encoding: "utf8" });
+ assert.equal(a.status, 1);
+ assert.equal(b.status, 1);
+ assert.equal(a.stdout, b.stdout);
+});
+
+// ---------------------------------------------------------------------------
+// Live-repo pass. Findings are expected here (this change itself touches
+// several protected paths and adds should-flag fixture content elsewhere in
+// the tree), so this only asserts a clean, non-error run, not zero findings.
+// ---------------------------------------------------------------------------
+
+test("runs cleanly against this repository's own live diff against origin/main", () => {
+ const r = spawnSync("node", [guard, "origin/main", "--mode", "warn"], { encoding: "utf8", cwd: root });
+ assert.ok(r.status === 0 || r.status === 1, `unexpected exit ${r.status}: ${r.stderr}`);
+ assert.doesNotMatch(r.stderr, /internal error/);
+});
+
+// ---------------------------------------------------------------------------
+// Adversarial / false-positive cases
+// ---------------------------------------------------------------------------
+
+test("test assertions against a quoted dangerous-looking string are allowed", () => {
+ const r = run(fixture(allowDir, "test-asserts-eval-blocked.diff"), ["--json"]);
+ assert.equal(JSON.parse(r.stdout).findings.length, 0, r.stdout);
+});
+
+test("action.yml's own SARIF-permission description text does not trigger RS415 (leading-token anchor)", () => {
+ const r = run(fixture(allowDir, "action-yml-sarif-permission-context.diff"), ["--json"]);
+ const ids = JSON.parse(r.stdout).findings.map((f) => f.id);
+ assert.ok(!ids.includes("RS415"), ids.join(","));
+});
+
+test("a YAML comment mentioning pull_request_target does not trigger RS401", () => {
+ const r = run(fixture(allowDir, "comment-only-pull-request-target.diff"), ["--json"]);
+ const ids = JSON.parse(r.stdout).findings.map((f) => f.id);
+ assert.ok(!ids.includes("RS401"), ids.join(","));
+});
+
+test("a JS comment mentioning eval() does not trigger RS101", () => {
+ const r = run(fixture(allowDir, "comment-only-eval-js.diff"), ["--json"]);
+ const ids = JSON.parse(r.stdout).findings.map((f) => f.id);
+ assert.ok(!ids.includes("RS101"), ids.join(","));
+});
+
+test("markdown prose is exempt from content rules unless the path is itself protected", () => {
+ const r = run(fixture(allowDir, "markdown-prose-curl-bash.diff"), ["--json"]);
+ assert.equal(JSON.parse(r.stdout).findings.length, 0, r.stdout);
+});
+
+test("a pinned official GitHub action does not trigger RS423", () => {
+ const r = run(fixture(allowDir, "pinned-official-action.diff"), ["--json"]);
+ const ids = JSON.parse(r.stdout).findings.map((f) => f.id);
+ assert.ok(!ids.includes("RS423"), ids.join(","));
+});
+
+test("a full 40-character SHA pin on a third-party action does not trigger RS423", () => {
+ const r = run(fixture(allowDir, "sha-pinned-third-party-action.diff"), ["--json"]);
+ const ids = JSON.parse(r.stdout).findings.map((f) => f.id);
+ assert.ok(!ids.includes("RS423"), ids.join(","));
+});
+
+test("bulk: every should-flag fixture produces at least one finding, every should-allow fixture produces no content finding", () => {
+ for (const f of files(flagDir)) {
+ const r = run(f, ["--json"]);
+ const findings = JSON.parse(r.stdout).findings;
+ assert.ok(findings.length > 0, `expected a finding for ${f}`);
+ }
+ for (const f of files(allowDir)) {
+ const r = run(f, ["--json"]);
+ const contentFindings = JSON.parse(r.stdout).findings.filter((x) => x.id !== "RS801");
+ assert.equal(contentFindings.length, 0, `expected no content finding for ${f}: ${contentFindings.map((x) => x.id).join(",")}`);
+ }
+});
diff --git a/tests/self-application.test.mjs b/tests/self-application.test.mjs
index f86b1d58..35e4f0fa 100644
--- a/tests/self-application.test.mjs
+++ b/tests/self-application.test.mjs
@@ -46,12 +46,15 @@ jobs:
- run: node scripts/check-gate-dag.mjs
- run: node scripts/detect-near-miss.mjs
- run: node scripts/build-policy-attestation.mjs --check
+ - run: node scripts/risk-surface-guard.mjs origin/main --mode warn
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/guard-ratchet.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/check-style.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/check-repo-hygiene.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/branch-name.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/commit-identity.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/detect-attribution.mjs
+ - run: git checkout "origin/\${{ github.base_ref }}" -- scripts/risk-surface-guard.mjs
+ - run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/risk-surface-rules.mjs
`;
// A minimal safe template config.yaml.
From bb8626e570eaa9a52462066b7a488795dfa8de56 Mon Sep 17 00:00:00 2001
From: nateshpp <107772539+nateshpp@users.noreply.github.com>
Date: Mon, 27 Jul 2026 16:54:24 +0000
Subject: [PATCH 2/3] Add SARIF upload, suppression allowlist, and heuristic
tuning to Risk Surface Guard (WI-055)
Addresses four of the five limitations named when Risk Surface Guard first
shipped (ADR-047), continuing the same work item since nothing had merged
yet.
Findings now upload to the GitHub Security tab as SARIF (action.yml),
sharing the ratchet's existing upload-sarif toggle under a distinct
modonome-risk-surface category. RS106, RS703, and RS707 were tuned against
more realistic code shapes: RS106 exempts a short list of
near-universally-benign process.env variable names, RS703 widens its Python
verify=False co-occurrence window from adjacent lines to a 4-line span, and
RS707 requires a structural egress/outbound match instead of a bare nearby
word.
Adds a base-branch-loaded suppression allowlist (ADR-047 decisions 9-13):
.modonome/risk-surface-allowlist.json and its loader
scripts/lib/risk-surface-allowlist.mjs are both base-pinned in ci.yml, so a
pull request's own new entry cannot suppress a finding in that same pull
request. A new blocking gate, scripts/check-risk-surface-allowlist.mjs,
validates a pull request's proposed allowlist edits pre-base-checkout.
Suppressed findings stay visible and marked in human and JSON output, are
excluded from SARIF, and never count toward the exit code in any mode.
Fail-closed is enforced twice: a malformed allowlist file suppresses
nothing, and isSuppressed independently re-validates expiry shape rather
than trusting the generic schema validator already ran.
The fifth limitation (no AST/semantic analysis) remains a deliberate
architectural boundary per ADR-045/047 and is unchanged.
tests/risk-surface-guard.test.mjs grows to 78 tests; a new
tests/check-risk-surface-allowlist.test.mjs adds 11. Seven new fixtures
cover the tuned heuristics and the allowlist's valid, expired, glob, and
malformed shapes.
---
.github/workflows/ci.yml | 25 ++
.modonome/policy-attestation.json | 3 +-
.modonome/risk-surface-allowlist.json | 4 +
.modonome/snapshot/badge.json | 2 +-
.modonome/snapshot/map.json | 2 +-
.modonome/snapshot/map.md | 181 ++++++------
.modonome/snapshot/signature.json | 2 +-
.../work-items/WI-055-risk-surface-guard.json | 10 +
RELEASE-EVIDENCE.md | 8 +-
action.yml | 19 +-
docs/adr/ADR-047-risk-surface-guard.md | 68 +++++
docs/risk-surface-guard.md | 42 ++-
.../risk-surface/allowlist/expired-entry.json | 14 +
.../risk-surface/allowlist/glob-entry.json | 14 +
.../risk-surface/allowlist/malformed.json | 6 +
.../allowlist/single-valid-entry.json | 14 +
...k8s-ingress-0.0.0.0-near-egress-prose.diff | 10 +
.../process-env-benign-var-in-auth-file.diff | 8 +
.../tls-python-verify-false-multiline.diff | 12 +
package.json | 3 +-
schemas/gate-graph.json | 2 +-
schemas/risk-surface-allowlist.schema.json | 29 ++
scripts/check-risk-surface-allowlist.mjs | 40 +++
scripts/check-self-application.mjs | 6 +
.../gate/check-risk-surface-allowlist.mjs | 8 +
.../gate/risk-surface-guard.mjs | 8 +-
scripts/lib/message-catalog/index.mjs | 2 +
scripts/lib/risk-surface-allowlist.mjs | 80 ++++++
scripts/lib/risk-surface-rules.mjs | 34 ++-
scripts/risk-surface-guard.mjs | 70 +++--
tests/check-risk-surface-allowlist.test.mjs | 165 +++++++++++
tests/risk-surface-guard.test.mjs | 267 +++++++++++++++++-
tests/self-application.test.mjs | 3 +
33 files changed, 1038 insertions(+), 123 deletions(-)
create mode 100644 .modonome/risk-surface-allowlist.json
create mode 100644 fixtures/risk-surface/allowlist/expired-entry.json
create mode 100644 fixtures/risk-surface/allowlist/glob-entry.json
create mode 100644 fixtures/risk-surface/allowlist/malformed.json
create mode 100644 fixtures/risk-surface/allowlist/single-valid-entry.json
create mode 100644 fixtures/risk-surface/should-allow/k8s-ingress-0.0.0.0-near-egress-prose.diff
create mode 100644 fixtures/risk-surface/should-allow/process-env-benign-var-in-auth-file.diff
create mode 100644 fixtures/risk-surface/should-flag/tls-python-verify-false-multiline.diff
create mode 100644 schemas/risk-surface-allowlist.schema.json
create mode 100644 scripts/check-risk-surface-allowlist.mjs
create mode 100644 scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs
create mode 100644 scripts/lib/risk-surface-allowlist.mjs
create mode 100644 tests/check-risk-surface-allowlist.test.mjs
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 760d1398..de9f9c36 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -85,6 +85,14 @@ jobs:
- name: Run policy attestation freshness gate
run: node scripts/build-policy-attestation.mjs --check
+ # Risk Surface Guard allowlist validation gate (ADR-047 decision 11): like the
+ # promotion-safety gates above, this must run BEFORE the base-branch checkout so
+ # it judges the PR's own proposed allowlist edits, not the base copy. This is an
+ # author-feedback gate, not the trust boundary -- the trust boundary is the
+ # base-pinned checkout of the allowlist file and its loader below.
+ - name: Run risk-surface-guard allowlist validation gate
+ run: node scripts/check-risk-surface-allowlist.mjs
+
# Mandatory Base-Branch Checkouts matching check-self-application.mjs criteria
# NOTE: These steps only run on pull requests where github.base_ref is defined.
# On push events, github.base_ref is empty, so these are skipped to prevent
@@ -147,6 +155,23 @@ jobs:
echo "scripts/risk-surface-guard.mjs not yet on base branch; skipping trust-isolation checkout (first introduction)."
fi
+ # The suppression allowlist (ADR-047 decision 9): a separate, independently
+ # bootstrap-tolerant step rather than folding into the checkout above, because
+ # that step's own bootstrap condition may already be permanently true by the
+ # time this lands, which would make an unguarded checkout of the not-yet-on-base
+ # allowlist file hard-fail this step on its own introducing PR. Both the data
+ # file and its loader must be pinned: an unpinned loader could be rewritten by a
+ # PR to ignore expiry or match anything.
+ - name: Load the risk-surface-guard suppression allowlist from the base branch
+ if: github.event_name == 'pull_request'
+ run: |
+ if git cat-file -e "origin/${{ github.base_ref }}:.modonome/risk-surface-allowlist.json" 2>/dev/null; then
+ git checkout "origin/${{ github.base_ref }}" -- .modonome/risk-surface-allowlist.json
+ git checkout "origin/${{ github.base_ref }}" -- scripts/lib/risk-surface-allowlist.mjs
+ else
+ echo ".modonome/risk-surface-allowlist.json not yet on base branch; skipping trust-isolation checkout (first introduction)."
+ fi
+
# Advisory only: proves the gate is wired into CI (REQUIRED_GATES in
# check-self-application.mjs). Runs in --mode warn, which is contractually
# exit 0 regardless of findings, so it never fails this repository's own build.
diff --git a/.modonome/policy-attestation.json b/.modonome/policy-attestation.json
index cd6e2217..3f0d6410 100644
--- a/.modonome/policy-attestation.json
+++ b/.modonome/policy-attestation.json
@@ -98,6 +98,7 @@
"check-promotion-readiness",
"check-regex-safety",
"check-repo-hygiene",
+ "check-risk-surface-allowlist",
"check-self-application",
"check-style",
"check-work-item-staleness",
@@ -111,5 +112,5 @@
"autonomy_enabled": false,
"dry_run": true
},
- "content_digest": "sha256:68a93f336f3c0d8978dcbedcdcb1fdfae1cdb0fe9d16850ce1c7f7d667d20d88"
+ "content_digest": "sha256:6ba3670ed541353a52d70a0fb7f645dc1dd1c4d0da9d7c7dfa7fec232936a299"
}
diff --git a/.modonome/risk-surface-allowlist.json b/.modonome/risk-surface-allowlist.json
new file mode 100644
index 00000000..df0e369a
--- /dev/null
+++ b/.modonome/risk-surface-allowlist.json
@@ -0,0 +1,4 @@
+{
+ "schema_version": 1,
+ "entries": []
+}
diff --git a/.modonome/snapshot/badge.json b/.modonome/snapshot/badge.json
index ba2f397e..132fd85c 100644
--- a/.modonome/snapshot/badge.json
+++ b/.modonome/snapshot/badge.json
@@ -1 +1 @@
-{"color":"blue","label":"snapshot","message":"1081 files, 138602 tok","schemaVersion":1}
+{"color":"blue","label":"snapshot","message":"1094 files, 139595 tok","schemaVersion":1}
diff --git a/.modonome/snapshot/map.json b/.modonome/snapshot/map.json
index 141afe47..4bfd249b 100644
--- a/.modonome/snapshot/map.json
+++ b/.modonome/snapshot/map.json
@@ -1 +1 @@
-{"api":[{"anchor":"S:c5854b8940","doc":"Recursively snapshot path -> \"size:sha-like(content)\" for every file.","kind":"function","line":27,"name":"snapshot","path_id":"F:0103cf3d56","signature":"async function snapshot(dir)"},{"anchor":"S:44e7188c1d","doc":"Tiny content hash (FNV-1a): avoids a crypto import and is deterministic.","kind":"function","line":50,"name":"hash","path_id":"F:0103cf3d56","signature":"function hash(buf)"},{"anchor":"S:4ee042ed06","kind":"function","line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56","signature":"async function makeHostRepo()"},{"anchor":"S:08df8d7472","kind":"function","line":70,"name":"runPreflight","path_id":"F:0103cf3d56","signature":"function runPreflight(target)"},{"anchor":"S:c47beeac78","doc":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\".","kind":"function","line":11,"name":"normalizeRelative","path_id":"F:015261eab0","signature":"function normalizeRelative(fromPath, module)"},{"anchor":"S:0d7b0da50a","doc":"Resolve a relative import to a repo file, trying common extensions and index files. External and bare imports return null and become no edge.","kind":"function","line":24,"name":"resolveImport","path_id":"F:015261eab0","signature":"function resolveImport(fromPath, module, fileSet)"},{"anchor":"S:c732826ee5","doc":"Build an adjacency map { relPath -> [relPath, ...] } from per-file imports. Only edges that resolve to another repo file are kept.","kind":"function","line":41,"name":"buildImportGraph","path_id":"F:015261eab0","signature":"export function buildImportGraph(perFile, fileSet)"},{"anchor":"S:79144070a6","doc":"Degree centrality: out-edges of a node plus in-edges pointing at it.","kind":"function","line":55,"name":"centrality","path_id":"F:015261eab0","signature":"export function centrality(adj)"},{"anchor":"S:bb578790a3","doc":"PageRank over the import graph. Fixed iteration count keeps it deterministic. Dangling nodes (no out-edges) redistribute their rank uniformly.","kind":"function","line":67,"name":"pagerank","path_id":"F:015261eab0","signature":"export function pagerank(adj, { damping = 0.85, iterations = 40 } = {})"},{"anchor":"S:4d0bae812e","kind":"function","line":91,"name":"round","path_id":"F:015261eab0","signature":"function round(n, places = 6)"},{"anchor":"S:b88ce47ede","doc":"Rank files by a normalized composite of churn, centrality, and PageRank. Returns a sorted list of { path, churn, centrality, pagerank, score }, highest first.","kind":"function","line":98,"name":"attentionRank","path_id":"F:015261eab0","signature":"export function attentionRank(paths, { churn = new Map(), centralityMap = new Map(), pagerankMap = new Map() } = {})"},{"anchor":"S:5ad0c942a1","doc":"Report whether the import graph has a cycle and one example cycle, reusing the shared cycle detector so the snapshot can warn about circular dependencies.","kind":"function","line":117,"name":"findCycle","path_id":"F:015261eab0","signature":"export function findCycle(adj)"},{"anchor":"S:1e6749f65a","kind":"function","line":31,"name":"run","path_id":"F:02a5f8fc55","signature":"function run(env)"},{"anchor":"S:c932c7339f","doc":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under test can make the run fail or pass.","kind":"function","line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249","signature":"function makeMinimalRepo()"},{"anchor":"S:0ab594146c","kind":"function","line":33,"name":"runScript","path_id":"F:0391f3b249","signature":"function runScript(tmp)"},{"anchor":"S:689125598d","doc":"A git-init'd variant of makeMinimalRepo(), for the staleness check, which shells out to `git log` and needs a real repository to query.","kind":"function","line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249","signature":"function makeMinimalGitRepo()"},{"anchor":"S:bac2ebbef5","kind":"function","line":53,"name":"gitCommit","path_id":"F:0391f3b249","signature":"function gitCommit(tmp, message)"},{"anchor":"S:cd2e7eba8f","doc":"Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as ","kind":"function","line":61,"name":"gitCommitAt","path_id":"F:0391f3b249","signature":"function gitCommitAt(tmp, message, isoDate)"},{"anchor":"S:405ee38bbe","kind":"const","line":66,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e","signature":"export const CATALOG_PARTIALS = ["},{"anchor":"S:949f988c9e","kind":"function","line":10,"name":"makeDb","path_id":"F:044b762a79","signature":"function makeDb(orders = new Map())"},{"anchor":"S:e96fb86528","doc":"Catalog entries for scripts/check-edit-set-compliance.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5","signature":"export const MESSAGES ="},{"anchor":"S:f8524caefc","kind":"const","line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9","signature":"export const SEVERITY_RANK = { ok: 0, info: 1, attention: 2, blocked: 3 };"},{"anchor":"S:c12913d4da","kind":"function","line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9","signature":"function mergeCatalog(sources)"},{"anchor":"S:4bea381dfd","kind":"const","line":33,"name":"MESSAGES","path_id":"F:05bffc70e9","signature":"export const MESSAGES = mergeCatalog(CATALOG_SOURCES);"},{"anchor":"S:81c9c1291a","kind":"function","line":35,"name":"interpolate","path_id":"F:05bffc70e9","signature":"function interpolate(template, params)"},{"anchor":"S:db0bb71f37","doc":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries.","kind":"function","line":41,"name":"clampSeverity","path_id":"F:05bffc70e9","signature":"function clampSeverity(entry, requestedSeverity)"},{"anchor":"S:a79dad6e97","kind":"function","line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9","signature":"export function loadMessageOverrides(modonomeDir)"},{"anchor":"S:0044d1a126","doc":"Validate an overrides document (the parsed contents of messages.yaml) against both the JSON schema and the severity-floor rule. Shared by scripts/check-message-catalog-integrity.mjs (CI) and the contr","kind":"function","line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9","signature":"export function checkOverridesIntegrity(overridesDoc, schema)"},{"anchor":"S:8282a0b575","doc":"Look up a message by id, apply any operator override (clamped to the floor for non_suppressible entries), interpolate {param} tokens, and return the resolved { id, severity, suppressed, message } read","kind":"function","line":85,"name":"formatMessage","path_id":"F:05bffc70e9","signature":"export function formatMessage(id, params = {}, overrides = {})"},{"anchor":"S:6dde857e83","doc":"List every catalog entry with its resolved (override-applied) state, for the control panel's Messages tab.","kind":"function","line":104,"name":"listMessages","path_id":"F:05bffc70e9","signature":"export function listMessages(overrides = {})"},{"anchor":"S:ab3548c3d0","kind":"function","line":16,"name":"baseCfg","path_id":"F:06b982f5a2","signature":"function baseCfg(extra = {})"},{"anchor":"S:0a11409d06","doc":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens the * item: identities, lease, allowed e","kind":"interface","line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53","signature":"export interface WorkItemDetail extends WorkItemSummary"},{"anchor":"S:6a4d8aa30d","kind":"interface","line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53","signature":"export interface WorkItemDrawerProps"},{"anchor":"S:1e67af68fc","kind":"function","line":52,"name":"Section","path_id":"F:08064e0c53","signature":"function Section({ label, children }: { label: string; children: ReactNode })"},{"anchor":"S:fff471613b","doc":"A read-only inspector for a single work item, presented in the shared `Drawer` * primitive. Lays out status, the maker and checker identities, lease and branch * info, attempt count, the allowed edit ","kind":"function","line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53","signature":"export function WorkItemDrawer({ item, open, onClose }: WorkItemDrawerProps)"},{"anchor":"S:9f9c07db7d","kind":"function","line":10,"name":"Model","path_id":"F:08577063d4","signature":"export const Model = () => ("},{"anchor":"S:d3f17c584a","kind":"function","line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86","signature":"function isSelfGovernance(dir)"},{"anchor":"S:02e2e85572","kind":"function","line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86","signature":"function resolveModonomeDir(rawMode, dirParam)"},{"anchor":"S:8097fe47fc","kind":"function","line":40,"name":"readBody","path_id":"F:08b7435c86","signature":"function readBody(req)"},{"anchor":"S:a10a756308","kind":"function","line":59,"name":"sendJson","path_id":"F:08b7435c86","signature":"function sendJson(res, status, body)"},{"anchor":"S:0e6240f5b7","doc":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the base flag first (off => nothing is writa","kind":"function","line":70,"name":"writeGate","path_id":"F:08b7435c86","signature":"function writeGate(baseWritable, dir)"},{"anchor":"S:b06f3444be","kind":"function","line":86,"name":"stateWithSource","path_id":"F:08b7435c86","signature":"function stateWithSource(baseWritable, dir, mode)"},{"anchor":"S:62210684b4","doc":"Best-effort reachability probe for an OpenAI-compatible endpoint (LM Studio, Ollama, a gateway). Read-only and network-only: it never touches config.yaml, so it needs no write guard. Always resolves (","kind":"function","line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86","signature":"function buildModelsUrl(baseUrl)"},{"anchor":"S:3f9e6b3a7b","kind":"function","line":104,"name":"testConnection","path_id":"F:08b7435c86","signature":"async function testConnection(baseUrl)"},{"anchor":"S:5092562c12","kind":"function","line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86","signature":"export function modonomeApiPlugin()"},{"anchor":"S:9b40c124ce","kind":"function","line":17,"name":"baseCfg","path_id":"F:093689bb8e","signature":"function baseCfg(extra = {})"},{"anchor":"S:7078ce1661","kind":"function","line":40,"name":"today","path_id":"F:09ba331878","signature":"function today()"},{"anchor":"S:735c642c3a","doc":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch.","kind":"function","line":46,"name":"collectNearMisses","path_id":"F:09ba331878","signature":"export function collectNearMisses({ branch, commits })"},{"anchor":"S:4358d9c393","doc":"A denylist proposal is per unique (tier, surface, token): the widener proposes adding a token, not fixing N occurrences. Keep the first occurrence as evidence.","kind":"function","line":67,"name":"proposalsFrom","path_id":"F:09ba331878","signature":"export function proposalsFrom(findings)"},{"anchor":"S:b89188d9e3","kind":"function","line":76,"name":"main","path_id":"F:09ba331878","signature":"function main(argv)"},{"anchor":"S:79997ba94d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:09ea014068","signature":"export const MESSAGES ="},{"anchor":"S:b29fc4b0d5","kind":"function","line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d","signature":"export const ArmEngine = () => ("},{"anchor":"S:8cd25e6f09","kind":"type","line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:40a4170626","kind":"type","line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5","signature":"export type ArmingMode = \"disabled\" | \"dry-run\" | \"armed\";"},{"anchor":"S:49f97badd7","kind":"type","line":12,"name":"WorkState","path_id":"F:0a85f3b8e5","signature":"export type WorkState ="},{"anchor":"S:3e9158c80b","kind":"type","line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5","signature":"export type RiskTier = 1 | 2 | 3 | 4;"},{"anchor":"S:86cb290127","doc":"The subject a mode points at: which repo the panel is reading.","kind":"interface","line":25,"name":"Subject","path_id":"F:0a85f3b8e5","signature":"export interface Subject"},{"anchor":"S:a337ae8f0b","doc":"The engine configuration (schemas/config.schema.json), the levers the panel edits.","kind":"interface","line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5","signature":"export interface ModonomeConfig"},{"anchor":"S:577a1daeb3","kind":"type","line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5","signature":"export type MessageSeverity = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:6605365375","doc":"One entry of the built-in message catalog (scripts/lib/messages.mjs), with * this subject's .modonome/messages.yaml overrides already resolved. A * non_suppressible entry's severity/suppressed always ","kind":"interface","line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5","signature":"export interface MessageCatalogEntryVM"},{"anchor":"S:d22e005d52","doc":"A patch to one message's override, as sent to onSaveMessages. Omitted * fields reset to the catalog default; severity/suppressed are rejected * server-side for a non_suppressible id.","kind":"interface","line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5","signature":"export interface MessageOverridePatch"},{"anchor":"S:d56c1854d7","doc":"One prerequisite in the armed-mode gate checklist.","kind":"interface","line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5","signature":"export interface ArmingCheck"},{"anchor":"S:6bc87187a8","kind":"interface","line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5","signature":"export interface ArmingStatus"},{"anchor":"S:a4a9a79fbe","kind":"type","line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5","signature":"export type WorkItemType = \"fix-issue\" | \"develop-feature\" | \"create-article\" | \"create-plan\" | \"update-docs\" | \"chore\";"},{"anchor":"S:3f93aaa307","doc":"True for any state where a real actor could be actively working the item: * mutating it destructively (delete) needs the lease released first.","kind":"const","line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5","signature":"export const IN_FLIGHT_STATES: WorkState[] = [\"claimed\", \"making\", \"checking\", \"rework\", \"merge_ready\", \"merging\"];"},{"anchor":"S:5a49db2766","kind":"interface","line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemVM"},{"anchor":"S:f3e5c99141","kind":"interface","line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5","signature":"export interface LeaseVM"},{"anchor":"S:dddb39652d","kind":"type","line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:9bc07de53c","kind":"interface","line":181,"name":"GateVM","path_id":"F:0a85f3b8e5","signature":"export interface GateVM"},{"anchor":"S:126357e421","kind":"interface","line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5","signature":"export interface CostByModel"},{"anchor":"S:ebe2964819","kind":"interface","line":198,"name":"CostVM","path_id":"F:0a85f3b8e5","signature":"export interface CostVM"},{"anchor":"S:72a5c214ac","kind":"interface","line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5","signature":"export interface LearningVM"},{"anchor":"S:e03cf612ca","kind":"interface","line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5","signature":"export interface DecisionVM"},{"anchor":"S:6ef3b2f2e5","doc":"One commit the metadata-only remediator would rewrite, and why.","kind":"interface","line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationProposalVM"},{"anchor":"S:b41535d6e7","doc":"The armed metadata-only remediator (ADR-035) as a read-only surface plus one owner * lever. `applyEnabled` mirrors the config flag; `ready` is true only when every arming * condition is met, and `bloc","kind":"interface","line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationVM"},{"anchor":"S:3ad2d564a8","kind":"type","line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5","signature":"export type AuditKind ="},{"anchor":"S:7c6ba2a644","kind":"interface","line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5","signature":"export interface AuditEventVM"},{"anchor":"S:19226d4902","kind":"interface","line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5","signature":"export interface ProtectedPathVM"},{"anchor":"S:61e677ae40","kind":"interface","line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5","signature":"export interface TrendPoint"},{"anchor":"S:cefb8c3f64","doc":"Where a loaded PanelState actually came from, so the UI never presents demo data as real.","kind":"interface","line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5","signature":"export interface PanelSource"},{"anchor":"S:4a0171ecb5","kind":"interface","line":295,"name":"PanelState","path_id":"F:0a85f3b8e5","signature":"export interface PanelState"},{"anchor":"S:6dcad3cdf1","doc":"Fields a new work item is created with. Always starts in state \"queued\".","kind":"interface","line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5","signature":"export interface NewWorkItemInput"},{"anchor":"S:7934857ce3","doc":"Safe-to-edit-anytime fields: never state, owner, or lease, since those change only * through the existing lease/transition machinery, never a generic metadata edit.","kind":"interface","line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemPatch"},{"anchor":"S:a2d9480f78","kind":"interface","line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5","signature":"export interface WriteActions"},{"anchor":"S:6dd199eea1","doc":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads itself","kind":"function","line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9","signature":"export function resolveActiveKey(peerKeys, alias, now = new Date(), overrides = {})"},{"anchor":"S:f3b8628cdb","doc":"Full ordered verification. options.skipContentGate runs only the signature checks (steps 3 to 5), used when the caller already ran the schema and redaction gate.","kind":"function","line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9","signature":"export function verifyPacket(packet, peerKeys, { now = new Date(), skipContentGate = false, overrides = {} } = {})"},{"anchor":"S:0af608ade0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:0c731e3460","signature":"export const MESSAGES ="},{"anchor":"S:ee5246d16c","kind":"function","line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b","signature":"export function generateKeypair()"},{"anchor":"S:842e875c5a","doc":"Raw 32-byte public key as base64, accepting either a public or private KeyObject.","kind":"function","line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyB64(keyObject)"},{"anchor":"S:8a971e3c54","doc":"Public KeyObject from a raw 32-byte base64 public key.","kind":"function","line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyFromB64(b64)"},{"anchor":"S:380b82547c","doc":"Private KeyObject from base64 PKCS8 DER (the env-secret format).","kind":"function","line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyFromB64Pkcs8(b64)"},{"anchor":"S:19e5ddb185","kind":"function","line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyToB64Pkcs8(keyObject)"},{"anchor":"S:1c7919b4ea","kind":"function","line":40,"name":"signMessage","path_id":"F:0cacf66a3b","signature":"export function signMessage(message, privateKeyObject)"},{"anchor":"S:fb81ef11a3","kind":"function","line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b","signature":"export function verifyMessage(message, sigB64, publicKeyObject)"},{"anchor":"S:4a08c48993","doc":"Short fingerprint for out-of-band key comparison (ADR-017 enrollment): the first 16 hex characters of sha256 over the raw public key bytes.","kind":"function","line":54,"name":"fingerprint","path_id":"F:0cacf66a3b","signature":"export function fingerprint(pubB64)"},{"anchor":"S:f2e1ea8458","kind":"function","line":16,"name":"deriveMode","path_id":"F:0da05a2a05","signature":"export function deriveMode(config: ModonomeConfig, envArmed: boolean): ArmingMode"},{"anchor":"S:97bc3f0eb4","kind":"function","line":22,"name":"deriveArming","path_id":"F:0da05a2a05","signature":"export function deriveArming("},{"anchor":"S:a3fb13b441","kind":"function","line":4,"name":"Tones","path_id":"F:10e76cfcd3","signature":"export const Tones = () => ("},{"anchor":"S:14ef0a45e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1127892e72","signature":"export const MESSAGES ="},{"anchor":"S:a1d4334d94","kind":"function","line":44,"name":"App","path_id":"F:113387361d","signature":"export function App()"},{"anchor":"S:f034e67219","kind":"function","line":36,"name":"normalizeLF","path_id":"F:116adfb9f8","signature":"function normalizeLF(s)"},{"anchor":"S:e23dca26d1","kind":"function","line":45,"name":"stripFlags","path_id":"F:116adfb9f8","signature":"export function stripFlags(argv)"},{"anchor":"S:8fc6479414","kind":"function","line":72,"name":"getDiff","path_id":"F:116adfb9f8","signature":"function getDiff(positional)"},{"anchor":"S:6202790aac","kind":"class","line":103,"name":"UsageError","path_id":"F:116adfb9f8","signature":"class UsageError extends Error {}"},{"anchor":"S:a8ccdc0c7d","kind":"function","line":112,"name":"parseDiff","path_id":"F:116adfb9f8","signature":"export function parseDiff(diffText)"},{"anchor":"S:4295d27685","kind":"function","line":158,"name":"makeFinding","path_id":"F:116adfb9f8","signature":"function makeFinding(rule, file, line, rawText)"},{"anchor":"S:afdc9fa742","kind":"function","line":172,"name":"scanFile","path_id":"F:116adfb9f8","signature":"export function scanFile(filePath, addedLines)"},{"anchor":"S:9435112073","kind":"function","line":194,"name":"scanDiff","path_id":"F:116adfb9f8","signature":"export function scanDiff(diffText)"},{"anchor":"S:34df82b1c2","kind":"function","line":215,"name":"hasHighOrCritical","path_id":"F:116adfb9f8","signature":"function hasHighOrCritical(findings)"},{"anchor":"S:672926584c","kind":"function","line":219,"name":"decideExitCode","path_id":"F:116adfb9f8","signature":"export function decideExitCode(mode, findings)"},{"anchor":"S:6117b8ec80","kind":"function","line":224,"name":"decideResult","path_id":"F:116adfb9f8","signature":"export function decideResult(mode, findings)"},{"anchor":"S:74c8951fb9","kind":"function","line":230,"name":"severityToSarifLevel","path_id":"F:116adfb9f8","signature":"export function severityToSarifLevel(severity)"},{"anchor":"S:8b3d7e9050","kind":"function","line":240,"name":"summaryMessage","path_id":"F:116adfb9f8","signature":"function summaryMessage(mode, findings)"},{"anchor":"S:17bc177192","kind":"function","line":251,"name":"formatHuman","path_id":"F:116adfb9f8","signature":"export function formatHuman(findings, { mode })"},{"anchor":"S:82407637b4","kind":"function","line":266,"name":"emitJson","path_id":"F:116adfb9f8","signature":"export function emitJson(findings, { mode })"},{"anchor":"S:38407e52ac","kind":"function","line":274,"name":"emitSarif","path_id":"F:116adfb9f8","signature":"export function emitSarif(findings)"},{"anchor":"S:9f6788d90d","kind":"function","line":314,"name":"runCli","path_id":"F:116adfb9f8","signature":"function runCli()"},{"anchor":"S:670e55d75a","kind":"const","line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce","signature":"export const CACHE_SCHEMA_VERSION = 1;"},{"anchor":"S:31032f0509","doc":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option (some git options can read or write fil","kind":"function","line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce","signature":"export function isPlausibleRevision(value)"},{"anchor":"S:7762c6d861","kind":"function","line":21,"name":"cachePath","path_id":"F:119e3c0fce","signature":"function cachePath(root)"},{"anchor":"S:59b9039619","doc":"Load the cache for a repo, or null when absent, unreadable, or a different version.","kind":"function","line":28,"name":"loadCache","path_id":"F:119e3c0fce","signature":"export function loadCache(root)"},{"anchor":"S:ba5f7d1ffe","doc":"Persist the cache. entries is { relPath: { hash, symbols, imports, purposeRaw } }.","kind":"function","line":41,"name":"saveCache","path_id":"F:119e3c0fce","signature":"export function saveCache(root, { built_at_head = null, entries = {} })"},{"anchor":"S:ed24428ce0","doc":"The current git HEAD sha for the repo, or null when unavailable.","kind":"function","line":50,"name":"gitHead","path_id":"F:119e3c0fce","signature":"export function gitHead(root)"},{"anchor":"S:236237bc1b","doc":"Strip git's optional quoting from a porcelain path.","kind":"function","line":56,"name":"unquote","path_id":"F:119e3c0fce","signature":"function unquote(p)"},{"anchor":"S:93d0a78f18","doc":"The set of paths that changed since the cache was built: uncommitted work (git status) plus commits since cache.built_at_head. Returns null when git is not usable, which forces a full rebuild.","kind":"function","line":65,"name":"changedPaths","path_id":"F:119e3c0fce","signature":"export function changedPaths(root, cache)"},{"anchor":"S:c3d94f0812","doc":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse.","kind":"function","line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a","signature":"export function parseRepoFromUrl(url)"},{"anchor":"S:d1b03afffb","doc":"Derive a stable repo label. The generator block credits the tool (generator.name is always \"modonome\"), so the per-repo identity lives in generator.repository. Prefer that, then fall back to the filen","kind":"function","line":41,"name":"deriveRepoName","path_id":"F:128b647d9a","signature":"export function deriveRepoName(att, filename)"},{"anchor":"S:3a57c07db5","doc":"Three-way posture from the attestation posture block.","kind":"function","line":48,"name":"derivePosture","path_id":"F:128b647d9a","signature":"export function derivePosture(posture)"},{"anchor":"S:26df582c22","doc":"Build one row from a filename and its raw text. A parse or shape problem is recorded on the row and reported as a table cell; it never throws, so one bad file cannot crash the whole run.","kind":"function","line":57,"name":"buildRow","path_id":"F:128b647d9a","signature":"export function buildRow(filename, text)"},{"anchor":"S:ba36fd17d6","doc":"Read every *.json file in dir and build a row for each. Files are read once with readFileSync (no separate stat then read, so there is no check-to-use race window). Returns unsorted rows.","kind":"function","line":100,"name":"collectRows","path_id":"F:128b647d9a","signature":"export function collectRows(dir)"},{"anchor":"S:c42dd60d39","doc":"Deterministic order: by repo label, then by filename as a tie-break.","kind":"function","line":126,"name":"sortRows","path_id":"F:128b647d9a","signature":"export function sortRows(rows)"},{"anchor":"S:7619cf060d","kind":"function","line":133,"name":"escapeHtml","path_id":"F:128b647d9a","signature":"function escapeHtml(s)"},{"anchor":"S:7bcf8115de","kind":"function","line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a","signature":"function capabilitiesCell(caps)"},{"anchor":"S:b366c411d2","doc":"Render the sorted rows to a self-contained HTML document. Pure: given the same rows and options it returns the same string.","kind":"function","line":150,"name":"renderHtml","path_id":"F:128b647d9a","signature":"export function renderHtml(rows, options = {})"},{"anchor":"S:5afb2ca954","doc":"Full pipeline: directory to HTML string. Exported for tests.","kind":"function","line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a","signature":"export function renderLedgerFromDir(dir, options = {})"},{"anchor":"S:0255163ba3","kind":"function","line":229,"name":"parseArgs","path_id":"F:128b647d9a","signature":"function parseArgs(argv)"},{"anchor":"S:cecb0a4a33","kind":"function","line":248,"name":"main","path_id":"F:128b647d9a","signature":"function main(argv)"},{"anchor":"S:3968554637","kind":"const","line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461","signature":"export const VOLATILE_FIELDS = ['id', 'signature'];"},{"anchor":"S:9f7fa8d585","kind":"function","line":10,"name":"packetContent","path_id":"F:12c7a4e461","signature":"export function packetContent(packet)"},{"anchor":"S:a0ea4d9d0f","kind":"function","line":18,"name":"computePacketId","path_id":"F:12c7a4e461","signature":"export function computePacketId(packet)"},{"anchor":"S:d2ef86c19f","kind":"function","line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461","signature":"export function packetIdMatches(packet)"},{"anchor":"S:4700befa2a","kind":"function","line":16,"name":"run","path_id":"F:137056535b","signature":"function run(args = [], env = {})"},{"anchor":"S:bc56c13940","doc":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind.","kind":"function","line":22,"name":"preservingArtifact","path_id":"F:137056535b","signature":"function preservingArtifact(fn)"},{"anchor":"S:2cd4d9571d","kind":"function","line":189,"name":"withTempFile","path_id":"F:137056535b","signature":"function withTempFile(name, content, fn)"},{"anchor":"S:5708b6bd2b","kind":"function","line":4,"name":"PendingApproval","path_id":"F:13d31b33ea","signature":"export const PendingApproval = () => ("},{"anchor":"S:4f265e8008","kind":"function","line":8,"name":"Approved","path_id":"F:13d31b33ea","signature":"export const Approved = () => ("},{"anchor":"S:93e0292f30","kind":"function","line":12,"name":"Protected","path_id":"F:13d31b33ea","signature":"export const Protected = () => ;"},{"anchor":"S:e80517f20b","kind":"interface","line":6,"name":"ActivationCheck","path_id":"F:14edab923f","signature":"export interface ActivationCheck"},{"anchor":"S:30eded078f","kind":"interface","line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f","signature":"export interface ActivationLadderProps"},{"anchor":"S:73a3da9f65","doc":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when every * prerequisite holds. Items marked o","kind":"function","line":46,"name":"ActivationLadder","path_id":"F:14edab923f","signature":"export function ActivationLadder("},{"anchor":"S:237d74cadf","kind":"function","line":21,"name":"parseScalar","path_id":"F:1575110130","signature":"function parseScalar(raw)"},{"anchor":"S:299c43d83e","kind":"function","line":40,"name":"stripQuotes","path_id":"F:1575110130","signature":"function stripQuotes(s)"},{"anchor":"S:0b7b39d873","doc":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string.","kind":"function","line":49,"name":"extractRawValue","path_id":"F:1575110130","signature":"function extractRawValue(afterColon)"},{"anchor":"S:b4a3093fe9","doc":"Count leading spaces to determine nesting depth.","kind":"function","line":66,"name":"indentOf","path_id":"F:1575110130","signature":"function indentOf(line)"},{"anchor":"S:bec355e18a","doc":"Parse an array of non-empty, non-comment lines into a nested object. Each entry is { indent, key, rawValue, isItem }, where a sequence-item line (\"- value\") has isItem: true and key: null.","kind":"function","line":75,"name":"parseEntries","path_id":"F:1575110130","signature":"function parseEntries(entries, start, minIndent)"},{"anchor":"S:8990e6571f","kind":"function","line":118,"name":"parseFlatYaml","path_id":"F:1575110130","signature":"export function parseFlatYaml(text)"},{"anchor":"S:5bac9ae6d5","kind":"function","line":151,"name":"formatScalarForYaml","path_id":"F:1575110130","signature":"function formatScalarForYaml(value)"},{"anchor":"S:efe9cb11d4","doc":"Patch one or more top-level (zero-indent) scalar keys in a config.yaml's raw text, line by line. Every other line, including every comment, is left untouched, so a hand-written config file survives an","kind":"function","line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130","signature":"export function patchTopLevelYaml(text, patch)"},{"anchor":"S:0b56ac32a5","kind":"const","line":1,"name":"MESSAGES","path_id":"F:179564da6f","signature":"export const MESSAGES ="},{"anchor":"S:1b14fa60f7","kind":"function","line":92,"name":"git","path_id":"F:18f569225a","signature":"function git(args, cwd)"},{"anchor":"S:34df99c630","kind":"function","line":98,"name":"makeGitFixture","path_id":"F:18f569225a","signature":"function makeGitFixture()"},{"anchor":"S:a3cae87964","kind":"function","line":109,"name":"makePlan","path_id":"F:18f569225a","signature":"function makePlan(role, roleDescriptor, transcriptSubdir, extra = {})"},{"anchor":"S:0eec918c49","kind":"function","line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a","signature":"function cleanupTranscripts()"},{"anchor":"S:0064b473e6","kind":"function","line":14,"name":"tmpQueue","path_id":"F:195e9217ca","signature":"function tmpQueue()"},{"anchor":"S:d240732a9d","kind":"function","line":18,"name":"sampleAction","path_id":"F:195e9217ca","signature":"function sampleAction(id, target = \"ci\")"},{"anchor":"S:05a5299b28","kind":"interface","line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae","signature":"export interface ConceptTileProps extends ButtonHTMLAttributes"},{"anchor":"S:14c08c7efc","doc":"A compact, focusable tile naming one engine concept: an icon, its name, and a short * category tag. Renders as a real button so it is keyboard-reachable on its own, meant * to be wrapped in a HoverCar","kind":"function","line":20,"name":"ConceptTile","path_id":"F:1a137480ae","signature":"export function ConceptTile({ icon, label, tag, className, ...rest }: ConceptTileProps)"},{"anchor":"S:76d7b21daf","doc":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary ceiling.","kind":"const","line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364","signature":"export const MAX_CONTROLS_PER_TAB = 10;"},{"anchor":"S:b840cddd67","kind":"function","line":20,"name":"readScreens","path_id":"F:1a19f02364","signature":"function readScreens(root)"},{"anchor":"S:7a05eaea5a","doc":"Every field in config.schema.json must resolve to either a literal reference in a screen (a real control, or read-only display) or a documented exemption in exposure.json. A plain substring search, no","kind":"function","line":34,"name":"auditCoverage","path_id":"F:1a19f02364","signature":"export function auditCoverage(root)"},{"anchor":"S:da2f845458","doc":"Splits a screen's source into one segment per tab (by source order, using the `{tab === \"id\" ?` marker this codebase's tabbed screens consistently use), or a single whole-file segment for screens with","kind":"function","line":57,"name":"splitByTabs","path_id":"F:1a19f02364","signature":"function splitByTabs(text)"},{"anchor":"S:6a7737bb57","kind":"function","line":66,"name":"extractTags","path_id":"F:1a19f02364","signature":"function extractTags(text, tagNames)"},{"anchor":"S:0ac24bec51","doc":"Two checks, both numeric: a screen/tab must not exceed the control-density budget, and every value-entry control (Toggle, NumberField, Slider, Select) must carry a hint. Input is excluded from the hin","kind":"function","line":76,"name":"auditCoherence","path_id":"F:1a19f02364","signature":"export function auditCoherence(root)"},{"anchor":"S:762b3eaf4a","kind":"function","line":17,"name":"Models","path_id":"F:1aa7cf650d","signature":"export const Models = () => ("},{"anchor":"S:8da618623d","kind":"function","line":18,"name":"headSha","path_id":"F:1bc6d1449f","signature":"function headSha()"},{"anchor":"S:fc01241f03","doc":"A config fixture with distinct maker/checker models and a models registry.","kind":"function","line":13,"name":"cfg","path_id":"F:1bcaaff9eb","signature":"function cfg(overrides = {})"},{"anchor":"S:55b15c0abb","doc":"A short, stable id from a string. Hex keeps it deterministic across platforms.","kind":"function","line":9,"name":"short","path_id":"F:1cf31c4792","signature":"function short(text, len = 10)"},{"anchor":"S:2e016b842d","kind":"function","line":13,"name":"fileAnchor","path_id":"F:1cf31c4792","signature":"export function fileAnchor(relPath)"},{"anchor":"S:00db09c5a8","kind":"function","line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792","signature":"export function symbolAnchor(relPath, name)"},{"anchor":"S:ab79b43633","doc":"Build the path dictionary from walked files. Returns { paths, pathIdByPath } where `paths` is the serializable { id -> relPath } map and `pathIdByPath` is the reverse lookup callers use to reference p","kind":"function","line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792","signature":"export function buildPathDictionary(relPaths)"},{"anchor":"S:63613c3a63","doc":"Build the symbol dictionary from API entries. Each entry carries its anchor, owning path id, name, and line, so an anchor resolves to an exact location.","kind":"function","line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792","signature":"export function buildSymbolDictionary(apiEntries)"},{"anchor":"S:a3ca73d34c","doc":"Lifecycle status of a learning: staged for review, or promoted into a permanent gate.","kind":"type","line":6,"name":"LearningStatus","path_id":"F:1d03291691","signature":"export type LearningStatus = \"staged\" | \"promoted\";"},{"anchor":"S:6cbed7ff26","doc":"Plain data shape for a single learning surfaced by the system. Components in this * package define their own shape rather than importing app-level types, so this * interface is the contract a host app","kind":"interface","line":13,"name":"LearningSummary","path_id":"F:1d03291691","signature":"export interface LearningSummary"},{"anchor":"S:8b9971d92a","kind":"interface","line":30,"name":"LearningCardProps","path_id":"F:1d03291691","signature":"export interface LearningCardProps"},{"anchor":"S:d293a69125","doc":"A card summarizing a single learning the system has surfaced: the lesson learned, * how old it is, what signal or evidence produced it, and its lifecycle status. * Staged learnings offer Promote and P","kind":"function","line":49,"name":"LearningCard","path_id":"F:1d03291691","signature":"export function LearningCard({ learning, onPromote, onPrune }: LearningCardProps)"},{"anchor":"S:14850052c8","kind":"interface","line":6,"name":"TabItem","path_id":"F:1db369d970","signature":"export interface TabItem"},{"anchor":"S:c68bb17ca2","kind":"interface","line":17,"name":"TabsProps","path_id":"F:1db369d970","signature":"export interface TabsProps"},{"anchor":"S:bd1a0a35f8","doc":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-selected`, and only the active tab is in th","kind":"function","line":35,"name":"Tabs","path_id":"F:1db369d970","signature":"export function Tabs({ tabs, active, onChange, className }: TabsProps)"},{"anchor":"S:d737cd7277","kind":"function","line":52,"name":"flagValue","path_id":"F:1e5ef6ba70","signature":"function flagValue(argv, name)"},{"anchor":"S:8f93f4689a","doc":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-024: even an armed engine will not rewri","kind":"function","line":60,"name":"armState","path_id":"F:1e5ef6ba70","signature":"function armState(root, env = process.env)"},{"anchor":"S:46d884501c","kind":"function","line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70","signature":"function armingBlockers(arm)"},{"anchor":"S:baa16abe42","kind":"function","line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70","signature":"function targetIdentity(argv)"},{"anchor":"S:6140d7ae56","kind":"function","line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70","signature":"function identityUsable(id)"},{"anchor":"S:edeb959111","doc":"Gather the branch-unique commit range oldest-first with the fields the applier needs: tree object, first parent, author and committer identity and dates, and raw message. Enforces the protected-histor","kind":"function","line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70","signature":"function gatherRange()"},{"anchor":"S:4bc9723575","doc":"Advisory range for `plan`: tolerant of a missing origin/main so the proposal works in a fresh clone. Newest-first from git log; reversed to oldest-first for stable output.","kind":"function","line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70","signature":"function advisoryRange()"},{"anchor":"S:59807c1a98","kind":"function","line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70","signature":"function buildPlan(branch, commits, identity)"},{"anchor":"S:2484ffb006","kind":"function","line":142,"name":"printPlan","path_id":"F:1e5ef6ba70","signature":"function printPlan(plan, identity)"},{"anchor":"S:e7f49cafe1","kind":"function","line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70","signature":"function isDirtyTracked()"},{"anchor":"S:e2861b1099","kind":"function","line":173,"name":"rollback","path_id":"F:1e5ef6ba70","signature":"function rollback(savedHead)"},{"anchor":"S:e8b27564c5","doc":"Replay the range from the first changed commit forward, reusing each original tree object so the rewrite is metadata-only. Verifies tree-SHA invariance per commit and rolls back on any failure. Return","kind":"function","line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70","signature":"function applyPlan(commits, plan)"},{"anchor":"S:b97efe3854","kind":"function","line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70","signature":"function cmdPlan(argv)"},{"anchor":"S:69db4ad7cc","kind":"function","line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70","signature":"function cmdApply(argv, root)"},{"anchor":"S:602e030d27","kind":"function","line":297,"name":"main","path_id":"F:1e5ef6ba70","signature":"function main(argv)"},{"anchor":"S:5a6c3aef24","kind":"class","line":7,"name":"OrderService","path_id":"F:1ecd18c4b9","signature":"export class OrderService"},{"anchor":"S:a2fef04067","kind":"function","line":4,"name":"Budget","path_id":"F:1f40b6eb6e","signature":"export const Budget = () => ("},{"anchor":"S:2ed4ecfad7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4","signature":"export const MESSAGES ="},{"anchor":"S:8c2cd9c54f","doc":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mjs.","kind":"function","line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca","signature":"export function buildProposalReviewPrompt(proposal, checkerModel, authorLabel)"},{"anchor":"S:ebd259dfef","doc":"Resolve the checker and plan its review of a proposal, without calling a model. * * @returns {{ checker: object, authorLabel: string, proposal: string, prompt: string }}","kind":"function","line":43,"name":"planProposalReview","path_id":"F:2127a8caca","signature":"export function planProposalReview(cfg, { proposal, authorLabel = \"an external author\" } = {})"},{"anchor":"S:a1cc5660fe","doc":"A garbled review, or one with no explicit marker, must NOT read as an approval: a proposal is admitted to the backlog only on an explicit APPROVE: yes. Fail closed.","kind":"function","line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca","signature":"export function parseProposalVerdict(text)"},{"anchor":"S:3fc87c5f7e","doc":"Plan the proposal review and, under execute:true, run the checker on its endpoint. * The live path supports the openai-http transport (a local or free/gateway model), * matching the local-first cost s","kind":"function","line":73,"name":"reviewProposal","path_id":"F:2127a8caca","signature":"export async function reviewProposal(cfg, { proposal, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:537ea4dfe0","kind":"type","line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4","signature":"export type ToggleTone = \"primary\" | \"info\" | \"owner\";"},{"anchor":"S:cd836c2fc7","kind":"interface","line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4","signature":"export interface ToggleProps"},{"anchor":"S:84b00e90de","doc":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a checkbox so the on/off semantics are anno","kind":"function","line":28,"name":"Toggle","path_id":"F:214cc0a5f4","signature":"export function Toggle("},{"anchor":"S:b919653baa","kind":"function","line":44,"name":"DryRun","path_id":"F:2207a6ebce","signature":"export const DryRun = () => ("},{"anchor":"S:ea5d04ea13","kind":"function","line":48,"name":"Armed","path_id":"F:2207a6ebce","signature":"export const Armed = () => ("},{"anchor":"S:e193570e9e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc","signature":"export const MESSAGES ="},{"anchor":"S:7cd45cbc03","kind":"function","line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e","signature":"function formatYamlScalar(value)"},{"anchor":"S:1c5d801590","doc":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent scalar or array keys are touched here; ","kind":"function","line":70,"name":"patchYamlText","path_id":"F:22566cb46e","signature":"function patchYamlText(text, patch)"},{"anchor":"S:15b3a95566","doc":"Locate a top-level `key:` block-opening line (a zero-indent key whose value is empty, meaning what follows is a nested map) and the half-open [start, end) line range it and its indented content occupy","kind":"function","line":100,"name":"findBlock","path_id":"F:22566cb46e","signature":"function findBlock(lines, key)"},{"anchor":"S:aa8f9a7b3d","doc":"Split a block's interior lines into ordered segments: a real entry (a line at exactly ENTRY_INDENT spaces naming a key, plus every following line indented deeper than that), or \"other\" (blank lines, a","kind":"function","line":122,"name":"captureSegments","path_id":"F:22566cb46e","signature":"function captureSegments(lines, start, end)"},{"anchor":"S:c3a1d0f1a7","kind":"function","line":151,"name":"serializeEntry","path_id":"F:22566cb46e","signature":"function serializeEntry(topKey, entryKey, value)"},{"anchor":"S:af28852c7f","kind":"function","line":169,"name":"deepEqualJson","path_id":"F:22566cb46e","signature":"function deepEqualJson(a, b)"},{"anchor":"S:2eef7d840d","doc":"Reconcile one nested map's block against its new value, entry by entry. An entry present in both, unchanged, is copied verbatim (comments and all); a changed entry is re-serialized (dropping any comme","kind":"function","line":180,"name":"rewriteBlock","path_id":"F:22566cb46e","signature":"function rewriteBlock(lines, topKey, oldValue, newValue)"},{"anchor":"S:b06714d9c5","kind":"function","line":225,"name":"patchConfig","path_id":"F:22566cb46e","signature":"export function patchConfig(modonomeDir, patch)"},{"anchor":"S:8b67ef3e8b","kind":"function","line":266,"name":"workItemFile","path_id":"F:22566cb46e","signature":"function workItemFile(modonomeDir, itemId)"},{"anchor":"S:fd9d32de9a","kind":"function","line":272,"name":"releaseLease","path_id":"F:22566cb46e","signature":"export function releaseLease(modonomeDir, itemId)"},{"anchor":"S:d7086f2a5b","kind":"function","line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e","signature":"function loadConfigForValidation(modonomeDir)"},{"anchor":"S:f22a53ac17","kind":"function","line":305,"name":"createWorkItem","path_id":"F:22566cb46e","signature":"export function createWorkItem(modonomeDir, input)"},{"anchor":"S:a4e623c70b","doc":"Metadata-only edit: type, assigned_role, allowed_edit_set, gates, max_attempts, and touches_protected_path are safe to change regardless of the item's current state, including in flight, since none of","kind":"function","line":354,"name":"updateWorkItem","path_id":"F:22566cb46e","signature":"export function updateWorkItem(modonomeDir, itemId, patch)"},{"anchor":"S:14cb0e8cbb","doc":"Refuses outright for any in-flight state, regardless of whether its lease has technically expired: an item past \"queued\" represents real record of what happened (a branch, a PR, attempts, a maker iden","kind":"function","line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e","signature":"export function deleteWorkItem(modonomeDir, itemId)"},{"anchor":"S:e152142e8c","doc":"Merge a patch of { id: { severity?, text?, suppressed? } } into .modonome/messages.yaml's overrides map, re-validate against both the schema and the severity-floor rule (the same checkOverridesIntegri","kind":"function","line":399,"name":"patchMessages","path_id":"F:22566cb46e","signature":"export function patchMessages(modonomeDir, patch)"},{"anchor":"S:5b0e153cfb","kind":"function","line":424,"name":"pruneLearning","path_id":"F:22566cb46e","signature":"export function pruneLearning(modonomeDir, lesson)"},{"anchor":"S:a931ad2e62","doc":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns {string} the concatenated committed prom","kind":"function","line":46,"name":"resolvePromptText","path_id":"F:23917c6197","signature":"export function resolvePromptText(root)"},{"anchor":"S:0a5fed1978","doc":"Load every fixture JSON file from a directory. * @param {string} dir directory holding fixture *.json files * @returns {Array} parsed fixture objects, sorted by file name for stable output","kind":"function","line":59,"name":"loadFixtures","path_id":"F:23917c6197","signature":"export function loadFixtures(dir)"},{"anchor":"S:407ded8730","doc":"Evaluate one fixture against the committed prompt text. A fixture is ok only when * every one of its anchors is present, meaning the governing rule that produces its * golden decision still exists in ","kind":"function","line":79,"name":"evaluateFixture","path_id":"F:23917c6197","signature":"export function evaluateFixture(fixture, promptText)"},{"anchor":"S:c2e641f1c8","doc":"Run the whole suite: load fixtures, resolve prompt text, evaluate each. * @param {string} root repository root * @param {string} fixturesDir directory holding fixtures * @returns {{ results: Array<{id","kind":"function","line":106,"name":"runSuite","path_id":"F:23917c6197","signature":"export function runSuite(root, fixturesDir)"},{"anchor":"S:87ceb91d57","kind":"const","line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76","signature":"export const MESSAGES ="},{"anchor":"S:b5883cd7f4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:240ace7a8f","signature":"export const MESSAGES ="},{"anchor":"S:76171943e3","kind":"function","line":7,"name":"canonicalize","path_id":"F:245efb551c","signature":"export function canonicalize(value)"},{"anchor":"S:781c4112a2","doc":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another.","kind":"const","line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c","signature":"export const PACKET_DOMAIN = 'modonome.knowledge-packet.v1\\n';"},{"anchor":"S:210b0c6999","doc":"The exact bytes a packet signature covers: the domain tag followed by the JCS of the packet with its signature object removed.","kind":"function","line":26,"name":"signedBytes","path_id":"F:245efb551c","signature":"export function signedBytes(packet)"},{"anchor":"S:c44da37a7d","kind":"function","line":12,"name":"Dashboard","path_id":"F:2470e60179","signature":"export const Dashboard = () => ("},{"anchor":"S:7d5af2fca1","kind":"function","line":22,"name":"Staged","path_id":"F:250c8a0d4a","signature":"export const Staged = () => ("},{"anchor":"S:dd05df51d3","kind":"function","line":26,"name":"Promoted","path_id":"F:250c8a0d4a","signature":"export const Promoted = () => ;"},{"anchor":"S:4df7a92e8e","kind":"function","line":15,"name":"registerAdapter","path_id":"F:2554ddd30c","signature":"export function registerAdapter(adapter)"},{"anchor":"S:a07487517b","doc":"Resolve the adapter for a path by extension, defaulting to the generic fallback.","kind":"function","line":25,"name":"getAdapter","path_id":"F:2554ddd30c","signature":"export function getAdapter(relPath)"},{"anchor":"S:ec18e42e1a","doc":"Extract from one file, guarding against any adapter error so a single bad file never aborts a whole snapshot.","kind":"function","line":32,"name":"extractFile","path_id":"F:2554ddd30c","signature":"export function extractFile(relPath, source)"},{"anchor":"S:2fbd29545b","kind":"function","line":42,"name":"nestedMapChanged","path_id":"F:25e649633c","signature":"function nestedMapChanged(a: Record | undefined, b: Record | undefined): boolean"},{"anchor":"S:ea841eb82d","kind":"function","line":49,"name":"diffConfig","path_id":"F:25e649633c","signature":"export function diffConfig(base: ModonomeConfig, edited: ModonomeConfig): Partial"},{"anchor":"S:4426823827","kind":"interface","line":5,"name":"NavItem","path_id":"F:268769c4a6","signature":"export interface NavItem"},{"anchor":"S:a4155f5067","kind":"interface","line":16,"name":"AppShellProps","path_id":"F:268769c4a6","signature":"export interface AppShellProps"},{"anchor":"S:24b854ce78","doc":"The Modonome brand mark: a teal ring with a check on the dark ground.","kind":"function","line":36,"name":"BrandMark","path_id":"F:268769c4a6","signature":"function BrandMark()"},{"anchor":"S:5154763a93","doc":"The application frame: a fixed sidebar of primary navigation, a sticky top bar for * the mode switch and arming status, and a scrollable content column. It establishes * the mdn-root wrapper (the dark","kind":"function","line":60,"name":"AppShell","path_id":"F:268769c4a6","signature":"export function AppShell("},{"anchor":"S:33dfee21e3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2715f09f24","signature":"export const MESSAGES ="},{"anchor":"S:df7e6c1db0","kind":"function","line":4,"name":"Disabled","path_id":"F:28b7af3c53","signature":"export const Disabled = () => ;"},{"anchor":"S:36be7c4ac5","kind":"function","line":6,"name":"DryRun","path_id":"F:28b7af3c53","signature":"export const DryRun = () => ;"},{"anchor":"S:813f68335e","kind":"function","line":8,"name":"Armed","path_id":"F:28b7af3c53","signature":"export const Armed = () => ;"},{"anchor":"S:28578fa81a","kind":"function","line":10,"name":"Large","path_id":"F:28b7af3c53","signature":"export const Large = () => ;"},{"anchor":"S:bd9f62784d","doc":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker that only reads the rationale and skims ","kind":"const","line":5,"name":"scenario","path_id":"F:28f278b1d9","signature":"export const scenario ="},{"anchor":"S:d595535449","kind":"function","line":9,"name":"names","path_id":"F:2a74ae3f05","signature":"function names(result)"},{"anchor":"S:a5baaff840","kind":"function","line":12,"name":"modules","path_id":"F:2a74ae3f05","signature":"function modules(result)"},{"anchor":"S:b9942b1651","kind":"function","line":11,"name":"runRatchet","path_id":"F:2b49c74e74","signature":"function runRatchet(diffFile)"},{"anchor":"S:015c572711","doc":"Hash raw file bytes (Buffer or string) into a prefixed digest.","kind":"function","line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca","signature":"export function hashFileContent(bytes)"},{"anchor":"S:b926c18911","doc":"Hash an arbitrary string, used for oversized or unreadable files where content is represented by a stable stand-in rather than its bytes.","kind":"function","line":15,"name":"hashString","path_id":"F:2b9c43b0ca","signature":"export function hashString(text)"},{"anchor":"S:a320bea4da","doc":"Build a Merkle tree from file leaves. `entries` is [{ relPath, hash }]. Returns { root, nodes } where nodes maps every directory path (root is \".\") to its hash.","kind":"function","line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca","signature":"export function buildMerkleTree(entries)"},{"anchor":"S:85c852fd1a","doc":"File-level diff between two { relPath -> hash } maps. Returns sorted lists of added, removed, and changed paths. Directory node hashes (from buildMerkleTree) let a caller skip re-extracting an unchang","kind":"function","line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca","signature":"export function diffMerkle(prevFiles, nextFiles)"},{"anchor":"S:ad4edf7e81","kind":"function","line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861","signature":"def test_total_sums_prices()"},{"anchor":"S:54d2db3f99","doc":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50%, etc.) to verify correct discount calc","kind":"function","line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861","signature":"def test_apply_discount_zero_percent()"},{"anchor":"S:93fa315ac7","kind":"function","line":48,"name":"fail","path_id":"F:2d4c555ba1","signature":"function fail(code, message)"},{"anchor":"S:8252cf2ba8","kind":"function","line":52,"name":"warn","path_id":"F:2d4c555ba1","signature":"function warn(code, message)"},{"anchor":"S:003e6c53c4","kind":"function","line":56,"name":"info","path_id":"F:2d4c555ba1","signature":"function info(code, message)"},{"anchor":"S:5ef7e9a80c","doc":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into approving itself (the new attack surface a","kind":"function","line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990","signature":"export function buildReviewPrompt(diff, checkerModel, authorLabel)"},{"anchor":"S:d5a9bb4227","kind":"function","line":47,"name":"capDiff","path_id":"F:2d6ef08990","signature":"function capDiff(diff)"},{"anchor":"S:fb6bf396bc","doc":"Resolve the checker and plan its review of a diff, without calling any model. * Enforces checker independence: when the change's maker model is known and distinct * models are required, the checker mu","kind":"function","line":61,"name":"planReview","path_id":"F:2d6ef08990","signature":"export function planReview(cfg, { diff, makerModel = null, authorLabel = \"an external author\" } = {})"},{"anchor":"S:9ab63d4bb2","doc":"Extract a coarse structured verdict from the checker's free text. Deliberately simple: the summary is the first line, REQUEST_CHANGES drives the requestChanges flag. A missing marker is treated as \"no","kind":"function","line":83,"name":"parseVerdict","path_id":"F:2d6ef08990","signature":"export function parseVerdict(text)"},{"anchor":"S:bca7722767","doc":"Plan the review and, under execute:true, run the checker on its configured endpoint. * The spike's live path supports the openai-http transport (a local or free/gateway * model, matching the local-fir","kind":"function","line":100,"name":"reviewDiff","path_id":"F:2d6ef08990","signature":"export async function reviewDiff(cfg, { diff, makerModel, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:568ac62670","doc":"--- CLI ---------------------------------------------------------------------","kind":"function","line":124,"name":"parseArgs","path_id":"F:2d6ef08990","signature":"function parseArgs(argv)"},{"anchor":"S:f12376c7b1","kind":"function","line":136,"name":"readDiff","path_id":"F:2d6ef08990","signature":"function readDiff(path)"},{"anchor":"S:2d24ebcbdf","doc":"A markdown block for a human, and for GitHub Actions the same block lands in the job summary when the workflow redirects stdout to $GITHUB_STEP_SUMMARY.","kind":"function","line":143,"name":"renderReport","path_id":"F:2d6ef08990","signature":"function renderReport({ plan, executed, review })"},{"anchor":"S:118e66be10","doc":"Minimal argv helper shared by scripts that take `--flag value` pairs.","kind":"function","line":2,"name":"flagValue","path_id":"F:2d93cea2d4","signature":"export function flagValue(argv, name)"},{"anchor":"S:4bacff1244","kind":"function","line":15,"name":"fileExists","path_id":"F:2e327963ed","signature":"function fileExists(root, ...candidates)"},{"anchor":"S:41050d03a4","kind":"function","line":19,"name":"readIfExists","path_id":"F:2e327963ed","signature":"function readIfExists(root, rel)"},{"anchor":"S:1be3814c77","kind":"function","line":24,"name":"listWorkflows","path_id":"F:2e327963ed","signature":"function listWorkflows(root)"},{"anchor":"S:8f1da92228","doc":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object.","kind":"function","line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed","signature":"export function detectRepoFacts(root)"},{"anchor":"S:74bea9ecdf","doc":"A criterion entry: a stable id, the framework and level, whether the observed facts satisfy it, and the evidence or remediation note.","kind":"function","line":59,"name":"criterion","path_id":"F:2e327963ed","signature":"function criterion(id, framework, level, met, evidence)"},{"anchor":"S:8e94f927e1","doc":"Map observed facts to criteria across the supported frameworks. Pure.","kind":"function","line":64,"name":"mapToCriteria","path_id":"F:2e327963ed","signature":"export function mapToCriteria(facts)"},{"anchor":"S:a0db477c6e","kind":"function","line":90,"name":"summarize","path_id":"F:2e327963ed","signature":"export function summarize(criteria)"},{"anchor":"S:f93b3b8c7c","kind":"function","line":95,"name":"buildEvidence","path_id":"F:2e327963ed","signature":"export function buildEvidence(root, generatedAt)"},{"anchor":"S:43f1c85009","kind":"function","line":108,"name":"renderMarkdown","path_id":"F:2e327963ed","signature":"export function renderMarkdown(evidence)"},{"anchor":"S:b6efca77f5","kind":"function","line":17,"name":"basename","path_id":"F:2f3e98ab2c","signature":"function basename(path)"},{"anchor":"S:e2afc6b75b","kind":"function","line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c","signature":"export function isContentExempt(path)"},{"anchor":"S:1562160a7c","kind":"function","line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c","signature":"export function isJsTsScope(path)"},{"anchor":"S:c0981a3461","kind":"function","line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c","signature":"export function isPythonScope(path)"},{"anchor":"S:4195e187b2","kind":"function","line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c","signature":"export function isWorkflowScope(path)"},{"anchor":"S:732a1c21fe","kind":"function","line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerComposeScope(path)"},{"anchor":"S:d25b3fbe33","kind":"function","line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerfileScope(path)"},{"anchor":"S:55386d6b24","kind":"function","line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c","signature":"export function isK8sScope(path)"},{"anchor":"S:2216bfd660","kind":"function","line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c","signature":"export function isTerraformScope(path)"},{"anchor":"S:f88ca29ea3","kind":"function","line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c","signature":"export function isBroadScope(path)"},{"anchor":"S:823d7fa306","kind":"const","line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c","signature":"export const PROTECTED_PATH_GLOBS = ["},{"anchor":"S:2dc33a851f","kind":"function","line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c","signature":"function globToRegExp(glob)"},{"anchor":"S:5e20ef9f71","kind":"function","line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c","signature":"export function matchesProtectedPath(path)"},{"anchor":"S:bb036fe763","kind":"function","line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripSameLineNoise(rawLine)"},{"anchor":"S:7d38304e55","kind":"function","line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripPythonSameLineNoise(line)"},{"anchor":"S:cf9f3a025e","doc":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the ","kind":"function","line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c","signature":"export function stripHashComment(line)"},{"anchor":"S:d9eda62ca5","kind":"function","line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c","signature":"export function stripForScope(path, line)"},{"anchor":"S:e4bb79a957","kind":"function","line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c","signature":"export function redactMatchedText(text, opts = {})"},{"anchor":"S:ec6c0b3d73","kind":"const","line":245,"name":"RULES","path_id":"F:2f3e98ab2c","signature":"export const RULES = ["},{"anchor":"S:02759ae11a","kind":"const","line":955,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c","signature":"export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));"},{"anchor":"S:c504685956","kind":"interface","line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee","signature":"export interface EmptyStateProps"},{"anchor":"S:80e9a1f555","doc":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it","kind":"function","line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee","signature":"export function EmptyState({ title, message, icon = \"queue\", action }: EmptyStateProps)"},{"anchor":"S:baacff5701","kind":"interface","line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee","signature":"export interface LoadingStateProps"},{"anchor":"S:0a9b63cb4b","doc":"Centered spinner with a label, used while a screen or panel is fetching data. * The spinner is a decorative rotating ring; the label carries the accessible * status via `role=\"status\"` so assistive te","kind":"function","line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee","signature":"export function LoadingState({ label = \"Loading\" }: LoadingStateProps)"},{"anchor":"S:9382da6a24","kind":"interface","line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee","signature":"export interface ErrorStateProps"},{"anchor":"S:78e9af551d","doc":"Danger-toned placeholder for a screen or panel that failed to load. Pairs the * danger color with an alert icon and text so the failure is never color-only. * Use `role=\"alert\"` semantics are carried ","kind":"function","line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee","signature":"export function ErrorState({ title = \"Something went wrong\", message, action }: ErrorStateProps)"},{"anchor":"S:79676d74df","kind":"interface","line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee","signature":"export interface PermissionDeniedStateProps"},{"anchor":"S:3800b0c645","doc":"Owner-toned placeholder shown when the current actor lacks the role needed to * view or act on a screen. Pairs the owner color with a lock icon and text so the * restriction is never color-only.","kind":"function","line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee","signature":"export function PermissionDeniedState("},{"anchor":"S:fc6f0e771f","kind":"type","line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94","signature":"export type StatusPillTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:0518e5f603","kind":"type","line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94","signature":"export type StatusPillSize = \"sm\" | \"md\";"},{"anchor":"S:c850118bb2","kind":"interface","line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94","signature":"export interface StatusPillProps extends HTMLAttributes"},{"anchor":"S:eb647d4678","doc":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or dot) so * the status reads correctly even ","kind":"function","line":27,"name":"StatusPill","path_id":"F:2fc610bd94","signature":"export function StatusPill("},{"anchor":"S:35a01a919e","doc":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative when present preserves every existing confi","kind":"function","line":45,"name":"primaryModel","path_id":"F:304ce7b89d","signature":"function primaryModel(roleCfg, roleDefaults)"},{"anchor":"S:0713a27a1f","kind":"function","line":51,"name":"resolveRole","path_id":"F:304ce7b89d","signature":"export function resolveRole(cfg, role)"},{"anchor":"S:433f196465","doc":"Resolve a role's prioritized model list into an ordered array of fully-resolved model descriptors, highest priority first. Source is roleCfg.models when present, else the single primary model, so a ro","kind":"function","line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d","signature":"export function resolveRoleModelChain(cfg, role)"},{"anchor":"S:5aed523637","doc":"Pick the first model in a chain that is affordable under the daily budget, so a prioritized list falls back from a paid frontier choice to a free or local one when no budget is set. A local or free mo","kind":"function","line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d","signature":"export function selectUsableModel(chain, { budgetUsdPerDay = 0 } = {})"},{"anchor":"S:a2d5fcb920","doc":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duties * contract (distinct maker, checker, ","kind":"function","line":13,"name":"GatesScreen","path_id":"F:304fa8ef33","signature":"export function GatesScreen({ state }: { state: PanelState })"},{"anchor":"S:b6cbeed65d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:313bcfac46","signature":"export const MESSAGES ="},{"anchor":"S:6425f5a6c7","kind":"function","line":10,"name":"WithLeases","path_id":"F:31658eff0b","signature":"export const WithLeases = () => {}} />;"},{"anchor":"S:618d055a7c","doc":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and import edges. Bodies are never included. e","kind":"function","line":5,"name":"clean","path_id":"F:3213d03b72","signature":"function clean(text)"},{"anchor":"S:37c1996b57","kind":"function","line":10,"name":"signature","path_id":"F:3213d03b72","signature":"function signature(line)"},{"anchor":"S:1bafda617f","doc":"The docstring is the first triple-quoted string on the line(s) after a def/class.","kind":"function","line":15,"name":"docBelow","path_id":"F:3213d03b72","signature":"function docBelow(lines, defIndex)"},{"anchor":"S:82727ee8e7","kind":"function","line":35,"name":"collectImports","path_id":"F:3213d03b72","signature":"function collectImports(trimmed, lineNo, out)"},{"anchor":"S:aaa1eac555","kind":"const","line":47,"name":"adapter","path_id":"F:3213d03b72","signature":"export const adapter ="},{"anchor":"S:a63cef8ef8","kind":"function","line":4,"name":"Armed","path_id":"F:3319e5c923","signature":"export const Armed = () => ("},{"anchor":"S:e25d17a09c","kind":"function","line":17,"name":"SafeDefaults","path_id":"F:3319e5c923","signature":"export const SafeDefaults = () => ("},{"anchor":"S:457f8a5e17","doc":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi","kind":"const","line":4,"name":"MESSAGES","path_id":"F:33c4d744f3","signature":"export const MESSAGES ="},{"anchor":"S:4b38793395","doc":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal","kind":"const","line":8,"name":"scenario","path_id":"F:34ca4e55d1","signature":"export const scenario ="},{"anchor":"S:f794e6adf4","kind":"function","line":6,"name":"typeOf","path_id":"F:34cb2b6c48","signature":"function typeOf(value)"},{"anchor":"S:0768a4cf0f","kind":"function","line":13,"name":"matchesType","path_id":"F:34cb2b6c48","signature":"function matchesType(value, type)"},{"anchor":"S:52913852e3","kind":"function","line":22,"name":"validate","path_id":"F:34cb2b6c48","signature":"export function validate(schema, value, path = \"$\", errors = [])"},{"anchor":"S:4b7a72e608","kind":"type","line":4,"name":"Role","path_id":"F:35c6d59157","signature":"export type Role ="},{"anchor":"S:fdc2a33d21","kind":"type","line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157","signature":"export type RoleBadgeSize = \"sm\" | \"md\";"},{"anchor":"S:e3f95000e0","kind":"interface","line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157","signature":"export interface RoleBadgeProps"},{"anchor":"S:301cb496d5","doc":"A labeled chip identifying a governance actor or role, pairing an icon with the * human-readable name. The four core review actors (maker, checker, merge authority, * owner) get distinct accent colors","kind":"function","line":72,"name":"RoleBadge","path_id":"F:35c6d59157","signature":"export function RoleBadge({ role, size = \"md\" }: RoleBadgeProps)"},{"anchor":"S:35902c8cc1","kind":"const","line":1,"name":"MESSAGES","path_id":"F:35d4a12b63","signature":"export const MESSAGES ="},{"anchor":"S:61ec9209fc","kind":"function","line":22,"name":"matchSymbol","path_id":"F:36419aa427","signature":"function matchSymbol(trimmed)"},{"anchor":"S:500f4c1cd3","kind":"function","line":30,"name":"cleanSignature","path_id":"F:36419aa427","signature":"function cleanSignature(trimmed)"},{"anchor":"S:3602dcc44c","kind":"function","line":37,"name":"cleanDoc","path_id":"F:36419aa427","signature":"function cleanDoc(text)"},{"anchor":"S:df1472b647","kind":"function","line":47,"name":"docAbove","path_id":"F:36419aa427","signature":"function docAbove(lines, index)"},{"anchor":"S:ac015d1f81","kind":"function","line":67,"name":"collectImports","path_id":"F:36419aa427","signature":"function collectImports(trimmed, lineNo)"},{"anchor":"S:70c4ff437c","kind":"const","line":80,"name":"adapter","path_id":"F:36419aa427","signature":"export const adapter ="},{"anchor":"S:65d6e9b42e","kind":"function","line":112,"name":"dedupeImports","path_id":"F:36419aa427","signature":"function dedupeImports(imports)"},{"anchor":"S:442c9dff6c","kind":"function","line":5,"name":"makeGateway","path_id":"F:373a946d5c","signature":"function makeGateway()"},{"anchor":"S:af1450421c","doc":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the github-models provider (needs models:re","kind":"function","line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e","signature":"export function classifyEndpoint(role)"},{"anchor":"S:cbbe6a270b","doc":"A base_url points at a private/self-hosted host when its hostname is localhost, a loopback address, a *.local mDNS name, or an RFC1918 range.","kind":"function","line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e","signature":"function isPrivateHost(baseUrl)"},{"anchor":"S:ff45c441d1","doc":"Decide whether a runner target can reach a role's endpoint. A target declares * its reach with optional fields on its config entry: * reachable_providers: provider names it can call (for example [\"loc","kind":"function","line":67,"name":"canReach","path_id":"F:37f4a5c04e","signature":"export function canReach(target, roleEndpoint)"},{"anchor":"S:55ee648216","doc":"Resolve the required execution target (environment id) for a role's model * endpoint. Reads cfg.runners and returns the first target that both declares an * environment and can reach the endpoint, pre","kind":"function","line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e","signature":"export function resolveExecutionTarget(role, cfg, overrides = {})"},{"anchor":"S:2a28972ca4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3835919e8e","signature":"export const MESSAGES ="},{"anchor":"S:a9b3acb352","kind":"function","line":16,"name":"writeRunLog","path_id":"F:3b382f95c0","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:4118076b3e","kind":"function","line":29,"name":"pad","path_id":"F:3b382f95c0","signature":"function pad(s, n) { return String(s).padEnd(n); }"},{"anchor":"S:0ba2f17fcf","kind":"function","line":30,"name":"rpad","path_id":"F:3b382f95c0","signature":"function rpad(s, n) { return String(s).padStart(n); }"},{"anchor":"S:02e9b6beea","kind":"function","line":32,"name":"parseMetrics","path_id":"F:3b382f95c0","signature":"function parseMetrics()"},{"anchor":"S:5962011a99","kind":"function","line":41,"name":"summarize","path_id":"F:3b382f95c0","signature":"function summarize(events)"},{"anchor":"S:b288f69305","kind":"function","line":76,"name":"agentproofScore","path_id":"F:3b382f95c0","signature":"function agentproofScore()"},{"anchor":"S:145bc035b8","kind":"function","line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0","signature":"function listFilesRecursive(dir, matches, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:5967648d07","doc":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple heuristic, not a full doc-coverage analysi","kind":"function","line":116,"name":"isDocumented","path_id":"F:3b382f95c0","signature":"function isDocumented(filePath)"},{"anchor":"S:98d9caecec","doc":"Advisory, bounded heuristic: an exported symbol is a \"dead code suspect\" when its declared name never appears again (by plain text match) anywhere else under scripts/ or tests/. This is a name-collisi","kind":"function","line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0","signature":"function findExportedSymbols(filePath)"},{"anchor":"S:cab6ecab70","kind":"function","line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0","signature":"export function computeDeadCodeSuspects(sourceFiles, root, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:62f42e9591","doc":"Computes a deterministic, offline snapshot of repo-impact metrics rooted at `root` (a directory containing scripts/, tests/, docs/). Pure aside from filesystem reads; never writes anything.","kind":"function","line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function computeImpactSnapshot(root)"},{"anchor":"S:882efb23a5","doc":"Reads the newest run log under runsDir that carries an `impact` field. Returns null if none exists (first run, no baseline).","kind":"function","line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function findPriorImpactSnapshot(runsDir)"},{"anchor":"S:d444b209b8","doc":"Pure delta computation: current minus prior for each numeric field. When prior is null/undefined, returns a \"first run, no baseline\" marker instead of numeric deltas.","kind":"function","line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0","signature":"export function computeImpactDelta(current, prior)"},{"anchor":"S:bafcfbb33c","kind":"function","line":224,"name":"formatDelta","path_id":"F:3b382f95c0","signature":"function formatDelta(n)"},{"anchor":"S:b6eeacb415","kind":"function","line":4,"name":"Requirement","path_id":"F:3b4065b679","signature":"export const Requirement = () => ("},{"anchor":"S:35e362f448","kind":"function","line":79,"name":"emit","path_id":"F:3b96b6dfed","signature":"function emit(format, decision, reason)"},{"anchor":"S:073124e2d8","kind":"function","line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed","signature":"function extractFromClaudeToolInput(toolName, input, cwd)"},{"anchor":"S:40cce153df","doc":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor beforeShellExecution payload carries `comma","kind":"function","line":135,"name":"extractChange","path_id":"F:3b96b6dfed","signature":"function extractChange(payload)"},{"anchor":"S:f2e55d9b4a","kind":"function","line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed","signature":"function guessFileFromCommand(cmd)"},{"anchor":"S:209a48ca7f","doc":"Best-effort parse of a `sed 's/PATTERN/REPLACEMENT/'` (or `#`, `|`, `,`, `@` delimited) substitution. This is the one shell idiom common enough, and structured enough, to reliably recover a real befor","kind":"function","line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed","signature":"function parseSedReplacement(cmd)"},{"anchor":"S:485d7c5e96","kind":"function","line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed","signature":"function unescapeSed(s)"},{"anchor":"S:4214f7fa01","doc":"Best-effort parse of a shell redirect target (`> file`, `>> file`), which names the exact file the command is about to write, stronger than any token guess.","kind":"function","line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed","signature":"function parseRedirectTarget(cmd)"},{"anchor":"S:2305f3725a","kind":"function","line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed","signature":"function diffForCommand(cmd)"},{"anchor":"S:d761c7660a","kind":"function","line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed","signature":"function diffForReplace(filePath, oldText, newText)"},{"anchor":"S:2df1658785","kind":"function","line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed","signature":"function diffForMultiEdit(filePath, edits)"},{"anchor":"S:ae3c96ae84","kind":"function","line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed","signature":"function diffForWrite(filePath, content, cwd)"},{"anchor":"S:7d253ea6b0","kind":"function","line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed","signature":"function buildSyntheticDiff(change)"},{"anchor":"S:8761033dfb","kind":"function","line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed","signature":"function runGuardRatchet(diffText)"},{"anchor":"S:12c1e0f104","kind":"function","line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed","signature":"function formatDenyReason(findings)"},{"anchor":"S:745c98231d","kind":"function","line":338,"name":"main","path_id":"F:3b96b6dfed","signature":"function main()"},{"anchor":"S:efea80af4e","doc":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying the * control-panel requirement of a co","kind":"function","line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e","signature":"export function ConfirmProvider({ children }: { children: ReactNode })"},{"anchor":"S:7989466d34","kind":"function","line":59,"name":"useConfirm","path_id":"F:3c479cac6e","signature":"export function useConfirm(): ConfirmFn"},{"anchor":"S:b908c74a11","kind":"function","line":5,"name":"makeDb","path_id":"F:3c53926ecd","signature":"function makeDb()"},{"anchor":"S:225c7a7d84","kind":"function","line":21,"name":"Open","path_id":"F:3ce0fd77eb","signature":"export const Open = () => {}} />;"},{"anchor":"S:a2df9a5c24","kind":"function","line":23,"name":"Resolved","path_id":"F:3ce0fd77eb","signature":"export const Resolved = () => ;"},{"anchor":"S:7c44412e8a","kind":"function","line":4,"name":"WithHeader","path_id":"F:3d505706cd","signature":"export const WithHeader = () => ("},{"anchor":"S:72d4f657d5","kind":"function","line":91,"name":"setup","path_id":"F:3de9042953","signature":"function setup()"},{"anchor":"S:09a834e684","kind":"function","line":14,"name":"makeRepo","path_id":"F:3ea503e7c0","signature":"function makeRepo(spec)"},{"anchor":"S:64de4c98b6","doc":"Helper reused by the mapping test.","kind":"function","line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0","signature":"function makeRepoOnce()"},{"anchor":"S:fa6785fa4b","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3f1216fc11","signature":"export const MESSAGES ="},{"anchor":"S:91c42b4f27","kind":"function","line":23,"name":"read","path_id":"F:4096620673","signature":"function read(rel)"},{"anchor":"S:87c8d03eb8","doc":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that","kind":"function","line":126,"name":"dirsFromCodeowners","path_id":"F:4096620673","signature":"function dirsFromCodeowners()"},{"anchor":"S:4287ee7685","kind":"const","line":1,"name":"MESSAGES","path_id":"F:40d8f235fd","signature":"export const MESSAGES ="},{"anchor":"S:daac1f172a","kind":"function","line":12,"name":"cli","path_id":"F:40e4f39b59","signature":"function cli(...args)"},{"anchor":"S:1c82a73570","kind":"function","line":19,"name":"tmp","path_id":"F:40e4f39b59","signature":"function tmp()"},{"anchor":"S:586705c7a0","kind":"type","line":5,"name":"CardTone","path_id":"F:40eb542a82","signature":"export type CardTone = \"default\" | \"raised\";"},{"anchor":"S:1ae77ae47b","kind":"interface","line":7,"name":"CardProps","path_id":"F:40eb542a82","signature":"export interface CardProps extends HTMLAttributes"},{"anchor":"S:555c013724","doc":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, then the * body. When no title, eyebrow, ","kind":"function","line":31,"name":"Card","path_id":"F:40eb542a82","signature":"export function Card("},{"anchor":"S:b6fce3a5a9","kind":"function","line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a","signature":"export const ItemDetail = () => ("},{"anchor":"S:afe9763761","kind":"function","line":3,"name":"RaiseCap","path_id":"F:4387a44284","signature":"export const RaiseCap = () => ("},{"anchor":"S:24f0960624","kind":"function","line":29,"name":"runRemediate","path_id":"F:44a5987438","signature":"function runRemediate(args, { cwd, env = {} })"},{"anchor":"S:c8ee4f2e2e","doc":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commit.","kind":"function","line":40,"name":"makePollutedRepo","path_id":"F:44a5987438","signature":"function makePollutedRepo()"},{"anchor":"S:3e43134e83","kind":"function","line":69,"name":"arm","path_id":"F:44a5987438","signature":"function arm(dir, overrides = {})"},{"anchor":"S:48356203e2","kind":"function","line":13,"name":"repo","path_id":"F:4637e1fecb","signature":"function repo()"},{"anchor":"S:fd2e16186e","doc":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is ","kind":"function","line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0","signature":"function escapeRegExp(s)"},{"anchor":"S:e3c36060ec","doc":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).","kind":"function","line":95,"name":"makeMinimalRepo","path_id":"F:48355ccf4d","signature":"function makeMinimalRepo()"},{"anchor":"S:7c9eb8f22d","kind":"function","line":113,"name":"runScript","path_id":"F:48355ccf4d","signature":"function runScript(tmp)"},{"anchor":"S:43cc2b28a1","kind":"function","line":227,"name":"withStubRunner","path_id":"F:48355ccf4d","signature":"function withStubRunner(tmp, score, extendedScore, totalScore)"},{"anchor":"S:bb570e99d8","kind":"const","line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c","signature":"export const AI_SIGNATURE_RE = new RegExp(P, \"iu\");"},{"anchor":"S:ba4cb77f9c","doc":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions ","kind":"function","line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c","signature":"export function branchHasModelSegment(name)"},{"anchor":"S:4bfc88b9a8","doc":"Propose a compliant branch name by replacing any denylisted segment with a neutral * placeholder, preserving the rest of the path so the suggestion stays meaningful. * \"claude/fix-config\" -> \"change/f","kind":"function","line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c","signature":"export function suggestBranchName(name)"},{"anchor":"S:38e44b5fa7","doc":"Scan a branch name and return a finding if it carries a model identifier.","kind":"function","line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c","signature":"export function detectBranch(name)"},{"anchor":"S:e0f397f4e1","doc":"Scan commits for forbidden author/committer identity (reusing commit-identity.mjs) * AND for AI signatures inside commit-message bodies. The identity check and the body * check are complementary: the ","kind":"function","line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c","signature":"export function detectCommits(logOutput, bodies = [])"},{"anchor":"S:099c6ccde0","doc":"Scan a block of free text (PR body, a comment, a tracked file) for AI signatures. * Returns one finding per matching line so the remedy can point at the exact spot.","kind":"function","line":132,"name":"detectText","path_id":"F:4a7eaceb5c","signature":"export function detectText(kind, where, text)"},{"anchor":"S:6c21b6660b","kind":"function","line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c","signature":"function firstMatch(text)"},{"anchor":"S:af6abeace9","doc":"Render a precomputed, actionable remedy so a blocked violation is never a dead end. * The message names the exact fix and, where applicable, the literal git commands to * apply it, so a reviewer paste","kind":"function","line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c","signature":"export function formatRemedy(findings)"},{"anchor":"S:3ef15e4c1b","doc":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked.","kind":"function","line":13,"name":"redactText","path_id":"F:4b91a9f65b","signature":"export function redactText(text, { strict = false } = {})"},{"anchor":"S:7379962c7e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:4d08d5472f","signature":"export const MESSAGES ="},{"anchor":"S:5e08a11ce4","doc":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @param {Array} [options.comments] -","kind":"function","line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df","signature":"export function startMockGitHubServer(options = {})"},{"anchor":"S:2ea6241ebd","kind":"function","line":68,"name":"writeJson","path_id":"F:4dabd020df","signature":"function writeJson(res, status, body)"},{"anchor":"S:a76a61b560","doc":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored copy cannot silently drop credit to mod","kind":"const","line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024","signature":"export const MANIFEST_VERSION = 2;"},{"anchor":"S:d4ed2d5fe7","kind":"const","line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024","signature":"export const ATTESTATION_KIND = \"policy-attestation\";"},{"anchor":"S:78dd5bd63d","kind":"function","line":52,"name":"sha256Hex","path_id":"F:4db1101024","signature":"function sha256Hex(bytes)"},{"anchor":"S:fc880b17bd","kind":"function","line":56,"name":"readOrNull","path_id":"F:4db1101024","signature":"function readOrNull(root, rel)"},{"anchor":"S:262e039096","doc":"Extract a Markdown section body: the heading whose text matches `heading` (case-insensitive) and the lines beneath it, up to the next heading of the same or higher level. Returns null when no such hea","kind":"function","line":68,"name":"extractSection","path_id":"F:4db1101024","signature":"export function extractSection(markdown, heading)"},{"anchor":"S:e6c1406727","kind":"function","line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024","signature":"function fingerprintDisclosureSources(root)"},{"anchor":"S:41514ae74b","kind":"function","line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024","signature":"function fingerprintPolicyFiles(root)"},{"anchor":"S:cf9af1e29c","doc":"The disclosed gate set is derived from the actual `verify` npm script so it cannot drift from what the project runs. One level of `npm run ` / `npm test` aliases is flattened so gates hidden beh","kind":"function","line":112,"name":"gatesFromVerify","path_id":"F:4db1101024","signature":"export function gatesFromVerify(pkgJson)"},{"anchor":"S:5f317ed26b","kind":"function","line":127,"name":"capabilities","path_id":"F:4db1101024","signature":"function capabilities(config)"},{"anchor":"S:44c14f3d19","doc":"The credit block (ADR-037). Populated from package.json, never hardcoded twice, so a rename in package.json is what moves this, not a second literal to keep in sync. The repository URL is stripped of ","kind":"function","line":135,"name":"generator","path_id":"F:4db1101024","signature":"function generator(pkgJson)"},{"anchor":"S:f51dd29844","kind":"function","line":145,"name":"normalizePaths","path_id":"F:4db1101024","signature":"function normalizePaths(list)"},{"anchor":"S:a92333a9ea","doc":"Build the deterministic manifest body (without the content_digest) from repo state.","kind":"function","line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024","signature":"export function buildPolicyManifestBody({ root, config, pkgJson })"},{"anchor":"S:c4e4845bcc","doc":"Content digest over the canonical (RFC 8785 JCS) serialization of the body, so a re-serialized or key-reordered file yields the same digest and only a real policy change moves it.","kind":"function","line":181,"name":"manifestDigest","path_id":"F:4db1101024","signature":"export function manifestDigest(body)"},{"anchor":"S:b29d404deb","doc":"The full manifest: the body plus its self-describing content_digest.","kind":"function","line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024","signature":"export function buildPolicyManifest({ root, config, pkgJson })"},{"anchor":"S:72cb0b7406","kind":"const","line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0","signature":"export const REQUIRED_FIELDS = ["},{"anchor":"S:005abb5200","doc":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evict.\" Until now nothing enforced it; appen","kind":"const","line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0","signature":"export const MAX_STAGED_ENTRIES = 20;"},{"anchor":"S:2064ebd573","doc":"A staged line, per LESSONS.md's own \"Staged format\": - [YYYY-MM-DD] (signal: gate|review|incident|rework) lesson - evidence: ref","kind":"const","line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0","signature":"export const STAGED_LINE_RE ="},{"anchor":"S:391a920cca","kind":"function","line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0","signature":"function learningsPath(root)"},{"anchor":"S:6831eb78e0","doc":"Extract the first fenced json block that appears after the \"## Promoted\" heading.","kind":"function","line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0","signature":"export function readPromotedLearnings(root)"},{"anchor":"S:dab0af7046","doc":"Return the staged bullet lines (the \"- [date] ...\" entries) between the \"## Staged\" and \"## Promoted\" headings. Lines that do not begin a bullet are ignored, so surrounding prose does not count agains","kind":"function","line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0","signature":"export function readStagedEntries(root)"},{"anchor":"S:30e8b022de","doc":"Append one staged candidate line to LESSONS.md, enforcing the format and the cap. Never evicts: a full section throws so a human promotes or prunes first. Idempotent on an exact-duplicate line. Return","kind":"function","line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0","signature":"export function appendStagedEntry(root, line)"},{"anchor":"S:2ca5ab6d7f","kind":"function","line":18,"name":"previewText","path_id":"F:4ebf08705b","signature":"function previewText(template: string)"},{"anchor":"S:d49b633132","kind":"function","line":67,"name":"isValidUrl","path_id":"F:4ebf08705b","signature":"function isValidUrl(value: string): boolean"},{"anchor":"S:6d2334f815","doc":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-","kind":"function","line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b","signature":"export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:fcf3c9d4a4","kind":"function","line":39,"name":"run","path_id":"F:4fad18c892","signature":"function run(diffPath, extraArgs = [])"},{"anchor":"S:9e3d232a1b","kind":"function","line":43,"name":"fixture","path_id":"F:4fad18c892","signature":"function fixture(dir, name)"},{"anchor":"S:d439b00c59","doc":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rule.","kind":"function","line":73,"name":"writeRunLog","path_id":"F:522efae76d","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:76dbb025c9","kind":"function","line":116,"name":"removeFirstMatch","path_id":"F:522efae76d","signature":"function removeFirstMatch(text, re)"},{"anchor":"S:4316722ab5","kind":"function","line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d","signature":"function insertBeforeFirst(text, re, render)"},{"anchor":"S:0ed808bd36","kind":"function","line":132,"name":"insertAfterFirst","path_id":"F:522efae76d","signature":"function insertAfterFirst(text, re, render)"},{"anchor":"S:49ad410798","kind":"function","line":140,"name":"replaceFirst","path_id":"F:522efae76d","signature":"function replaceFirst(text, findRe, replaceRe, replacement)"},{"anchor":"S:47c5321a5f","doc":"--------------------------------------------------------------------------- Target-repo file listing. Prefer git (fast, respects .gitignore, skips node_modules) and fall back to a bounded manual walk ","kind":"function","line":264,"name":"listFiles","path_id":"F:522efae76d","signature":"function listFiles(target)"},{"anchor":"S:474ceb514b","doc":"Opens the file once and sizes/reads it through that one file descriptor, rather than statSync(path) followed by a separate readFileSync(path): a path-based check-then-use leaves a window where the pat","kind":"function","line":289,"name":"readCapped","path_id":"F:522efae76d","signature":"function readCapped(abs)"},{"anchor":"S:a8f75707be","doc":"A minimal single-hunk unified diff for a localized edit, headed with the file's REAL repo-relative path so guard-ratchet classifies it as the real file, not a temp path.","kind":"function","line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d","signature":"function makeUnifiedDiff(relPath, before, after)"},{"anchor":"S:33d286d62d","doc":"Run a guard-ratchet at `scriptPath` against a saved diff. `json` asks for the machine format (used for the oracle, to read the MR code); the graded host run only needs the exit code. --diff mode reads","kind":"function","line":330,"name":"runRatchet","path_id":"F:522efae76d","signature":"function runRatchet(scriptPath, diffFile, json)"},{"anchor":"S:867db3037b","doc":"--------------------------------------------------------------------------- Decide what gate the target actually has configured. -----------------------------------------------------------------------","kind":"function","line":343,"name":"resolveGate","path_id":"F:522efae76d","signature":"function resolveGate(target)"},{"anchor":"S:4e5c54ea09","doc":"--------------------------------------------------------------------------- Run one category: find a real file, synthesize a weakening on a scratch copy, confirm it with the oracle, then grade it agai","kind":"function","line":369,"name":"runCategory","path_id":"F:522efae76d","signature":"function runCategory(cat, target, files, gate, scratchRoot)"},{"anchor":"S:c2e502ad5e","doc":"--------------------------------------------------------------------------- Level from the applicable (tested) categories only. N/A categories are excluded from both numerator and denominator so a rep","kind":"function","line":409,"name":"levelFor","path_id":"F:522efae76d","signature":"function levelFor(pass, applicable, gateConfigured)"},{"anchor":"S:086ff230f0","kind":"function","line":417,"name":"main","path_id":"F:522efae76d","signature":"function main(argv)"},{"anchor":"S:ad302fbf54","kind":"function","line":5,"name":"makeCartService","path_id":"F:52caf3b287","signature":"function makeCartService(cart)"},{"anchor":"S:8d10c3ed6e","kind":"function","line":13,"name":"makeOrderService","path_id":"F:52caf3b287","signature":"function makeOrderService()"},{"anchor":"S:6c21f00789","doc":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves the assertion's expected value to match ","kind":"const","line":7,"name":"scenario","path_id":"F:5376e86470","signature":"export const scenario ="},{"anchor":"S:2a04172292","kind":"function","line":4,"name":"HostSelected","path_id":"F:545c0ccfeb","signature":"export const HostSelected = () => {}} />;"},{"anchor":"S:2bd0a26c48","kind":"function","line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb","signature":"export const ProductSelected = () => {}} />;"},{"anchor":"S:5e3d6fa91f","kind":"function","line":20,"name":"run","path_id":"F:54a3c626d9","signature":"function run(script, args = [], env = {})"},{"anchor":"S:2f1892a712","kind":"function","line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9","signature":"function makeStagedFixture(stagedLines = [])"},{"anchor":"S:5ea90f5e50","kind":"class","line":3,"name":"CheckoutService","path_id":"F:54c6928de9","signature":"export class CheckoutService"},{"anchor":"S:712330cf3e","kind":"function","line":6,"name":"parseStagedLine","path_id":"F:54df44aadd","signature":"export function parseStagedLine(line)"},{"anchor":"S:041a6b87af","kind":"function","line":14,"name":"tmp","path_id":"F:55b3a4e2c0","signature":"function tmp()"},{"anchor":"S:32c99a4337","kind":"function","line":18,"name":"run","path_id":"F:55b3a4e2c0","signature":"function run(...args)"},{"anchor":"S:05af4c96a8","kind":"function","line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0","signature":"function seedLearnings(dir)"},{"anchor":"S:d8edda2d76","kind":"function","line":12,"name":"makeMinimalRepo","path_id":"F:564b053598","signature":"function makeMinimalRepo()"},{"anchor":"S:7cd6925ad6","kind":"function","line":19,"name":"runScript","path_id":"F:564b053598","signature":"function runScript(tmp)"},{"anchor":"S:634b7012be","doc":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals.","kind":"function","line":17,"name":"makeAtt","path_id":"F:571aa2f3ae","signature":"function makeAtt(repoUrl, autonomyEnabled, dryRun, caps, digest)"},{"anchor":"S:bbdb581d9d","kind":"interface","line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716","signature":"export interface SafetyStripProps"},{"anchor":"S:3f2874e2ce","doc":"A horizontal, wrapping strip of small labeled cells summarizing the safety-relevant * levers for a project at a glance: whether autonomy and auto-merge are on, dry-run * status, merge and budget caps,","kind":"function","line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716","signature":"export function SafetyStrip("},{"anchor":"S:42b8608c58","kind":"function","line":92,"name":"Cell","path_id":"F:57ca5f1716","signature":"function Cell({ label, help, children }: CellProps)"},{"anchor":"S:0f004d17fa","kind":"function","line":24,"name":"git","path_id":"F:580d11b514","signature":"function git(args, cwd)"},{"anchor":"S:4b391a8eee","doc":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be well-formed and to apply cleanly against","kind":"function","line":34,"name":"makeGitFixture","path_id":"F:580d11b514","signature":"function makeGitFixture()"},{"anchor":"S:fd58589dfa","doc":"Build a minimal plan shape invokeRoleOpenAI needs: plan[role] (a resolved role descriptor) plus runId/transcriptDir. transcriptDir is deliberately kept under the repo's gitignored runs/ prefix (see .g","kind":"function","line":127,"name":"makePlan","path_id":"F:580d11b514","signature":"function makePlan(role, roleDescriptor, transcriptSubdir)"},{"anchor":"S:b7db5f4d64","kind":"function","line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514","signature":"function cleanupTranscripts()"},{"anchor":"S:47cde5f81f","doc":"Lifecycle status of a decision: still open for input, or already resolved.","kind":"type","line":6,"name":"DecisionStatus","path_id":"F:583edef643","signature":"export type DecisionStatus = \"open\" | \"resolved\";"},{"anchor":"S:707883a645","doc":"Plain data shape for a single decision awaiting (or having received) human input. * Components in this package define their own shape rather than importing app-level * types, so this interface is the ","kind":"interface","line":14,"name":"DecisionSummary","path_id":"F:583edef643","signature":"export interface DecisionSummary"},{"anchor":"S:6e1dfe647a","kind":"interface","line":29,"name":"DecisionCardProps","path_id":"F:583edef643","signature":"export interface DecisionCardProps"},{"anchor":"S:5c69e2b109","doc":"A card summarizing a single decision the system is asking a human to make: the * question, an optional recommendation in an info-tinted inset, and its lifecycle * status. Open decisions with a hold-by","kind":"function","line":45,"name":"DecisionCard","path_id":"F:583edef643","signature":"export function DecisionCard({ decision, onResolve }: DecisionCardProps)"},{"anchor":"S:bd63b1e408","kind":"function","line":15,"name":"cleanSignature","path_id":"F:594f505f11","signature":"function cleanSignature(line)"},{"anchor":"S:21635cbeda","kind":"const","line":19,"name":"adapter","path_id":"F:594f505f11","signature":"export const adapter ="},{"anchor":"S:cf88d1486b","kind":"function","line":16,"name":"run","path_id":"F:5956278014","signature":"function run(...args)"},{"anchor":"S:06c0c85d92","kind":"function","line":20,"name":"tmp","path_id":"F:5956278014","signature":"function tmp()"},{"anchor":"S:069ca5f436","doc":"Catalog entries for scripts/check-repo-hygiene.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:597cc7ae15","signature":"export const MESSAGES ="},{"anchor":"S:7d89fd8d95","kind":"function","line":13,"name":"run","path_id":"F:5994385869","signature":"function run(script, args = [], env = {})"},{"anchor":"S:1ef7d0ea53","kind":"class","line":3,"name":"CartService","path_id":"F:599f5b2f28","signature":"export class CartService"},{"anchor":"S:bb5d1b5426","kind":"const","line":1,"name":"MESSAGES","path_id":"F:59b2499e4e","signature":"export const MESSAGES ="},{"anchor":"S:e99608caf1","doc":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word.","kind":"const","line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b","signature":"export const SAFE_BRANCH_NAMES = ["},{"anchor":"S:59dcca7090","doc":"Commit identities no layer may flag. dependabot is ordinary automation, allowed.","kind":"const","line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b","signature":"export const SAFE_IDENTITIES = ["},{"anchor":"S:7bfb1bf049","doc":"Free-text snippets (PR-body/commit-body shaped) no layer may flag. These exercise the ordinary-English and in-repo-vocabulary collisions that bare-word or substring matching would trip on.","kind":"const","line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b","signature":"export const SAFE_TEXT_SNIPPETS = ["},{"anchor":"S:9ef12b47d5","doc":"Inputs the STRICT detector intentionally flags today. This is a documented, deliberate over-block, not a false positive: the corpus locks the current behavior so any future change to it is a conscious","kind":"const","line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b","signature":"export const DOCUMENTED_STRICT_OVERBLOCKS = ["},{"anchor":"S:bfb04089fa","kind":"const","line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914","signature":"export const DEFAULT_QUEUE_DIR = join(root, \".modonome\", \"queue\");"},{"anchor":"S:04f5060b44","kind":"const","line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914","signature":"export const DEFAULT_LEASE_MINUTES = 30;"},{"anchor":"S:7bc320f853","doc":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued.","kind":"function","line":27,"name":"assertValid","path_id":"F:5b113a0914","signature":"function assertValid(record)"},{"anchor":"S:556ab0a4ef","kind":"function","line":34,"name":"recordPath","path_id":"F:5b113a0914","signature":"function recordPath(dir, id)"},{"anchor":"S:29fd3ef66c","doc":"Atomic write: serialize to a temp file in the same directory, then rename over the destination. Rename is atomic on the same filesystem, so a reader never observes a partial record.","kind":"function","line":41,"name":"writeAtomic","path_id":"F:5b113a0914","signature":"function writeAtomic(dir, id, record)"},{"anchor":"S:2102bdee1c","kind":"function","line":49,"name":"readRecord","path_id":"F:5b113a0914","signature":"function readRecord(dir, file)"},{"anchor":"S:a364864213","kind":"function","line":53,"name":"listRecords","path_id":"F:5b113a0914","signature":"function listRecords(dir)"},{"anchor":"S:96b040bf38","doc":"Enqueue an action. Fills schema_version, state, and created_at when omitted, * validates the record, and writes it atomically. Returns the stored record. * * @param {object} action - At least id, targ","kind":"function","line":76,"name":"enqueue","path_id":"F:5b113a0914","signature":"export function enqueue(action, dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:852d083fcb","doc":"List queued (not claimed/done/failed) actions, oldest first by created_at. * * @param {string} [dir] * @returns {object[]}","kind":"function","line":97,"name":"listQueued","path_id":"F:5b113a0914","signature":"export function listQueued(dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:ba017108fd","doc":"A lease is live if the record is claimed and its expiry is strictly in the future.","kind":"function","line":104,"name":"leaseIsLive","path_id":"F:5b113a0914","signature":"function leaseIsLive(record, now)"},{"anchor":"S:6b0614bdf6","doc":"Atomically lease the oldest queued action this worker environment can serve. * A record is servable when its target equals the worker env or appears in the * worker env's served set. Sets state to cla","kind":"function","line":127,"name":"claim","path_id":"F:5b113a0914","signature":"export function claim(workerEnv, dir = DEFAULT_QUEUE_DIR, now = new Date(), leaseMinutes = DEFAULT_LEASE_MINUTES)"},{"anchor":"S:194e854c70","doc":"Mark a claimed action done or failed, attaching an optional result object. * * @param {string} id * @param {object|null} result * @param {string} [dir] * @param {boolean} [ok] - true marks done, false","kind":"function","line":156,"name":"complete","path_id":"F:5b113a0914","signature":"export function complete(id, result, dir = DEFAULT_QUEUE_DIR, ok = true)"},{"anchor":"S:ed1db0b6bb","doc":"Revert every claimed record whose lease has expired back to queued, clearing * its owner and expiry. Returns the list of reclaimed records. * * @param {string} [dir] * @param {Date} [now] * @returns {","kind":"function","line":176,"name":"reclaimStale","path_id":"F:5b113a0914","signature":"export function reclaimStale(dir = DEFAULT_QUEUE_DIR, now = new Date())"},{"anchor":"S:26ee7911e3","doc":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (agentproof, CI log scraping), not a human-f","kind":"const","line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae","signature":"export const MESSAGES ="},{"anchor":"S:92bd39eb47","doc":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a finding's reason, reviewer_guidance, and lim","kind":"const","line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02","signature":"export const MESSAGES ="},{"anchor":"S:64ebce69bf","kind":"const","line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a","signature":"export const MESSAGES ="},{"anchor":"S:f36d6a8da6","kind":"function","line":12,"name":"buildRemediationView","path_id":"F:5daab9894d","signature":"export function buildRemediationView({ config = {}, envArmed = false, commits = [], identity = { name: \"\", email: \"\" } } = {})"},{"anchor":"S:ddfea151e8","kind":"function","line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7","signature":"export const TrustedAuthor = () => ("},{"anchor":"S:ea76c925e2","doc":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipped with --no-snapshot. Never overwrites ","kind":"function","line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c","signature":"function enableSnapshot(target, here)"},{"anchor":"S:8c6ccd3e8b","kind":"function","line":64,"name":"listTemplate","path_id":"F:5e450ff82c","signature":"function listTemplate(dir, base = \"\")"},{"anchor":"S:6dcbe228c5","kind":"function","line":75,"name":"scaffold","path_id":"F:5e450ff82c","signature":"export function scaffold(target, write)"},{"anchor":"S:950b7153af","doc":"Install the Tripwires editor hook packs into a target repo: the two hook config templates (.claude/settings.json, .cursor/hooks.json) plus the shared kernel and the detector it shells out to, so a hos","kind":"function","line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c","signature":"function scaffoldTripwires(target, here)"},{"anchor":"S:1856df868b","kind":"function","line":163,"name":"writeRunLog","path_id":"F:5e450ff82c","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:d6cf821403","doc":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`.","kind":"function","line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0","signature":"function keysFromDeclaration(source, declName)"},{"anchor":"S:da40a0864b","kind":"function","line":33,"name":"assertSameSet","path_id":"F:5eff4122c0","signature":"function assertSameSet(a, b, label)"},{"anchor":"S:0a677c2e37","kind":"function","line":19,"name":"msg","path_id":"F:5f7910375b","signature":"function msg(id, params)"},{"anchor":"S:397210a79e","kind":"function","line":24,"name":"pass","path_id":"F:5f7910375b","signature":"function pass(msg)"},{"anchor":"S:4bd4d449f1","kind":"function","line":27,"name":"fail","path_id":"F:5f7910375b","signature":"function fail(msg)"},{"anchor":"S:5d58defc25","kind":"function","line":14,"name":"tmpRepo","path_id":"F:60548316f5","signature":"function tmpRepo(configBody)"},{"anchor":"S:580f464240","kind":"function","line":23,"name":"runStatus","path_id":"F:60548316f5","signature":"function runStatus(dir, env)"},{"anchor":"S:0cfad6d2cf","kind":"function","line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c","signature":"function findSafeToDeleteFiles(dir)"},{"anchor":"S:17985dad90","doc":"Helper","kind":"function","line":245,"name":"execSync","path_id":"F:61296e720c","signature":"function execSync(cmd, opts)"},{"anchor":"S:2441bf3938","kind":"function","line":17,"name":"run","path_id":"F:61c2a29876","signature":"function run(format, payload)"},{"anchor":"S:581a43b877","kind":"function","line":26,"name":"parseJsonLine","path_id":"F:61c2a29876","signature":"function parseJsonLine(stdout)"},{"anchor":"S:5a2d3d98ce","kind":"type","line":6,"name":"ModalSize","path_id":"F:63351e350b","signature":"export type ModalSize = \"sm\" | \"md\";"},{"anchor":"S:b5d72ba60f","kind":"interface","line":8,"name":"ModalProps","path_id":"F:63351e350b","signature":"export interface ModalProps"},{"anchor":"S:5d9d040e28","doc":"The generic centered dialog: a panel over a scrim, closable by Escape, a scrim * click, or its own close button. Moves focus into the dialog on open. This is the * base primitive that composed dialogs","kind":"function","line":30,"name":"Modal","path_id":"F:63351e350b","signature":"export function Modal({ open, onClose, title, children, footer, size = \"md\" }: ModalProps)"},{"anchor":"S:1f19b07227","kind":"interface","line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb","signature":"export interface ConfirmDialogProps"},{"anchor":"S:0a9885ca9d","doc":"A confirmation dialog for destructive or high-consequence controls. Every control * that arms the engine, releases a lease, approves a protected path, or prunes a * learning routes through this so an ","kind":"function","line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb","signature":"export function ConfirmDialog("},{"anchor":"S:4abcc2a45b","kind":"function","line":21,"name":"redactionErrors","path_id":"F:65193a9799","signature":"export function redactionErrors(packet)"},{"anchor":"S:a8a643fda8","kind":"function","line":55,"name":"validatePacket","path_id":"F:65193a9799","signature":"export function validatePacket(packet)"},{"anchor":"S:489fa8bc67","kind":"type","line":14,"name":"HoverCardSide","path_id":"F:66264a042c","signature":"export type HoverCardSide = \"top\" | \"bottom\";"},{"anchor":"S:551c7477f2","kind":"interface","line":16,"name":"HoverCardSource","path_id":"F:66264a042c","signature":"export interface HoverCardSource"},{"anchor":"S:5ed8ee5c0a","kind":"interface","line":23,"name":"HoverCardProps","path_id":"F:66264a042c","signature":"export interface HoverCardProps"},{"anchor":"S:312c004ac1","doc":"A richer sibling of Tooltip: a small card (heading, body copy, source citation) for * reference content pulled from real documentation, rather than a one-line hint. Unlike * Tooltip, its content accep","kind":"function","line":46,"name":"HoverCard","path_id":"F:66264a042c","signature":"export function HoverCard({ title, body, source, children, side = \"bottom\" }: HoverCardProps)"},{"anchor":"S:050ec6eff9","doc":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent activity.","kind":"function","line":26,"name":"OverviewScreen","path_id":"F:6627655633","signature":"export function OverviewScreen("},{"anchor":"S:e95e85f904","kind":"const","line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8","signature":"export const SECRET_PATTERNS = ["},{"anchor":"S:9c4deaa396","doc":"Returns an array of { name } objects for every pattern that matches text.","kind":"function","line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8","signature":"export function scanForSecrets(text)"},{"anchor":"S:8b7542071f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:6a86908a3e","signature":"export const MESSAGES ="},{"anchor":"S:4eb76c8a83","kind":"function","line":9,"name":"Set","path_id":"F:6bef3f93ab","signature":"export const Set = () => ("},{"anchor":"S:c16b3b7bbf","kind":"function","line":10,"name":"Board","path_id":"F:6c0919b64e","signature":"export const Board = () => {}} />;"},{"anchor":"S:96ffd586d6","kind":"function","line":19,"name":"tmp","path_id":"F:6da7bd8294","signature":"function tmp()"},{"anchor":"S:0f77533ed4","kind":"function","line":23,"name":"run","path_id":"F:6da7bd8294","signature":"function run(...args)"},{"anchor":"S:4adffc8b06","kind":"function","line":27,"name":"seedJsTest","path_id":"F:6da7bd8294","signature":"function seedJsTest(dir)"},{"anchor":"S:354e31ec69","kind":"function","line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294","signature":"function snapshotFiles(dir)"},{"anchor":"S:7698d9efeb","doc":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first segment is \"feature\"; only a leading \"a","kind":"function","line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3","signature":"export function isModelIdentifierBranch(name)"},{"anchor":"S:99c574f83d","doc":"Resolve the branch under review from CI environment variables. Prefers the * pull request head ref, then the push ref name. Returns an empty string when * neither is set so callers can fall back to a ","kind":"function","line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3","signature":"export function resolveBranchName(env = process.env)"},{"anchor":"S:bb800288d9","kind":"function","line":12,"name":"writeRunLog","path_id":"F:6f247eb514","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:002c9f1daa","kind":"function","line":25,"name":"slug","path_id":"F:6f247eb514","signature":"function slug(text)"},{"anchor":"S:3d6f7980b3","kind":"function","line":33,"name":"proposeWork","path_id":"F:6f247eb514","signature":"function proposeWork(stack, hotFiles)"},{"anchor":"S:e099520832","doc":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing otherwise), so this stays safe and inert","kind":"function","line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514","signature":"function proposeControlPanelWork(targetDir)"},{"anchor":"S:24407449b3","doc":"Order proposals by descending deterministic priority score (highest-value, lowest-risk first). Signals are derived heuristically from each proposal's text and the hot-file churn count for the file it ","kind":"function","line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514","signature":"export function orderProposalsByScore(proposals, hotFiles)"},{"anchor":"S:7fb0e9b59c","kind":"function","line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514","signature":"export function proposalToWorkItem(proposal, opts = {})"},{"anchor":"S:ab8d34f24a","doc":"Run stack/protected-path/instruction/hot-file detection and score the resulting proposals for a target directory. Read-only: writes nothing. Shared by the CLI printer below, `--emit-work-item`, and `q","kind":"function","line":119,"name":"sweepTarget","path_id":"F:6f247eb514","signature":"export function sweepTarget(target)"},{"anchor":"S:19ecd8efbf","kind":"function","line":134,"name":"main","path_id":"F:6f247eb514","signature":"function main(args)"},{"anchor":"S:5fe0061772","kind":"function","line":4,"name":"Maker","path_id":"F:7008a20b1c","signature":"export const Maker = () => ("},{"anchor":"S:93ab3c1c15","kind":"function","line":8,"name":"Checker","path_id":"F:7008a20b1c","signature":"export const Checker = () => ("},{"anchor":"S:d4fd7f4ad3","kind":"function","line":12,"name":"Pair","path_id":"F:7008a20b1c","signature":"export const Pair = () => ("},{"anchor":"S:ba7fe0b6d3","doc":"A config where each runner declares its environment and reach.","kind":"function","line":10,"name":"routedConfig","path_id":"F:704e42d42b","signature":"function routedConfig()"},{"anchor":"S:435432f041","kind":"interface","line":6,"name":"CheckboxProps","path_id":"F:7054844360","signature":"export interface CheckboxProps"},{"anchor":"S:0b453b55b9","doc":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` visually replaced by a styl","kind":"function","line":25,"name":"Checkbox","path_id":"F:7054844360","signature":"export function Checkbox({ checked, onCheckedChange, label, hint, disabled }: CheckboxProps)"},{"anchor":"S:145586915d","kind":"interface","line":5,"name":"DrawerProps","path_id":"F:71f0bfb455","signature":"export interface DrawerProps"},{"anchor":"S:eb4b11fdf2","doc":"A right-side sheet that slides in over a scrim, for focused tasks that need more * room than a popover but should not leave the current page's context (inspecting a * work item, editing a policy). Tra","kind":"function","line":25,"name":"Drawer","path_id":"F:71f0bfb455","signature":"export function Drawer({ open, onClose, title, width = 480, children }: DrawerProps)"},{"anchor":"S:eaba90daa0","kind":"function","line":101,"name":"exists","path_id":"F:7232ada2da","signature":"async function exists(p)"},{"anchor":"S:7b87285e6c","kind":"function","line":110,"name":"readTextSafe","path_id":"F:7232ada2da","signature":"async function readTextSafe(p)"},{"anchor":"S:934c97a052","kind":"function","line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da","signature":"async function listFilesRecursive(dir, { maxDepth = 5 } = {})"},{"anchor":"S:7048bb8a3d","doc":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`.","kind":"function","line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da","signature":"function parseCiJobNames(yamlText)"},{"anchor":"S:fc6086da9e","doc":"Extremely small YAML-ish key:value reader for flat config files. Good enough to inspect schema_version and the boolean arming levers without a YAML dep.","kind":"function","line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da","signature":"function parseFlatYaml(yamlText)"},{"anchor":"S:c275cb33da","doc":"(a) Schema collision: target has .modonome/ with incompatible config.","kind":"function","line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da","signature":"export async function checkSchemaCollision(targetDir)"},{"anchor":"S:8660e770ea","doc":"(b) CI job name conflict: target's CI files use Modonome job names.","kind":"function","line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da","signature":"export async function checkCiJobConflict(targetDir)"},{"anchor":"S:ee4deb809d","doc":"(c) Script shadowing: target has scripts/ that shadow Modonome scripts.","kind":"function","line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da","signature":"export async function checkScriptShadowing(targetDir)"},{"anchor":"S:f5a168e2ff","doc":"(d) Env var pollution: MODONOME_* env vars set that override safe defaults. Reads from the current process environment (the shell preparing to embed) AND statically inspects, read-only, the target's `","kind":"function","line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da","signature":"export async function checkEnvPollution(targetDir, env = process.env)"},{"anchor":"S:8a6e48a119","doc":"(e) Dependency conflict: target has deps that conflict with Modonome requirements.","kind":"function","line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da","signature":"export async function checkDependencyConflict(targetDir)"},{"anchor":"S:22ac6bb569","doc":"(f) Prompt injection risk: governance-override patterns in the target. Trusted locations (.modonome/, schemas/, CI dirs) are scanned exhaustively; for the rest of the repo we scan source-bearing files","kind":"function","line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da","signature":"export async function checkPromptInjection(targetDir)"},{"anchor":"S:522a86b0ed","doc":"(g) Node version incompatibility: target requires Node < 18.","kind":"function","line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da","signature":"export async function checkNodeVersion(targetDir)"},{"anchor":"S:03145d5ec3","kind":"const","line":519,"name":"CHECKS","path_id":"F:7232ada2da","signature":"export const CHECKS = ["},{"anchor":"S:0dd1d1c53a","kind":"function","line":529,"name":"runPreflight","path_id":"F:7232ada2da","signature":"export async function runPreflight(targetDir)"},{"anchor":"S:80ded7ba90","kind":"function","line":542,"name":"renderHuman","path_id":"F:7232ada2da","signature":"function renderHuman(report)"},{"anchor":"S:1ba042e0cf","kind":"function","line":565,"name":"main","path_id":"F:7232ada2da","signature":"async function main()"},{"anchor":"S:4514b4c1f0","doc":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the lessons * the engine has staged from repea","kind":"function","line":19,"name":"LearningsScreen","path_id":"F:757a70680a","signature":"export function LearningsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:e9fcedbe8f","kind":"interface","line":7,"name":"InputProps","path_id":"F:763efdd51c","signature":"export interface InputProps extends InputHTMLAttributes"},{"anchor":"S:6981533501","doc":"A labeled single-line text input. Shares the labeled-field frame used by every * form control in the panel: an optional label, an optional hint bubble, and an * optional error message below. Use for f","kind":"function","line":24,"name":"Input","path_id":"F:763efdd51c","signature":"export function Input("},{"anchor":"S:b4b12fd408","doc":"The kind of event recorded in the audit trail.","kind":"type","line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7","signature":"export type AuditEventKind ="},{"anchor":"S:ee3edffdff","doc":"Plain data shape for a single audit-trail event. Components in this package define * their own shape rather than importing app-level types, so this interface is the * contract a host app maps its own ","kind":"interface","line":25,"name":"AuditEvent","path_id":"F:76da13a8f7","signature":"export interface AuditEvent"},{"anchor":"S:62d1cf1f06","kind":"interface","line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7","signature":"export interface AuditTimelineProps"},{"anchor":"S:35ac020356","doc":"A vertical audit trail with a connecting line down the left edge. Each event shows a * colored node carrying an icon for its kind (so the event type is never carried by * color alone), the relative ti","kind":"function","line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7","signature":"export function AuditTimeline({ events, limit }: AuditTimelineProps)"},{"anchor":"S:e15045d8a4","kind":"function","line":13,"name":"dryRun","path_id":"F:778c33cdc0","signature":"function dryRun(dir)"},{"anchor":"S:f88498de73","doc":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure.","kind":"const","line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407","signature":"export const ATTESTATION_DOMAIN = \"modonome.policy-attestation.v1\\n\";"},{"anchor":"S:b455c897cf","doc":"Relative-to-root display path. Safe on any input: a path outside root (e.g. under ADOPT_ROOT when MODONOME_ADOPT_ROOT points elsewhere) is returned unchanged rather than sliced by a bare string-prefix","kind":"function","line":66,"name":"rel","path_id":"F:780c791407","signature":"function rel(p)"},{"anchor":"S:5b8a5996df","kind":"function","line":70,"name":"fail","path_id":"F:780c791407","signature":"function fail(msg)"},{"anchor":"S:87013bd4c3","kind":"function","line":75,"name":"loadInputs","path_id":"F:780c791407","signature":"export function loadInputs(r = root)"},{"anchor":"S:aacff6bc1c","doc":"The exact bytes a signature covers: the domain tag followed by the JCS of the manifest with its signature and content_digest removed (the content_digest is itself derived from that body, so signing th","kind":"function","line":84,"name":"attestationBytes","path_id":"F:780c791407","signature":"export function attestationBytes(manifest)"},{"anchor":"S:120830c7dd","kind":"function","line":91,"name":"maybeSign","path_id":"F:780c791407","signature":"function maybeSign(manifest, env)"},{"anchor":"S:5aff27256c","kind":"function","line":109,"name":"schema","path_id":"F:780c791407","signature":"function schema()"},{"anchor":"S:cf413b97c8","kind":"function","line":113,"name":"write","path_id":"F:780c791407","signature":"function write(env)"},{"anchor":"S:de8e4d5857","doc":"Recomputes a manifest body's digest and compares it to its own recorded content_digest. Shared by check(), verifyCmd(), and adoptCmd() so this self-consistency test is defined once; each caller still ","kind":"function","line":128,"name":"digestMismatch","path_id":"F:780c791407","signature":"function digestMismatch(m)"},{"anchor":"S:53158831f9","kind":"function","line":135,"name":"check","path_id":"F:780c791407","signature":"function check()"},{"anchor":"S:5ef4400e5e","doc":"The generator credit line, tolerant of a foreign pack that predates manifest_version 2: such a pack is shown honestly as claiming no credit rather than crashing on a missing field. homepage is guarded","kind":"function","line":169,"name":"generatorLine","path_id":"F:780c791407","signature":"function generatorLine(m)"},{"anchor":"S:2d4876abe2","kind":"function","line":174,"name":"readPack","path_id":"F:780c791407","signature":"function readPack(path)"},{"anchor":"S:ddc69b10ca","doc":"Reads and parses a caller-supplied pack file, failing with the tool's normal clean error instead of an uncaught exception. Every command that accepts a user-supplied path (--show, --verify, --diff, --","kind":"function","line":182,"name":"readForeignPack","path_id":"F:780c791407","signature":"function readForeignPack(path)"},{"anchor":"S:e476893b3b","kind":"function","line":190,"name":"show","path_id":"F:780c791407","signature":"function show(path)"},{"anchor":"S:acc91dc6fe","kind":"function","line":210,"name":"verifyCmd","path_id":"F:780c791407","signature":"function verifyCmd(path)"},{"anchor":"S:b9d44c6996","doc":"Set-valued policy fields (denylist, protected paths, gates): report what the foreign pack adds and what it is missing relative to this repo's live policy.","kind":"function","line":230,"name":"diffSet","path_id":"F:780c791407","signature":"function diffSet(label, local, foreign)"},{"anchor":"S:0be1a2cd09","kind":"function","line":244,"name":"diffCapabilities","path_id":"F:780c791407","signature":"function diffCapabilities(local, foreign)"},{"anchor":"S:90b2cf611f","kind":"function","line":255,"name":"diffPosture","path_id":"F:780c791407","signature":"function diffPosture(local, foreign)"},{"anchor":"S:d2a299acb3","doc":"Read-only comparison of a foreign pack's disclosed policy against this repo's own live policy. Always succeeds (never a pass/fail gate); a human uses this to decide whether to adopt. The foreign pack'","kind":"function","line":266,"name":"diffCmd","path_id":"F:780c791407","signature":"function diffCmd(path)"},{"anchor":"S:8735f37dad","doc":"Vendor a foreign policy pack into this repo, refusing on any integrity or credit failure. Order matters: schema validation catches a pack whose generator block was stripped outright (manifest_version ","kind":"function","line":288,"name":"adoptCmd","path_id":"F:780c791407","signature":"function adoptCmd(path, alias)"},{"anchor":"S:67852685cf","kind":"function","line":4,"name":"Info","path_id":"F:7832db450f","signature":"export const Info = () => ;"},{"anchor":"S:96c461f8cd","kind":"function","line":6,"name":"Success","path_id":"F:7832db450f","signature":"export const Success = () => ;"},{"anchor":"S:21a4872ace","kind":"function","line":8,"name":"Blocked","path_id":"F:7832db450f","signature":"export const Blocked = () => ;"},{"anchor":"S:59617d720e","doc":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which keeps the utility portable. It is used ","kind":"function","line":5,"name":"estimateTokens","path_id":"F:7944059823","signature":"export function estimateTokens(text)"},{"anchor":"S:a48d9e0b16","doc":"Greedily keep pre-ranked items until the token budget is spent. `sizeFn` returns the token cost of an item. A falsy or non-finite budget keeps everything. Returns { kept, dropped, tokens } so the call","kind":"function","line":13,"name":"budgetTier","path_id":"F:7944059823","signature":"export function budgetTier(items, maxTokens, sizeFn)"},{"anchor":"S:3ed1d37c7b","kind":"function","line":3,"name":"Unreachable","path_id":"F:79467a3153","signature":"export const Unreachable = () => ("},{"anchor":"S:cec6405a03","kind":"interface","line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b","signature":"export interface ArmingStateBadgeProps"},{"anchor":"S:3bae21fee6","doc":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, armed is * teal. The mode label always ren","kind":"function","line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b","signature":"export function ArmingStateBadge({ mode, envArmed, size = \"md\" }: ArmingStateBadgeProps)"},{"anchor":"S:130202d7f0","kind":"function","line":3,"name":"Queue","path_id":"F:7a43bf4ce5","signature":"export const Queue = () => ("},{"anchor":"S:8ec4bd5dec","doc":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads it","kind":"function","line":25,"name":"signPacket","path_id":"F:7b3e38c9a6","signature":"export function signPacket(packet, privateKeyObject, { keyAlias, signedAt }, overrides = {})"},{"anchor":"S:d732af6be5","doc":"Join class names, dropping falsy values. A tiny classnames helper.","kind":"type","line":2,"name":"ClassValue","path_id":"F:7c8d518693","signature":"export type ClassValue = string | false | null | undefined;"},{"anchor":"S:deea6aabbd","kind":"function","line":4,"name":"cx","path_id":"F:7c8d518693","signature":"export function cx(...values: ClassValue[]): string"},{"anchor":"S:41443bba10","kind":"function","line":1,"name":"total","path_id":"F:7ccad64380","signature":"def total(items)"},{"anchor":"S:05fcfe1c5b","doc":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after discount","kind":"function","line":5,"name":"apply_discount","path_id":"F:7ccad64380","signature":"def apply_discount(items, discount_percent)"},{"anchor":"S:90f1a56d4e","kind":"const","line":180,"name":"hostState","path_id":"F:7d236c9aa6","signature":"export const hostState: PanelState ="},{"anchor":"S:64376e38db","kind":"interface","line":6,"name":"SelectOption","path_id":"F:819f72edf6","signature":"export interface SelectOption"},{"anchor":"S:8af9c33a76","kind":"interface","line":13,"name":"SelectProps","path_id":"F:819f72edf6","signature":"export interface SelectProps"},{"anchor":"S:0b0e197734","doc":"A styled native `` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * surface treatment of the other form control","kind":"function","line":35,"name":"Select","path_id":"F:819f72edf6","signature":"export function Select("},{"anchor":"S:66cd7b74c6","kind":"interface","line":5,"name":"SliderProps","path_id":"F:81c495717c","signature":"export interface SliderProps"},{"anchor":"S:a91334a377","doc":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announcements) while the track and thumb pick ","kind":"function","line":32,"name":"Slider","path_id":"F:81c495717c","signature":"export function Slider("},{"anchor":"S:74e8f23a0b","kind":"function","line":4,"name":"MergeCap","path_id":"F:84a5c32a4c","signature":"export const MergeCap = () => ("},{"anchor":"S:14b57397ed","kind":"function","line":14,"name":"Budget","path_id":"F:84a5c32a4c","signature":"export const Budget = () => ("},{"anchor":"S:88bc43a62b","doc":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true.","kind":"const","line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227","signature":"export const CHANGE_REQUEST_SIGNALS = ["},{"anchor":"S:90b86b1f26","doc":"True when the transcript contains any documented change-request signal * phrase (case-insensitive). Pure string search: no partial-word surprises * beyond what the phrase itself implies. * * @param {s","kind":"function","line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227","signature":"export function hasChangeRequestSignal(transcript)"},{"anchor":"S:328dcdf4cc","doc":"Count distinct raised concerns/questions in the transcript. * * Heuristic (documented, approximate, not semantic): * - Any line ending in \"?\" counts once. * - Any line starting with \"concern:\", \"quest","kind":"function","line":76,"name":"countRaisedQuestions","path_id":"F:851f776227","signature":"export function countRaisedQuestions(transcript)"},{"anchor":"S:cfe87f9141","doc":"Derive checker-engagement telemetry from a checker transcript. * * @param {string|undefined|null} transcript - Full checker transcript text. * @returns {{checker_requested_changes: boolean, checker_qu","kind":"function","line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227","signature":"export function parseCheckerTelemetry(transcript)"},{"anchor":"S:6c778494b3","doc":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\".","kind":"function","line":7,"name":"relativeTime","path_id":"F:86838d35ac","signature":"export function relativeTime(iso: string, now: number = Date.parse(\"2026-07-01T09:45:00Z\")): string"},{"anchor":"S:8641765bb2","doc":"Format a duration in milliseconds as a compact string, for example \"1.2s\" or \"9s\".","kind":"function","line":34,"name":"formatDuration","path_id":"F:86838d35ac","signature":"export function formatDuration(ms?: number): string"},{"anchor":"S:6cb93e992c","doc":"Format a USD amount with two decimals.","kind":"function","line":45,"name":"formatUsd","path_id":"F:86838d35ac","signature":"export function formatUsd(usd: number): string"},{"anchor":"S:0aee45c73e","doc":"Catalog entries for scripts/guard-ratchet.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:86fd2cf669","signature":"export const MESSAGES ="},{"anchor":"S:88426a3883","doc":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker.","kind":"function","line":12,"name":"looksLikeDiff","path_id":"F:872221b1da","signature":"function looksLikeDiff(body)"},{"anchor":"S:074c2b3c02","doc":"Pull a unified diff out of a model response. Prefers a fenced ```diff or * ```patch block; falls back to a bare fenced block whose body looks like a * diff; falls back to treating the whole text as a ","kind":"function","line":28,"name":"extractDiff","path_id":"F:872221b1da","signature":"export function extractDiff(text)"},{"anchor":"S:fe1a464205","doc":"Apply a unified diff to a working directory using the git binary. * Validates with `git apply --check` first; git apply is atomic, so a diff * that fails validation or application is never partially a","kind":"function","line":60,"name":"applyPatch","path_id":"F:872221b1da","signature":"export function applyPatch(diff, cwd, deps = {})"},{"anchor":"S:6b5288f35f","kind":"function","line":18,"name":"coreLevers","path_id":"F:87c30bdb4c","signature":"function coreLevers()"},{"anchor":"S:b4e887ed4f","kind":"function","line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c","signature":"function schemaLevers()"},{"anchor":"S:e09a554f44","kind":"function","line":32,"name":"templateLevers","path_id":"F:87c30bdb4c","signature":"function templateLevers()"},{"anchor":"S:5d118d4b60","kind":"function","line":3,"name":"Row","path_id":"F:8972d37045","signature":"export const Row = () => ("},{"anchor":"S:e89c164d25","kind":"function","line":54,"name":"titleFromId","path_id":"F:89aee72994","signature":"function titleFromId(id: string): string"},{"anchor":"S:f0db7341e7","kind":"const","line":89,"name":"productState","path_id":"F:89aee72994","signature":"export const productState: PanelState ="},{"anchor":"S:89e92655dd","kind":"function","line":57,"name":"normalizeLF","path_id":"F:8a10462927","signature":"function normalizeLF(s)"},{"anchor":"S:a34306cc67","kind":"function","line":61,"name":"getDiff","path_id":"F:8a10462927","signature":"function getDiff()"},{"anchor":"S:974654287c","kind":"function","line":304,"name":"count","path_id":"F:8a10462927","signature":"function count(lines, re)"},{"anchor":"S:fd230402e2","kind":"function","line":323,"name":"deconfuse","path_id":"F:8a10462927","signature":"function deconfuse(line)"},{"anchor":"S:457528354e","kind":"function","line":331,"name":"stripInlineComment","path_id":"F:8a10462927","signature":"function stripInlineComment(line)"},{"anchor":"S:d0c2835a28","doc":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote or that does not close on this line, or ","kind":"function","line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927","signature":"function stripLineLocalNoise(line)"},{"anchor":"S:a4c389d72a","kind":"function","line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927","signature":"function isVacuousAssertion(line)"},{"anchor":"S:17945c542e","kind":"function","line":393,"name":"countBareAsserts","path_id":"F:8a10462927","signature":"function countBareAsserts(lines)"},{"anchor":"S:4d3ac94b7c","kind":"function","line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927","signature":"function isVacuousPyAssert(line)"},{"anchor":"S:0b8ff85c9c","kind":"function","line":666,"name":"classifyCode","path_id":"F:8a10462927","signature":"function classifyCode(msg)"},{"anchor":"S:2358b05e12","doc":"Each problem message is \": \". Recover the file path for a location.","kind":"function","line":680,"name":"fileOf","path_id":"F:8a10462927","signature":"function fileOf(msg)"},{"anchor":"S:edb5058173","kind":"function","line":685,"name":"helpUri","path_id":"F:8a10462927","signature":"function helpUri(code)"},{"anchor":"S:eff02f504b","kind":"function","line":689,"name":"toFindings","path_id":"F:8a10462927","signature":"function toFindings(list)"},{"anchor":"S:42188b3bb9","kind":"function","line":696,"name":"emitJson","path_id":"F:8a10462927","signature":"function emitJson(findings)"},{"anchor":"S:1d0f5bc129","kind":"function","line":708,"name":"emitSarif","path_id":"F:8a10462927","signature":"function emitSarif(findings)"},{"anchor":"S:06700c1faf","doc":"Advisory-only, informational, never affects the exit code (see the comment where assertionTally is declared above). Printed in both outcomes so a reviewer sees the cross-file shape whether or not a sp","kind":"function","line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927","signature":"function printAssertionTallyAdvisory()"},{"anchor":"S:69f3537d3b","kind":"function","line":13,"name":"tmp","path_id":"F:8a3433b070","signature":"function tmp()"},{"anchor":"S:1fe8548dac","kind":"function","line":17,"name":"fixture","path_id":"F:8a3433b070","signature":"function fixture()"},{"anchor":"S:33534dd596","kind":"function","line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff","signature":"export function readModonomeState(modonomeDir, { mode })"},{"anchor":"S:895b1937bd","kind":"function","line":61,"name":"readConfig","path_id":"F:8a3dd6ccff","signature":"function readConfig(modonomeDir)"},{"anchor":"S:6044b46e0f","doc":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces in CI, so the panel can never display a","kind":"function","line":100,"name":"readMessages","path_id":"F:8a3dd6ccff","signature":"function readMessages(modonomeDir)"},{"anchor":"S:9287ce102a","kind":"function","line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff","signature":"function readWorkItems(modonomeDir)"},{"anchor":"S:064519e650","kind":"function","line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff","signature":"function titleFromId(id)"},{"anchor":"S:ac0d90ea9c","kind":"function","line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff","signature":"function toWorkItemVM(item)"},{"anchor":"S:23afcde4ab","doc":"A gate's status is implied by the state of every work item that declares it, never by a fabricated pass. A repo that has only ever run dry-run sweeps shows every declared gate as \"pending\", which is t","kind":"function","line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff","signature":"function impliedGateStatus(state)"},{"anchor":"S:639160c471","kind":"function","line":186,"name":"buildGates","path_id":"F:8a3dd6ccff","signature":"function buildGates(items)"},{"anchor":"S:e41c3f2d61","kind":"function","line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff","signature":"function buildProtectedPaths(config, items)"},{"anchor":"S:4741feecf9","doc":"modonome's own agent runner does not yet record a dollar cost per call (see scripts/agent/run-cycle.mjs), so real spend is honestly zero until that lands. Calls are still counted from the real maker_r","kind":"function","line":234,"name":"buildCost","path_id":"F:8a3dd6ccff","signature":"function buildCost(config, metrics)"},{"anchor":"S:77031e48f4","kind":"function","line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff","signature":"function readLearnings(modonomeDir)"},{"anchor":"S:783d91f2ed","kind":"function","line":319,"name":"extractSection","path_id":"F:8a3dd6ccff","signature":"function extractSection(text, heading)"},{"anchor":"S:b02fc1cd06","kind":"function","line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff","signature":"function readDecisions(modonomeDir)"},{"anchor":"S:4350272f8a","kind":"function","line":357,"name":"readRuns","path_id":"F:8a3dd6ccff","signature":"function readRuns(modonomeDir)"},{"anchor":"S:d9c2336e09","doc":"Real telemetry only. metrics.example.jsonl documents the schema and must never be read here: the promoted learning L-001 in this repo's own LESSONS.md exists specifically because sample telemetry was ","kind":"function","line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff","signature":"function readMetrics(modonomeDir)"},{"anchor":"S:409d8caf58","kind":"function","line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff","signature":"function describeMetric(m, kind)"},{"anchor":"S:b8469e1267","kind":"function","line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff","signature":"function buildAudit(runs, metrics)"},{"anchor":"S:a8971aba2c","kind":"function","line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff","signature":"function buildTrends(runs)"},{"anchor":"S:b81af2dbe4","kind":"function","line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff","signature":"function latestAgentProofScore(runs)"},{"anchor":"S:db7c5c1950","doc":"Mirrors latestAgentProofScore, but for `npx modonome gauntlet` runs (a distinct command, never conflated with `report`). Undefined (not 0) when the tool has never been run, since a 0 score and \"never ","kind":"function","line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff","signature":"function latestGauntletScore(runs)"},{"anchor":"S:baab120dbc","kind":"function","line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff","signature":"function gitInfo(repoRoot)"},{"anchor":"S:f40a6dfd1b","doc":"The unpublished commit range (origin/main..HEAD) with the identity and message fields the remediation planner reads. Bounded to origin/main so the panel only ever proposes over history that has not be","kind":"function","line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff","signature":"function gitCommits(repoRoot)"},{"anchor":"S:37268eb979","doc":"The repository's own git identity, the target a reauthor rewrite would use. Empty when unset, which the planner and the CLI both treat as \"not usable for apply\".","kind":"function","line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff","signature":"function gitIdentity(repoRoot)"},{"anchor":"S:4cd48cf92e","kind":"function","line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff","signature":"function buildSubject({ repoRoot, modonomeDir, mode, config, queue, runs })"},{"anchor":"S:77a4165d99","kind":"type","line":12,"name":"TooltipSide","path_id":"F:8a9aff1529","signature":"export type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";"},{"anchor":"S:0b70780ca5","kind":"interface","line":14,"name":"TooltipProps","path_id":"F:8a9aff1529","signature":"export interface TooltipProps"},{"anchor":"S:7bdca9af48","doc":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the same * information), and closes on blur","kind":"function","line":30,"name":"Tooltip","path_id":"F:8a9aff1529","signature":"export function Tooltip({ content, children, side = \"top\" }: TooltipProps)"},{"anchor":"S:55fc57e799","doc":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read where the file could be removed out from und","kind":"function","line":17,"name":"readIfExists","path_id":"F:8abf9e432a","signature":"function readIfExists(path)"},{"anchor":"S:c44c6a3e42","doc":"Parse RELEASE-EVIDENCE.md to extract gate counts and autonomy status","kind":"function","line":35,"name":"parseEvidence","path_id":"F:8abf9e432a","signature":"function parseEvidence()"},{"anchor":"S:208ce5b839","doc":"Count work items by state","kind":"function","line":65,"name":"countWorkItems","path_id":"F:8abf9e432a","signature":"function countWorkItems()"},{"anchor":"S:370b67baf2","doc":"Parse the product version from package.json. (.modonome/version holds a schema version, not the product version, so it must not be used here.)","kind":"function","line":90,"name":"readVersion","path_id":"F:8abf9e432a","signature":"function readVersion()"},{"anchor":"S:4afb276004","doc":"Parse the normative AgentProof score and level from agentproof/README.md.","kind":"function","line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a","signature":"function parseAgentproof()"},{"anchor":"S:172b08e199","doc":"Update the meta block in site/repo-data.js (version, score, level).","kind":"function","line":118,"name":"updateRepoData","path_id":"F:8abf9e432a","signature":"function updateRepoData(data)"},{"anchor":"S:ee17355d71","doc":"Update site/index.html with live data","kind":"function","line":133,"name":"updateSite","path_id":"F:8abf9e432a","signature":"function updateSite(data)"},{"anchor":"S:03b000e190","doc":"Verify site data matches evidence (used in CI gate)","kind":"function","line":153,"name":"verifySiteData","path_id":"F:8abf9e432a","signature":"function verifySiteData(data)"},{"anchor":"S:c0c2347579","kind":"type","line":5,"name":"ButtonVariant","path_id":"F:8b122c449e","signature":"export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";"},{"anchor":"S:05e617fb30","kind":"type","line":6,"name":"ButtonSize","path_id":"F:8b122c449e","signature":"export type ButtonSize = \"sm\" | \"md\" | \"lg\";"},{"anchor":"S:c928d805b5","kind":"interface","line":8,"name":"ButtonProps","path_id":"F:8b122c449e","signature":"export interface ButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:b1bbb81b82","doc":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and * `danger` for anything that arms, delete","kind":"function","line":30,"name":"Button","path_id":"F:8b122c449e","signature":"export function Button("},{"anchor":"S:6c4ca00b53","doc":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state.","kind":"function","line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba","signature":"function scratchModonomeDir(sourcePath = realConfigPath)"},{"anchor":"S:a57f8c1bdc","doc":"Lines present in the original file that are untouched by a given patch: every line outside the blocks the patch's keys live in. Used to assert a patch changes only what it says it changes.","kind":"function","line":39,"name":"otherLines","path_id":"F:8b2f3dbcba","signature":"function otherLines(originalText, touchedTopKeys)"},{"anchor":"S:542af83b15","doc":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here.","kind":"const","line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4","signature":"export const BUILTIN_PROVIDERS ="},{"anchor":"S:6ee308cae0","doc":"Resolve a provider descriptor by name. Built-ins are merged with an optional * config-provided override map (cfg.providers), so a host repo can redefine or * add providers without touching this file. ","kind":"function","line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4","signature":"export function resolveProvider(name, providersOverride)"},{"anchor":"S:bead992b70","doc":"A cost class is billable only when it is \"paid\". Free and local roles never require remote_model_budget_usd_per_day.","kind":"function","line":48,"name":"isBillable","path_id":"F:8b5a1f94c4","signature":"export function isBillable(costClass)"},{"anchor":"S:97a7516354","doc":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned bounded-retry escapes and must not count as ","kind":"function","line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3","signature":"function buildAdjacency(machine, { includeCapGuard })"},{"anchor":"S:a716bbdaa8","doc":"reaches(adjacency, start, targets) -> bool Whether any node in `targets` is reachable from `start` along the edges.","kind":"function","line":33,"name":"reaches","path_id":"F:8b8d3c46b3","signature":"function reaches(adjacency, start, targets)"},{"anchor":"S:982b9fa62d","kind":"function","line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3","signature":"export function stateMachineErrors(machine)"},{"anchor":"S:a1828ef829","kind":"function","line":59,"name":"main","path_id":"F:8bb1b57470","signature":"async function main()"},{"anchor":"S:796295afbe","kind":"type","line":6,"name":"GateStatus","path_id":"F:8c6234a8cb","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:0906a625c3","kind":"interface","line":8,"name":"GateRow","path_id":"F:8c6234a8cb","signature":"export interface GateRow"},{"anchor":"S:2db1222578","kind":"interface","line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb","signature":"export interface GatePanelProps"},{"anchor":"S:0d46d60d35","doc":"A vertical list of CI gate rows, used to visualize the merge-blocking checks and * the anti-gaming ratchet on a work item or pipeline. Each row pairs an icon, a color, * and a text label for its statu","kind":"function","line":63,"name":"GatePanel","path_id":"F:8c6234a8cb","signature":"export function GatePanel({ gates, title = \"CI gates\" }: GatePanelProps)"},{"anchor":"S:aecf05317d","doc":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUrl * @returns {string}","kind":"function","line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236","signature":"export function buildChatCompletionsUrl(baseUrl)"},{"anchor":"S:b9ed6b7b01","doc":"Build the request headers, including the Authorization header when a token * is supplied. No Authorization header is sent when authToken is falsy, which * suits local endpoints that need none. * * @pa","kind":"function","line":44,"name":"buildHeaders","path_id":"F:8d2cb93236","signature":"export function buildHeaders(authToken, authScheme = \"Bearer\")"},{"anchor":"S:403ac351dd","doc":"Build the JSON request body. max_tokens is omitted when maxTokens is * undefined, since some endpoints reject an explicit null/undefined field. * * @param {string} model * @param {Array} messa","kind":"function","line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236","signature":"export function buildRequestBody(model, messages, maxTokens)"},{"anchor":"S:37693a15d4","doc":"Normalize a parsed OpenAI chat-completions response into * { text, finishReason, usage }. Throws a clear error on a malformed body * (missing choices, missing message). * * @param {any} data * @return","kind":"function","line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236","signature":"export function normalizeResponse(data)"},{"anchor":"S:fd88bace68","doc":"Retry only on 429 (rate limit) and 5xx (server error). Any other non-2xx status is a caller error and must not be retried.","kind":"function","line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236","signature":"function isRetryableStatus(status)"},{"anchor":"S:969658a48c","kind":"function","line":91,"name":"sleep","path_id":"F:8d2cb93236","signature":"function sleep(ms)"},{"anchor":"S:705c285e25","doc":"POST a chat-completions request to an OpenAI-compatible endpoint and return * a normalized result. * * @param {object} opts * @param {string} opts.baseUrl - Endpoint base, e.g. \"https://api.example.co","kind":"function","line":112,"name":"chatCompletion","path_id":"F:8d2cb93236","signature":"export async function chatCompletion("},{"anchor":"S:8041c36b7b","doc":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure.","kind":"function","line":18,"name":"noThrow","path_id":"F:8fe56e5618","signature":"function noThrow(fn)"},{"anchor":"S:856f3a5bea","doc":"Wrap guard-ratchet call with a hard 5-second timeout.","kind":"function","line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618","signature":"function ratchetWithTimeout(content)"},{"anchor":"S:744cc47208","doc":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and deterministic. * * Never returns an empty message:","kind":"function","line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281","signature":"export function cleanCommitMessage(message)"},{"anchor":"S:bc4bff4faa","doc":"Decide the metadata-only rewrite for each commit in a range. Input `commits` is the * range oldest-first, each { sha, an, ae, cn, ce, message }. `identity` is the target * { name, email } that replace","kind":"function","line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281","signature":"export function planCommitRewrites(commits, identity)"},{"anchor":"S:792d313360","doc":"A deterministic fingerprint of a rewrite plan. Same findings and target identity * produce the same plan and therefore the same fingerprint, which is what lets an owner * approve a proposal and later ","kind":"function","line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281","signature":"export function remediationFingerprint(plan)"},{"anchor":"S:18ff6b9c89","doc":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {string} dir * @returns {{ patchPath: stri","kind":"function","line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a","signature":"export function loadSubmission(dir)"},{"anchor":"S:00452332a2","doc":"Run the ratchet against the submitted diff TEXT ONLY, via its existing * --diff mode. Never applies or executes the diff. Returns the ratchet's raw * exit status and output for the report. * @param {s","kind":"function","line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a","signature":"export function runRatchetAgainstSubmission(patchPath, deps = {})"},{"anchor":"S:4296da48b7","doc":"Combine the declaration and the ratchet's verdict into a judged result. * Pure. \"confirmed-break\" only when the submitter claimed the diff should be * blocked and the ratchet, in fact, did not block i","kind":"function","line":86,"name":"judge","path_id":"F:90cbb2cf6a","signature":"export function judge(declaration, ratchetResult)"},{"anchor":"S:c388580f86","kind":"function","line":114,"name":"main","path_id":"F:90cbb2cf6a","signature":"async function main(argv)"},{"anchor":"S:fc3bb4bc24","doc":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves).","kind":"function","line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9","signature":"function collectFindings()"},{"anchor":"S:400a8c02c3","kind":"function","line":61,"name":"applyFix","path_id":"F:90e1fd2fd9","signature":"function applyFix(branch, findings)"},{"anchor":"S:6fab505fa4","doc":"Parse an optional `--pr ` flag. Returns the positive integer PR number, or null when absent. Throws on a malformed value so the caller can report it.","kind":"function","line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9","signature":"function parsePrNumber(rest)"},{"anchor":"S:cde4a28e06","doc":"Fetch the PR title, body, and conversation comments and scan them with the strict detector. Uses the same AI_SIGNATURE_RE as every other surface, so this is a hard detection gate, not the advisory nea","kind":"function","line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9","signature":"async function collectPrFindings(prNumber, client = createGitHubClient())"},{"anchor":"S:c546f7913f","kind":"function","line":108,"name":"main","path_id":"F:90e1fd2fd9","signature":"async function main(argv)"},{"anchor":"S:d75c32ea9c","kind":"function","line":11,"name":"add","path_id":"F:90f0999521","signature":"export function add(a, b)"},{"anchor":"S:d7d594dd8d","kind":"function","line":15,"name":"multiply","path_id":"F:90f0999521","signature":"export function multiply(a, b)"},{"anchor":"S:7902cd38d0","kind":"interface","line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8","signature":"export interface MdnRootProps extends HTMLAttributes"},{"anchor":"S:f2642efdc2","doc":"The design-system root. Establishes the dark ground, the body font, and the token * scope that every component inherits. Wrap an app or a screen in this (AppShell already * does). It is also the wrapp","kind":"function","line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8","signature":"export function MdnRoot({ children, className, style, ...rest }: MdnRootProps)"},{"anchor":"S:2b6631cd33","kind":"const","line":1,"name":"MESSAGES","path_id":"F:91e24dcac0","signature":"export const MESSAGES ="},{"anchor":"S:3b092e9ab0","doc":"Parse DECISIONS.md text into heading violations and Resolved-section entries.","kind":"function","line":64,"name":"parseDecisions","path_id":"F:92d6903b5f","signature":"export function parseDecisions(text)"},{"anchor":"S:183f710a08","kind":"function","line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f","signature":"function readCodeownersUsers(rootDir)"},{"anchor":"S:fe27a88258","doc":"Given a PR's reviews (GitHub API shape: [{ user: { login }, state }]) and its author login, is there at least one APPROVED review from a CODEOWNERS-listed login that is not the author themselves? Self","kind":"function","line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f","signature":"export function hasEligibleApproval(reviews, prAuthorLogin, codeownersUsers)"},{"anchor":"S:890ccb5d6b","kind":"function","line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f","signature":"async function fetchPRReviews(repoSlug, prNumber, token)"},{"anchor":"S:9554538925","doc":"Read the current PR's number, author login, and repo slug from GitHub Actions' standard environment (or from MODONOME_PR_* overrides, for tests and manual runs against a specific PR). Returns null whe","kind":"function","line":196,"name":"readPRContext","path_id":"F:92d6903b5f","signature":"function readPRContext()"},{"anchor":"S:eb67f0edae","kind":"function","line":219,"name":"getFileAt","path_id":"F:92d6903b5f","signature":"function getFileAt(ref, rootDir)"},{"anchor":"S:e18ceff2c8","kind":"function","line":230,"name":"main","path_id":"F:92d6903b5f","signature":"async function main()"},{"anchor":"S:a8fe6446c0","kind":"function","line":17,"name":"headSha","path_id":"F:92dde817ee","signature":"function headSha()"},{"anchor":"S:342fb4655a","kind":"function","line":23,"name":"gate","path_id":"F:9344d335a6","signature":"function gate(script, args = [])"},{"anchor":"S:cb97c7b3fc","kind":"function","line":27,"name":"mark","path_id":"F:9344d335a6","signature":"function mark(ok) { return ok ? \"pass\" : \"FAIL\"; }"},{"anchor":"S:bcddbe684b","doc":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), so summarizing them stays reproducible fr","kind":"function","line":62,"name":"listCaptures","path_id":"F:9344d335a6","signature":"function listCaptures()"},{"anchor":"S:0bae1275b2","kind":"type","line":1,"name":"Card","path_id":"F:93f0f5d3de","signature":"export type Card = { number: string; expired: boolean };"},{"anchor":"S:94383b0aef","kind":"type","line":3,"name":"RefundResult","path_id":"F:93f0f5d3de","signature":"export type RefundResult ="},{"anchor":"S:16a3c28802","kind":"function","line":9,"name":"charge","path_id":"F:93f0f5d3de","signature":"export function charge(card: Card): \"ok\" | \"declined\""},{"anchor":"S:bf5cf69681","kind":"function","line":13,"name":"refund","path_id":"F:93f0f5d3de","signature":"export function refund(card: Card, amount: number): RefundResult"},{"anchor":"S:5cc853b5b1","doc":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output.","kind":"function","line":50,"name":"loadScenarios","path_id":"F:94050e680d","signature":"export async function loadScenarios(dir = join(here, \"scenarios\"))"},{"anchor":"S:8e586c7c13","kind":"function","line":60,"name":"commandOnPath","path_id":"F:94050e680d","signature":"function commandOnPath(command)"},{"anchor":"S:44432e7cb0","doc":"Run one scenario against the resolved checker role. Never throws: every * failure to reach a model (binary absent, spawn error, non-zero exit, no * base_url for an openai-http checker) resolves to a \"","kind":"function","line":75,"name":"runScenario","path_id":"F:94050e680d","signature":"export async function runScenario(scenario, checker, deps = {})"},{"anchor":"S:5607ca9508","kind":"function","line":116,"name":"main","path_id":"F:94050e680d","signature":"async function main(argv)"},{"anchor":"S:517ace9ff8","kind":"function","line":17,"name":"tmp","path_id":"F:940d5f4399","signature":"function tmp()"},{"anchor":"S:2fb48a9b04","kind":"function","line":21,"name":"run","path_id":"F:940d5f4399","signature":"function run(script, ...args)"},{"anchor":"S:f9a8f3309b","kind":"function","line":25,"name":"scaffold","path_id":"F:940d5f4399","signature":"function scaffold(dir)"},{"anchor":"S:e31656bc1d","kind":"function","line":33,"name":"readConfig","path_id":"F:940d5f4399","signature":"function readConfig(dir)"},{"anchor":"S:1b794f5743","kind":"function","line":21,"name":"getDiff","path_id":"F:9427d264e6","signature":"function getDiff(baseRef = \"origin/main\")"},{"anchor":"S:d47456131b","kind":"function","line":40,"name":"getChangedFiles","path_id":"F:9427d264e6","signature":"function getChangedFiles(diff)"},{"anchor":"S:2f0240b93f","kind":"function","line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6","signature":"function loadCurrentWorkItem()"},{"anchor":"S:56a4782fc2","kind":"function","line":77,"name":"matchesPattern","path_id":"F:9427d264e6","signature":"function matchesPattern(path, patterns)"},{"anchor":"S:636b7af50c","doc":"A single active claim lease on a work item, as shown in the lease table.","kind":"interface","line":10,"name":"LeaseRow","path_id":"F:956332d4b5","signature":"export interface LeaseRow"},{"anchor":"S:46ca0706e7","kind":"interface","line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5","signature":"export interface LeaseTableProps"},{"anchor":"S:5eba6876fa","doc":"A table of active claim leases: which work item, who holds it, when it expires * (relative and exact), and whether it has gone stale. When `onRelease` is provided, * each row gets a danger \"Release\" b","kind":"function","line":36,"name":"LeaseTable","path_id":"F:956332d4b5","signature":"export function LeaseTable({ leases, onRelease }: LeaseTableProps)"},{"anchor":"S:7b984e047b","kind":"function","line":18,"name":"finalizeState","path_id":"F:95d4304133","signature":"export function finalizeState(base: PanelState): PanelState"},{"anchor":"S:559455c526","kind":"function","line":25,"name":"loadPanelState","path_id":"F:95d4304133","signature":"export async function loadPanelState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:b8ed1c85bb","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9616513cb6","signature":"export const MESSAGES ="},{"anchor":"S:8fe737eaa0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:964f89b6cc","signature":"export const MESSAGES ="},{"anchor":"S:c38d35b211","kind":"function","line":4,"name":"Roles","path_id":"F:973aaa9d86","signature":"export const Roles = () => ("},{"anchor":"S:257f8f1622","kind":"const","line":1,"name":"MESSAGES","path_id":"F:973aca5f3e","signature":"export const MESSAGES ="},{"anchor":"S:d412af5fd3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9803feef4a","signature":"export const MESSAGES ="},{"anchor":"S:944e1f3b0b","doc":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/check-promotion-readiness.mjs), which fai","kind":"const","line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea","signature":"export const CAPABILITY_FLAGS = ["},{"anchor":"S:2bba65c029","kind":"const","line":1,"name":"MESSAGES","path_id":"F:99251bc045","signature":"export const MESSAGES ="},{"anchor":"S:1dc2770ace","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9a32917e56","signature":"export const MESSAGES ="},{"anchor":"S:5a7bfc5a1b","doc":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identities is safe. The existing strict tokens a","kind":"const","line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER1_TOKENS = ["},{"anchor":"S:f650b22681","doc":"Tier 2: generic or ambiguous words that would explode with false positives under substring or free-text matching (\"assistant professor\", \"once you grok this\", \"the argument doesn't cohere\"). Matched O","kind":"const","line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER2_TOKENS = [\"assistant\", \"grok\", \"cohere\"];"},{"anchor":"S:0c9de67184","doc":"Free text (commit bodies, PR text) is the noisiest surface: this repo legitimately names \"claude\"/\"gpt\" in prose, and \"grok\"/\"cohere\" are ordinary words there. So free-text scanning is limited to the ","kind":"const","line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TEXT_TOKENS = [\"mistral\", \"deepseek\", \"qwen\"];"},{"anchor":"S:680cec9dbd","kind":"function","line":64,"name":"clamp","path_id":"F:9a3e8ed7d2","signature":"function clamp(s)"},{"anchor":"S:25a03d4ee2","doc":"Lowercase and strip separators (`/ - _ .` and whitespace) so \"claude-code\", * \"claude_code\", and \"Claude Code\" all normalize to a form containing \"claudecode\". * Used for Tier-1 substring matching on ","kind":"function","line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2","signature":"export function normalizeForMatch(s)"},{"anchor":"S:7b7ddcaa20","doc":"Split a branch name or identity into its bare word segments for exact Tier-2 matching: \"feature/grok-adapter\" -> [\"feature\", \"grok\", \"adapter\"].","kind":"function","line":79,"name":"segments","path_id":"F:9a3e8ed7d2","signature":"function segments(s)"},{"anchor":"S:89065c6f4b","kind":"function","line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2","signature":"function tier1Hit(normalized)"},{"anchor":"S:7910b636e8","kind":"function","line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2","signature":"function tier2Hit(segs)"},{"anchor":"S:a657233cd5","doc":"Near-miss on a branch name. Returns a finding, or null when clean or when the * strict segment check already catches it (so the widener never duplicates strict).","kind":"function","line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissBranch(name)"},{"anchor":"S:d92119a484","doc":"Near-miss on a commit author/committer identity. Checks the name (Tier 1 substring * and Tier 2 exact word) and the email (Tier 1 substring, catching vendor domains * such as \"@mistral.ai\"). Returns n","kind":"function","line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissIdentity(name, email)"},{"anchor":"S:b121dfe1ec","doc":"Near-miss on free text, scanned line by line. A line is a candidate only when it * both names a distinctive new-vendor TEXT_TOKEN (as a whole word) AND carries an * attribution cue, and the strict AI_","kind":"function","line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissText(where, text)"},{"anchor":"S:fa71aef711","doc":"Render one LESSONS.md Staged line from a finding. The line is a PROPOSED denylist * addition for human review, never an applied change. The (signal: review) tag marks * it as a review-surfaced candida","kind":"function","line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2","signature":"export function formatStagedLine(finding, { date, evidence })"},{"anchor":"S:cf3414acc5","doc":"Test files: any language.","kind":"const","line":10,"name":"TEST_FILE","path_id":"F:9a72895a04","signature":"export const TEST_FILE = new RegExp(["},{"anchor":"S:1c6f22237b","doc":"Python test files: pytest uses the bare `assert` statement (no call parens), which a call-site-only assertion counter cannot see. These need language-aware handling for the removal check and a vacuous","kind":"const","line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04","signature":"export const PYTHON_TEST = /(?:^|\\/)(?:test_[^/]*|[^/]*_test)\\.py$/;"},{"anchor":"S:2e1baab2ff","doc":"Source files by language (for non-test type-escape checks).","kind":"const","line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04","signature":"export const JAVA_SRC = /\\.java$/;"},{"anchor":"S:7ad858b9a2","kind":"const","line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04","signature":"export const DOTNET_SRC = /\\.cs$/;"},{"anchor":"S:e0b068ef78","kind":"const","line":31,"name":"TS_SRC","path_id":"F:9a72895a04","signature":"export const TS_SRC = /\\.(c|m)?[jt]sx?$/;"},{"anchor":"S:4d36cf3d1c","doc":"JaCoCo / Gradle / Coverlet config files.","kind":"const","line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04","signature":"export const JAVA_BUILD = /^(pom\\.xml|build\\.gradle(\\.kts)?)$/;"},{"anchor":"S:edd792ec6d","kind":"const","line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04","signature":"export const DOTNET_BUILD = /\\.(runsettings|csproj|props)$/;"},{"anchor":"S:d0478605fa","kind":"const","line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04","signature":"export const TS_CONFIG = /tsconfig.*\\.json$/;"},{"anchor":"S:4c9526df5f","kind":"const","line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04","signature":"export const COVERAGE_CONFIG = /(?:jest|vitest)\\.config\\.(js|ts|mjs|cjs)$|pyproject\\.toml$/;"},{"anchor":"S:f43dc8ad19","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d","signature":"export const MESSAGES ="},{"anchor":"S:4a7db1c0d0","kind":"function","line":45,"name":"emptyDraft","path_id":"F:9b3f18856e","signature":"function emptyDraft(defaultRole: string): WorkItemDraft"},{"anchor":"S:84220fc054","doc":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-only * inspector drawer with the item's i","kind":"function","line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e","signature":"export function WorkQueueScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:700d752004","kind":"function","line":11,"name":"cli","path_id":"F:9bb94e1b40","signature":"function cli(...args)"},{"anchor":"S:46d90cc86e","kind":"function","line":13,"name":"Timeline","path_id":"F:9c9edea0c9","signature":"export const Timeline = () => ;"},{"anchor":"S:a1107105c3","kind":"function","line":26,"name":"tmp","path_id":"F:9cbe9238f8","signature":"function tmp()"},{"anchor":"S:641774928a","kind":"function","line":30,"name":"run","path_id":"F:9cbe9238f8","signature":"function run(script, ...args)"},{"anchor":"S:765b4574da","kind":"function","line":34,"name":"mcpCall","path_id":"F:9cbe9238f8","signature":"function mcpCall(method, params = {})"},{"anchor":"S:3fd1032067","kind":"const","line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766","signature":"export const CURRENT_SCHEMA_VERSION = 1;"},{"anchor":"S:18c9f379c0","doc":"Safe defaults for every lever. Migration fills any missing key from here.","kind":"const","line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766","signature":"export const SAFE_DEFAULTS ="},{"anchor":"S:b8cdbe3fd3","kind":"function","line":73,"name":"migrate","path_id":"F:9d69a6b766","signature":"export function migrate(cfg)"},{"anchor":"S:7803dea04b","doc":"Catalog entries for scripts/check-style.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e","signature":"export const MESSAGES ="},{"anchor":"S:8822b8498d","kind":"type","line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0","signature":"export type ProgressMeterTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:c1667b970b","kind":"interface","line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0","signature":"export interface ProgressMeterProps"},{"anchor":"S:8dfe0cf637","doc":"A horizontal meter for bounded quantities such as budget consumed or checker * coverage. Renders a label row (with a mono value/max readout) above a track, * with a filled bar sized to the current val","kind":"function","line":27,"name":"ProgressMeter","path_id":"F:9deac13db0","signature":"export function ProgressMeter("},{"anchor":"S:95871faa22","kind":"function","line":75,"name":"formatNumber","path_id":"F:9deac13db0","signature":"function formatNumber(n: number): string"},{"anchor":"S:5f8c0130c3","kind":"type","line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b","signature":"export type MetricTileTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:e15dbc7540","kind":"interface","line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b","signature":"export interface MetricTileProps"},{"anchor":"S:1beab0dc0c","doc":"A dashboard stat tile: an eyebrow label (with an optional HelpHint), a large value * with unit, and optional icon, trend slot, and sub text. This is the core building * block of the Overview screen's ","kind":"function","line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b","signature":"export function MetricTile({ label, value, unit, hint, tone = \"neutral\", icon, trend, sub }: MetricTileProps)"},{"anchor":"S:ad93bbf998","kind":"function","line":14,"name":"run","path_id":"F:9f36b3ef29","signature":"function run(args, cwd)"},{"anchor":"S:107eb40a1d","kind":"function","line":18,"name":"makeRepo","path_id":"F:9f36b3ef29","signature":"function makeRepo()"},{"anchor":"S:704fff1c43","kind":"function","line":15,"name":"tmp","path_id":"F:9f6dd5e5a3","signature":"function tmp()"},{"anchor":"S:13fdf696a0","kind":"function","line":19,"name":"run","path_id":"F:9f6dd5e5a3","signature":"function run(...args)"},{"anchor":"S:0a6b98d712","kind":"function","line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3","signature":"function scaffold(dir)"},{"anchor":"S:247c34d405","kind":"function","line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3","signature":"function itemsDir(dir)"},{"anchor":"S:e95adce358","kind":"function","line":4,"name":"DryRun","path_id":"F:a0068c8817","signature":"export const DryRun = () => ("},{"anchor":"S:9598b17b9e","kind":"function","line":14,"name":"AutoMerge","path_id":"F:a0068c8817","signature":"export const AutoMerge = () => ("},{"anchor":"S:c80f0936ea","kind":"function","line":4,"name":"Budget","path_id":"F:a0abaf6a25","signature":"export const Budget = () => ("},{"anchor":"S:5115891196","kind":"function","line":8,"name":"Coverage","path_id":"F:a0abaf6a25","signature":"export const Coverage = () => ;"},{"anchor":"S:996743005b","kind":"function","line":29,"name":"flagValue","path_id":"F:a0d489df6d","signature":"function flagValue(argv, name)"},{"anchor":"S:59ba63dbab","kind":"function","line":34,"name":"readConfig","path_id":"F:a0d489df6d","signature":"function readConfig(root)"},{"anchor":"S:3c2bad87be","kind":"function","line":40,"name":"snapshotDir","path_id":"F:a0d489df6d","signature":"function snapshotDir(root) { return join(root, \".modonome\", \"snapshot\"); }"},{"anchor":"S:5353762af1","kind":"function","line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d","signature":"function loadCommittedSignature(root)"},{"anchor":"S:d5719588cb","kind":"function","line":48,"name":"llmsText","path_id":"F:a0d489df6d","signature":"function llmsText(signature)"},{"anchor":"S:88bd705d3f","kind":"function","line":64,"name":"badgeJson","path_id":"F:a0d489df6d","signature":"function badgeJson(signature, map)"},{"anchor":"S:bc3262b829","kind":"function","line":73,"name":"writeArtifact","path_id":"F:a0d489df6d","signature":"function writeArtifact(root, built)"},{"anchor":"S:3466f40801","kind":"function","line":83,"name":"buildOptions","path_id":"F:a0d489df6d","signature":"function buildOptions(root, argv, now)"},{"anchor":"S:6584162247","kind":"function","line":97,"name":"nowIso","path_id":"F:a0d489df6d","signature":"function nowIso() { return new Date().toISOString(); }"},{"anchor":"S:383c03d511","doc":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yields a full rebuild that produces identical","kind":"function","line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d","signature":"function incrementalInputs(root, argv)"},{"anchor":"S:df5cb6eb12","doc":"Recompute file hashes and the Merkle root directly from disk. Used by --verify.","kind":"function","line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d","signature":"function recomputeMerkle(root)"},{"anchor":"S:8d131c2429","doc":"A --since ref is free-form git revision syntax (branch, tag, HEAD~N, a SHA), so it cannot be restricted to a fixed pattern the way a cache-internal SHA can. The one property that must hold is that it ","kind":"function","line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d","signature":"function isSafeGitRevision(value)"},{"anchor":"S:2a5511d42c","kind":"function","line":125,"name":"gitDelta","path_id":"F:a0d489df6d","signature":"function gitDelta(root, ref)"},{"anchor":"S:2ce7a5bbe7","kind":"function","line":146,"name":"positional","path_id":"F:a0d489df6d","signature":"function positional(argv)"},{"anchor":"S:ecd0da924a","doc":"Register the tree-sitter parser when requested via --parser or config, with a graceful fallback to the heuristic default when tree-sitter is not installed.","kind":"function","line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d","signature":"async function maybeRegisterParser(root, argv)"},{"anchor":"S:68308360b1","kind":"function","line":166,"name":"main","path_id":"F:a0d489df6d","signature":"async function main(argv)"},{"anchor":"S:f6264503e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a104667369","signature":"export const MESSAGES ="},{"anchor":"S:7369c62b84","kind":"class","line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423","signature":"export class OrderServiceBroken"},{"anchor":"S:07a58ff928","doc":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the stdin-close race in batch mode.","kind":"function","line":14,"name":"rpc","path_id":"F:a167609a41","signature":"function rpc(requests, expectedIds)"},{"anchor":"S:8e42d127b7","doc":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing out or parked for a human, so staleness d","kind":"const","line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d","signature":"export const OPEN_STATES = [\"queued\", \"claimed\", \"making\", \"checking\", \"rework\"];"},{"anchor":"S:b3a28348ad","doc":"A lease is live when it has a holder and an unexpired expiry, mirroring transition-work-item.mjs's own leaseIsLive so the two files can never disagree about what \"actively claimed\" means.","kind":"function","line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d","signature":"export function hasLiveLease(item, now = new Date())"},{"anchor":"S:25139ebf6c","doc":"Every `tests.test.mjs` (or agentproof.test.mjs) path literally named in an item's gates array, deduplicated. Broad gates like \"npm run verify\" or \"node scripts/check-style.mjs .\" name no specific file","kind":"function","line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d","signature":"export function extractOwnTestFiles(gates = [])"},{"anchor":"S:87fa79bea3","doc":"Every allowed_edit_set entry that is not itself one of the item's own test files: the implementation surface the test files are supposed to prove exists.","kind":"function","line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d","signature":"export function implementationPaths(item)"},{"anchor":"S:3fac1340a4","doc":"Decide whether a single open-state item looks stale, without running anything. Returns a reason string when every static precondition holds (has a resolvable test file, every implementation path exist","kind":"function","line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d","signature":"export function staleCandidate(item, now = new Date())"},{"anchor":"S:098af8d3e8","doc":"Run one already-existing test file and report whether it passed. Spawned, not imported, so a crash or hang in the target test cannot take this checker down with it; `node --test` on a single file is f","kind":"function","line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d","signature":"export function testFilePasses(testFile, { spawn = spawnSync } = {})"},{"anchor":"S:980a6a0449","doc":"Full check across every work item. Returns the list of stale findings; each entry names the item, the state it is stuck in, and the evidence (which test files and implementation paths already exist an","kind":"function","line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d","signature":"export function findStaleWorkItems(items, { spawn = spawnSync, now = new Date() } = {})"},{"anchor":"S:dc4ac94e5b","kind":"type","line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed","signature":"export type TableColumnAlign = \"left\" | \"right\" | \"center\";"},{"anchor":"S:aabd2d1e55","kind":"interface","line":6,"name":"TableColumn","path_id":"F:a402d2f9ed","signature":"export interface TableColumn"},{"anchor":"S:1d4c8df8c0","kind":"interface","line":19,"name":"TableProps","path_id":"F:a402d2f9ed","signature":"export interface TableProps"},{"anchor":"S:9f9ed94a62","doc":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highlight on * hover; when `onRowClick` is set","kind":"function","line":42,"name":"Table","path_id":"F:a402d2f9ed","signature":"export function Table({ columns, rows, getRowKey, onRowClick, empty, dense }: TableProps)"},{"anchor":"S:396f1000ae","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a5822fdd03","signature":"export const MESSAGES ="},{"anchor":"S:cd1b84d7ff","doc":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised.","kind":"function","line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021","signature":"function makeMinimalRepo()"},{"anchor":"S:336ebe7ff5","kind":"function","line":52,"name":"run","path_id":"F:a6d2bd3021","signature":"function run(tmp)"},{"anchor":"S:0ca7d7cb9c","doc":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than by path, so it holds under a copied or ","kind":"function","line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452","signature":"export function isModonomeRepo(targetRoot)"},{"anchor":"S:2681abe2e5","doc":"Install the pre-commit hook into targetRoot. Returns \"installed\", \"kept\" (a host hook already existed and was preserved), or \"no-git\". self=true writes modonome's own dev hook and overwrites; a host i","kind":"function","line":60,"name":"installHooks","path_id":"F:a7ce0f6452","signature":"export function installHooks(targetRoot, { self = false, mode = \"snapshot\" } = {})"},{"anchor":"S:0126079093","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15","signature":"export const MESSAGES ="},{"anchor":"S:0b4b18fb8a","kind":"type","line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27","signature":"export type IconButtonVariant = \"ghost\" | \"secondary\" | \"danger\";"},{"anchor":"S:49158af5a6","kind":"type","line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27","signature":"export type IconButtonSize = \"sm\" | \"md\";"},{"anchor":"S:b4354229d8","kind":"interface","line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27","signature":"export interface IconButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:8c83339acb","doc":"A square, icon-only button. Always carries an `aria-label` built from the required * `label` prop so the control has an accessible name even though no text is visible. * Use for compact affordances su","kind":"function","line":25,"name":"IconButton","path_id":"F:a8cfe45d27","signature":"export function IconButton("},{"anchor":"S:d31fd4dafa","doc":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or downgrade a failed precondition.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:aa27d254da","signature":"export const MESSAGES ="},{"anchor":"S:170dcaab55","doc":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value is * a bare command name resolved agains","kind":"function","line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6","signature":"export function resolveAdapterCommand(adapterEntry)"},{"anchor":"S:d7a4f68100","doc":"Enforce ADR-009 path containment. The adapter's working directory must resolve * to exactly the target directory (resolve(root, plan.target)); a cwd outside the * target, reached via \"..\" or an absolu","kind":"function","line":52,"name":"containedCwd","path_id":"F:aa77f227a6","signature":"export function containedCwd(root, target)"},{"anchor":"S:5b2eae49a8","kind":"function","line":62,"name":"sep","path_id":"F:aa77f227a6","signature":"function sep()"},{"anchor":"S:7ed39c68da","doc":"Build the argument vector for the external CLI. Points it at the resolved * endpoint (base URL and model), forwards a bounded max-turns flag, and reads the * prompt from stdin (so no prompt text lands","kind":"function","line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6","signature":"export function buildAdapterArgs(endpoint, maxTurns, adapterEntry)"},{"anchor":"S:bd7f311fdb","doc":"Run the external agentic CLI for one role. Never throws on a bounded/expected * failure (spawn error, non-zero exit, timeout, cap hit): returns a clean status * object mirroring the single-shot path's","kind":"function","line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6","signature":"export async function runToolLoopAdapter("},{"anchor":"S:2cd9cbf595","kind":"type","line":4,"name":"ToastTone","path_id":"F:ab334f34df","signature":"export type ToastTone = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:00c956ccf3","kind":"interface","line":6,"name":"ToastProps","path_id":"F:ab334f34df","signature":"export interface ToastProps"},{"anchor":"S:5eb8ce722f","doc":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: mount * one `Toast` per visible notificat","kind":"function","line":31,"name":"Toast","path_id":"F:ab334f34df","signature":"export function Toast({ tone = \"info\", title, message, onDismiss }: ToastProps)"},{"anchor":"S:55a57d9fd6","kind":"function","line":168,"name":"toolRatchet","path_id":"F:ab5077147a","signature":"async function toolRatchet(args)"},{"anchor":"S:a4d0ce8fea","kind":"function","line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a","signature":"async function toolValidateConfig(args)"},{"anchor":"S:2d1eeb5346","kind":"function","line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a","signature":"async function toolValidateWorkItem(args)"},{"anchor":"S:6499fa18ee","kind":"function","line":264,"name":"toolStatus","path_id":"F:ab5077147a","signature":"async function toolStatus(args)"},{"anchor":"S:2d2b3ccfa2","kind":"function","line":318,"name":"toolCompliance","path_id":"F:ab5077147a","signature":"async function toolCompliance(args)"},{"anchor":"S:f613554429","kind":"function","line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a","signature":"async function toolVerifyAttestation(args)"},{"anchor":"S:521fca28ad","kind":"function","line":344,"name":"toolSnapshot","path_id":"F:ab5077147a","signature":"async function toolSnapshot(args)"},{"anchor":"S:16d8c02a8e","kind":"function","line":372,"name":"send","path_id":"F:ab5077147a","signature":"function send(obj)"},{"anchor":"S:2306976428","kind":"function","line":376,"name":"errorResponse","path_id":"F:ab5077147a","signature":"function errorResponse(id, code, message)"},{"anchor":"S:dd3b976184","kind":"function","line":380,"name":"handleRequest","path_id":"F:ab5077147a","signature":"async function handleRequest(req)"},{"anchor":"S:a6ff0bb6d7","doc":"Slugify a lesson into a deterministic ID.","kind":"function","line":28,"name":"slugifyId","path_id":"F:ac11b5379f","signature":"function slugifyId(lesson)"},{"anchor":"S:928743a069","doc":"Build a learning record from options.","kind":"function","line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f","signature":"export function buildLearningRecord(opts = {})"},{"anchor":"S:562052e079","doc":"Validate a learning record. Returns an array of error strings. Empty array means valid.","kind":"function","line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f","signature":"export function validateLearningRecord(record)"},{"anchor":"S:ba65eaae5b","doc":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advisory notice.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:acc3f6b466","signature":"export const MESSAGES ="},{"anchor":"S:e19487a8ae","doc":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync.","kind":"function","line":22,"name":"resolveFiles","path_id":"F:ace169adc4","signature":"function resolveFiles(argPath)"},{"anchor":"S:c79db45132","doc":"Build the small file helpers a detector needs, bound to one target directory.","kind":"function","line":11,"name":"helpers","path_id":"F:ae46bbab81","signature":"function helpers(target)"},{"anchor":"S:13fa2b4863","doc":"Detect the primary stack. Returns { name, pm, gates } exactly as the dry-run sweep expects, plus { entrypoints, commands } for the snapshot signature.","kind":"function","line":20,"name":"detectStack","path_id":"F:ae46bbab81","signature":"export function detectStack(target = \".\")"},{"anchor":"S:3575202801","doc":"Paths that must never be auto-merged. Same list the dry-run sweep reports.","kind":"function","line":57,"name":"detectProtected","path_id":"F:ae46bbab81","signature":"export function detectProtected(target = \".\")"},{"anchor":"S:9e9207d834","doc":"Repo instruction files an agent should read first.","kind":"function","line":67,"name":"detectInstructions","path_id":"F:ae46bbab81","signature":"export function detectInstructions(target = \".\")"},{"anchor":"S:7c716c856e","doc":"Rank files by how often they changed in recent git history. The dry-run sweep uses the default limit of 3; the snapshot passes a larger limit to score churn across the whole tree. Returns [] when git ","kind":"function","line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81","signature":"export function detectHotFiles(target = \".\", { commits = 200, limit = 3 } = {})"},{"anchor":"S:7fe7ee7f43","kind":"function","line":94,"name":"dedupe","path_id":"F:ae46bbab81","signature":"function dedupe(arr)"},{"anchor":"S:3d3f20848d","doc":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.yml). Both are excluded from the schedule ","kind":"const","line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca","signature":"export const CORE_ROLE_SEQUENCE = [\"maker\", \"checker\"];"},{"anchor":"S:96e9e4a020","doc":"Normalize a role's trigger field (string shorthand, object, or absent) into a stable shape. A bare string s becomes { type: s }. Absent becomes { type: null }. after and cron default to an empty list ","kind":"function","line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca","signature":"export function normalizeTrigger(trigger)"},{"anchor":"S:0427f639c4","doc":"Normalize a role's schedule field into { cron, timezone } or null when absent. Pure.","kind":"function","line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca","signature":"export function normalizeSchedule(schedule)"},{"anchor":"S:d15b7063e3","doc":"The cron expressions a role fires on: its schedule.cron plus a trigger.cron (or a trigger.type of schedule that carries a cron), de-duplicated and sorted for a stable render. Returns an empty array fo","kind":"function","line":76,"name":"roleCrons","path_id":"F:aea3c05bca","signature":"export function roleCrons(roleCfg)"},{"anchor":"S:afa2ffd4a2","doc":"The crew roles the schedule generator manages: every configured role that is not a reserved role (maker, checker, self-govern) and has a prompt to run. Sorted for a stable render. Pure aside from read","kind":"function","line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca","signature":"export function schedulableCrewRoles(cfg)"},{"anchor":"S:33846c9bba","doc":"Build the executed role order from after-role triggers. Returns null when no role declares trigger.after, so the caller keeps its existing default (a pure maker -> checker run) with zero behavior chan","kind":"function","line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca","signature":"export function deriveTriggerSequence(cfg)"},{"anchor":"S:73cbfa5a7d","doc":"Render one job for a scheduled crew role. It checks out, runs the role as a single dry-run invocation of run-cycle.mjs, and only executes behind an explicit repository variable. When the role carries ","kind":"function","line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca","signature":"function renderRoleJob(role, crons)"},{"anchor":"S:9cda312f51","doc":"Render the full scheduled-crew workflow as a deterministic YAML string. The trigger block is the sorted union of every managed role's crons plus workflow_dispatch, so a role always has a manual path a","kind":"function","line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca","signature":"export function renderScheduleWorkflow(cfg)"},{"anchor":"S:65004e9f74","doc":"Load the repo config through the same loader run-cycle uses, so the generator reads exactly what the loop reads. Falls back to an empty roles map when the file is absent.","kind":"function","line":215,"name":"loadCfg","path_id":"F:aea3c05bca","signature":"function loadCfg()"},{"anchor":"S:5327d3b72c","kind":"function","line":223,"name":"main","path_id":"F:aea3c05bca","signature":"function main()"},{"anchor":"S:e8f6de81b4","kind":"function","line":259,"name":"selfTest","path_id":"F:aea3c05bca","signature":"function selfTest()"},{"anchor":"S:52826c5034","kind":"class","line":768,"name":"Component","path_id":"F:aef9cf1e27","signature":"class Component extends DCLogic"},{"anchor":"S:52be3c746f","kind":"function","line":32,"name":"git","path_id":"F:af6de66499","signature":"function git(...a)"},{"anchor":"S:48102a3f37","kind":"function","line":37,"name":"parseFraction","path_id":"F:af6de66499","signature":"function parseFraction(s)"},{"anchor":"S:6122b96d0b","kind":"function","line":11,"name":"runGateCapped","path_id":"F:b014028f57","signature":"export function runGateCapped(cmdArray, { timeoutMs = 30000, maxBuffer = 67108864 } = {})"},{"anchor":"S:4fb0095605","doc":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":22,"name":"checkRegistry","path_id":"F:b16afebae9","signature":"export function checkRegistry(registry, schema)"},{"anchor":"S:837b5a8d1e","doc":"CLI: read the registry and schema from the repo root and report PASS/FAIL.","kind":"function","line":38,"name":"runCli","path_id":"F:b16afebae9","signature":"function runCli()"},{"anchor":"S:c6d0684785","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b25dcdad19","signature":"export const MESSAGES ="},{"anchor":"S:41ad75ea93","doc":"Build a synthetic 1000-line diff that is clean (no gaming patterns).","kind":"function","line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600","signature":"function buildLargeDiff(lines)"},{"anchor":"S:d0587dc399","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b2efd505ef","signature":"export const MESSAGES ="},{"anchor":"S:3e2d44a335","kind":"type","line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:0c7a33bcbe","kind":"interface","line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb","signature":"export interface ModeSwitcherProps"},{"anchor":"S:5b0828ff4b","doc":"The global context switch. Host mode reads the engine as installed in a customer * repo; product mode reads modonome governing its own repository (self-application). * The same screens serve either su","kind":"function","line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb","signature":"export function ModeSwitcher({ mode, onModeChange, hostLabel, productLabel }: ModeSwitcherProps)"},{"anchor":"S:4bfea4387c","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1","signature":"export const MESSAGES ="},{"anchor":"S:700c80e34d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b502a0fe75","signature":"export const MESSAGES ="},{"anchor":"S:ea113218d1","doc":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, so this * interface is the contract a hos","kind":"interface","line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133","signature":"export interface WorkItemSummary"},{"anchor":"S:42d33f191a","kind":"interface","line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133","signature":"export interface WorkItemCardProps"},{"anchor":"S:c7ef137e46","doc":"A compact, clickable summary card for a single work item: title with its id, * current-state pill, risk tier, a protected-path lock indicator, attempt count, and * pull request number. Used in queue b","kind":"function","line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133","signature":"export function WorkItemCard({ item, onClick }: WorkItemCardProps)"},{"anchor":"S:18da5ae581","doc":"Read all .mjs files in a directory (non-recursive by default).","kind":"function","line":13,"name":"listMjs","path_id":"F:b70824b13e","signature":"function listMjs(dir, recursive = false)"},{"anchor":"S:df7a91f366","doc":"Extract import specifiers from a file's source text. Only matches actual import statements (not comments or JSDoc).","kind":"function","line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e","signature":"function extractImportSpecifiers(source)"},{"anchor":"S:3702b2fefe","kind":"function","line":47,"name":"isAllowedImport","path_id":"F:b70824b13e","signature":"function isAllowedImport(specifier)"},{"anchor":"S:fedbb5f441","kind":"class","line":4,"name":"NotificationService","path_id":"F:b9d806ba4d","signature":"export class NotificationService"},{"anchor":"S:eb51a5641a","doc":"Base valid packet factory: returns a fresh object each call.","kind":"function","line":7,"name":"makePacket","path_id":"F:ba97282cf5","signature":"function makePacket(overrides = {})"},{"anchor":"S:ebb9dad93b","kind":"function","line":12,"name":"tmp","path_id":"F:baf7641a01","signature":"function tmp()"},{"anchor":"S:79a288a97f","kind":"function","line":16,"name":"runTick","path_id":"F:baf7641a01","signature":"function runTick(stateDir)"},{"anchor":"S:77054cfc82","kind":"function","line":23,"name":"makeItem","path_id":"F:baf7641a01","signature":"function makeItem(overrides = {})"},{"anchor":"S:028a668f8e","kind":"function","line":34,"name":"writeItem","path_id":"F:baf7641a01","signature":"function writeItem(itemsDir, name, item)"},{"anchor":"S:357942abbf","kind":"function","line":38,"name":"readItem","path_id":"F:baf7641a01","signature":"function readItem(itemsDir, name)"},{"anchor":"S:b01ec1a6ac","kind":"function","line":25,"name":"Gates","path_id":"F:bb6a874d58","signature":"export const Gates = () => ;"},{"anchor":"S:f5a71d2ca6","kind":"function","line":19,"name":"runScript","path_id":"F:bbb6476d71","signature":"function runScript(script, args = [], env = {})"},{"anchor":"S:c7db2cc29d","kind":"class","line":3,"name":"InventoryService","path_id":"F:bd02b28f17","signature":"export class InventoryService"},{"anchor":"S:0bf3d508cb","doc":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune their wording without a code change.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e","signature":"export const MESSAGES ="},{"anchor":"S:ac1ae69e0f","kind":"type","line":3,"name":"SparklineTone","path_id":"F:c0e80ca327","signature":"export type SparklineTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:b27476e527","kind":"interface","line":5,"name":"SparklineProps","path_id":"F:c0e80ca327","signature":"export interface SparklineProps"},{"anchor":"S:655f25fbed","doc":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inline * next to a metric (cost trend, throug","kind":"function","line":33,"name":"Sparkline","path_id":"F:c0e80ca327","signature":"export function Sparkline("},{"anchor":"S:a272c887e3","kind":"function","line":82,"name":"toPoints","path_id":"F:c0e80ca327","signature":"function toPoints(data: number[], innerW: number, innerH: number, padding: number): [number, number][]"},{"anchor":"S:686192f35d","kind":"function","line":97,"name":"toLinePath","path_id":"F:c0e80ca327","signature":"function toLinePath(points: [number, number][]): string"},{"anchor":"S:27005d8f20","kind":"function","line":27,"name":"buildBundle","path_id":"F:c4395c3023","signature":"function buildBundle()"},{"anchor":"S:3ad956fb93","kind":"function","line":36,"name":"configDefaults","path_id":"F:c5938c33fd","signature":"function configDefaults(rel)"},{"anchor":"S:1e5dabea9c","doc":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate.","kind":"function","line":43,"name":"hasHeading","path_id":"F:c5938c33fd","signature":"function hasHeading(text, section)"},{"anchor":"S:6b1894b02c","kind":"function","line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd","signature":"function findPromotionAdr(flag)"},{"anchor":"S:03b490fb81","kind":"function","line":7,"name":"clean","path_id":"F:c598a2d684","signature":"function clean(text)"},{"anchor":"S:ec2e53ab2e","kind":"function","line":12,"name":"signature","path_id":"F:c598a2d684","signature":"function signature(line)"},{"anchor":"S:ebdb053467","kind":"function","line":17,"name":"docAbove","path_id":"F:c598a2d684","signature":"function docAbove(lines, index)"},{"anchor":"S:df1c5c3628","kind":"const","line":33,"name":"adapter","path_id":"F:c598a2d684","signature":"export const adapter ="},{"anchor":"S:95e56b0a9c","kind":"function","line":27,"name":"Remote","path_id":"F:c63a71fb57","signature":"export const Remote = () => ;"},{"anchor":"S:e5772fff07","kind":"function","line":29,"name":"LocalOnly","path_id":"F:c63a71fb57","signature":"export const LocalOnly = () => ;"},{"anchor":"S:749446c25e","kind":"const","line":8,"name":"armingModes","path_id":"F:c64c042051","signature":"export const armingModes = [\"disabled\", \"dry-run\", \"armed\"] as const;"},{"anchor":"S:fc7eb05498","kind":"type","line":9,"name":"ArmingMode","path_id":"F:c64c042051","signature":"export type ArmingMode = (typeof armingModes)[number];"},{"anchor":"S:5465e6de42","kind":"const","line":11,"name":"workStates","path_id":"F:c64c042051","signature":"export const workStates = ["},{"anchor":"S:725b07739e","kind":"type","line":22,"name":"WorkState","path_id":"F:c64c042051","signature":"export type WorkState = (typeof workStates)[number];"},{"anchor":"S:544b9ce58e","kind":"const","line":24,"name":"riskTiers","path_id":"F:c64c042051","signature":"export const riskTiers = [1, 2, 3, 4] as const;"},{"anchor":"S:dab833b9a8","kind":"type","line":25,"name":"RiskTier","path_id":"F:c64c042051","signature":"export type RiskTier = (typeof riskTiers)[number];"},{"anchor":"S:8289602f81","doc":"CSS custom-property name for an arming mode color.","kind":"function","line":28,"name":"modeVar","path_id":"F:c64c042051","signature":"export function modeVar(mode: ArmingMode): string"},{"anchor":"S:583c8b60d3","doc":"CSS custom-property name for a work-item state color.","kind":"function","line":34,"name":"stateVar","path_id":"F:c64c042051","signature":"export function stateVar(state: WorkState): string"},{"anchor":"S:89566a4918","doc":"CSS custom-property name for a risk-tier color.","kind":"function","line":39,"name":"tierVar","path_id":"F:c64c042051","signature":"export function tierVar(tier: RiskTier): string"},{"anchor":"S:a26ee6eefd","doc":"Human labels for the work states, in flow order.","kind":"const","line":44,"name":"workStateLabels","path_id":"F:c64c042051","signature":"export const workStateLabels: Record ="},{"anchor":"S:644e7adeef","kind":"const","line":56,"name":"tokens","path_id":"F:c64c042051","signature":"export const tokens ="},{"anchor":"S:f80ff247d7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:c6bd51a324","signature":"export const MESSAGES ="},{"anchor":"S:d029f96a64","kind":"function","line":27,"name":"flagValue","path_id":"F:c72e6949b9","signature":"function flagValue(argv, name)"},{"anchor":"S:44a852f5e1","kind":"function","line":32,"name":"readStdin","path_id":"F:c72e6949b9","signature":"function readStdin()"},{"anchor":"S:276edd396a","kind":"function","line":45,"name":"postJson","path_id":"F:c72e6949b9","signature":"function postJson(url, body, apiKey)"},{"anchor":"S:301d436113","kind":"function","line":80,"name":"main","path_id":"F:c72e6949b9","signature":"async function main(argv)"},{"anchor":"S:29574da2e9","doc":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unrelated, low-value assertions are added to","kind":"const","line":7,"name":"scenario","path_id":"F:c7423b85cf","signature":"export const scenario ="},{"anchor":"S:9299cd9a70","kind":"function","line":31,"name":"matches","path_id":"F:c9493b5275","signature":"function matches(l)"},{"anchor":"S:00f913bfd8","kind":"function","line":11,"name":"tf","path_id":"F:ca05b6ba1c","signature":"function tf(name)"},{"anchor":"S:3696870ce9","doc":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase \"packet\".","kind":"function","line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73","signature":"function literalPhraseRe(phrase)"},{"anchor":"S:55eb1af9ca","doc":"docs/LEXICON.md explains the rationale; this loads the terms it documents. A grandfathered term (see lexicon.json) warns instead of failing, so an approved rename can ship before every pre-existing fi","kind":"function","line":32,"name":"loadLexicon","path_id":"F:ca0833ac73","signature":"function loadLexicon()"},{"anchor":"S:ee9b2c90d1","kind":"function","line":53,"name":"walk","path_id":"F:ca0833ac73","signature":"function walk(dir, out = [])"},{"anchor":"S:aa4de9995b","kind":"function","line":4,"name":"Trends","path_id":"F:ca13fe2a5b","signature":"export const Trends = () => ("},{"anchor":"S:66ac4b8d64","kind":"function","line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:039c3576c4","doc":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (they fall through the family check and are ","kind":"function","line":23,"name":"modelFamily","path_id":"F:cb3c5f7715","signature":"export function modelFamily(model)"},{"anchor":"S:b128b3a196","doc":"Governance rules that JSON Schema cannot express (cross-field invariants).","kind":"function","line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715","signature":"export function governanceErrors(item, config = {})"},{"anchor":"S:16267c791e","kind":"function","line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715","signature":"export function validateWorkItem(item, config = {})"},{"anchor":"S:7c5c3a31a4","doc":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), * (within a segment), ** (across segments","kind":"function","line":41,"name":"compilePattern","path_id":"F:cb66095cb4","signature":"function compilePattern(pattern)"},{"anchor":"S:531cf59eb3","doc":"Build an ignore predicate for a repo root. The predicate takes a posix relative path and returns true when the path should be excluded. Later patterns win, so a negation can re-include a path a broad ","kind":"function","line":86,"name":"loadIgnore","path_id":"F:cb66095cb4","signature":"export function loadIgnore(root)"},{"anchor":"S:d4e650f5ae","doc":"Walk a repository into a sorted list of files. Symlinks are skipped to avoid cycles and escapes. Returns [{ relPath, absPath, size }] ordered by relPath.","kind":"function","line":110,"name":"walkRepo","path_id":"F:cb66095cb4","signature":"export function walkRepo(root, { ignore = () => false, maxDepth = 12 } = {})"},{"anchor":"S:e6e23439bf","kind":"function","line":8,"name":"tempRepo","path_id":"F:cba8f1d03b","signature":"function tempRepo({ withGit = true, pkgName = \"some-host\" } = {})"},{"anchor":"S:25117f5b1d","kind":"function","line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a","signature":"function normalizeLicense(raw)"},{"anchor":"S:cb3211f3c2","doc":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":33,"name":"checkLicenses","path_id":"F:cc361bd05a","signature":"export function checkLicenses(pkg, manifest)"},{"anchor":"S:310e2149b2","doc":"CLI: read package.json and adapters.json from the repo root and report PASS/FAIL.","kind":"function","line":80,"name":"runCli","path_id":"F:cc361bd05a","signature":"function runCli()"},{"anchor":"S:298b204d13","doc":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into the env-pollution check.","kind":"function","line":22,"name":"runPreflight","path_id":"F:cc65dd1342","signature":"function runPreflight(fixtureName)"},{"anchor":"S:c73cab5b60","kind":"function","line":42,"name":"ids","path_id":"F:cc65dd1342","signature":"function ids(report)"},{"anchor":"S:2ca7aeeeaf","kind":"function","line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342","signature":"function findingsBySeverity(report, severity)"},{"anchor":"S:ee57130d72","doc":"Catalog entries for scripts/check-drift.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:ccb72910b3","signature":"export const MESSAGES ="},{"anchor":"S:83ad315769","doc":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin.","kind":"function","line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3","signature":"export function resolveRepo(env = process.env, originUrl = null, overrides = {})"},{"anchor":"S:4d35869e55","kind":"function","line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3","signature":"function readOriginUrl()"},{"anchor":"S:fc28898c78","doc":"The credential, from GITHUB_TOKEN or GH_TOKEN. Empty string means unauthenticated.","kind":"function","line":44,"name":"resolveToken","path_id":"F:cdbe769ed3","signature":"export function resolveToken(env = process.env)"},{"anchor":"S:a4e7d71500","kind":"function","line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3","signature":"function isRetryableStatus(status)"},{"anchor":"S:95e22729ee","kind":"function","line":52,"name":"sleep","path_id":"F:cdbe769ed3","signature":"function sleep(ms)"},{"anchor":"S:de0b2dc0df","doc":"Build a read-only client bound to one repository. All inputs are injectable so * tests drive it against a local mock server with no real network call.","kind":"function","line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3","signature":"export function createGitHubClient("},{"anchor":"S:66b4da1ed7","kind":"type","line":6,"name":"ModelCostClass","path_id":"F:ce1173e176","signature":"export type ModelCostClass = \"paid\" | \"free\" | \"local\";"},{"anchor":"S:2e3ac2ba9f","kind":"interface","line":8,"name":"ModelCostRow","path_id":"F:ce1173e176","signature":"export interface ModelCostRow"},{"anchor":"S:61579a6235","kind":"interface","line":21,"name":"CostSummary","path_id":"F:ce1173e176","signature":"export interface CostSummary"},{"anchor":"S:8cf2204c43","kind":"interface","line":36,"name":"CostPanelProps","path_id":"F:ce1173e176","signature":"export interface CostPanelProps"},{"anchor":"S:13f1b3c9c0","doc":"A summary of model spend and call volume for a period: a budget meter for remote * USD spend, a small stat row of local calls, remote calls, and cache saves (framed * positively as retries avoided), a","kind":"function","line":93,"name":"CostPanel","path_id":"F:ce1173e176","signature":"export function CostPanel({ cost }: CostPanelProps)"},{"anchor":"S:4ed98bc995","kind":"function","line":18,"name":"baseCfg","path_id":"F:ce41983a53","signature":"function baseCfg(extra = {})"},{"anchor":"S:ad7d7732a1","kind":"function","line":24,"name":"makeExtract","path_id":"F:cecdb96382","signature":"function makeExtract(Parser, grammar)"},{"anchor":"S:464c90cba5","doc":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered.","kind":"function","line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382","signature":"export async function registerTreeSitter(register)"},{"anchor":"S:7c0d389b98","kind":"function","line":17,"name":"runRatchet","path_id":"F:cede5f9fa2","signature":"function runRatchet(...args)"},{"anchor":"S:703e56c471","doc":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config.","kind":"function","line":45,"name":"scratchRepo","path_id":"F:d0da1cab80","signature":"function scratchRepo(codeowners)"},{"anchor":"S:fb4a6826d7","kind":"function","line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80","signature":"function fakeGitEmail(email)"},{"anchor":"S:8d1ca74a54","doc":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older items, the schema's `owner` field; either","kind":"function","line":29,"name":"leaseHolder","path_id":"F:d135cffeaa","signature":"function leaseHolder(item)"},{"anchor":"S:87ca9c146a","kind":"function","line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa","signature":"function leaseIsLive(item, now)"},{"anchor":"S:fd822bf451","doc":"tryTransition(item, fromState, toState, writerId, now) -> result { ok: true, item } swap succeeded; item is a fresh copy { ok: false, conflict: \"\" } swap refused; item is left untouched `now` ","kind":"function","line":45,"name":"tryTransition","path_id":"F:d135cffeaa","signature":"export function tryTransition(item, fromState, toState, writerId, now = new Date())"},{"anchor":"S:fa36ece453","kind":"interface","line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91","signature":"export interface CarouselProps"},{"anchor":"S:36acbff697","doc":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scrolls a * focused item into view automatic","kind":"function","line":21,"name":"Carousel","path_id":"F:d20e4b6b91","signature":"export function Carousel({ children, label, className }: CarouselProps)"},{"anchor":"S:19aab1f03f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d288a78085","signature":"export const MESSAGES ="},{"anchor":"S:3ae3f92415","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d328f97d94","signature":"export const MESSAGES ="},{"anchor":"S:ce2faa5c80","kind":"function","line":18,"name":"loadConfig","path_id":"F:d480e40c97","signature":"export function loadConfig(path)"},{"anchor":"S:75c48595da","doc":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers: config values such as autonomy_enabled ","kind":"function","line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97","signature":"function primaryRoleModel(roleCfg)"},{"anchor":"S:dce77ef3c3","kind":"function","line":42,"name":"safetyErrors","path_id":"F:d480e40c97","signature":"export function safetyErrors(cfg)"},{"anchor":"S:ea1469d710","kind":"function","line":70,"name":"validateConfig","path_id":"F:d480e40c97","signature":"export function validateConfig(cfg)"},{"anchor":"S:655cf75cf0","kind":"function","line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9","signature":"export const OwnerOnly = () => ("},{"anchor":"S:733f5fd096","kind":"interface","line":5,"name":"HelpHintProps","path_id":"F:d5b496b125","signature":"export interface HelpHintProps"},{"anchor":"S:e44c445050","doc":"A tiny circular help affordance: a `help` icon button that reveals its text in a * Tooltip on hover or keyboard focus. This is the pervasive \"hover for context\" * control placed next to section labels","kind":"function","line":21,"name":"HelpHint","path_id":"F:d5b496b125","signature":"export function HelpHint({ label, children, size = 13 }: HelpHintProps)"},{"anchor":"S:c1c63b1bf8","kind":"function","line":35,"name":"planFile","path_id":"F:d6401dd73e","signature":"function planFile(editor)"},{"anchor":"S:c9785dab7b","doc":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches provable tautologies like `expect(1).toBe(","kind":"const","line":6,"name":"scenario","path_id":"F:d744931e6a","signature":"export const scenario ="},{"anchor":"S:fe9c17eefa","kind":"function","line":12,"name":"tmp","path_id":"F:d7d4e8d2a9","signature":"function tmp()"},{"anchor":"S:37a0d721be","kind":"function","line":16,"name":"run","path_id":"F:d7d4e8d2a9","signature":"function run(script, ...args)"},{"anchor":"S:91108693ba","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d8e37c4449","signature":"export const MESSAGES ="},{"anchor":"S:4f19353e16","kind":"interface","line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce","signature":"export interface ProtectedPathRowProps"},{"anchor":"S:e0eb326a77","doc":"A single row describing one protected path's guard state: a lock icon, the path in * mono, and a status readout. When a change is awaiting approval, shows an * attention-toned pill, notes who touched ","kind":"function","line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce","signature":"export function ProtectedPathRow("},{"anchor":"S:1274d7cf4b","kind":"type","line":3,"name":"Tier","path_id":"F:da42f69531","signature":"export type Tier = 1 | 2 | 3 | 4;"},{"anchor":"S:fea88d42b6","kind":"interface","line":5,"name":"TierBadgeProps","path_id":"F:da42f69531","signature":"export interface TierBadgeProps"},{"anchor":"S:f3d272846b","doc":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, and * anywhere a change's review require","kind":"function","line":24,"name":"TierBadge","path_id":"F:da42f69531","signature":"export function TierBadge({ tier, showLabel = true }: TierBadgeProps)"},{"anchor":"S:7070a0d16e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:da9133a29d","signature":"export const MESSAGES ="},{"anchor":"S:4eb7e87341","kind":"interface","line":5,"name":"NumberFieldProps","path_id":"F:db651caf76","signature":"export interface NumberFieldProps"},{"anchor":"S:50b0879e24","kind":"function","line":28,"name":"clamp","path_id":"F:db651caf76","signature":"function clamp(n: number, min?: number, max?: number): number"},{"anchor":"S:cfdd1d8a7f","doc":"A numeric field with decrement and increment stepper buttons and an optional * unit suffix. Used for caps and budget editors such as max open PRs, max diff * lines, lease minutes, and the remote model","kind":"function","line":40,"name":"NumberField","path_id":"F:db651caf76","signature":"export function NumberField("},{"anchor":"S:8d30c800e7","kind":"const","line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1","signature":"export const SNAPSHOT_SCHEMA_VERSION = 1;"},{"anchor":"S:154918aa5a","doc":"Detect binary content by scanning a prefix for a null byte.","kind":"function","line":32,"name":"isBinary","path_id":"F:dbb9c92ca1","signature":"function isBinary(buffer)"},{"anchor":"S:3734794a77","kind":"function","line":38,"name":"extOf","path_id":"F:dbb9c92ca1","signature":"function extOf(relPath)"},{"anchor":"S:cbe5a2e179","kind":"function","line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1","signature":"function firstCommentLine(source)"},{"anchor":"S:05fa5077ed","doc":"Derive a module purpose from its symbols and source. Returns the raw (unredacted) string so it can be cached; redaction is applied at map assembly time.","kind":"function","line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1","signature":"function rawPurpose(relPath, symbols, source)"},{"anchor":"S:e9e4290005","doc":"Build the full snapshot for a repository root.","kind":"function","line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1","signature":"export function buildSnapshot(root, opts = {})"},{"anchor":"S:45b2f146f0","doc":"Resolve adjacency into a sorted edge list of dictionary path ids.","kind":"function","line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1","signature":"function buildEdgeList(adjacency, pathIdByPath)"},{"anchor":"S:dbf47f93d3","kind":"function","line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1","signature":"function renderMarkdown({ generatedFor, merkleRoot, files, totalBytes, map })"},{"anchor":"S:890a9e6691","doc":"Read a light governance posture from the target config and environment. It never arms anything; it only reports posture so a snapshot can double as a status probe.","kind":"function","line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1","signature":"function readGovernance(root)"},{"anchor":"S:73feb65706","kind":"function","line":4,"name":"OnLabel","path_id":"F:dca643f34b","signature":"export const OnLabel = () => ("},{"anchor":"S:bd8806c490","kind":"function","line":13,"name":"Board","path_id":"F:dd1be2cd7b","signature":"export const Board = () => ;"},{"anchor":"S:b815c12407","kind":"const","line":1,"name":"MESSAGES","path_id":"F:dd58ae3791","signature":"export const MESSAGES ="},{"anchor":"S:e0832e1baa","kind":"function","line":8,"name":"withRoot","path_id":"F:ddd82fc886","signature":"function withRoot(learningsBody)"},{"anchor":"S:1d6822da4e","doc":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the researcher (or any other subset) without ed","kind":"function","line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49","signature":"export function resolveRoleSequence(cfg, opts = {})"},{"anchor":"S:4b76f865fa","doc":"Resolve a role's execution mode from its model's config entry. The default is \"patch\" (the WI-029 single-shot-diff path) whenever exec_mode is absent, so existing configs behave exactly as before. Onl","kind":"function","line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49","signature":"export function resolveExecMode(cfg, model)"},{"anchor":"S:914d5cd317","doc":"Build a role's ordered runtime fallback chain: the resolved primary first (so a --maker-model/--checker-model CLI override always wins as chain[0]), then the rest of the role's configured `models` lis","kind":"function","line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49","signature":"export function buildFallbackChain(cfg, role, resolved, known)"},{"anchor":"S:4f138d4cbe","doc":"Conservative classifier: only a network-level failure (connection refused/reset, DNS failure, a request timeout) counts as \"unreachable\" and is safe to retry against the next model in a role's fallbac","kind":"function","line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49","signature":"export function isUnreachableError(err)"},{"anchor":"S:41689151ff","kind":"function","line":105,"name":"parseArgs","path_id":"F:ddeb486c49","signature":"export function parseArgs(argv)"},{"anchor":"S:15286656f4","doc":"The execution environment this process is running in. Routing compares each role's required target against this to decide inline vs enqueue. Precedence: an explicit --worker-env flag, then MODONOME_WO","kind":"function","line":127,"name":"localEnv","path_id":"F:ddeb486c49","signature":"function localEnv(opts, env)"},{"anchor":"S:959be959f7","doc":"Resolve and validate a full cycle plan without calling any model. Pure: it reads the passed config and runId and throws on any policy violation. This is the testable core of the harness; the execute p","kind":"function","line":134,"name":"planCycle","path_id":"F:ddeb486c49","signature":"export function planCycle(opts, cfg, runId)"},{"anchor":"S:a75126f856","doc":"Build the child-process environment for a role invocation. When the resolved model carries a base_url (a local, self-hosted, or gateway endpoint), route the CLI there by setting ANTHROPIC_BASE_URL, wh","kind":"function","line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49","signature":"export function buildRunnerEnv(baseEnv, role)"},{"anchor":"S:9b986c2d8a","doc":"Render the role prompt with the same variables regardless of transport: identity/model placeholders, the run branch, and promoted learnings.","kind":"function","line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49","signature":"function buildRolePrompt(plan, role, env)"},{"anchor":"S:9f59110fda","doc":"Write the transcript log and append the schema-conformant metric shared by every transport. `extra` merges additional fields into the metric record (for example whether an openai-http patch applied).","kind":"function","line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49","signature":"function writeTranscriptAndMetric(plan, role, r, transcriptText, extra = {})"},{"anchor":"S:693b8fedee","doc":"Build the argv for the CLI-transport maker/checker invocation. Exported and * pure (no spawn) so a test can assert on the exact flags without launching a * real binary or spending tokens. * @param {{ ","kind":"function","line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49","signature":"export function buildRoleCliArgs(r, plan, prompt)"},{"anchor":"S:fe41df17f9","kind":"function","line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49","signature":"function invokeRoleClaudeCli(plan, role, env, deps = {})"},{"anchor":"S:c028c053e3","doc":"Provider-native single-shot execution: render the same prompt, call an OpenAI-compatible chat-completions endpoint once, and turn the response into file changes deterministically by extracting a unifi","kind":"function","line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49","signature":"export async function invokeRoleOpenAI(plan, role, env, deps = {})"},{"anchor":"S:8f6d716f36","doc":"Load the single agentic-CLI adapter entry from adapters.json for the tool-loop path. Returns the first declared adapter, or null when the manifest is empty or absent (which makes tool-loop degrade to ","kind":"function","line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49","signature":"function loadAdapterEntry(deps = {})"},{"anchor":"S:83b3a2ab69","doc":"Agentic tool-loop execution: spawn the declared external coding CLI (adapt-first, ADR-032) pointed at the resolved OpenAI-compatible endpoint. Containment, the turn cap, and the wall-clock timeout are","kind":"function","line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49","signature":"export async function invokeRoleToolLoop(plan, role, env, deps = {})"},{"anchor":"S:f8004b7b76","kind":"function","line":475,"name":"invokeRole","path_id":"F:ddeb486c49","signature":"function invokeRole(plan, role, env, deps)"},{"anchor":"S:4f43d4e206","doc":"Execute a plan. Refuses a hosted run when the budget is zero. Runs the maker, then the checker, each as a distinct CLI invocation with its own model and identity. `deps` (chatCompletionImpl/applyPatch","kind":"function","line":489,"name":"runCycle","path_id":"F:ddeb486c49","signature":"export function runCycle(opts, { execute, cfg, runId, env = process.env, queueDir, deps })"},{"anchor":"S:d33c2c4d3e","doc":"Invoke each role in turn and produce the \"executed\" result. A role's transport decides whether invokeRole returns a status number synchronously (anthropic-cli) or a Promise (openai-http, which awaits ","kind":"function","line":534,"name":"runRoles","path_id":"F:ddeb486c49","signature":"function runRoles(plan, roles, env, deps)"},{"anchor":"S:f71a25079c","kind":"function","line":549,"name":"main","path_id":"F:ddeb486c49","signature":"async function main()"},{"anchor":"S:2bd83b1706","kind":"const","line":1,"name":"MESSAGES","path_id":"F:de188c1b79","signature":"export const MESSAGES ="},{"anchor":"S:fe07a3bcbc","kind":"function","line":13,"name":"gitRepo","path_id":"F:de5ebbf586","signature":"function gitRepo()"},{"anchor":"S:8579f519b1","kind":"function","line":25,"name":"scaffold","path_id":"F:de5ebbf586","signature":"function scaffold(dir, extra = [])"},{"anchor":"S:60070857ec","doc":"The curated Modonome icon set. Every glyph is a stroke path on a 24x24 grid and * inherits `currentColor`, so an icon takes the color of whatever text or control it * sits in. Icons are decorative by ","kind":"type","line":9,"name":"IconName","path_id":"F:deab644e60","signature":"export type IconName ="},{"anchor":"S:a0f5484b98","kind":"interface","line":77,"name":"IconProps","path_id":"F:deab644e60","signature":"export interface IconProps extends Omit, \"name\">"},{"anchor":"S:abe6a83201","kind":"function","line":88,"name":"Icon","path_id":"F:deab644e60","signature":"export function Icon({ name, size = 16, title, strokeWidth = 1.8, ...rest }: IconProps)"},{"anchor":"S:f2f7e716af","doc":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says.","kind":"function","line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef","signature":"function makeBoundaryFixture(daImports)"},{"anchor":"S:8a9e6199b3","doc":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory.","kind":"function","line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce","signature":"function scratchModonomeDir()"},{"anchor":"S:211cdf5f9d","kind":"function","line":17,"name":"readItem","path_id":"F:e00aec45ce","signature":"function readItem(dir, id)"},{"anchor":"S:73e4b1bbf9","kind":"const","line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba","signature":"export const SIGNAL_MIN = 0;"},{"anchor":"S:ad1b93bd0c","kind":"const","line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba","signature":"export const SIGNAL_MAX = 5;"},{"anchor":"S:d4349c402c","kind":"const","line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba","signature":"export const NEUTRAL_SIGNAL = 2.5;"},{"anchor":"S:81bb2e8cc4","kind":"function","line":39,"name":"clamp","path_id":"F:e11f907cba","signature":"function clamp(n)"},{"anchor":"S:fb06279d5d","doc":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.","kind":"function","line":48,"name":"normalizeSignals","path_id":"F:e11f907cba","signature":"export function normalizeSignals(signals = {})"},{"anchor":"S:574c990b3f","doc":"Pure scoring function. Higher score means higher priority: more value and safety for less effort, risk, and uncertainty.","kind":"function","line":59,"name":"scoreProposal","path_id":"F:e11f907cba","signature":"export function scoreProposal(signals = {})"},{"anchor":"S:c53d33aa2a","doc":"Sort proposals by descending score. Each entry may be a plain signals object or carry signals under an explicit `signals` key alongside other fields (for example `id` or `proposal` text), which are pr","kind":"function","line":71,"name":"scoreProposals","path_id":"F:e11f907cba","signature":"export function scoreProposals(proposalsWithSignals = [])"},{"anchor":"S:3cceb8dc09","doc":"Heuristic, deterministic signal derivation from a proposal string and a simple context object. This is a convenience default, not a source of truth: callers with better signals should pass them direct","kind":"function","line":96,"name":"deriveSignals","path_id":"F:e11f907cba","signature":"export function deriveSignals(proposalText, context = {})"},{"anchor":"S:ba347c9b77","kind":"function","line":4,"name":"Beside","path_id":"F:e19aab09cb","signature":"export const Beside = () => ("},{"anchor":"S:fdf5ba078f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c","signature":"export const MESSAGES ="},{"anchor":"S:e1813dcc71","doc":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are added by extending `roles`, `models`, an","kind":"function","line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07","signature":"function baseCfg(extra = {})"},{"anchor":"S:170d5cf4ef","kind":"function","line":18,"name":"tmp","path_id":"F:e359adb110","signature":"function tmp()"},{"anchor":"S:85083e2f79","kind":"function","line":22,"name":"run","path_id":"F:e359adb110","signature":"function run(dir)"},{"anchor":"S:8d5d2455bf","kind":"interface","line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72","signature":"export interface ResolvedPanelMessage"},{"anchor":"S:74b454ee62","kind":"function","line":56,"name":"interpolate","path_id":"F:e406ceab72","signature":"function interpolate(template: string, params: Record): string"},{"anchor":"S:72886ee448","doc":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to DEFAULTS, then to the raw id, so a miss","kind":"function","line":66,"name":"formatMessage","path_id":"F:e406ceab72","signature":"export function formatMessage("},{"anchor":"S:870a14c796","doc":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separation-of- * duties governance rules. The la","kind":"function","line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48","signature":"export function ArmingScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:d7029fdff9","doc":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendor identities are rejected.","kind":"function","line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2","signature":"export function isForbiddenIdentity(name, email)"},{"anchor":"S:5c7ed4ab16","doc":"Parse `git log` output where each commit is one line of * \"authorNameauthorEmailcommitterNamecommitterEmailshortSha\". * Returns the commits whose author or committer is a forbidden","kind":"function","line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2","signature":"export function findForbiddenCommits(logOutput)"},{"anchor":"S:f040dfb6c9","kind":"function","line":15,"name":"run","path_id":"F:e540f7b669","signature":"function run(script, args = [])"},{"anchor":"S:ce5e964e25","kind":"function","line":4,"name":"ArmingMode","path_id":"F:e5e519f441","signature":"export const ArmingMode = () => ("},{"anchor":"S:8c65a8b2a2","kind":"function","line":15,"name":"ActiveWork","path_id":"F:e5e519f441","signature":"export const ActiveWork = () => ("},{"anchor":"S:dd37641bec","kind":"function","line":27,"name":"Spend","path_id":"F:e5e519f441","signature":"export const Spend = () => ("},{"anchor":"S:2d541b3911","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e6677dcd37","signature":"export const MESSAGES ="},{"anchor":"S:17c9a6d377","doc":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped.","kind":"function","line":45,"name":"stripCharClasses","path_id":"F:e7380d1444","signature":"function stripCharClasses(src)"},{"anchor":"S:be897872b9","doc":"True when a group body contains a top-level unbounded quantifier.","kind":"function","line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444","signature":"function bodyHasUnbounded(body)"},{"anchor":"S:ca3e7d6f59","doc":"Detect nested quantifiers: a group (...) that is itself quantified by an unbounded quantifier (+, *, or {n,}) AND whose body contains an unbounded quantifier. This is the catastrophic-backtracking cla","kind":"function","line":72,"name":"redosFindings","path_id":"F:e7380d1444","signature":"export function redosFindings(source)"},{"anchor":"S:c52b041088","doc":"1. Runtime: exported RegExp sources (including RegExps inside an exported array).","kind":"function","line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444","signature":"async function exportedRegexSources(absFile)"},{"anchor":"S:dcc6653dc4","doc":"2/3. Static: new RegExp(\"...\"|`...`) string args (no interpolation) and /.../ literals.","kind":"function","line":114,"name":"staticPatternSources","path_id":"F:e7380d1444","signature":"function staticPatternSources(src)"},{"anchor":"S:979cd75d0e","doc":"Collect every regex-safety problem across the target files. Exported (not run at import time) so the gate can be exercised without triggering process.exit.","kind":"function","line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444","signature":"export async function regexSafetyProblems(rootDir = root)"},{"anchor":"S:42d4f014b5","doc":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (proving it * would catch a bad promotion). Eac","kind":"function","line":41,"name":"corpusProblems","path_id":"F:e8676a18b7","signature":"export function corpusProblems({ strictBranch, fuzzyBranch, strictId, fuzzyId, strictText, fuzzyText })"},{"anchor":"S:59f6d857da","doc":"The real detectors, wired to the injectable checker.","kind":"const","line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7","signature":"export const LIVE_DETECTORS ="},{"anchor":"S:ed0a2f8660","kind":"function","line":28,"name":"git","path_id":"F:e9479e1a3b","signature":"function git(...a)"},{"anchor":"S:b32b89125f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e948251d2b","signature":"export const MESSAGES ="},{"anchor":"S:98ca1b6552","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d","signature":"export const MESSAGES ="},{"anchor":"S:135fde5dfb","doc":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] * - \"success\": always returns a normal c","kind":"function","line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb","signature":"export function startMockServer(options = {})"},{"anchor":"S:b65916676a","kind":"function","line":98,"name":"successBody","path_id":"F:eb14a0bdeb","signature":"function successBody(overrides)"},{"anchor":"S:ac31df31c0","kind":"function","line":113,"name":"writeJson","path_id":"F:eb14a0bdeb","signature":"function writeJson(res, status, body)"},{"anchor":"S:153c85af26","kind":"const","line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a","signature":"export const MESSAGES ="},{"anchor":"S:38948fee1c","kind":"class","line":10,"name":"LiveApiError","path_id":"F:ec52ca3820","signature":"export class LiveApiError extends Error {}"},{"anchor":"S:819d9d37ff","kind":"function","line":12,"name":"call","path_id":"F:ec52ca3820","signature":"async function call(path: string, init?: RequestInit): Promise"},{"anchor":"S:cab56da046","kind":"function","line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820","signature":"export function fetchLiveState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:18fce60dc6","kind":"function","line":32,"name":"saveConfig","path_id":"F:ec52ca3820","signature":"export function saveConfig("},{"anchor":"S:4124b7df92","kind":"function","line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820","signature":"export function releaseLeaseLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:a4b6be1d49","kind":"function","line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820","signature":"export function pruneLearningLive(mode: PanelMode, lesson: string, dir?: string): Promise"},{"anchor":"S:699f2f623f","kind":"function","line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820","signature":"export function saveMessagesLive("},{"anchor":"S:92bb85bdff","kind":"interface","line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820","signature":"export interface ConnectionTestResult"},{"anchor":"S:cb81b7e05c","doc":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway).","kind":"function","line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820","signature":"export function testConnectionLive(baseUrl: string): Promise"},{"anchor":"S:69ef79b6f3","kind":"function","line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820","signature":"export function createWorkItemLive(mode: PanelMode, item: NewWorkItemInput, dir?: string): Promise"},{"anchor":"S:7a68bb8c0c","kind":"function","line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820","signature":"export function updateWorkItemLive(mode: PanelMode, itemId: string, patch: WorkItemPatch, dir?: string): Promise"},{"anchor":"S:f9a749a2b1","kind":"function","line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820","signature":"export function deleteWorkItemLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:b1e3e516c3","doc":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close).","kind":"function","line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:dd1940719c","doc":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name.","kind":"function","line":46,"name":"parseArgs","path_id":"F:edb11415f0","signature":"function parseArgs(argv)"},{"anchor":"S:e6654c6139","doc":"gateOrder(graph) -> [...] the gates in dependency-first topological order. topoSort orders a gate ahead of the gates it points to, so reverse to put each gate's dependencies before the gate itself.","kind":"function","line":59,"name":"gateOrder","path_id":"F:edb11415f0","signature":"export function gateOrder(graph)"},{"anchor":"S:6e6111c7dd","doc":"runPipeline(order, fixtures) -> [...] failures in topological order. Each failure is { gate, reason }. A missing fixture for a gate is itself a failure: the gate cannot be evaluated, so the pipeline m","kind":"function","line":70,"name":"runPipeline","path_id":"F:edb11415f0","signature":"export function runPipeline(order, fixtures)"},{"anchor":"S:66bb927095","kind":"function","line":11,"name":"run","path_id":"F:edf42fb1af","signature":"function run(cmd, opts = {})"},{"anchor":"S:c1e6062cfc","kind":"function","line":109,"name":"baseCfg","path_id":"F:ee02e563c6","signature":"function baseCfg(overrides = {})"},{"anchor":"S:5bad105043","kind":"function","line":3,"name":"Reading","path_id":"F:eecc78e7e8","signature":"export const Reading = () => ;"},{"anchor":"S:fd42584b25","kind":"const","line":1,"name":"MESSAGES","path_id":"F:efa02030ca","signature":"export const MESSAGES ="},{"anchor":"S:524aeb5cd6","kind":"function","line":23,"name":"Detail","path_id":"F:f0fbd8716f","signature":"export const Detail = () => {}} />;"},{"anchor":"S:2e93f745f3","kind":"function","line":17,"name":"ratchet","path_id":"F:f238d164c9","signature":"function ratchet(diffPath)"},{"anchor":"S:7ff08ea7a1","doc":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wording from the Messages tab too. None ar","kind":"const","line":5,"name":"MESSAGES","path_id":"F:f41378fed0","signature":"export const MESSAGES ="},{"anchor":"S:3c3cd672a7","doc":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the order they were detected via DFS (the f","kind":"function","line":11,"name":"isCyclic","path_id":"F:f51cba9beb","signature":"export function isCyclic(adjacency)"},{"anchor":"S:075e86ea7c","doc":"topoSort(adjacency, nodes) -> { order: [...], error?: string } Returns a topological ordering of `nodes` given the directed edges in `adjacency`. Nodes not present in `nodes` but reachable via edges a","kind":"function","line":48,"name":"topoSort","path_id":"F:f51cba9beb","signature":"export function topoSort(adjacency, nodes)"},{"anchor":"S:cb1a5f81e0","doc":"reachableFrom(adjacency, start) -> Set of nodes reachable from `start` by following directed edges (breadth-first). `start` itself is not included unless the graph has a path back to it. Used by the d","kind":"function","line":78,"name":"reachableFrom","path_id":"F:f51cba9beb","signature":"export function reachableFrom(adjacency, start)"},{"anchor":"S:9ec4198171","doc":"Collect every node mentioned either as a key or as a neighbour value.","kind":"function","line":93,"name":"collectNodes","path_id":"F:f51cba9beb","signature":"function collectNodes(adjacency)"},{"anchor":"S:c063b246d1","doc":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * where entry is undefined if `name` is no","kind":"function","line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1","signature":"export function loadAndValidateManifest(rootDir, name)"},{"anchor":"S:45bcd8bd18","doc":"Confirm the pure argv-construction helpers resolve without throwing and * produce a shape that never carries a prompt or a credential-like value. * Pure. Returns a list of problem strings (empty means","kind":"function","line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1","signature":"export function checkArgvSanity(entry)"},{"anchor":"S:753ca853b2","kind":"function","line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1","signature":"function commandOnPath(command)"},{"anchor":"S:59cd81d0e0","doc":"Minimal local OpenAI-compatible chat-completions mock. No real network, no cost, no external dependency. Scripted to echo back a fixed marker so a conforming adapter that forwards the model's reply in","kind":"function","line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1","signature":"function startProbeServer(replyContent)"},{"anchor":"S:781c2d6b40","doc":"Run the live conformance probe for one adapter entry. Returns * { status: \"pass\"|\"fail\"|\"skipped\", detail }. Never throws: every failure * mode (binary absent, timeout, non-zero exit, containment viol","kind":"function","line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1","signature":"export async function runLiveProbe(entry, opts = {})"},{"anchor":"S:c63f60f015","kind":"function","line":210,"name":"main","path_id":"F:f5d313e9f1","signature":"async function main(argv)"},{"anchor":"S:f988f356bd","kind":"function","line":4,"name":"Variants","path_id":"F:f6e100ab45","signature":"export const Variants = () => ("},{"anchor":"S:edacefac29","kind":"function","line":19,"name":"Sizes","path_id":"F:f6e100ab45","signature":"export const Sizes = () => ("},{"anchor":"S:af1e7a50ba","kind":"function","line":5,"name":"makeDb","path_id":"F:f8168b956f","signature":"function makeDb()"},{"anchor":"S:cb8cdfa49f","kind":"interface","line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9","signature":"export interface ConceptEntry"},{"anchor":"S:83deb081d9","kind":"const","line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9","signature":"export const CONCEPTS: ConceptEntry[] = ["},{"anchor":"S:a3bf9f1833","kind":"interface","line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b","signature":"export interface QueueBoardProps"},{"anchor":"S:16975f80af","doc":"The work queue as a board. Items are grouped into the columns of the durable state * machine (queued, claimed, making, checking, merge ready, done, escalated), with * rework folded into making and mer","kind":"function","line":18,"name":"QueueBoard","path_id":"F:f8609bae0b","signature":"export function QueueBoard({ items, onSelect }: QueueBoardProps)"},{"anchor":"S:5835c8b608","doc":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variable, which lives in CI or operator scope,","kind":"function","line":69,"name":"resolveArming","path_id":"F:f90930c3c3","signature":"export function resolveArming(targetDir, env = process.env)"},{"anchor":"S:53b9eda0f8","kind":"function","line":90,"name":"run","path_id":"F:f90930c3c3","signature":"function run(script, args)"},{"anchor":"S:214691c25d","kind":"function","line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3","signature":"function targetDirFrom(rest)"},{"anchor":"S:9249714b12","kind":"function","line":104,"name":"main","path_id":"F:f90930c3c3","signature":"function main(argv)"},{"anchor":"S:b1b5323930","kind":"function","line":77,"name":"runGate","path_id":"F:f921eecad7","signature":"function runGate(dir, args = [])"},{"anchor":"S:0b25fbc8fe","kind":"function","line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7","signature":"function plainDecisionsDir(content)"},{"anchor":"S:1ebb8bc1af","kind":"function","line":122,"name":"git","path_id":"F:f921eecad7","signature":"function git(args, cwd)"},{"anchor":"S:6ee06ecd24","doc":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }.","kind":"function","line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7","signature":"function repoWithNewEntry()"},{"anchor":"S:1b85e41391","doc":"The mock server has to run as its own OS process: the CLI-under-test is driven via spawnSync, which blocks this test's event loop for the duration of the child. An in-process HTTP server can't accept ","kind":"function","line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7","signature":"function startMockReviewServer(reviews)"},{"anchor":"S:45061132f3","kind":"function","line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7","signature":"function runGateWithPRContext(dir, baseSha, { apiBase, reviews, prAuthor = \"some-agent\" })"},{"anchor":"S:9b166b011e","kind":"type","line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f","signature":"export type IdentityChipRole = \"maker\" | \"checker\";"},{"anchor":"S:01b4ff4d73","kind":"type","line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f","signature":"export type IdentityChipSize = \"sm\" | \"md\";"},{"anchor":"S:a06feb4e68","kind":"interface","line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f","signature":"export interface IdentityChipProps"},{"anchor":"S:6797390adc","kind":"function","line":18,"name":"initialsFor","path_id":"F:f942e88a8f","signature":"function initialsFor(name: string): string"},{"anchor":"S:aaca852d2b","doc":"A compact identity marker: an initials avatar plus a name, with an optional model * string in muted mono beneath. When `role` is set the avatar ring is tinted (info for * maker, primary for checker) s","kind":"function","line":31,"name":"IdentityChip","path_id":"F:f942e88a8f","signature":"export function IdentityChip({ name, model, role, size = \"md\" }: IdentityChipProps)"},{"anchor":"S:e173063c31","kind":"function","line":4,"name":"Queued","path_id":"F:f9c98a8642","signature":"export const Queued = () => ("},{"anchor":"S:c7ebadadb9","kind":"function","line":19,"name":"Checking","path_id":"F:f9c98a8642","signature":"export const Checking = () => ("},{"anchor":"S:dff1725e3b","kind":"function","line":37,"name":"Escalated","path_id":"F:f9c98a8642","signature":"export const Escalated = () => ("},{"anchor":"S:13a8db3ab6","kind":"function","line":11,"name":"gitDiff","path_id":"F:fa49930755","signature":"function gitDiff(...args)"},{"anchor":"S:c176253e9c","kind":"function","line":12,"name":"tmp","path_id":"F:fadcf390da","signature":"function tmp()"},{"anchor":"S:8bff005013","kind":"function","line":16,"name":"runReport","path_id":"F:fadcf390da","signature":"function runReport(targetDir)"},{"anchor":"S:5919844321","doc":"Schema-conformant event line using \"event\" field (not \"type\").","kind":"function","line":24,"name":"makeEvent","path_id":"F:fadcf390da","signature":"function makeEvent(event, extra = {})"},{"anchor":"S:54a007aa57","doc":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no AST dependency) matches this repo's hous","kind":"function","line":50,"name":"relativeImportsOf","path_id":"F:fc21812307","signature":"function relativeImportsOf(absFile)"},{"anchor":"S:f99cb9f35c","doc":"Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro","kind":"function","line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307","signature":"export function determinismBoundaryErrors(root = REPO_ROOT)"},{"anchor":"S:9d42aeefd9","doc":"gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen","kind":"function","line":106,"name":"gateGraphErrors","path_id":"F:fc21812307","signature":"export function gateGraphErrors(graph)"},{"anchor":"S:aa00911a72","kind":"function","line":25,"name":"readEvents","path_id":"F:fc5d887ff6","signature":"function readEvents(path)"},{"anchor":"S:99ae98a428","kind":"function","line":71,"name":"walkMd","path_id":"F:fd08562f92","signature":"function walkMd(dir, out = [])"},{"anchor":"S:575af01d8c","kind":"function","line":110,"name":"checkTarget","path_id":"F:fd08562f92","signature":"function checkTarget(fileDir, rawTarget, srcFile)"},{"anchor":"S:bc1fd2c5b3","doc":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research.","kind":"function","line":149,"name":"adrNumbers","path_id":"F:fd08562f92","signature":"function adrNumbers(dir)"},{"anchor":"S:24c6a3dc6c","doc":"Front-matter parsing for canonical uniqueness and advisory presence.","kind":"function","line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92","signature":"function parseFrontMatter(text)"},{"anchor":"S:6647a4e550","kind":"function","line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92","signature":"function extractCitedPaths(text)"},{"anchor":"S:38b734e681","doc":"Commits touching any of `paths` since `sinceDate` (a YYYY-MM-DD string already validated by the caller). Returns 0 (fail open, warn-free) if this is not a git checkout, e.g. an npm-installed copy of t","kind":"function","line":278,"name":"commitsSince","path_id":"F:fd08562f92","signature":"function commitsSince(paths, sinceDate)"},{"anchor":"S:9bcfb77bfa","doc":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ removed so it compares directly to a handle ","kind":"function","line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa","signature":"export function parseCodeowners(text)"},{"anchor":"S:7a464a2d86","doc":"GitHub CODEOWNERS is last-match-wins: the owners of the LAST rule whose pattern matches the path. Supports the common subset modonome's own CODEOWNERS uses (a \"*\" catchall and rooted dir/file prefixes","kind":"function","line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa","signature":"export function ownersForPath(rules, path)"},{"anchor":"S:857ab7696f","kind":"function","line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa","signature":"function matchesPattern(pattern, path)"},{"anchor":"S:a50812babf","doc":"Extract a GitHub handle from a commit email. Only the two GitHub noreply formats carry a handle deterministically; any other address returns null (fail closed), so an unmapped identity is treated as n","kind":"function","line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa","signature":"export function handleFromEmail(email)"},{"anchor":"S:b29e93fbc3","kind":"function","line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa","signature":"function localGitEmail(repoRoot, exec)"},{"anchor":"S:f99d630708","kind":"function","line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa","signature":"function pickCodeowners(repoRoot, exists)"},{"anchor":"S:c36223901c","doc":"Decide whether the local git identity is a code owner of the config at * configRelPath within repoRoot. Fail-closed everywhere it cannot prove ownership: * no CODEOWNERS file, no owner declared for th","kind":"function","line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa","signature":"export function selfGovernanceOwnership("},{"anchor":"S:22e3bba95f","doc":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read the map instead of scanning the whole tre","kind":"function","line":26,"name":"snapshotContext","path_id":"F:fd660a117b","signature":"export function snapshotContext(root = process.cwd())"},{"anchor":"S:2b5847c683","doc":"Substitute every ${VAR} from env. Throw if a referenced variable is unset, so a missing identity or branch fails loudly instead of rendering an empty value into a model prompt.","kind":"function","line":61,"name":"renderPrompt","path_id":"F:fd660a117b","signature":"export function renderPrompt(role, env = process.env)"},{"anchor":"S:cf03857559","doc":"Run validate-config.mjs against a given config path.","kind":"function","line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602","signature":"function runValidateConfig(configPath, opts = {})"},{"anchor":"S:5daa909048","doc":"Run guard-ratchet.mjs with a --diff fixture.","kind":"function","line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602","signature":"function runGuardRatchet(diffPath, opts = {})"},{"anchor":"S:cdac115f81","doc":"Run check-portability.mjs against a fixture directory.","kind":"function","line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602","signature":"function runPortabilityCheck(fixturePath, opts = {})"},{"anchor":"S:7d8d2691e2","kind":"function","line":4,"name":"Tiers","path_id":"F:fe5ec971f8","signature":"export const Tiers = () => ("},{"anchor":"S:23fbaa24ea","kind":"function","line":13,"name":"git","path_id":"F:ff2c4a08a4","signature":"export function git(args, opts = {})"},{"anchor":"S:a529342ccb","kind":"function","line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4","signature":"export function currentBranch()"},{"anchor":"S:79b048583f","doc":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo).","kind":"function","line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4","signature":"export function defaultRange()"},{"anchor":"S:7c3651a5ba","doc":"Commits in `range` as structured records: { an, ae, cn, ce, sha, body }. Returns * the raw tab-delimited identity table too (the shape commit-identity.mjs parses). * Bodies are fetched one commit at a","kind":"function","line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4","signature":"export function commitsInRange(range = defaultRange())"},{"anchor":"S:9dee57c7c2","kind":"class","line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f","signature":"export class PaymentProcessor"},{"anchor":"S:e7e0d4979a","doc":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding line comments, and import edges (single a","kind":"function","line":5,"name":"clean","path_id":"F:ffe5c1269b","signature":"function clean(text)"},{"anchor":"S:a9f138bd93","kind":"function","line":10,"name":"signature","path_id":"F:ffe5c1269b","signature":"function signature(line)"},{"anchor":"S:f9d6a590e4","kind":"function","line":14,"name":"docAbove","path_id":"F:ffe5c1269b","signature":"function docAbove(lines, index)"},{"anchor":"S:28d1266e44","kind":"const","line":24,"name":"adapter","path_id":"F:ffe5c1269b","signature":"export const adapter ="}],"attention":[{"centrality":64,"pagerank":0.037911,"path_id":"F:05bffc70e9"},{"centrality":59,"pagerank":0.011418,"path_id":"F:03f476958e"},{"centrality":32,"pagerank":0.025731,"path_id":"F:7c8d518693"},{"centrality":23,"pagerank":0.016681,"path_id":"F:deab644e60"},{"centrality":48,"pagerank":0.000677,"path_id":"F:add7add561"},{"centrality":21,"pagerank":0.01643,"path_id":"F:1575110130"},{"centrality":15,"pagerank":0.019128,"path_id":"F:34cb2b6c48"},{"centrality":25,"pagerank":0.004961,"path_id":"F:ddeb486c49"},{"centrality":16,"pagerank":0.00481,"path_id":"F:932d33be00"},{"centrality":13,"pagerank":0.006543,"path_id":"F:0a85f3b8e5"},{"centrality":12,"pagerank":0.005677,"path_id":"F:d5b496b125"},{"centrality":12,"pagerank":0.004047,"path_id":"F:2fc610bd94"},{"centrality":11,"pagerank":0.004449,"path_id":"F:4ebb5aa8a0"},{"centrality":11,"pagerank":0.003453,"path_id":"F:304ce7b89d"},{"centrality":10,"pagerank":0.003433,"path_id":"F:245efb551c"},{"centrality":13,"pagerank":0.001132,"path_id":"F:dbb9c92ca1"},{"centrality":9,"pagerank":0.003264,"path_id":"F:8b122c449e"},{"centrality":7,"pagerank":0.003715,"path_id":"F:4a7eaceb5c"},{"centrality":9,"pagerank":0.002517,"path_id":"F:f07f8ebca9"},{"centrality":7,"pagerank":0.003416,"path_id":"F:d480e40c97"},{"centrality":6,"pagerank":0.003787,"path_id":"F:a8cfe45d27"},{"centrality":8,"pagerank":0.002384,"path_id":"F:65193a9799"},{"centrality":10,"pagerank":0.000964,"path_id":"F:113387361d"},{"centrality":7,"pagerank":0.002657,"path_id":"F:fd660a117b"},{"centrality":8,"pagerank":0.001977,"path_id":"F:b5ae6ee133"},{"centrality":5,"pagerank":0.003609,"path_id":"F:68c4da7fe8"},{"centrality":8,"pagerank":0.001721,"path_id":"F:22566cb46e"},{"centrality":6,"pagerank":0.002365,"path_id":"F:c64c042051"},{"centrality":3,"pagerank":0.004106,"path_id":"F:8b5a1f94c4"},{"centrality":8,"pagerank":0.001132,"path_id":"F:2554ddd30c"},{"centrality":5,"pagerank":0.002781,"path_id":"F:f51cba9beb"},{"centrality":4,"pagerank":0.003241,"path_id":"F:6e0bd62fa3"},{"centrality":3,"pagerank":0.003674,"path_id":"F:8a9aff1529"},{"centrality":8,"pagerank":0.000677,"path_id":"F:a0d489df6d"},{"centrality":7,"pagerank":0.001262,"path_id":"F:08064e0c53"},{"centrality":6,"pagerank":0.001714,"path_id":"F:3c479cac6e"},{"centrality":6,"pagerank":0.001623,"path_id":"F:e406ceab72"},{"centrality":5,"pagerank":0.001977,"path_id":"F:40eb542a82"},{"centrality":5,"pagerank":0.001975,"path_id":"F:86838d35ac"},{"centrality":5,"pagerank":0.001948,"path_id":"F:8d2cb93236"},{"centrality":6,"pagerank":0.001262,"path_id":"F:956332d4b5"},{"centrality":3,"pagerank":0.003022,"path_id":"F:e4ff19bbe2"},{"centrality":5,"pagerank":0.001518,"path_id":"F:2d6ef08990"},{"centrality":4,"pagerank":0.002039,"path_id":"F:cb3c5f7715"},{"centrality":6,"pagerank":0.000768,"path_id":"F:4ebf08705b"},{"centrality":6,"pagerank":0.000768,"path_id":"F:95d4304133"},{"centrality":6,"pagerank":0.000677,"path_id":"F:8bb1b57470"},{"centrality":6,"pagerank":0.000677,"path_id":"F:780c791407"},{"centrality":5,"pagerank":0.001262,"path_id":"F:14edab923f"},{"centrality":5,"pagerank":0.001262,"path_id":"F:ce1173e176"}],"dictionary":{"paths":{"F:00a0cb4ee4":"docs/adr/ADR-009-mcp-tool-auth-scope.md","F:0103cf3d56":"tests/rollback.test.mjs","F:015261eab0":"scripts/lib/snapshot-graph.mjs","F:01a7edaeba":"docs/adr/ADR-037-policy-pack-adoption.md","F:02359d48d5":"prompts/modules/gates.md","F:02a5f8fc55":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","F:037178c793":"templates/.modonome/DECISIONS.md","F:0391f3b249":"tests/check-md-governance.test.mjs","F:03f476958e":"scripts/lib/message-catalog/index.mjs","F:044b762a79":"examples/demo-app/tests/OrderService.test.js","F:0526aab88e":"docs/adr/ADR-007-claim-atomicity.md","F:059f9a812c":"tests/check-licenses.test.mjs","F:05a0f0d5a5":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","F:05bffc70e9":"scripts/lib/messages.mjs","F:06572a96a5":"CHANGELOG.md","F:06b982f5a2":"tests/envisioner-role.test.mjs","F:08064e0c53":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","F:08441e59e8":"tests/packet.test.mjs","F:08577063d4":".design-sync/previews/Select.tsx","F:08b7435c86":"apps/control-panel/server/api.mjs","F:08baf2c1e2":"docs/ops/preflight.md","F:093689bb8e":"tests/marketresearcher-role.test.mjs","F:094efaca92":"docs/adr/ADR-026-learning-promotion-audit-trail.md","F:09ba331878":"scripts/detect-near-miss.mjs","F:09ea014068":"scripts/lib/message-catalog/advisory/verify-packet.mjs","F:0a1a9270a7":"design-system/src/components/DecisionCard/index.ts","F:0a640a72f9":"docs/research/README.md","F:0a6a758e7d":".design-sync/previews/ConfirmDialog.tsx","F:0a6b452f14":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","F:0a85f3b8e5":"apps/control-panel/src/state/types.ts","F:0b5ca119d2":"docs/README.md","F:0c07096c4e":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","F:0c1c5ad5d9":"scripts/verify-packet.mjs","F:0c731e3460":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","F:0cacf66a3b":"scripts/lib/ed25519.mjs","F:0cc3e727ed":"design-system/src/components/Input/index.ts","F:0da05a2a05":"apps/control-panel/src/state/arming.ts","F:0e78eb22ec":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","F:0e9e38f100":"design-system/src/components/Toast/index.ts","F:0f284c134c":".modonome/LESSONS.md","F:10e76cfcd3":".design-sync/previews/StatusPill.tsx","F:1127892e72":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","F:113387361d":"apps/control-panel/src/App.tsx","F:114d351bdc":"tests/config.test.mjs","F:116adfb9f8":"scripts/risk-surface-guard.mjs","F:1174d7e2ba":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","F:119e3c0fce":"scripts/lib/snapshot-cache.mjs","F:128b647d9a":"scripts/fleet-ledger.mjs","F:12c7a4e461":"scripts/lib/packet-id.mjs","F:1339474d8c":"docs/ops/merge-governance-setup.md","F:137056535b":"tests/policy-attestation.test.mjs","F:13d31b33ea":".design-sync/previews/ProtectedPathRow.tsx","F:146a198c06":"design-system/src/components/Carousel/index.ts","F:147873af8b":"QUICKSTART.md","F:14812742da":"docs/adr/ADR-003-agentproof-portability.md","F:14edab923f":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","F:1575110130":"scripts/lib/yaml-lite.mjs","F:168fe4d371":"tests/detect-near-miss.test.mjs","F:1714946cc1":"scripts/check-control-panel-coverage.mjs","F:1716017e02":"design-system/src/components/MdnRoot/index.ts","F:179564da6f":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","F:182dcaa949":"design-system/src/components/LeaseTable/index.ts","F:18f569225a":"tests/agent-model-fallback.test.mjs","F:191a17b151":"docs/enterprise.md","F:195e9217ca":"tests/action-queue.test.mjs","F:1a137480ae":"design-system/src/components/ConceptTile/ConceptTile.tsx","F:1a19f02364":"scripts/lib/control-panel-audit.mjs","F:1a368a7935":"docs/adr/ADR-038-checker-as-review-service.md","F:1a58c06540":"docs/adr/ADR-014-knowledge-network-transport.md","F:1aa7cf650d":".design-sync/previews/Table.tsx","F:1bc04b108f":"tests/check-regex-safety.test.mjs","F:1bc6d1449f":"tests/agentproof-attestation.test.mjs","F:1bcaaff9eb":"tests/ws-b-harness.test.mjs","F:1c1d4f7335":"design-system/src/components/Select/index.ts","F:1c3b1b469e":"prompts/modonome.core.md","F:1cf31c4792":"scripts/lib/snapshot-anchors.mjs","F:1d03291691":"design-system/src/components/LearningCard/LearningCard.tsx","F:1db369d970":"design-system/src/components/Tabs/Tabs.tsx","F:1e15c1666f":"tests/github-api.test.mjs","F:1e5ef6ba70":"scripts/remediate.mjs","F:1ecd18c4b9":"examples/demo-app/src/OrderService.js","F:1f40b6eb6e":".design-sync/previews/Slider.tsx","F:1ff2bf39a4":"scripts/lib/message-catalog/advisory/github-api.mjs","F:2127a8caca":"scripts/agent/review-proposals.mjs","F:2148814594":"terraform/README.md","F:214cc0a5f4":"design-system/src/components/Toggle/Toggle.tsx","F:21752cf61a":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","F:2207a6ebce":".design-sync/previews/ActivationLadder.tsx","F:2215d0e1fc":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","F:22566cb46e":"apps/control-panel/server/modonomeWriter.mjs","F:22fab804b1":"tests/checkerproof.test.mjs","F:23917c6197":"scripts/test-prompt-behavior.mjs","F:23dbdd7e76":"scripts/lib/message-catalog/gate/check-portability.mjs","F:240ace7a8f":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","F:244a368695":"BREAK-THE-RATCHET.md","F:245efb551c":"scripts/lib/canonical-json.mjs","F:2470e60179":".design-sync/previews/AppShell.tsx","F:24f28ae0fa":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","F:250c8a0d4a":".design-sync/previews/LearningCard.tsx","F:2554ddd30c":"scripts/lib/lang-adapters/index.mjs","F:25e649633c":"apps/control-panel/src/state/configDiff.ts","F:25fdf1f8f6":"docs/adr/ADR-040-end-to-end-operating-model.md","F:268769c4a6":"design-system/src/components/AppShell/AppShell.tsx","F:26c8e3a19a":"templates/.modonome/LESSONS.md","F:27086b6de3":"docs/adr/ADR-042-agentproof-verified.md","F:2715f09f24":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","F:28b7af3c53":".design-sync/previews/ArmingStateBadge.tsx","F:28d4e1ad3d":"docs/adr/ADR-019-knowledge-network-execution-scope.md","F:28f278b1d9":"checkerproof/scenarios/cp-04-scope-creep.mjs","F:2a74ae3f05":"tests/snapshot-golden.test.mjs","F:2af556d595":"scripts/check-message-catalog-integrity.mjs","F:2b49c74e74":"tests/ws-e-ratchet-languages.test.mjs","F:2b9c43b0ca":"scripts/lib/merkle.mjs","F:2bfaa5759d":"docs/launch/x-thread.md","F:2c2cc77861":"examples/python-service/tests/test_orders.py","F:2d4c555ba1":"scripts/check-portability.mjs","F:2d6c10ab08":"scripts/check-control-panel-coherence.mjs","F:2d6ef08990":"scripts/agent/review-diff.mjs","F:2d93cea2d4":"scripts/lib/cli-args.mjs","F:2e327963ed":"scripts/build-compliance-evidence.mjs","F:2ec4f6540b":"agentproof/SPEC.md","F:2f3e98ab2c":"scripts/lib/risk-surface-rules.mjs","F:2f41a784d9":"CODEX.md","F:2f6c42c5ee":"design-system/src/components/States/States.tsx","F:2fc610bd94":"design-system/src/components/StatusPill/StatusPill.tsx","F:304ce7b89d":"scripts/agent/resolve-role.mjs","F:304fa8ef33":"apps/control-panel/src/screens/GatesScreen.tsx","F:313bcfac46":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","F:31658eff0b":".design-sync/previews/LeaseTable.tsx","F:31d378932b":"scripts/check-learning-traceability.mjs","F:3211d524ad":"apps/control-panel/README.md","F:3213d03b72":"scripts/lib/lang-adapters/python.mjs","F:3319e5c923":".design-sync/previews/SafetyStrip.tsx","F:33c4d744f3":"scripts/lib/message-catalog/agent-run/remediate.mjs","F:34ca4e55d1":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","F:34cb2b6c48":"scripts/lib/jsonschema.mjs","F:35002ba3fe":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","F:35c6d59157":"design-system/src/components/RoleBadge/RoleBadge.tsx","F:35d4a12b63":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","F:36419aa427":"scripts/lib/lang-adapters/js-ts.mjs","F:36693b0d8b":"prompts/modules/control-panel.md","F:373a946d5c":"examples/demo-app/tests/PaymentProcessor.test.js","F:373fee03a1":"design-system/src/components/WorkItemDrawer/index.ts","F:37f4a5c04e":"scripts/agent/route-action.mjs","F:3835919e8e":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","F:398655650f":"tests/ws-h-config.test.mjs","F:3a2345f153":"tests/run-gate-capped-unit.test.mjs","F:3a70dc66ea":"docs/adr/ADR-032-oss-adapter-boundary.md","F:3b382f95c0":"scripts/report.mjs","F:3b4065b679":".design-sync/previews/Checkbox.tsx","F:3b96b6dfed":"scripts/tripwire-check.mjs","F:3c479cac6e":"apps/control-panel/src/lib/confirm.tsx","F:3c53926ecd":"examples/demo-app/tests/CartService.test.js","F:3ce0fd77eb":".design-sync/previews/DecisionCard.tsx","F:3d505706cd":".design-sync/previews/Card.tsx","F:3d95ec2ed5":"tests/secret-patterns-unit.test.mjs","F:3dcdfa18c0":"docs/autonomy-plan.md","F:3dd926c4de":"design-system/src/components/QueueBoard/index.ts","F:3de9042953":"tests/packet-signing.test.mjs","F:3ea503e7c0":"tests/compliance-evidence.test.mjs","F:3f1216fc11":"scripts/lib/message-catalog/gate/check-licenses.mjs","F:3fe6b95e07":"design-system/src/components/HoverCard/index.ts","F:40887a152e":"docs/adr/ADR-041-gauntlet-replay.md","F:4096620673":"scripts/check-self-application.mjs","F:40d8f235fd":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","F:40e4f39b59":"tests/cli-dispatch.test.mjs","F:40eb542a82":"design-system/src/components/Card/Card.tsx","F:41623f0bcd":"prompts/modules/adoption.md","F:41f5ffe77a":".design-sync/previews/Drawer.tsx","F:4377343f4f":"tests/runner-env.test.mjs","F:4387a44284":".design-sync/previews/Modal.tsx","F:44a5987438":"tests/remediate.test.mjs","F:4637e1fecb":"tests/snapshot-incremental.test.mjs","F:46c40327ad":"design-system/src/components/Card/index.ts","F:4749cc43a0":"scripts/check-architecture-drift.mjs","F:48355ccf4d":"tests/self-application.test.mjs","F:492786871a":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","F:4a6129eacb":"apps/control-panel/src/app.css","F:4a7eaceb5c":"scripts/lib/detect-attribution.mjs","F:4aaece5252":"docs/adr/ADR-020-prompt-complexity-budget.md","F:4b7eb18a4b":"design-system/src/components/TierBadge/index.ts","F:4b91a9f65b":"scripts/lib/snapshot-redact.mjs","F:4c741a5b06":"tests/branch-name.test.mjs","F:4d08d5472f":"scripts/lib/message-catalog/advisory/learnings.mjs","F:4d5cfa3611":"docs/specs/ratchet-spec.md","F:4dabd020df":"tests/helpers/mock-github-server.mjs","F:4db1101024":"scripts/lib/policy-manifest.mjs","F:4ebb5aa8a0":"scripts/lib/learnings.mjs","F:4ebf08705b":"apps/control-panel/src/screens/SettingsScreen.tsx","F:4fad18c892":"tests/risk-surface-guard.test.mjs","F:4fd28fc2ff":"scripts/disarm.mjs","F:500dd805f6":"design-system/src/components/RoleBadge/index.ts","F:514a79560d":"docs/adr/ADR-028-portability.md","F:515a65a35b":"templates/.modonome/NETWORK.md","F:522efae76d":"scripts/gauntlet.mjs","F:52338ea290":"tests/openai-client.test.mjs","F:5253743405":"design-system/README.md","F:52caf3b287":"examples/demo-app/tests/CheckoutService.test.js","F:52ef6ad4a1":"tests/near-miss.test.mjs","F:5376e86470":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","F:545c0ccfeb":".design-sync/previews/ModeSwitcher.tsx","F:54a3c626d9":"tests/learnings.test.mjs","F:54c6928de9":"examples/demo-app/src/CheckoutService.js","F:54df44aadd":"apps/control-panel/server/learningsFormat.mjs","F:55673172df":"docs/specs/governed-autonomy-spec.md","F:55b3a4e2c0":"tests/migrate-lessons-rename.test.mjs","F:5621bc51b3":"agentproof/README.md","F:564b053598":"tests/check-architecture-drift.test.mjs","F:56a132aaca":"docs/adr/ADR-039-agent-capability-profiles.md","F:571aa2f3ae":"tests/fleet-ledger.test.mjs","F:57ca5f1716":"design-system/src/components/SafetyStrip/SafetyStrip.tsx","F:580d11b514":"tests/run-cycle-openai.test.mjs","F:583edef643":"design-system/src/components/DecisionCard/DecisionCard.tsx","F:594f505f11":"scripts/lib/lang-adapters/generic.mjs","F:5956278014":"tests/connect.test.mjs","F:596687118c":"design-system/src/components/Modal/index.ts","F:597cc7ae15":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","F:5994385869":"tests/maker-checker.test.mjs","F:599f5b2f28":"examples/demo-app/src/CartService.js","F:59b2499e4e":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","F:5a04bfa7a4":"docs/adr/ADR-030-embedding-safety.md","F:5a3543606b":"scripts/lib/attribution-fp-corpus.mjs","F:5b113a0914":"scripts/agent/action-queue.mjs","F:5b5b4ddcae":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","F:5d02ea0b02":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","F:5d2ce8ee7e":"checkerproof/README.md","F:5d52d97b8a":"scripts/lib/message-catalog/agent-run/queue.mjs","F:5daab9894d":"apps/control-panel/server/remediationView.mjs","F:5e207f73c7":".design-sync/previews/Input.tsx","F:5e450ff82c":"scripts/scaffold.mjs","F:5eff4122c0":"tests/config-key-parity.test.mjs","F:5f7910375b":"scripts/arm.mjs","F:5f88bf32ca":"design-system/src/components/LearningCard/index.ts","F:5fa0ad758b":"docs/compliance/eu-ai-act-classification.md","F:60548316f5":"tests/arming.test.mjs","F:61296e720c":"scripts/check-repo-hygiene.mjs","F:61486b1ec2":"docs/ops/add-control.md","F:61c2a29876":"tests/tripwire.test.mjs","F:627afb27fd":"docs/adr/ADR-031-markdown-governance.md","F:63351e350b":"design-system/src/components/Modal/Modal.tsx","F:63c1c23ccb":"design-system/src/components/ConfirmDialog/ConfirmDialog.tsx","F:64c5acf802":"docs/adr/ADR-002-shadow-mode.md","F:65193a9799":"scripts/validate-knowledge-packet.mjs","F:66264a042c":"design-system/src/components/HoverCard/HoverCard.tsx","F:6627655633":"apps/control-panel/src/screens/OverviewScreen.tsx","F:667ef091ca":"design-system/src/components/ActivationLadder/index.ts","F:669d2a51f4":"site/README.md","F:683343bdf9":"ROADMAP.md","F:686a544e0e":"tests/review-diff.test.mjs","F:68c4da7fe8":"scripts/lib/secret-patterns.mjs","F:68d874f280":"docs/adr/ADR-047-risk-surface-guard.md","F:698ea4b2e9":"tests/triggers.test.mjs","F:69ddfa4ff4":"agentproof/CONTRIBUTING.md","F:6a3a98df8c":"docs/audits/claims-audit-2026-07-01.md","F:6a5934a79d":"templates/.github/copilot-instructions.md","F:6a86908a3e":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","F:6bee8a97f3":"docs/launch/article-seeds.md","F:6bef3f93ab":".design-sync/previews/Icon.tsx","F:6bfa4389b5":"design-system/src/components/StatusPill/index.ts","F:6c0919b64e":".design-sync/previews/Tabs.tsx","F:6da7bd8294":"tests/gauntlet.test.mjs","F:6dd88cde1c":"docs/adr/ADR-004-arming-isolation-enforcement.md","F:6e0bd62fa3":"scripts/lib/branch-name.mjs","F:6e4723a45d":"docs/adapters.md","F:6e4b629d3c":"docs/adr/ADR-001-self-governance-pipeline.md","F:6ebdb617a8":"CLAUDE.md","F:6f247eb514":"scripts/dry-run-sweep.mjs","F:6f5b5f0bc4":"docs/adr/ADR-012-harness-prompt-integrity.md","F:6fdd929a92":"fixtures/portability/prompt-injection-host/docs/guide.md","F:7008a20b1c":".design-sync/previews/IdentityChip.tsx","F:704e42d42b":"tests/route-action.test.mjs","F:7054844360":"design-system/src/components/Checkbox/Checkbox.tsx","F:705a3ca9b3":"RELEASE-EVIDENCE.md","F:70d12a92c6":"design-system/src/components/ArmingStateBadge/index.ts","F:71f0bfb455":"design-system/src/components/Drawer/Drawer.tsx","F:7232ada2da":"scripts/preflight-embedding.mjs","F:72b7ab4c3e":"docs/adr/ADR-017-knowledge-network-packet-signing.md","F:7479c14986":"ADOPTION-GUIDE.md","F:750436d8c1":"docs/adr/ADR-036-policy-attestation.md","F:757a70680a":"apps/control-panel/src/screens/LearningsScreen.tsx","F:758ab56395":"tests/check-attribution-fp-corpus.test.mjs","F:75c1125713":"templates/.modonome/control-panel.md","F:763efdd51c":"design-system/src/components/Input/Input.tsx","F:76da13a8f7":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","F:76f802c3ce":".modonome/control-panel.md","F:778c33cdc0":"tests/dry-run.test.mjs","F:780c791407":"scripts/build-policy-attestation.mjs","F:7832db450f":".design-sync/previews/Toast.tsx","F:7944059823":"scripts/lib/token-estimate.mjs","F:79467a3153":".design-sync/previews/ErrorState.tsx","F:7983a5dd39":"docs/compliance/openssf-badge-evidence.md","F:79cec3a152":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","F:7a1f7d680b":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","F:7a43bf4ce5":".design-sync/previews/EmptyState.tsx","F:7b3e38c9a6":"scripts/sign-packet.mjs","F:7c8d518693":"design-system/src/lib/cx.ts","F:7ccad64380":"examples/python-service/app/orders.py","F:7d236c9aa6":"apps/control-panel/src/state/fixtures/host.ts","F:7fcbf6b32d":"fixtures/portability/schema-collision/README.md","F:815abebda1":"design-system/src/components/ConfirmDialog/index.ts","F:819f72edf6":"design-system/src/components/Select/Select.tsx","F:81c495717c":"design-system/src/components/Slider/Slider.tsx","F:828cf970bc":"tests/resolve-role.test.mjs","F:83d4d07afc":"docs/control-panel-modes.md","F:83ecac7524":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","F:849bc0a60f":"design-system/src/components/Table/index.ts","F:84a5c32a4c":".design-sync/previews/NumberField.tsx","F:851f776227":"scripts/agent/parse-checker-telemetry.mjs","F:85e076f56b":"design-system/src/components/Icon/index.ts","F:868321590c":"scripts/check-work-items.mjs","F:86838d35ac":"design-system/src/lib/format.ts","F:86fd2cf669":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","F:872221b1da":"scripts/agent/apply-patch.mjs","F:87c30bdb4c":"scripts/check-drift.mjs","F:88244532e4":"docs/vscode-workflow.md","F:885187507a":"apps/control-panel/src/main.tsx","F:88c38fbc0f":".modonome/DECISIONS.md","F:8930a72be2":".modonome/NETWORK.md","F:8972d37045":".design-sync/previews/IconButton.tsx","F:89aee72994":"apps/control-panel/src/state/fixtures/product.ts","F:89f25e2f3d":"design-system/src/components/Tabs/index.ts","F:8a10462927":"scripts/guard-ratchet.mjs","F:8a3433b070":"tests/report-impact.test.mjs","F:8a3dd6ccff":"apps/control-panel/server/modonomeReader.mjs","F:8a7591db62":"docs/audits/claims-audit-2026-06-25.md","F:8a9aff1529":"design-system/src/components/Tooltip/Tooltip.tsx","F:8aa9ba4dcb":"tests/transition-work-item-unit.test.mjs","F:8abf9e432a":"scripts/sync-site-data.mjs","F:8b122c449e":"design-system/src/components/Button/Button.tsx","F:8b2f3dbcba":"tests/control-panel-writer-nested.test.mjs","F:8b5a1f94c4":"scripts/agent/providers.mjs","F:8b7ee49cdd":"scripts/check-trust-boundary.mjs","F:8b8d3c46b3":"scripts/check-state-machine-acyclic.mjs","F:8bb1b57470":"examples/demo-app/src/index.js","F:8c2e08ed12":"docs/adr/ADR-008-trusted-author-allowlist.md","F:8c6234a8cb":"design-system/src/components/GatePanel/GatePanel.tsx","F:8d2cb93236":"scripts/agent/openai-client.mjs","F:8f62475ebe":"prompts/modules/roles.md","F:8f6366fd8e":"ARCHITECTURE.md","F:8fe56e5618":"tests/chaos.test.mjs","F:8ffb11f281":"scripts/lib/remediate.mjs","F:9040e0c030":"design-system/src/components/States/index.ts","F:90cbb2cf6a":"challenge/judge.mjs","F:90e1fd2fd9":"scripts/hygiene.mjs","F:90f0999521":"fixtures/portability/prompt-injection-host/src/main.js","F:90fc20ddd8":"design-system/src/components/MdnRoot/MdnRoot.tsx","F:91a7efa0ba":"docs/workflow-fixes.md","F:91e24dcac0":"scripts/lib/message-catalog/advisory/build-prompt.mjs","F:9204ee9f08":"design-system/src/components/MetricTile/index.ts","F:92d6903b5f":"scripts/check-decisions-authority.mjs","F:92dde817ee":"tests/ratchet-attestation.test.mjs","F:930bc5297d":"docs/launch/show-hn.md","F:932d33be00":"scripts/validate-config.mjs","F:933d506be9":"tests/policy-manifest.test.mjs","F:9344d335a6":"scripts/build-release-evidence.mjs","F:93f0f5d3de":"examples/node-typescript/src/checkout.ts","F:94050e680d":"checkerproof/runner.mjs","F:940d5f4399":"tests/arm-disarm.test.mjs","F:9427d264e6":"scripts/check-edit-set-compliance.mjs","F:9444435647":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","F:94b941cbd6":".design-sync/NOTES.md","F:94c9bc6065":"tests/schedule-trigger-schema.test.mjs","F:956332d4b5":"design-system/src/components/LeaseTable/LeaseTable.tsx","F:95d4304133":"apps/control-panel/src/state/adapter.ts","F:95e51a604d":"docs/compliance/compliance.md","F:9616513cb6":"scripts/lib/message-catalog/agent-run/disarm.mjs","F:964f89b6cc":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","F:9666ca7f0d":"examples/demo-app/WALKTHROUGH.md","F:973aaa9d86":".design-sync/previews/RoleBadge.tsx","F:973aca5f3e":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","F:97fc86d7a3":"docs/adr/ADR-045-scope-focus.md","F:9803feef4a":"scripts/lib/message-catalog/agent-run/openai-client.mjs","F:98529ba7ea":"scripts/lib/capability-flags.mjs","F:99251bc045":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","F:9a28b4e90e":"prompts/modules/state-machine.md","F:9a32917e56":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","F:9a3e8ed7d2":"scripts/lib/near-miss.mjs","F:9a72895a04":"scripts/lib/file-classifiers.mjs","F:9b01a5cd4d":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","F:9b3f18856e":"apps/control-panel/src/screens/WorkQueueScreen.tsx","F:9bb94e1b40":"tests/hygiene.test.mjs","F:9c9edea0c9":".design-sync/previews/AuditTimeline.tsx","F:9cbe9238f8":"tests/e2e.test.mjs","F:9d53df2290":"docs/ops/add-gate.md","F:9d69a6b766":"scripts/migrate-config.mjs","F:9dbf431d3e":"scripts/lib/message-catalog/gate/check-style.mjs","F:9dc816763b":"tests/agentproof-registry.test.mjs","F:9deac13db0":"design-system/src/components/ProgressMeter/ProgressMeter.tsx","F:9f0fb6ed8b":"design-system/src/components/MetricTile/MetricTile.tsx","F:9f36b3ef29":"tests/snapshot-cli.test.mjs","F:9f6dd5e5a3":"tests/queue.test.mjs","F:a0068c8817":".design-sync/previews/Toggle.tsx","F:a0abaf6a25":".design-sync/previews/ProgressMeter.tsx","F:a0d489df6d":"scripts/snapshot.mjs","F:a104667369":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","F:a1411f1423":"fixtures/negative-controls/app-syntax-error.js","F:a167609a41":"tests/mcp-compliance.test.mjs","F:a1baa3f01d":"scripts/lib/work-item-staleness.mjs","F:a37ab631dc":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","F:a384388adc":"docs/agents.md","F:a402d2f9ed":"design-system/src/components/Table/Table.tsx","F:a42da90970":"design-system/src/components/ModeSwitcher/index.ts","F:a52954a167":"apps/control-panel/vite.config.ts","F:a54ff182c7":"AGENTS.md","F:a5822fdd03":"scripts/lib/message-catalog/agent-run/release.mjs","F:a6d2bd3021":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","F:a70145dc77":"docs/adr/ADR-024-capability-promotion-gate.md","F:a7ce0f6452":"scripts/install-hooks.mjs","F:a862b1c3b6":"design-system/src/components/ConceptTile/index.ts","F:a8c32b8f15":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","F:a8cfe45d27":"design-system/src/components/IconButton/IconButton.tsx","F:aa27d254da":"scripts/lib/message-catalog/agent-run/arm.mjs","F:aa77f227a6":"scripts/agent/tool-loop-adapter.mjs","F:ab334f34df":"design-system/src/components/Toast/Toast.tsx","F:ab5077147a":"scripts/mcp-server.mjs","F:ac11b5379f":"scripts/promote-learning.mjs","F:acc3f6b466":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","F:acd892d4a0":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","F:ace169adc4":"scripts/check-evidence-secrets.mjs","F:add7add561":"design-system/src/index.ts","F:ae227d695d":"examples/python-service/README.md","F:ae46bbab81":"scripts/lib/repo-detect.mjs","F:aea3c05bca":"scripts/agent/triggers.mjs","F:aecebb26be":"tests/remediation-view.test.mjs","F:aef9cf1e27":"site/index.html","F:af6de66499":"scripts/agentproof-attestation.mjs","F:b014028f57":"scripts/lib/run-gate-capped.mjs","F:b1598d4449":"tests/snapshot-security.test.mjs","F:b16afebae9":"scripts/check-agentproof-registry.mjs","F:b2496e8029":".github/pull_request_template.md","F:b25dcdad19":"scripts/lib/message-catalog/gate/check-md-governance.mjs","F:b28f13b600":"tests/performance.test.mjs","F:b2efd505ef":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","F:b335630551":"README.md","F:b39c90fbe6":"design-system/src/components/ProgressMeter/index.ts","F:b3a2ad52bb":"design-system/src/components/ModeSwitcher/ModeSwitcher.tsx","F:b4279e0af6":"docs/adr/ADR-023-config-schema-migration-contract.md","F:b4f4e16ca1":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","F:b502a0fe75":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","F:b51ccbe79a":"design-system/src/components/WorkItemCard/index.ts","F:b5ae6ee133":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","F:b5f5700e4d":"docs/adr/ADR-033-repo-snapshot.md","F:b60c6a93e9":"GOVERNANCE.md","F:b677f38b10":"design-system/src/components/Checkbox/index.ts","F:b70824b13e":"tests/dependency.test.mjs","F:b806994000":"scripts/queue.mjs","F:b81cf7567f":"docs/guidelines/markdown-governance.md","F:b9d806ba4d":"examples/demo-app/src/NotificationService.js","F:ba97282cf5":"tests/provenance.test.mjs","F:baf7641a01":"tests/tick.test.mjs","F:bb0ec91260":"scripts/check-evidence-integrity.mjs","F:bb2d98fca6":"design-system/src/components/IdentityChip/index.ts","F:bb6a874d58":".design-sync/previews/GatePanel.tsx","F:bbb6476d71":"tests/ws-e-negative-controls.test.mjs","F:bcd1c88877":"docs/research/knowledge-network-architecture.md","F:bd02b28f17":"examples/demo-app/src/InventoryService.js","F:bf3dae9563":"tests/sweep-to-work-item.test.mjs","F:bf4e255c6e":"scripts/lib/message-catalog/gate/validate-work-item.mjs","F:c0714e4bf0":"prompts/modonome.bundle.md","F:c077d16aeb":"docs/adr/ADR-016-knowledge-network-packet-identity.md","F:c0e80ca327":"design-system/src/components/Sparkline/Sparkline.tsx","F:c14dd92bce":"design-system/src/components/Button/index.ts","F:c1a96ec6e2":"scripts/check-work-item-staleness.mjs","F:c1cc304e56":"docs/versioning.md","F:c1ef63106a":"docs/risk-surface-guard.md","F:c2ff3fda15":"design-system/src/components/AppShell/index.ts","F:c324fab0cc":"prompts/modules/snapshot.md","F:c3588d683e":"docs/adr/ADR-035-metadata-remediator.md","F:c3b2fcfb69":"docs/agent-org.md","F:c3cd2dc5c9":"tests/messages.test.mjs","F:c412f056b4":"design-system/src/components/SafetyStrip/index.ts","F:c4395c3023":"scripts/build-prompt.mjs","F:c54a514860":"docs/ops/work-item.md","F:c5938c33fd":"scripts/check-promotion-readiness.mjs","F:c598a2d684":"scripts/lib/lang-adapters/java.mjs","F:c5da07872e":"design-system/src/components/Sparkline/index.ts","F:c5fe610b02":"SUPPORT.md","F:c63a71fb57":".design-sync/previews/CostPanel.tsx","F:c64c042051":"design-system/src/tokens/tokens.ts","F:c6bd51a324":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","F:c72e6949b9":"fixtures/adapters/reference-adapter.mjs","F:c7326495ec":"docs/adr/ADR-043-terraform-module.md","F:c7423b85cf":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","F:c9493b5275":"scripts/audit-learnings.mjs","F:c97cb4d123":"OWNER-ACTIONS.md","F:c98f6b55e3":"prompts/modules/network.md","F:ca05b6ba1c":"tests/terraform-module-shape.test.mjs","F:ca0833ac73":"scripts/check-style.mjs","F:ca13fe2a5b":".design-sync/previews/Sparkline.tsx","F:cac320dd97":".modonome/STATUS.md","F:cacaab56e1":"tests/adapter-verify.test.mjs","F:cb3c5f7715":"scripts/lib/work-item-validate.mjs","F:cb66095cb4":"scripts/lib/snapshot-walk.mjs","F:cb8c4aadaf":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","F:cba8f1d03b":"tests/install-hooks.test.mjs","F:cbaff08a46":"docs/adr/ADR-015-knowledge-network-catalog.md","F:cc361bd05a":"scripts/check-licenses.mjs","F:cc65dd1342":"tests/embedding-safety.test.mjs","F:ccb72910b3":"scripts/lib/message-catalog/gate/check-drift.mjs","F:cdbe769ed3":"scripts/lib/github-api.mjs","F:ce1173e176":"design-system/src/components/CostPanel/CostPanel.tsx","F:ce41983a53":"tests/researcher-role.test.mjs","F:cecdb96382":"scripts/lib/lang-adapters/tree-sitter.mjs","F:cede5f9fa2":"tests/ratchet-format.test.mjs","F:cf2908e0f2":"agentproof/CONFORMANCE-INTERFACE.md","F:d01156348d":"design-system/src/components/Drawer/index.ts","F:d05701e1ab":"design-system/src/components/GatePanel/index.ts","F:d0d703a4e0":"design-system/src/components/HelpHint/index.ts","F:d0da1cab80":"tests/control-panel-ownership.test.mjs","F:d135cffeaa":"scripts/transition-work-item.mjs","F:d1b898f17f":"examples/demo-app/tests/NotificationService.test.js","F:d20e4b6b91":"design-system/src/components/Carousel/Carousel.tsx","F:d288a78085":"scripts/lib/message-catalog/advisory/sign-packet.mjs","F:d2b14b5b34":"docs/adr/ADR-011-ci-env-var-trust-scope.md","F:d328f97d94":"scripts/lib/message-catalog/advisory/hygiene.mjs","F:d480e40c97":"scripts/lib/config-validate.mjs","F:d4ead22b1b":"docs/adr/ADR-005-run-observability.md","F:d52b08ebeb":"examples/node-typescript/README.md","F:d590ca62b9":".design-sync/previews/PermissionDeniedState.tsx","F:d5b496b125":"design-system/src/components/HelpHint/HelpHint.tsx","F:d6401dd73e":"scripts/connect.mjs","F:d66f93d7b7":"docs/adr/ADR-029-adversarial-test-design.md","F:d744931e6a":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","F:d754b827f4":"tests/render-prompt-unit.test.mjs","F:d783999e16":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","F:d7d4e8d2a9":"tests/run-log.test.mjs","F:d8e37c4449":"scripts/lib/message-catalog/advisory/migrate-config.mjs","F:d8fb8339ce":"design-system/src/components/ProtectedPathRow/ProtectedPathRow.tsx","F:da42f69531":"design-system/src/components/TierBadge/TierBadge.tsx","F:da9133a29d":"scripts/lib/message-catalog/agent-run/action-queue.mjs","F:db651caf76":"design-system/src/components/NumberField/NumberField.tsx","F:dbb9c92ca1":"scripts/lib/snapshot-core.mjs","F:dc00dfe394":"docs/adr/ADR-006-checker-independence.md","F:dc0cc6d551":"docs/adr/ADR-025-self-application-conformance.md","F:dca643f34b":".design-sync/previews/Tooltip.tsx","F:dd1be2cd7b":".design-sync/previews/QueueBoard.tsx","F:dd58ae3791":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","F:ddd82fc886":"tests/promoted-learnings.test.mjs","F:ddeb486c49":"scripts/agent/run-cycle.mjs","F:de188c1b79":"scripts/lib/message-catalog/gate/check-self-application.mjs","F:de4538fe53":"docs/adr/ADR-010-knowledge-packet-trust.md","F:de5ebbf586":"tests/scaffold-adoption.test.mjs","F:de988f64d4":"design-system/src/components/AuditTimeline/index.ts","F:deab644e60":"design-system/src/components/Icon/Icon.tsx","F:df4b55ecef":"tests/check-gate-dag.test.mjs","F:e00aec45ce":"tests/control-panel-work-item-writer.test.mjs","F:e053923067":"tests/run-cycle-cli-permissions.test.mjs","F:e11f907cba":"scripts/score-proposals.mjs","F:e146bc5acb":".design-sync/conventions.md","F:e19aab09cb":".design-sync/previews/HelpHint.tsx","F:e2025a4e0c":"scripts/lib/message-catalog/agent-run/route-action.mjs","F:e27748d089":"templates/.modonome/STATUS.md","F:e2f1b5ac07":"tests/role-registry.test.mjs","F:e359adb110":"tests/check-style-lexicon.test.mjs","F:e406ceab72":"apps/control-panel/src/lib/messages.ts","F:e40ce1af48":"apps/control-panel/src/screens/ArmingScreen.tsx","F:e4e18d0b80":"tests/agent-capability-profile.test.mjs","F:e4ff19bbe2":"scripts/lib/commit-identity.mjs","F:e540f7b669":"tests/promote-learning.test.mjs","F:e5e519f441":".design-sync/previews/MetricTile.tsx","F:e5e9ec402f":"docs/LEXICON.md","F:e6677dcd37":"scripts/lib/message-catalog/gate/check-work-items.mjs","F:e7380d1444":"scripts/check-regex-safety.mjs","F:e844676be4":"docs/adr/ADR-013-config-downgrade-and-migration.md","F:e8676a18b7":"scripts/check-attribution-fp-corpus.mjs","F:e9479e1a3b":"scripts/ratchet-attestation.mjs","F:e948251d2b":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","F:e9701967b3":"docs/adr/ADR-046-ship-the-deferred-features.md","F:e9f1cc1e5d":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","F:ea9e0801d5":"design-system/src/components/NumberField/index.ts","F:eb14a0bdeb":"tests/helpers/mock-openai-server.mjs","F:ec3aa9930a":"scripts/lib/message-catalog/gate/validate-config.mjs","F:ec52ca3820":"apps/control-panel/src/state/liveClient.ts","F:eca12c0a30":"CONTRIBUTING.md","F:ed9c47feb2":"tests/tool-loop-adapter.test.mjs","F:edb11415f0":"scripts/run-gate-pipeline.mjs","F:edf42fb1af":"scripts/release.mjs","F:ee02e563c6":"tests/providers.test.mjs","F:ee21289902":"tests/commit-identity.test.mjs","F:eecc78e7e8":".design-sync/previews/LoadingState.tsx","F:efa02030ca":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","F:efd369884e":"docs/audits/claims-audit-2026-07-08.md","F:f00c212d41":"design-system/src/components/Tooltip/index.ts","F:f07f8ebca9":"scripts/validate-work-item.mjs","F:f0fbd8716f":".design-sync/previews/WorkItemDrawer.tsx","F:f13b76e6fd":"design-system/src/components/Toggle/index.ts","F:f1f2b57403":"docs/ops/runner-model-config.md","F:f238d164c9":"tests/ratchet.test.mjs","F:f41378fed0":"scripts/lib/message-catalog/panel/control-panel.mjs","F:f51cba9beb":"scripts/lib/graph.mjs","F:f57cf1a212":"design-system/src/components/CostPanel/index.ts","F:f5d313e9f1":"scripts/adapter-verify.mjs","F:f6abfc128a":"design-system/src/components/Slider/index.ts","F:f6e100ab45":".design-sync/previews/Button.tsx","F:f6ed156e4b":"SECURITY.md","F:f8168b956f":"examples/demo-app/tests/InventoryService.test.js","F:f83d1100e9":"apps/control-panel/src/content/concepts.ts","F:f8609bae0b":"design-system/src/components/QueueBoard/QueueBoard.tsx","F:f90930c3c3":"bin/modonome.mjs","F:f921eecad7":"tests/decisions-authority.test.mjs","F:f942e88a8f":"design-system/src/components/IdentityChip/IdentityChip.tsx","F:f9c98a8642":".design-sync/previews/WorkItemCard.tsx","F:fa49930755":"scripts/assert-governed-change.mjs","F:fa851dabe1":"tests/break-the-ratchet-judge.test.mjs","F:fadcf390da":"tests/metrics.test.mjs","F:fb5935daaf":"design-system/src/components/ProtectedPathRow/index.ts","F:fc21812307":"scripts/check-gate-dag.mjs","F:fc43ea4859":"design-system/src/components/IconButton/index.ts","F:fc5d887ff6":"scripts/check-checker-engagement.mjs","F:fcc5f4b906":"examples/demo-app/README.md","F:fd08562f92":"scripts/check-md-governance.mjs","F:fd4b8473fa":"apps/control-panel/server/ownership.mjs","F:fd660a117b":"scripts/agent/render-prompt.mjs","F:fd6ebce602":"tests/portability.test.mjs","F:fdaf1308e4":"fixtures/evidence-tampered.md","F:fe5ec971f8":".design-sync/previews/TierBadge.tsx","F:ff2c4a08a4":"scripts/lib/git-scope.mjs","F:ff3aef693f":"examples/demo-app/src/PaymentProcessor.js","F:ff644711e7":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","F:ffcad313b6":"docs/adr/ADR-044-agent-org-structure.md","F:ffdbe3a1e7":"CODE_OF_CONDUCT.md","F:ffe5c1269b":"scripts/lib/lang-adapters/go.mjs"},"symbols":{"S:002c9f1daa":{"line":25,"name":"slug","path_id":"F:6f247eb514"},"S:003e6c53c4":{"line":56,"name":"info","path_id":"F:2d4c555ba1"},"S:0044d1a126":{"line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9"},"S:00452332a2":{"line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a"},"S:005abb5200":{"line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0"},"S:0064b473e6":{"line":14,"name":"tmpQueue","path_id":"F:195e9217ca"},"S:00c956ccf3":{"line":6,"name":"ToastProps","path_id":"F:ab334f34df"},"S:00db09c5a8":{"line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792"},"S:00f913bfd8":{"line":11,"name":"tf","path_id":"F:ca05b6ba1c"},"S:0126079093":{"line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15"},"S:015c572711":{"line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca"},"S:01b4ff4d73":{"line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f"},"S:0255163ba3":{"line":229,"name":"parseArgs","path_id":"F:128b647d9a"},"S:02759ae11a":{"line":955,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c"},"S:028a668f8e":{"line":34,"name":"writeItem","path_id":"F:baf7641a01"},"S:02e2e85572":{"line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86"},"S:02e9b6beea":{"line":32,"name":"parseMetrics","path_id":"F:3b382f95c0"},"S:03145d5ec3":{"line":519,"name":"CHECKS","path_id":"F:7232ada2da"},"S:039c3576c4":{"line":23,"name":"modelFamily","path_id":"F:cb3c5f7715"},"S:03b000e190":{"line":153,"name":"verifySiteData","path_id":"F:8abf9e432a"},"S:03b490fb81":{"line":7,"name":"clean","path_id":"F:c598a2d684"},"S:041a6b87af":{"line":14,"name":"tmp","path_id":"F:55b3a4e2c0"},"S:0427f639c4":{"line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca"},"S:04f5060b44":{"line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914"},"S:050ec6eff9":{"line":26,"name":"OverviewScreen","path_id":"F:6627655633"},"S:0518e5f603":{"line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94"},"S:05a5299b28":{"line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae"},"S:05af4c96a8":{"line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0"},"S:05e617fb30":{"line":6,"name":"ButtonSize","path_id":"F:8b122c449e"},"S:05fa5077ed":{"line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1"},"S:05fcfe1c5b":{"line":5,"name":"apply_discount","path_id":"F:7ccad64380"},"S:064519e650":{"line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff"},"S:06700c1faf":{"line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927"},"S:069ca5f436":{"line":2,"name":"MESSAGES","path_id":"F:597cc7ae15"},"S:06c0c85d92":{"line":20,"name":"tmp","path_id":"F:5956278014"},"S:0713a27a1f":{"line":51,"name":"resolveRole","path_id":"F:304ce7b89d"},"S:073124e2d8":{"line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed"},"S:074c2b3c02":{"line":28,"name":"extractDiff","path_id":"F:872221b1da"},"S:075e86ea7c":{"line":48,"name":"topoSort","path_id":"F:f51cba9beb"},"S:0768a4cf0f":{"line":13,"name":"matchesType","path_id":"F:34cb2b6c48"},"S:07a58ff928":{"line":14,"name":"rpc","path_id":"F:a167609a41"},"S:086ff230f0":{"line":417,"name":"main","path_id":"F:522efae76d"},"S:08df8d7472":{"line":70,"name":"runPreflight","path_id":"F:0103cf3d56"},"S:0906a625c3":{"line":8,"name":"GateRow","path_id":"F:8c6234a8cb"},"S:098af8d3e8":{"line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d"},"S:099c6ccde0":{"line":132,"name":"detectText","path_id":"F:4a7eaceb5c"},"S:09a834e684":{"line":14,"name":"makeRepo","path_id":"F:3ea503e7c0"},"S:0a11409d06":{"line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53"},"S:0a5fed1978":{"line":59,"name":"loadFixtures","path_id":"F:23917c6197"},"S:0a677c2e37":{"line":19,"name":"msg","path_id":"F:5f7910375b"},"S:0a6b98d712":{"line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3"},"S:0a9885ca9d":{"line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb"},"S:0a9b63cb4b":{"line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee"},"S:0ab594146c":{"line":33,"name":"runScript","path_id":"F:0391f3b249"},"S:0ac24bec51":{"line":76,"name":"auditCoherence","path_id":"F:1a19f02364"},"S:0aee45c73e":{"line":2,"name":"MESSAGES","path_id":"F:86fd2cf669"},"S:0af608ade0":{"line":1,"name":"MESSAGES","path_id":"F:0c731e3460"},"S:0b0e197734":{"line":35,"name":"Select","path_id":"F:819f72edf6"},"S:0b25fbc8fe":{"line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7"},"S:0b453b55b9":{"line":25,"name":"Checkbox","path_id":"F:7054844360"},"S:0b4b18fb8a":{"line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27"},"S:0b56ac32a5":{"line":1,"name":"MESSAGES","path_id":"F:179564da6f"},"S:0b70780ca5":{"line":14,"name":"TooltipProps","path_id":"F:8a9aff1529"},"S:0b7b39d873":{"line":49,"name":"extractRawValue","path_id":"F:1575110130"},"S:0b8ff85c9c":{"line":666,"name":"classifyCode","path_id":"F:8a10462927"},"S:0ba2f17fcf":{"line":30,"name":"rpad","path_id":"F:3b382f95c0"},"S:0bae1275b2":{"line":1,"name":"Card","path_id":"F:93f0f5d3de"},"S:0be1a2cd09":{"line":244,"name":"diffCapabilities","path_id":"F:780c791407"},"S:0bf3d508cb":{"line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e"},"S:0c7a33bcbe":{"line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb"},"S:0c9de67184":{"line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2"},"S:0ca7d7cb9c":{"line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452"},"S:0cfad6d2cf":{"line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c"},"S:0d46d60d35":{"line":63,"name":"GatePanel","path_id":"F:8c6234a8cb"},"S:0d7b0da50a":{"line":24,"name":"resolveImport","path_id":"F:015261eab0"},"S:0dd1d1c53a":{"line":529,"name":"runPreflight","path_id":"F:7232ada2da"},"S:0e6240f5b7":{"line":70,"name":"writeGate","path_id":"F:08b7435c86"},"S:0ed808bd36":{"line":132,"name":"insertAfterFirst","path_id":"F:522efae76d"},"S:0eec918c49":{"line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a"},"S:0f004d17fa":{"line":24,"name":"git","path_id":"F:580d11b514"},"S:0f77533ed4":{"line":23,"name":"run","path_id":"F:6da7bd8294"},"S:107eb40a1d":{"line":18,"name":"makeRepo","path_id":"F:9f36b3ef29"},"S:118e66be10":{"line":2,"name":"flagValue","path_id":"F:2d93cea2d4"},"S:120830c7dd":{"line":91,"name":"maybeSign","path_id":"F:780c791407"},"S:126357e421":{"line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5"},"S:1274d7cf4b":{"line":3,"name":"Tier","path_id":"F:da42f69531"},"S:12c1e0f104":{"line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed"},"S:130202d7f0":{"line":3,"name":"Queue","path_id":"F:7a43bf4ce5"},"S:135fde5dfb":{"line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb"},"S:13a8db3ab6":{"line":11,"name":"gitDiff","path_id":"F:fa49930755"},"S:13f1b3c9c0":{"line":93,"name":"CostPanel","path_id":"F:ce1173e176"},"S:13fa2b4863":{"line":20,"name":"detectStack","path_id":"F:ae46bbab81"},"S:13fdf696a0":{"line":19,"name":"run","path_id":"F:9f6dd5e5a3"},"S:145586915d":{"line":5,"name":"DrawerProps","path_id":"F:71f0bfb455"},"S:145bc035b8":{"line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0"},"S:14850052c8":{"line":6,"name":"TabItem","path_id":"F:1db369d970"},"S:14b57397ed":{"line":14,"name":"Budget","path_id":"F:84a5c32a4c"},"S:14c08c7efc":{"line":20,"name":"ConceptTile","path_id":"F:1a137480ae"},"S:14cb0e8cbb":{"line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e"},"S:14ef0a45e8":{"line":1,"name":"MESSAGES","path_id":"F:1127892e72"},"S:15286656f4":{"line":127,"name":"localEnv","path_id":"F:ddeb486c49"},"S:153c85af26":{"line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a"},"S:154918aa5a":{"line":32,"name":"isBinary","path_id":"F:dbb9c92ca1"},"S:1562160a7c":{"line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c"},"S:15b3a95566":{"line":100,"name":"findBlock","path_id":"F:22566cb46e"},"S:16267c791e":{"line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715"},"S:16975f80af":{"line":18,"name":"QueueBoard","path_id":"F:f8609bae0b"},"S:16a3c28802":{"line":9,"name":"charge","path_id":"F:93f0f5d3de"},"S:16d8c02a8e":{"line":372,"name":"send","path_id":"F:ab5077147a"},"S:170d5cf4ef":{"line":18,"name":"tmp","path_id":"F:e359adb110"},"S:170dcaab55":{"line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6"},"S:172b08e199":{"line":118,"name":"updateRepoData","path_id":"F:8abf9e432a"},"S:17945c542e":{"line":393,"name":"countBareAsserts","path_id":"F:8a10462927"},"S:17985dad90":{"line":245,"name":"execSync","path_id":"F:61296e720c"},"S:17bc177192":{"line":251,"name":"formatHuman","path_id":"F:116adfb9f8"},"S:17c9a6d377":{"line":45,"name":"stripCharClasses","path_id":"F:e7380d1444"},"S:183f710a08":{"line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f"},"S:1856df868b":{"line":163,"name":"writeRunLog","path_id":"F:5e450ff82c"},"S:18c9f379c0":{"line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766"},"S:18da5ae581":{"line":13,"name":"listMjs","path_id":"F:b70824b13e"},"S:18fce60dc6":{"line":32,"name":"saveConfig","path_id":"F:ec52ca3820"},"S:18ff6b9c89":{"line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a"},"S:19226d4902":{"line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5"},"S:194e854c70":{"line":156,"name":"complete","path_id":"F:5b113a0914"},"S:19aab1f03f":{"line":1,"name":"MESSAGES","path_id":"F:d288a78085"},"S:19e5ddb185":{"line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b"},"S:19ecd8efbf":{"line":134,"name":"main","path_id":"F:6f247eb514"},"S:1ae77ae47b":{"line":7,"name":"CardProps","path_id":"F:40eb542a82"},"S:1b14fa60f7":{"line":92,"name":"git","path_id":"F:18f569225a"},"S:1b794f5743":{"line":21,"name":"getDiff","path_id":"F:9427d264e6"},"S:1b85e41391":{"line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7"},"S:1ba042e0cf":{"line":565,"name":"main","path_id":"F:7232ada2da"},"S:1bafda617f":{"line":15,"name":"docBelow","path_id":"F:3213d03b72"},"S:1be3814c77":{"line":24,"name":"listWorkflows","path_id":"F:2e327963ed"},"S:1beab0dc0c":{"line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b"},"S:1c5d801590":{"line":70,"name":"patchYamlText","path_id":"F:22566cb46e"},"S:1c6f22237b":{"line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04"},"S:1c7919b4ea":{"line":40,"name":"signMessage","path_id":"F:0cacf66a3b"},"S:1c82a73570":{"line":19,"name":"tmp","path_id":"F:40e4f39b59"},"S:1d0f5bc129":{"line":708,"name":"emitSarif","path_id":"F:8a10462927"},"S:1d4c8df8c0":{"line":19,"name":"TableProps","path_id":"F:a402d2f9ed"},"S:1d6822da4e":{"line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49"},"S:1dc2770ace":{"line":1,"name":"MESSAGES","path_id":"F:9a32917e56"},"S:1e5dabea9c":{"line":43,"name":"hasHeading","path_id":"F:c5938c33fd"},"S:1e6749f65a":{"line":31,"name":"run","path_id":"F:02a5f8fc55"},"S:1e67af68fc":{"line":52,"name":"Section","path_id":"F:08064e0c53"},"S:1ebb8bc1af":{"line":122,"name":"git","path_id":"F:f921eecad7"},"S:1ef7d0ea53":{"line":3,"name":"CartService","path_id":"F:599f5b2f28"},"S:1f19b07227":{"line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb"},"S:1fe8548dac":{"line":17,"name":"fixture","path_id":"F:8a3433b070"},"S:2064ebd573":{"line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0"},"S:208ce5b839":{"line":65,"name":"countWorkItems","path_id":"F:8abf9e432a"},"S:209a48ca7f":{"line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed"},"S:2102bdee1c":{"line":49,"name":"readRecord","path_id":"F:5b113a0914"},"S:210b0c6999":{"line":26,"name":"signedBytes","path_id":"F:245efb551c"},"S:211cdf5f9d":{"line":17,"name":"readItem","path_id":"F:e00aec45ce"},"S:214691c25d":{"line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3"},"S:21635cbeda":{"line":19,"name":"adapter","path_id":"F:594f505f11"},"S:21a4872ace":{"line":8,"name":"Blocked","path_id":"F:7832db450f"},"S:2216bfd660":{"line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c"},"S:225c7a7d84":{"line":21,"name":"Open","path_id":"F:3ce0fd77eb"},"S:22ac6bb569":{"line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da"},"S:22e3bba95f":{"line":26,"name":"snapshotContext","path_id":"F:fd660a117b"},"S:2305f3725a":{"line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed"},"S:2306976428":{"line":376,"name":"errorResponse","path_id":"F:ab5077147a"},"S:2358b05e12":{"line":680,"name":"fileOf","path_id":"F:8a10462927"},"S:236237bc1b":{"line":56,"name":"unquote","path_id":"F:119e3c0fce"},"S:237d74cadf":{"line":21,"name":"parseScalar","path_id":"F:1575110130"},"S:23afcde4ab":{"line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff"},"S:23fbaa24ea":{"line":13,"name":"git","path_id":"F:ff2c4a08a4"},"S:24407449b3":{"line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514"},"S:2441bf3938":{"line":17,"name":"run","path_id":"F:61c2a29876"},"S:247c34d405":{"line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3"},"S:2484ffb006":{"line":142,"name":"printPlan","path_id":"F:1e5ef6ba70"},"S:24b854ce78":{"line":36,"name":"BrandMark","path_id":"F:268769c4a6"},"S:24c6a3dc6c":{"line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92"},"S:24f0960624":{"line":29,"name":"runRemediate","path_id":"F:44a5987438"},"S:25117f5b1d":{"line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a"},"S:25139ebf6c":{"line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d"},"S:257f8f1622":{"line":1,"name":"MESSAGES","path_id":"F:973aca5f3e"},"S:25a03d4ee2":{"line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2"},"S:262e039096":{"line":68,"name":"extractSection","path_id":"F:4db1101024"},"S:2681abe2e5":{"line":60,"name":"installHooks","path_id":"F:a7ce0f6452"},"S:26df582c22":{"line":57,"name":"buildRow","path_id":"F:128b647d9a"},"S:26ee7911e3":{"line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae"},"S:27005d8f20":{"line":27,"name":"buildBundle","path_id":"F:c4395c3023"},"S:276edd396a":{"line":45,"name":"postJson","path_id":"F:c72e6949b9"},"S:28578fa81a":{"line":10,"name":"Large","path_id":"F:28b7af3c53"},"S:28d1266e44":{"line":24,"name":"adapter","path_id":"F:ffe5c1269b"},"S:29574da2e9":{"line":7,"name":"scenario","path_id":"F:c7423b85cf"},"S:298b204d13":{"line":22,"name":"runPreflight","path_id":"F:cc65dd1342"},"S:299c43d83e":{"line":40,"name":"stripQuotes","path_id":"F:1575110130"},"S:29fd3ef66c":{"line":41,"name":"writeAtomic","path_id":"F:5b113a0914"},"S:2a04172292":{"line":4,"name":"HostSelected","path_id":"F:545c0ccfeb"},"S:2a28972ca4":{"line":1,"name":"MESSAGES","path_id":"F:3835919e8e"},"S:2a5511d42c":{"line":125,"name":"gitDelta","path_id":"F:a0d489df6d"},"S:2b5847c683":{"line":61,"name":"renderPrompt","path_id":"F:fd660a117b"},"S:2b6631cd33":{"line":1,"name":"MESSAGES","path_id":"F:91e24dcac0"},"S:2bba65c029":{"line":1,"name":"MESSAGES","path_id":"F:99251bc045"},"S:2bd0a26c48":{"line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb"},"S:2bd83b1706":{"line":1,"name":"MESSAGES","path_id":"F:de188c1b79"},"S:2ca5ab6d7f":{"line":18,"name":"previewText","path_id":"F:4ebf08705b"},"S:2ca7aeeeaf":{"line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342"},"S:2cd4d9571d":{"line":189,"name":"withTempFile","path_id":"F:137056535b"},"S:2cd9cbf595":{"line":4,"name":"ToastTone","path_id":"F:ab334f34df"},"S:2ce7a5bbe7":{"line":146,"name":"positional","path_id":"F:a0d489df6d"},"S:2d1eeb5346":{"line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a"},"S:2d24ebcbdf":{"line":143,"name":"renderReport","path_id":"F:2d6ef08990"},"S:2d2b3ccfa2":{"line":318,"name":"toolCompliance","path_id":"F:ab5077147a"},"S:2d4876abe2":{"line":174,"name":"readPack","path_id":"F:780c791407"},"S:2d541b3911":{"line":1,"name":"MESSAGES","path_id":"F:e6677dcd37"},"S:2db1222578":{"line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb"},"S:2dc33a851f":{"line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c"},"S:2df1658785":{"line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed"},"S:2e016b842d":{"line":13,"name":"fileAnchor","path_id":"F:1cf31c4792"},"S:2e1baab2ff":{"line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04"},"S:2e3ac2ba9f":{"line":8,"name":"ModelCostRow","path_id":"F:ce1173e176"},"S:2e93f745f3":{"line":17,"name":"ratchet","path_id":"F:f238d164c9"},"S:2ea6241ebd":{"line":68,"name":"writeJson","path_id":"F:4dabd020df"},"S:2ed4ecfad7":{"line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4"},"S:2eef7d840d":{"line":180,"name":"rewriteBlock","path_id":"F:22566cb46e"},"S:2f0240b93f":{"line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6"},"S:2f1892a712":{"line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9"},"S:2fb48a9b04":{"line":21,"name":"run","path_id":"F:940d5f4399"},"S:2fbd29545b":{"line":42,"name":"nestedMapChanged","path_id":"F:25e649633c"},"S:301cb496d5":{"line":72,"name":"RoleBadge","path_id":"F:35c6d59157"},"S:301d436113":{"line":80,"name":"main","path_id":"F:c72e6949b9"},"S:30e8b022de":{"line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0"},"S:30eded078f":{"line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f"},"S:31032f0509":{"line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce"},"S:310e2149b2":{"line":80,"name":"runCli","path_id":"F:cc361bd05a"},"S:312c004ac1":{"line":46,"name":"HoverCard","path_id":"F:66264a042c"},"S:328dcdf4cc":{"line":76,"name":"countRaisedQuestions","path_id":"F:851f776227"},"S:32c99a4337":{"line":18,"name":"run","path_id":"F:55b3a4e2c0"},"S:33534dd596":{"line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff"},"S:336ebe7ff5":{"line":52,"name":"run","path_id":"F:a6d2bd3021"},"S:33846c9bba":{"line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca"},"S:33d286d62d":{"line":330,"name":"runRatchet","path_id":"F:522efae76d"},"S:33dfee21e3":{"line":1,"name":"MESSAGES","path_id":"F:2715f09f24"},"S:342fb4655a":{"line":23,"name":"gate","path_id":"F:9344d335a6"},"S:3466f40801":{"line":83,"name":"buildOptions","path_id":"F:a0d489df6d"},"S:34df82b1c2":{"line":215,"name":"hasHighOrCritical","path_id":"F:116adfb9f8"},"S:34df99c630":{"line":98,"name":"makeGitFixture","path_id":"F:18f569225a"},"S:354e31ec69":{"line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294"},"S:3575202801":{"line":57,"name":"detectProtected","path_id":"F:ae46bbab81"},"S:357942abbf":{"line":38,"name":"readItem","path_id":"F:baf7641a01"},"S:35902c8cc1":{"line":1,"name":"MESSAGES","path_id":"F:35d4a12b63"},"S:35a01a919e":{"line":45,"name":"primaryModel","path_id":"F:304ce7b89d"},"S:35ac020356":{"line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7"},"S:35e362f448":{"line":79,"name":"emit","path_id":"F:3b96b6dfed"},"S:3602dcc44c":{"line":37,"name":"cleanDoc","path_id":"F:36419aa427"},"S:3696870ce9":{"line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73"},"S:36acbff697":{"line":21,"name":"Carousel","path_id":"F:d20e4b6b91"},"S:36be7c4ac5":{"line":6,"name":"DryRun","path_id":"F:28b7af3c53"},"S:3702b2fefe":{"line":47,"name":"isAllowedImport","path_id":"F:b70824b13e"},"S:370b67baf2":{"line":90,"name":"readVersion","path_id":"F:8abf9e432a"},"S:37268eb979":{"line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff"},"S:3734794a77":{"line":38,"name":"extOf","path_id":"F:dbb9c92ca1"},"S:37693a15d4":{"line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236"},"S:37a0d721be":{"line":16,"name":"run","path_id":"F:d7d4e8d2a9"},"S:37c1996b57":{"line":10,"name":"signature","path_id":"F:3213d03b72"},"S:3800b0c645":{"line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee"},"S:380b82547c":{"line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b"},"S:383c03d511":{"line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d"},"S:38407e52ac":{"line":274,"name":"emitSarif","path_id":"F:116adfb9f8"},"S:38948fee1c":{"line":10,"name":"LiveApiError","path_id":"F:ec52ca3820"},"S:38b734e681":{"line":278,"name":"commitsSince","path_id":"F:fd08562f92"},"S:38e44b5fa7":{"line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c"},"S:391a920cca":{"line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0"},"S:3968554637":{"line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461"},"S:396f1000ae":{"line":1,"name":"MESSAGES","path_id":"F:a5822fdd03"},"S:397210a79e":{"line":24,"name":"pass","path_id":"F:5f7910375b"},"S:3a57c07db5":{"line":48,"name":"derivePosture","path_id":"F:128b647d9a"},"S:3ad2d564a8":{"line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5"},"S:3ad956fb93":{"line":36,"name":"configDefaults","path_id":"F:c5938c33fd"},"S:3ae3f92415":{"line":1,"name":"MESSAGES","path_id":"F:d328f97d94"},"S:3b092e9ab0":{"line":64,"name":"parseDecisions","path_id":"F:92d6903b5f"},"S:3bae21fee6":{"line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b"},"S:3c2bad87be":{"line":40,"name":"snapshotDir","path_id":"F:a0d489df6d"},"S:3c3cd672a7":{"line":11,"name":"isCyclic","path_id":"F:f51cba9beb"},"S:3cceb8dc09":{"line":96,"name":"deriveSignals","path_id":"F:e11f907cba"},"S:3d3f20848d":{"line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca"},"S:3d6f7980b3":{"line":33,"name":"proposeWork","path_id":"F:6f247eb514"},"S:3e2d44a335":{"line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb"},"S:3e43134e83":{"line":69,"name":"arm","path_id":"F:44a5987438"},"S:3e9158c80b":{"line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5"},"S:3ed1d37c7b":{"line":3,"name":"Unreachable","path_id":"F:79467a3153"},"S:3ef15e4c1b":{"line":13,"name":"redactText","path_id":"F:4b91a9f65b"},"S:3f2874e2ce":{"line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716"},"S:3f93aaa307":{"line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5"},"S:3f9e6b3a7b":{"line":104,"name":"testConnection","path_id":"F:08b7435c86"},"S:3fac1340a4":{"line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d"},"S:3fc87c5f7e":{"line":73,"name":"reviewProposal","path_id":"F:2127a8caca"},"S:3fd1032067":{"line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766"},"S:400a8c02c3":{"line":61,"name":"applyFix","path_id":"F:90e1fd2fd9"},"S:403ac351dd":{"line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236"},"S:405ee38bbe":{"line":66,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e"},"S:407ded8730":{"line":79,"name":"evaluateFixture","path_id":"F:23917c6197"},"S:409d8caf58":{"line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff"},"S:40a4170626":{"line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5"},"S:40cce153df":{"line":135,"name":"extractChange","path_id":"F:3b96b6dfed"},"S:41050d03a4":{"line":19,"name":"readIfExists","path_id":"F:2e327963ed"},"S:4118076b3e":{"line":29,"name":"pad","path_id":"F:3b382f95c0"},"S:4124b7df92":{"line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820"},"S:41443bba10":{"line":1,"name":"total","path_id":"F:7ccad64380"},"S:41514ae74b":{"line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024"},"S:41689151ff":{"line":105,"name":"parseArgs","path_id":"F:ddeb486c49"},"S:4195e187b2":{"line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c"},"S:41ad75ea93":{"line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600"},"S:4214f7fa01":{"line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed"},"S:42188b3bb9":{"line":696,"name":"emitJson","path_id":"F:8a10462927"},"S:4287ee7685":{"line":1,"name":"MESSAGES","path_id":"F:40d8f235fd"},"S:4295d27685":{"line":158,"name":"makeFinding","path_id":"F:116adfb9f8"},"S:4296da48b7":{"line":86,"name":"judge","path_id":"F:90cbb2cf6a"},"S:42b8608c58":{"line":92,"name":"Cell","path_id":"F:57ca5f1716"},"S:42d33f191a":{"line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133"},"S:42d4f014b5":{"line":41,"name":"corpusProblems","path_id":"F:e8676a18b7"},"S:4316722ab5":{"line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d"},"S:433f196465":{"line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d"},"S:4350272f8a":{"line":357,"name":"readRuns","path_id":"F:8a3dd6ccff"},"S:435432f041":{"line":6,"name":"CheckboxProps","path_id":"F:7054844360"},"S:4358d9c393":{"line":67,"name":"proposalsFrom","path_id":"F:09ba331878"},"S:43cc2b28a1":{"line":227,"name":"withStubRunner","path_id":"F:48355ccf4d"},"S:43f1c85009":{"line":108,"name":"renderMarkdown","path_id":"F:2e327963ed"},"S:4426823827":{"line":5,"name":"NavItem","path_id":"F:268769c4a6"},"S:442c9dff6c":{"line":5,"name":"makeGateway","path_id":"F:373a946d5c"},"S:44432e7cb0":{"line":75,"name":"runScenario","path_id":"F:94050e680d"},"S:44a852f5e1":{"line":32,"name":"readStdin","path_id":"F:c72e6949b9"},"S:44c14f3d19":{"line":135,"name":"generator","path_id":"F:4db1101024"},"S:44e7188c1d":{"line":50,"name":"hash","path_id":"F:0103cf3d56"},"S:45061132f3":{"line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7"},"S:4514b4c1f0":{"line":19,"name":"LearningsScreen","path_id":"F:757a70680a"},"S:457528354e":{"line":331,"name":"stripInlineComment","path_id":"F:8a10462927"},"S:457f8a5e17":{"line":4,"name":"MESSAGES","path_id":"F:33c4d744f3"},"S:45b2f146f0":{"line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1"},"S:45bcd8bd18":{"line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1"},"S:464c90cba5":{"line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382"},"S:46ca0706e7":{"line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5"},"S:46d884501c":{"line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70"},"S:46d90cc86e":{"line":13,"name":"Timeline","path_id":"F:9c9edea0c9"},"S:4700befa2a":{"line":16,"name":"run","path_id":"F:137056535b"},"S:4741feecf9":{"line":234,"name":"buildCost","path_id":"F:8a3dd6ccff"},"S:474ceb514b":{"line":289,"name":"readCapped","path_id":"F:522efae76d"},"S:47c5321a5f":{"line":264,"name":"listFiles","path_id":"F:522efae76d"},"S:47cde5f81f":{"line":6,"name":"DecisionStatus","path_id":"F:583edef643"},"S:48102a3f37":{"line":37,"name":"parseFraction","path_id":"F:af6de66499"},"S:48356203e2":{"line":13,"name":"repo","path_id":"F:4637e1fecb"},"S:485d7c5e96":{"line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed"},"S:489fa8bc67":{"line":14,"name":"HoverCardSide","path_id":"F:66264a042c"},"S:49158af5a6":{"line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27"},"S:49ad410798":{"line":140,"name":"replaceFirst","path_id":"F:522efae76d"},"S:49f97badd7":{"line":12,"name":"WorkState","path_id":"F:0a85f3b8e5"},"S:4a0171ecb5":{"line":295,"name":"PanelState","path_id":"F:0a85f3b8e5"},"S:4a08c48993":{"line":54,"name":"fingerprint","path_id":"F:0cacf66a3b"},"S:4a7db1c0d0":{"line":45,"name":"emptyDraft","path_id":"F:9b3f18856e"},"S:4abcc2a45b":{"line":21,"name":"redactionErrors","path_id":"F:65193a9799"},"S:4adffc8b06":{"line":27,"name":"seedJsTest","path_id":"F:6da7bd8294"},"S:4afb276004":{"line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a"},"S:4b38793395":{"line":8,"name":"scenario","path_id":"F:34ca4e55d1"},"S:4b391a8eee":{"line":34,"name":"makeGitFixture","path_id":"F:580d11b514"},"S:4b76f865fa":{"line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49"},"S:4b7a72e608":{"line":4,"name":"Role","path_id":"F:35c6d59157"},"S:4bacff1244":{"line":15,"name":"fileExists","path_id":"F:2e327963ed"},"S:4bc9723575":{"line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70"},"S:4bd4d449f1":{"line":27,"name":"fail","path_id":"F:5f7910375b"},"S:4bea381dfd":{"line":33,"name":"MESSAGES","path_id":"F:05bffc70e9"},"S:4bfc88b9a8":{"line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c"},"S:4bfea4387c":{"line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1"},"S:4c9526df5f":{"line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04"},"S:4cd48cf92e":{"line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff"},"S:4d0bae812e":{"line":91,"name":"round","path_id":"F:015261eab0"},"S:4d35869e55":{"line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3"},"S:4d36cf3d1c":{"line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04"},"S:4d3ac94b7c":{"line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927"},"S:4df7a92e8e":{"line":15,"name":"registerAdapter","path_id":"F:2554ddd30c"},"S:4e5c54ea09":{"line":369,"name":"runCategory","path_id":"F:522efae76d"},"S:4eb76c8a83":{"line":9,"name":"Set","path_id":"F:6bef3f93ab"},"S:4eb7e87341":{"line":5,"name":"NumberFieldProps","path_id":"F:db651caf76"},"S:4ed98bc995":{"line":18,"name":"baseCfg","path_id":"F:ce41983a53"},"S:4ee042ed06":{"line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56"},"S:4f138d4cbe":{"line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49"},"S:4f19353e16":{"line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce"},"S:4f265e8008":{"line":8,"name":"Approved","path_id":"F:13d31b33ea"},"S:4f43d4e206":{"line":489,"name":"runCycle","path_id":"F:ddeb486c49"},"S:4fb0095605":{"line":22,"name":"checkRegistry","path_id":"F:b16afebae9"},"S:500f4c1cd3":{"line":30,"name":"cleanSignature","path_id":"F:36419aa427"},"S:5092562c12":{"line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86"},"S:50b0879e24":{"line":28,"name":"clamp","path_id":"F:db651caf76"},"S:5115891196":{"line":8,"name":"Coverage","path_id":"F:a0abaf6a25"},"S:5154763a93":{"line":60,"name":"AppShell","path_id":"F:268769c4a6"},"S:517ace9ff8":{"line":17,"name":"tmp","path_id":"F:940d5f4399"},"S:521fca28ad":{"line":344,"name":"toolSnapshot","path_id":"F:ab5077147a"},"S:522a86b0ed":{"line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da"},"S:524aeb5cd6":{"line":23,"name":"Detail","path_id":"F:f0fbd8716f"},"S:52826c5034":{"line":768,"name":"Component","path_id":"F:aef9cf1e27"},"S:52913852e3":{"line":22,"name":"validate","path_id":"F:34cb2b6c48"},"S:52be3c746f":{"line":32,"name":"git","path_id":"F:af6de66499"},"S:53158831f9":{"line":135,"name":"check","path_id":"F:780c791407"},"S:531cf59eb3":{"line":86,"name":"loadIgnore","path_id":"F:cb66095cb4"},"S:5327d3b72c":{"line":223,"name":"main","path_id":"F:aea3c05bca"},"S:5353762af1":{"line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d"},"S:537ea4dfe0":{"line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4"},"S:53b9eda0f8":{"line":90,"name":"run","path_id":"F:f90930c3c3"},"S:542af83b15":{"line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4"},"S:544b9ce58e":{"line":24,"name":"riskTiers","path_id":"F:c64c042051"},"S:5465e6de42":{"line":11,"name":"workStates","path_id":"F:c64c042051"},"S:54a007aa57":{"line":50,"name":"relativeImportsOf","path_id":"F:fc21812307"},"S:54d2db3f99":{"line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861"},"S:551c7477f2":{"line":16,"name":"HoverCardSource","path_id":"F:66264a042c"},"S:55386d6b24":{"line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c"},"S:555c013724":{"line":31,"name":"Card","path_id":"F:40eb542a82"},"S:556ab0a4ef":{"line":34,"name":"recordPath","path_id":"F:5b113a0914"},"S:559455c526":{"line":25,"name":"loadPanelState","path_id":"F:95d4304133"},"S:55a57d9fd6":{"line":168,"name":"toolRatchet","path_id":"F:ab5077147a"},"S:55b15c0abb":{"line":9,"name":"short","path_id":"F:1cf31c4792"},"S:55eb1af9ca":{"line":32,"name":"loadLexicon","path_id":"F:ca0833ac73"},"S:55ee648216":{"line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e"},"S:55fc57e799":{"line":17,"name":"readIfExists","path_id":"F:8abf9e432a"},"S:5607ca9508":{"line":116,"name":"main","path_id":"F:94050e680d"},"S:562052e079":{"line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f"},"S:568ac62670":{"line":124,"name":"parseArgs","path_id":"F:2d6ef08990"},"S:56a4782fc2":{"line":77,"name":"matchesPattern","path_id":"F:9427d264e6"},"S:5708b6bd2b":{"line":4,"name":"PendingApproval","path_id":"F:13d31b33ea"},"S:574c990b3f":{"line":59,"name":"scoreProposal","path_id":"F:e11f907cba"},"S:575af01d8c":{"line":110,"name":"checkTarget","path_id":"F:fd08562f92"},"S:577a1daeb3":{"line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5"},"S:580f464240":{"line":23,"name":"runStatus","path_id":"F:60548316f5"},"S:581a43b877":{"line":26,"name":"parseJsonLine","path_id":"F:61c2a29876"},"S:5835c8b608":{"line":69,"name":"resolveArming","path_id":"F:f90930c3c3"},"S:583c8b60d3":{"line":34,"name":"stateVar","path_id":"F:c64c042051"},"S:586705c7a0":{"line":5,"name":"CardTone","path_id":"F:40eb542a82"},"S:5919844321":{"line":24,"name":"makeEvent","path_id":"F:fadcf390da"},"S:59617d720e":{"line":5,"name":"estimateTokens","path_id":"F:7944059823"},"S:5962011a99":{"line":41,"name":"summarize","path_id":"F:3b382f95c0"},"S:5967648d07":{"line":116,"name":"isDocumented","path_id":"F:3b382f95c0"},"S:59807c1a98":{"line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70"},"S:59b9039619":{"line":28,"name":"loadCache","path_id":"F:119e3c0fce"},"S:59ba63dbab":{"line":34,"name":"readConfig","path_id":"F:a0d489df6d"},"S:59cd81d0e0":{"line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1"},"S:59dcca7090":{"line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b"},"S:59f6d857da":{"line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7"},"S:5a2d3d98ce":{"line":6,"name":"ModalSize","path_id":"F:63351e350b"},"S:5a49db2766":{"line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5"},"S:5a6c3aef24":{"line":7,"name":"OrderService","path_id":"F:1ecd18c4b9"},"S:5a7bfc5a1b":{"line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2"},"S:5ad0c942a1":{"line":117,"name":"findCycle","path_id":"F:015261eab0"},"S:5aed523637":{"line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d"},"S:5afb2ca954":{"line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a"},"S:5aff27256c":{"line":109,"name":"schema","path_id":"F:780c791407"},"S:5b0828ff4b":{"line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb"},"S:5b0e153cfb":{"line":424,"name":"pruneLearning","path_id":"F:22566cb46e"},"S:5b2eae49a8":{"line":62,"name":"sep","path_id":"F:aa77f227a6"},"S:5b8a5996df":{"line":70,"name":"fail","path_id":"F:780c791407"},"S:5bac9ae6d5":{"line":151,"name":"formatScalarForYaml","path_id":"F:1575110130"},"S:5bad105043":{"line":3,"name":"Reading","path_id":"F:eecc78e7e8"},"S:5c69e2b109":{"line":45,"name":"DecisionCard","path_id":"F:583edef643"},"S:5c7ed4ab16":{"line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2"},"S:5cc853b5b1":{"line":50,"name":"loadScenarios","path_id":"F:94050e680d"},"S:5d118d4b60":{"line":3,"name":"Row","path_id":"F:8972d37045"},"S:5d58defc25":{"line":14,"name":"tmpRepo","path_id":"F:60548316f5"},"S:5d9d040e28":{"line":30,"name":"Modal","path_id":"F:63351e350b"},"S:5daa909048":{"line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602"},"S:5e08a11ce4":{"line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df"},"S:5e20ef9f71":{"line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c"},"S:5e3d6fa91f":{"line":20,"name":"run","path_id":"F:54a3c626d9"},"S:5ea90f5e50":{"line":3,"name":"CheckoutService","path_id":"F:54c6928de9"},"S:5eb8ce722f":{"line":31,"name":"Toast","path_id":"F:ab334f34df"},"S:5eba6876fa":{"line":36,"name":"LeaseTable","path_id":"F:956332d4b5"},"S:5ed8ee5c0a":{"line":23,"name":"HoverCardProps","path_id":"F:66264a042c"},"S:5ef4400e5e":{"line":169,"name":"generatorLine","path_id":"F:780c791407"},"S:5ef7e9a80c":{"line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990"},"S:5f317ed26b":{"line":127,"name":"capabilities","path_id":"F:4db1101024"},"S:5f8c0130c3":{"line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b"},"S:5fe0061772":{"line":4,"name":"Maker","path_id":"F:7008a20b1c"},"S:60070857ec":{"line":9,"name":"IconName","path_id":"F:deab644e60"},"S:602e030d27":{"line":297,"name":"main","path_id":"F:1e5ef6ba70"},"S:6044b46e0f":{"line":100,"name":"readMessages","path_id":"F:8a3dd6ccff"},"S:6117b8ec80":{"line":224,"name":"decideResult","path_id":"F:116adfb9f8"},"S:6122b96d0b":{"line":11,"name":"runGateCapped","path_id":"F:b014028f57"},"S:6140d7ae56":{"line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70"},"S:61579a6235":{"line":21,"name":"CostSummary","path_id":"F:ce1173e176"},"S:618d055a7c":{"line":5,"name":"clean","path_id":"F:3213d03b72"},"S:61e677ae40":{"line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5"},"S:61ec9209fc":{"line":22,"name":"matchSymbol","path_id":"F:36419aa427"},"S:6202790aac":{"line":103,"name":"UsageError","path_id":"F:116adfb9f8"},"S:62210684b4":{"line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86"},"S:62d1cf1f06":{"line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7"},"S:62f42e9591":{"line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0"},"S:634b7012be":{"line":17,"name":"makeAtt","path_id":"F:571aa2f3ae"},"S:63613c3a63":{"line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792"},"S:636b7af50c":{"line":10,"name":"LeaseRow","path_id":"F:956332d4b5"},"S:639160c471":{"line":186,"name":"buildGates","path_id":"F:8a3dd6ccff"},"S:641774928a":{"line":30,"name":"run","path_id":"F:9cbe9238f8"},"S:6425f5a6c7":{"line":10,"name":"WithLeases","path_id":"F:31658eff0b"},"S:64376e38db":{"line":6,"name":"SelectOption","path_id":"F:819f72edf6"},"S:644e7adeef":{"line":56,"name":"tokens","path_id":"F:c64c042051"},"S:6499fa18ee":{"line":264,"name":"toolStatus","path_id":"F:ab5077147a"},"S:64de4c98b6":{"line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0"},"S:64ebce69bf":{"line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a"},"S:65004e9f74":{"line":215,"name":"loadCfg","path_id":"F:aea3c05bca"},"S:655cf75cf0":{"line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9"},"S:655f25fbed":{"line":33,"name":"Sparkline","path_id":"F:c0e80ca327"},"S:6584162247":{"line":97,"name":"nowIso","path_id":"F:a0d489df6d"},"S:65d6e9b42e":{"line":112,"name":"dedupeImports","path_id":"F:36419aa427"},"S:6605365375":{"line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5"},"S:6647a4e550":{"line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92"},"S:66ac4b8d64":{"line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1"},"S:66b4da1ed7":{"line":6,"name":"ModelCostClass","path_id":"F:ce1173e176"},"S:66bb927095":{"line":11,"name":"run","path_id":"F:edf42fb1af"},"S:66cd7b74c6":{"line":5,"name":"SliderProps","path_id":"F:81c495717c"},"S:670e55d75a":{"line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce"},"S:672926584c":{"line":219,"name":"decideExitCode","path_id":"F:116adfb9f8"},"S:67852685cf":{"line":4,"name":"Info","path_id":"F:7832db450f"},"S:6797390adc":{"line":18,"name":"initialsFor","path_id":"F:f942e88a8f"},"S:680cec9dbd":{"line":64,"name":"clamp","path_id":"F:9a3e8ed7d2"},"S:68308360b1":{"line":166,"name":"main","path_id":"F:a0d489df6d"},"S:6831eb78e0":{"line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0"},"S:686192f35d":{"line":97,"name":"toLinePath","path_id":"F:c0e80ca327"},"S:689125598d":{"line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249"},"S:693b8fedee":{"line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49"},"S:6981533501":{"line":24,"name":"Input","path_id":"F:763efdd51c"},"S:699f2f623f":{"line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820"},"S:69db4ad7cc":{"line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70"},"S:69ef79b6f3":{"line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820"},"S:69f3537d3b":{"line":13,"name":"tmp","path_id":"F:8a3433b070"},"S:6a4d8aa30d":{"line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53"},"S:6a7737bb57":{"line":66,"name":"extractTags","path_id":"F:1a19f02364"},"S:6b0614bdf6":{"line":127,"name":"claim","path_id":"F:5b113a0914"},"S:6b1894b02c":{"line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd"},"S:6b5288f35f":{"line":18,"name":"coreLevers","path_id":"F:87c30bdb4c"},"S:6bc87187a8":{"line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5"},"S:6c21b6660b":{"line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c"},"S:6c21f00789":{"line":7,"name":"scenario","path_id":"F:5376e86470"},"S:6c4ca00b53":{"line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba"},"S:6c778494b3":{"line":7,"name":"relativeTime","path_id":"F:86838d35ac"},"S:6cb93e992c":{"line":45,"name":"formatUsd","path_id":"F:86838d35ac"},"S:6cbed7ff26":{"line":13,"name":"LearningSummary","path_id":"F:1d03291691"},"S:6d2334f815":{"line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b"},"S:6dcad3cdf1":{"line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5"},"S:6dcbe228c5":{"line":75,"name":"scaffold","path_id":"F:5e450ff82c"},"S:6dd199eea1":{"line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9"},"S:6dde857e83":{"line":104,"name":"listMessages","path_id":"F:05bffc70e9"},"S:6e1dfe647a":{"line":29,"name":"DecisionCardProps","path_id":"F:583edef643"},"S:6e6111c7dd":{"line":70,"name":"runPipeline","path_id":"F:edb11415f0"},"S:6ee06ecd24":{"line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7"},"S:6ee308cae0":{"line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4"},"S:6ef3b2f2e5":{"line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5"},"S:6fab505fa4":{"line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9"},"S:700c80e34d":{"line":1,"name":"MESSAGES","path_id":"F:b502a0fe75"},"S:700d752004":{"line":11,"name":"cli","path_id":"F:9bb94e1b40"},"S:703e56c471":{"line":45,"name":"scratchRepo","path_id":"F:d0da1cab80"},"S:7048bb8a3d":{"line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da"},"S:704fff1c43":{"line":15,"name":"tmp","path_id":"F:9f6dd5e5a3"},"S:705c285e25":{"line":112,"name":"chatCompletion","path_id":"F:8d2cb93236"},"S:7070a0d16e":{"line":1,"name":"MESSAGES","path_id":"F:da9133a29d"},"S:707883a645":{"line":14,"name":"DecisionSummary","path_id":"F:583edef643"},"S:7078ce1661":{"line":40,"name":"today","path_id":"F:09ba331878"},"S:70c4ff437c":{"line":80,"name":"adapter","path_id":"F:36419aa427"},"S:712330cf3e":{"line":6,"name":"parseStagedLine","path_id":"F:54df44aadd"},"S:725b07739e":{"line":22,"name":"WorkState","path_id":"F:c64c042051"},"S:72886ee448":{"line":66,"name":"formatMessage","path_id":"F:e406ceab72"},"S:72a5c214ac":{"line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5"},"S:72cb0b7406":{"line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0"},"S:72d4f657d5":{"line":91,"name":"setup","path_id":"F:3de9042953"},"S:732a1c21fe":{"line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c"},"S:733f5fd096":{"line":5,"name":"HelpHintProps","path_id":"F:d5b496b125"},"S:735c642c3a":{"line":46,"name":"collectNearMisses","path_id":"F:09ba331878"},"S:7369c62b84":{"line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423"},"S:7379962c7e":{"line":1,"name":"MESSAGES","path_id":"F:4d08d5472f"},"S:73a3da9f65":{"line":46,"name":"ActivationLadder","path_id":"F:14edab923f"},"S:73cbfa5a7d":{"line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca"},"S:73e4b1bbf9":{"line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba"},"S:73feb65706":{"line":4,"name":"OnLabel","path_id":"F:dca643f34b"},"S:744cc47208":{"line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281"},"S:745c98231d":{"line":338,"name":"main","path_id":"F:3b96b6dfed"},"S:749446c25e":{"line":8,"name":"armingModes","path_id":"F:c64c042051"},"S:74b454ee62":{"line":56,"name":"interpolate","path_id":"F:e406ceab72"},"S:74bea9ecdf":{"line":59,"name":"criterion","path_id":"F:2e327963ed"},"S:74c8951fb9":{"line":230,"name":"severityToSarifLevel","path_id":"F:116adfb9f8"},"S:74e8f23a0b":{"line":4,"name":"MergeCap","path_id":"F:84a5c32a4c"},"S:753ca853b2":{"line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1"},"S:75c48595da":{"line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97"},"S:76171943e3":{"line":7,"name":"canonicalize","path_id":"F:245efb551c"},"S:7619cf060d":{"line":133,"name":"escapeHtml","path_id":"F:128b647d9a"},"S:762b3eaf4a":{"line":17,"name":"Models","path_id":"F:1aa7cf650d"},"S:765b4574da":{"line":34,"name":"mcpCall","path_id":"F:9cbe9238f8"},"S:7698d9efeb":{"line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3"},"S:76d7b21daf":{"line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364"},"S:76dbb025c9":{"line":116,"name":"removeFirstMatch","path_id":"F:522efae76d"},"S:77031e48f4":{"line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff"},"S:77054cfc82":{"line":23,"name":"makeItem","path_id":"F:baf7641a01"},"S:7762c6d861":{"line":21,"name":"cachePath","path_id":"F:119e3c0fce"},"S:77a4165d99":{"line":12,"name":"TooltipSide","path_id":"F:8a9aff1529"},"S:7803dea04b":{"line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e"},"S:781c2d6b40":{"line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1"},"S:781c4112a2":{"line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c"},"S:783d91f2ed":{"line":319,"name":"extractSection","path_id":"F:8a3dd6ccff"},"S:78dd5bd63d":{"line":52,"name":"sha256Hex","path_id":"F:4db1101024"},"S:78e9af551d":{"line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee"},"S:7902cd38d0":{"line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8"},"S:7910b636e8":{"line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2"},"S:79144070a6":{"line":55,"name":"centrality","path_id":"F:015261eab0"},"S:792d313360":{"line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281"},"S:7934857ce3":{"line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5"},"S:796295afbe":{"line":6,"name":"GateStatus","path_id":"F:8c6234a8cb"},"S:79676d74df":{"line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee"},"S:7989466d34":{"line":59,"name":"useConfirm","path_id":"F:3c479cac6e"},"S:79997ba94d":{"line":1,"name":"MESSAGES","path_id":"F:09ea014068"},"S:79a288a97f":{"line":16,"name":"runTick","path_id":"F:baf7641a01"},"S:79b048583f":{"line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4"},"S:7a05eaea5a":{"line":34,"name":"auditCoverage","path_id":"F:1a19f02364"},"S:7a464a2d86":{"line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa"},"S:7a68bb8c0c":{"line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820"},"S:7ad858b9a2":{"line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04"},"S:7b7ddcaa20":{"line":79,"name":"segments","path_id":"F:9a3e8ed7d2"},"S:7b87285e6c":{"line":110,"name":"readTextSafe","path_id":"F:7232ada2da"},"S:7b984e047b":{"line":18,"name":"finalizeState","path_id":"F:95d4304133"},"S:7bc320f853":{"line":27,"name":"assertValid","path_id":"F:5b113a0914"},"S:7bcf8115de":{"line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a"},"S:7bdca9af48":{"line":30,"name":"Tooltip","path_id":"F:8a9aff1529"},"S:7bfb1bf049":{"line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b"},"S:7c0d389b98":{"line":17,"name":"runRatchet","path_id":"F:cede5f9fa2"},"S:7c3651a5ba":{"line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4"},"S:7c44412e8a":{"line":4,"name":"WithHeader","path_id":"F:3d505706cd"},"S:7c5c3a31a4":{"line":41,"name":"compilePattern","path_id":"F:cb66095cb4"},"S:7c6ba2a644":{"line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5"},"S:7c716c856e":{"line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81"},"S:7c9eb8f22d":{"line":113,"name":"runScript","path_id":"F:48355ccf4d"},"S:7cd45cbc03":{"line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e"},"S:7cd6925ad6":{"line":19,"name":"runScript","path_id":"F:564b053598"},"S:7d253ea6b0":{"line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed"},"S:7d38304e55":{"line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c"},"S:7d5af2fca1":{"line":22,"name":"Staged","path_id":"F:250c8a0d4a"},"S:7d89fd8d95":{"line":13,"name":"run","path_id":"F:5994385869"},"S:7d8d2691e2":{"line":4,"name":"Tiers","path_id":"F:fe5ec971f8"},"S:7ed39c68da":{"line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6"},"S:7fb0e9b59c":{"line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514"},"S:7fe7ee7f43":{"line":94,"name":"dedupe","path_id":"F:ae46bbab81"},"S:7ff08ea7a1":{"line":5,"name":"MESSAGES","path_id":"F:f41378fed0"},"S:8041c36b7b":{"line":18,"name":"noThrow","path_id":"F:8fe56e5618"},"S:8097fe47fc":{"line":40,"name":"readBody","path_id":"F:08b7435c86"},"S:80ded7ba90":{"line":542,"name":"renderHuman","path_id":"F:7232ada2da"},"S:80e9a1f555":{"line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee"},"S:813f68335e":{"line":8,"name":"Armed","path_id":"F:28b7af3c53"},"S:819d9d37ff":{"line":12,"name":"call","path_id":"F:ec52ca3820"},"S:81bb2e8cc4":{"line":39,"name":"clamp","path_id":"F:e11f907cba"},"S:81c9c1291a":{"line":35,"name":"interpolate","path_id":"F:05bffc70e9"},"S:823d7fa306":{"line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c"},"S:82407637b4":{"line":266,"name":"emitJson","path_id":"F:116adfb9f8"},"S:8252cf2ba8":{"line":52,"name":"warn","path_id":"F:2d4c555ba1"},"S:82727ee8e7":{"line":35,"name":"collectImports","path_id":"F:3213d03b72"},"S:8282a0b575":{"line":85,"name":"formatMessage","path_id":"F:05bffc70e9"},"S:8289602f81":{"line":28,"name":"modeVar","path_id":"F:c64c042051"},"S:837b5a8d1e":{"line":38,"name":"runCli","path_id":"F:b16afebae9"},"S:83ad315769":{"line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3"},"S:83b3a2ab69":{"line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49"},"S:83deb081d9":{"line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9"},"S:84220fc054":{"line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e"},"S:842e875c5a":{"line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b"},"S:84b00e90de":{"line":28,"name":"Toggle","path_id":"F:214cc0a5f4"},"S:85083e2f79":{"line":22,"name":"run","path_id":"F:e359adb110"},"S:852d083fcb":{"line":97,"name":"listQueued","path_id":"F:5b113a0914"},"S:856f3a5bea":{"line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618"},"S:8579f519b1":{"line":25,"name":"scaffold","path_id":"F:de5ebbf586"},"S:857ab7696f":{"line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa"},"S:85c852fd1a":{"line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca"},"S:8641765bb2":{"line":34,"name":"formatDuration","path_id":"F:86838d35ac"},"S:8660e770ea":{"line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da"},"S:867db3037b":{"line":343,"name":"resolveGate","path_id":"F:522efae76d"},"S:86cb290127":{"line":25,"name":"Subject","path_id":"F:0a85f3b8e5"},"S:87013bd4c3":{"line":75,"name":"loadInputs","path_id":"F:780c791407"},"S:870a14c796":{"line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48"},"S:8735f37dad":{"line":288,"name":"adoptCmd","path_id":"F:780c791407"},"S:8761033dfb":{"line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed"},"S:87c8d03eb8":{"line":126,"name":"dirsFromCodeowners","path_id":"F:4096620673"},"S:87ca9c146a":{"line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa"},"S:87ceb91d57":{"line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76"},"S:87fa79bea3":{"line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d"},"S:8822b8498d":{"line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0"},"S:882efb23a5":{"line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0"},"S:88426a3883":{"line":12,"name":"looksLikeDiff","path_id":"F:872221b1da"},"S:88bc43a62b":{"line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227"},"S:88bd705d3f":{"line":64,"name":"badgeJson","path_id":"F:a0d489df6d"},"S:89065c6f4b":{"line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2"},"S:890a9e6691":{"line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1"},"S:890ccb5d6b":{"line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f"},"S:89566a4918":{"line":39,"name":"tierVar","path_id":"F:c64c042051"},"S:895b1937bd":{"line":61,"name":"readConfig","path_id":"F:8a3dd6ccff"},"S:8990e6571f":{"line":118,"name":"parseFlatYaml","path_id":"F:1575110130"},"S:89e92655dd":{"line":57,"name":"normalizeLF","path_id":"F:8a10462927"},"S:8a6e48a119":{"line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da"},"S:8a971e3c54":{"line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b"},"S:8a9e6199b3":{"line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce"},"S:8af9c33a76":{"line":13,"name":"SelectProps","path_id":"F:819f72edf6"},"S:8b3d7e9050":{"line":240,"name":"summaryMessage","path_id":"F:116adfb9f8"},"S:8b67ef3e8b":{"line":266,"name":"workItemFile","path_id":"F:22566cb46e"},"S:8b7542071f":{"line":1,"name":"MESSAGES","path_id":"F:6a86908a3e"},"S:8b9971d92a":{"line":30,"name":"LearningCardProps","path_id":"F:1d03291691"},"S:8bff005013":{"line":16,"name":"runReport","path_id":"F:fadcf390da"},"S:8c2cd9c54f":{"line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca"},"S:8c65a8b2a2":{"line":15,"name":"ActiveWork","path_id":"F:e5e519f441"},"S:8c6ccd3e8b":{"line":64,"name":"listTemplate","path_id":"F:5e450ff82c"},"S:8c83339acb":{"line":25,"name":"IconButton","path_id":"F:a8cfe45d27"},"S:8cd25e6f09":{"line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5"},"S:8cf2204c43":{"line":36,"name":"CostPanelProps","path_id":"F:ce1173e176"},"S:8d10c3ed6e":{"line":13,"name":"makeOrderService","path_id":"F:52caf3b287"},"S:8d131c2429":{"line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d"},"S:8d1ca74a54":{"line":29,"name":"leaseHolder","path_id":"F:d135cffeaa"},"S:8d30c800e7":{"line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1"},"S:8d5d2455bf":{"line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72"},"S:8da618623d":{"line":18,"name":"headSha","path_id":"F:1bc6d1449f"},"S:8dfe0cf637":{"line":27,"name":"ProgressMeter","path_id":"F:9deac13db0"},"S:8e42d127b7":{"line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d"},"S:8e586c7c13":{"line":60,"name":"commandOnPath","path_id":"F:94050e680d"},"S:8e94f927e1":{"line":64,"name":"mapToCriteria","path_id":"F:2e327963ed"},"S:8ec4bd5dec":{"line":25,"name":"signPacket","path_id":"F:7b3e38c9a6"},"S:8f1da92228":{"line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed"},"S:8f6d716f36":{"line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49"},"S:8f93f4689a":{"line":60,"name":"armState","path_id":"F:1e5ef6ba70"},"S:8fc6479414":{"line":72,"name":"getDiff","path_id":"F:116adfb9f8"},"S:8fe737eaa0":{"line":1,"name":"MESSAGES","path_id":"F:964f89b6cc"},"S:90b2cf611f":{"line":255,"name":"diffPosture","path_id":"F:780c791407"},"S:90b86b1f26":{"line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227"},"S:90f1a56d4e":{"line":180,"name":"hostState","path_id":"F:7d236c9aa6"},"S:91108693ba":{"line":1,"name":"MESSAGES","path_id":"F:d8e37c4449"},"S:914d5cd317":{"line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49"},"S:91c42b4f27":{"line":23,"name":"read","path_id":"F:4096620673"},"S:9249714b12":{"line":104,"name":"main","path_id":"F:f90930c3c3"},"S:928743a069":{"line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f"},"S:9287ce102a":{"line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff"},"S:9299cd9a70":{"line":31,"name":"matches","path_id":"F:c9493b5275"},"S:92bb85bdff":{"line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820"},"S:92bd39eb47":{"line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02"},"S:934c97a052":{"line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da"},"S:9382da6a24":{"line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee"},"S:93ab3c1c15":{"line":8,"name":"Checker","path_id":"F:7008a20b1c"},"S:93d0a78f18":{"line":65,"name":"changedPaths","path_id":"F:119e3c0fce"},"S:93e0292f30":{"line":12,"name":"Protected","path_id":"F:13d31b33ea"},"S:93fa315ac7":{"line":48,"name":"fail","path_id":"F:2d4c555ba1"},"S:9435112073":{"line":194,"name":"scanDiff","path_id":"F:116adfb9f8"},"S:94383b0aef":{"line":3,"name":"RefundResult","path_id":"F:93f0f5d3de"},"S:944e1f3b0b":{"line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea"},"S:949f988c9e":{"line":10,"name":"makeDb","path_id":"F:044b762a79"},"S:950b7153af":{"line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c"},"S:9554538925":{"line":196,"name":"readPRContext","path_id":"F:92d6903b5f"},"S:95871faa22":{"line":75,"name":"formatNumber","path_id":"F:9deac13db0"},"S:9598b17b9e":{"line":14,"name":"AutoMerge","path_id":"F:a0068c8817"},"S:959be959f7":{"line":134,"name":"planCycle","path_id":"F:ddeb486c49"},"S:95e22729ee":{"line":52,"name":"sleep","path_id":"F:cdbe769ed3"},"S:95e56b0a9c":{"line":27,"name":"Remote","path_id":"F:c63a71fb57"},"S:969658a48c":{"line":91,"name":"sleep","path_id":"F:8d2cb93236"},"S:96b040bf38":{"line":76,"name":"enqueue","path_id":"F:5b113a0914"},"S:96c461f8cd":{"line":6,"name":"Success","path_id":"F:7832db450f"},"S:96e9e4a020":{"line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca"},"S:96ffd586d6":{"line":19,"name":"tmp","path_id":"F:6da7bd8294"},"S:974654287c":{"line":304,"name":"count","path_id":"F:8a10462927"},"S:979cd75d0e":{"line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444"},"S:97a7516354":{"line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3"},"S:97bc3f0eb4":{"line":22,"name":"deriveArming","path_id":"F:0da05a2a05"},"S:980a6a0449":{"line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d"},"S:982b9fa62d":{"line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3"},"S:98ca1b6552":{"line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d"},"S:98d9caecec":{"line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0"},"S:996743005b":{"line":29,"name":"flagValue","path_id":"F:a0d489df6d"},"S:99ae98a428":{"line":71,"name":"walkMd","path_id":"F:fd08562f92"},"S:99c574f83d":{"line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3"},"S:9ab63d4bb2":{"line":83,"name":"parseVerdict","path_id":"F:2d6ef08990"},"S:9b166b011e":{"line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f"},"S:9b40c124ce":{"line":17,"name":"baseCfg","path_id":"F:093689bb8e"},"S:9b986c2d8a":{"line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49"},"S:9bc07de53c":{"line":181,"name":"GateVM","path_id":"F:0a85f3b8e5"},"S:9bcfb77bfa":{"line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa"},"S:9c4deaa396":{"line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8"},"S:9cda312f51":{"line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca"},"S:9d42aeefd9":{"line":106,"name":"gateGraphErrors","path_id":"F:fc21812307"},"S:9dee57c7c2":{"line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f"},"S:9e3d232a1b":{"line":43,"name":"fixture","path_id":"F:4fad18c892"},"S:9e9207d834":{"line":67,"name":"detectInstructions","path_id":"F:ae46bbab81"},"S:9ec4198171":{"line":93,"name":"collectNodes","path_id":"F:f51cba9beb"},"S:9ef12b47d5":{"line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b"},"S:9f59110fda":{"line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49"},"S:9f6788d90d":{"line":314,"name":"runCli","path_id":"F:116adfb9f8"},"S:9f7fa8d585":{"line":10,"name":"packetContent","path_id":"F:12c7a4e461"},"S:9f9c07db7d":{"line":10,"name":"Model","path_id":"F:08577063d4"},"S:9f9ed94a62":{"line":42,"name":"Table","path_id":"F:a402d2f9ed"},"S:a06feb4e68":{"line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f"},"S:a07487517b":{"line":25,"name":"getAdapter","path_id":"F:2554ddd30c"},"S:a0db477c6e":{"line":90,"name":"summarize","path_id":"F:2e327963ed"},"S:a0ea4d9d0f":{"line":18,"name":"computePacketId","path_id":"F:12c7a4e461"},"S:a0f5484b98":{"line":77,"name":"IconProps","path_id":"F:deab644e60"},"S:a10a756308":{"line":59,"name":"sendJson","path_id":"F:08b7435c86"},"S:a1107105c3":{"line":26,"name":"tmp","path_id":"F:9cbe9238f8"},"S:a1828ef829":{"line":59,"name":"main","path_id":"F:8bb1b57470"},"S:a1cc5660fe":{"line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca"},"S:a1d4334d94":{"line":44,"name":"App","path_id":"F:113387361d"},"S:a26ee6eefd":{"line":44,"name":"workStateLabels","path_id":"F:c64c042051"},"S:a272c887e3":{"line":82,"name":"toPoints","path_id":"F:c0e80ca327"},"S:a2d5fcb920":{"line":13,"name":"GatesScreen","path_id":"F:304fa8ef33"},"S:a2d9480f78":{"line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5"},"S:a2df9a5c24":{"line":23,"name":"Resolved","path_id":"F:3ce0fd77eb"},"S:a2fef04067":{"line":4,"name":"Budget","path_id":"F:1f40b6eb6e"},"S:a320bea4da":{"line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca"},"S:a337ae8f0b":{"line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5"},"S:a34306cc67":{"line":61,"name":"getDiff","path_id":"F:8a10462927"},"S:a364864213":{"line":53,"name":"listRecords","path_id":"F:5b113a0914"},"S:a3bf9f1833":{"line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b"},"S:a3ca73d34c":{"line":6,"name":"LearningStatus","path_id":"F:1d03291691"},"S:a3cae87964":{"line":109,"name":"makePlan","path_id":"F:18f569225a"},"S:a3fb13b441":{"line":4,"name":"Tones","path_id":"F:10e76cfcd3"},"S:a4155f5067":{"line":16,"name":"AppShellProps","path_id":"F:268769c4a6"},"S:a48d9e0b16":{"line":13,"name":"budgetTier","path_id":"F:7944059823"},"S:a4a9a79fbe":{"line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5"},"S:a4b6be1d49":{"line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820"},"S:a4c389d72a":{"line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927"},"S:a4d0ce8fea":{"line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a"},"S:a4e623c70b":{"line":354,"name":"updateWorkItem","path_id":"F:22566cb46e"},"S:a4e7d71500":{"line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3"},"S:a50812babf":{"line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa"},"S:a529342ccb":{"line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4"},"S:a57f8c1bdc":{"line":39,"name":"otherLines","path_id":"F:8b2f3dbcba"},"S:a5baaff840":{"line":12,"name":"modules","path_id":"F:2a74ae3f05"},"S:a63cef8ef8":{"line":4,"name":"Armed","path_id":"F:3319e5c923"},"S:a657233cd5":{"line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2"},"S:a6ff0bb6d7":{"line":28,"name":"slugifyId","path_id":"F:ac11b5379f"},"S:a716bbdaa8":{"line":33,"name":"reaches","path_id":"F:8b8d3c46b3"},"S:a75126f856":{"line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49"},"S:a76a61b560":{"line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024"},"S:a79dad6e97":{"line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9"},"S:a8971aba2c":{"line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff"},"S:a8a643fda8":{"line":55,"name":"validatePacket","path_id":"F:65193a9799"},"S:a8ccdc0c7d":{"line":112,"name":"parseDiff","path_id":"F:116adfb9f8"},"S:a8f75707be":{"line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d"},"S:a8fe6446c0":{"line":17,"name":"headSha","path_id":"F:92dde817ee"},"S:a91334a377":{"line":32,"name":"Slider","path_id":"F:81c495717c"},"S:a92333a9ea":{"line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024"},"S:a931ad2e62":{"line":46,"name":"resolvePromptText","path_id":"F:23917c6197"},"S:a9b3acb352":{"line":16,"name":"writeRunLog","path_id":"F:3b382f95c0"},"S:a9f138bd93":{"line":10,"name":"signature","path_id":"F:ffe5c1269b"},"S:aa00911a72":{"line":25,"name":"readEvents","path_id":"F:fc5d887ff6"},"S:aa4de9995b":{"line":4,"name":"Trends","path_id":"F:ca13fe2a5b"},"S:aa8f9a7b3d":{"line":122,"name":"captureSegments","path_id":"F:22566cb46e"},"S:aaa1eac555":{"line":47,"name":"adapter","path_id":"F:3213d03b72"},"S:aabd2d1e55":{"line":6,"name":"TableColumn","path_id":"F:a402d2f9ed"},"S:aaca852d2b":{"line":31,"name":"IdentityChip","path_id":"F:f942e88a8f"},"S:aacff6bc1c":{"line":84,"name":"attestationBytes","path_id":"F:780c791407"},"S:ab3548c3d0":{"line":16,"name":"baseCfg","path_id":"F:06b982f5a2"},"S:ab79b43633":{"line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792"},"S:ab8d34f24a":{"line":119,"name":"sweepTarget","path_id":"F:6f247eb514"},"S:abe6a83201":{"line":88,"name":"Icon","path_id":"F:deab644e60"},"S:ac015d1f81":{"line":67,"name":"collectImports","path_id":"F:36419aa427"},"S:ac0d90ea9c":{"line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff"},"S:ac1ae69e0f":{"line":3,"name":"SparklineTone","path_id":"F:c0e80ca327"},"S:ac31df31c0":{"line":113,"name":"writeJson","path_id":"F:eb14a0bdeb"},"S:acc91dc6fe":{"line":210,"name":"verifyCmd","path_id":"F:780c791407"},"S:ad1b93bd0c":{"line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba"},"S:ad302fbf54":{"line":5,"name":"makeCartService","path_id":"F:52caf3b287"},"S:ad4edf7e81":{"line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861"},"S:ad7d7732a1":{"line":24,"name":"makeExtract","path_id":"F:cecdb96382"},"S:ad93bbf998":{"line":14,"name":"run","path_id":"F:9f36b3ef29"},"S:ae3c96ae84":{"line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed"},"S:aecf05317d":{"line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236"},"S:af1450421c":{"line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e"},"S:af1e7a50ba":{"line":5,"name":"makeDb","path_id":"F:f8168b956f"},"S:af28852c7f":{"line":169,"name":"deepEqualJson","path_id":"F:22566cb46e"},"S:af6abeace9":{"line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c"},"S:afa2ffd4a2":{"line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca"},"S:afdc9fa742":{"line":172,"name":"scanFile","path_id":"F:116adfb9f8"},"S:afe9763761":{"line":3,"name":"RaiseCap","path_id":"F:4387a44284"},"S:b01ec1a6ac":{"line":25,"name":"Gates","path_id":"F:bb6a874d58"},"S:b02fc1cd06":{"line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff"},"S:b06714d9c5":{"line":225,"name":"patchConfig","path_id":"F:22566cb46e"},"S:b06f3444be":{"line":86,"name":"stateWithSource","path_id":"F:08b7435c86"},"S:b121dfe1ec":{"line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2"},"S:b128b3a196":{"line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715"},"S:b1b5323930":{"line":77,"name":"runGate","path_id":"F:f921eecad7"},"S:b1bbb81b82":{"line":30,"name":"Button","path_id":"F:8b122c449e"},"S:b1e3e516c3":{"line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2"},"S:b27476e527":{"line":5,"name":"SparklineProps","path_id":"F:c0e80ca327"},"S:b288f69305":{"line":76,"name":"agentproofScore","path_id":"F:3b382f95c0"},"S:b29d404deb":{"line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024"},"S:b29e93fbc3":{"line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa"},"S:b29fc4b0d5":{"line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d"},"S:b32b89125f":{"line":1,"name":"MESSAGES","path_id":"F:e948251d2b"},"S:b366c411d2":{"line":150,"name":"renderHtml","path_id":"F:128b647d9a"},"S:b3a28348ad":{"line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d"},"S:b41535d6e7":{"line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5"},"S:b4354229d8":{"line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27"},"S:b455c897cf":{"line":66,"name":"rel","path_id":"F:780c791407"},"S:b4a3093fe9":{"line":66,"name":"indentOf","path_id":"F:1575110130"},"S:b4b12fd408":{"line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7"},"S:b4e887ed4f":{"line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c"},"S:b5883cd7f4":{"line":1,"name":"MESSAGES","path_id":"F:240ace7a8f"},"S:b5d72ba60f":{"line":8,"name":"ModalProps","path_id":"F:63351e350b"},"S:b65916676a":{"line":98,"name":"successBody","path_id":"F:eb14a0bdeb"},"S:b6cbeed65d":{"line":1,"name":"MESSAGES","path_id":"F:313bcfac46"},"S:b6eeacb415":{"line":4,"name":"Requirement","path_id":"F:3b4065b679"},"S:b6efca77f5":{"line":17,"name":"basename","path_id":"F:2f3e98ab2c"},"S:b6fce3a5a9":{"line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a"},"S:b7db5f4d64":{"line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514"},"S:b815c12407":{"line":1,"name":"MESSAGES","path_id":"F:dd58ae3791"},"S:b81af2dbe4":{"line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff"},"S:b840cddd67":{"line":20,"name":"readScreens","path_id":"F:1a19f02364"},"S:b8469e1267":{"line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff"},"S:b88ce47ede":{"line":98,"name":"attentionRank","path_id":"F:015261eab0"},"S:b89188d9e3":{"line":76,"name":"main","path_id":"F:09ba331878"},"S:b8cdbe3fd3":{"line":73,"name":"migrate","path_id":"F:9d69a6b766"},"S:b8ed1c85bb":{"line":1,"name":"MESSAGES","path_id":"F:9616513cb6"},"S:b908c74a11":{"line":5,"name":"makeDb","path_id":"F:3c53926ecd"},"S:b919653baa":{"line":44,"name":"DryRun","path_id":"F:2207a6ebce"},"S:b926c18911":{"line":15,"name":"hashString","path_id":"F:2b9c43b0ca"},"S:b97efe3854":{"line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70"},"S:b9942b1651":{"line":11,"name":"runRatchet","path_id":"F:2b49c74e74"},"S:b9d44c6996":{"line":230,"name":"diffSet","path_id":"F:780c791407"},"S:b9ed6b7b01":{"line":44,"name":"buildHeaders","path_id":"F:8d2cb93236"},"S:ba017108fd":{"line":104,"name":"leaseIsLive","path_id":"F:5b113a0914"},"S:ba347c9b77":{"line":4,"name":"Beside","path_id":"F:e19aab09cb"},"S:ba36fd17d6":{"line":100,"name":"collectRows","path_id":"F:128b647d9a"},"S:ba4cb77f9c":{"line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c"},"S:ba5f7d1ffe":{"line":41,"name":"saveCache","path_id":"F:119e3c0fce"},"S:ba65eaae5b":{"line":4,"name":"MESSAGES","path_id":"F:acc3f6b466"},"S:ba7fe0b6d3":{"line":10,"name":"routedConfig","path_id":"F:704e42d42b"},"S:baa16abe42":{"line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70"},"S:baab120dbc":{"line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff"},"S:baacff5701":{"line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee"},"S:bac2ebbef5":{"line":53,"name":"gitCommit","path_id":"F:0391f3b249"},"S:bafcfbb33c":{"line":224,"name":"formatDelta","path_id":"F:3b382f95c0"},"S:bb036fe763":{"line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c"},"S:bb570e99d8":{"line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c"},"S:bb578790a3":{"line":67,"name":"pagerank","path_id":"F:015261eab0"},"S:bb5d1b5426":{"line":1,"name":"MESSAGES","path_id":"F:59b2499e4e"},"S:bb800288d9":{"line":12,"name":"writeRunLog","path_id":"F:6f247eb514"},"S:bbdb581d9d":{"line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716"},"S:bc1fd2c5b3":{"line":149,"name":"adrNumbers","path_id":"F:fd08562f92"},"S:bc3262b829":{"line":73,"name":"writeArtifact","path_id":"F:a0d489df6d"},"S:bc4bff4faa":{"line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281"},"S:bc56c13940":{"line":22,"name":"preservingArtifact","path_id":"F:137056535b"},"S:bca7722767":{"line":100,"name":"reviewDiff","path_id":"F:2d6ef08990"},"S:bcddbe684b":{"line":62,"name":"listCaptures","path_id":"F:9344d335a6"},"S:bd1a0a35f8":{"line":35,"name":"Tabs","path_id":"F:1db369d970"},"S:bd63b1e408":{"line":15,"name":"cleanSignature","path_id":"F:594f505f11"},"S:bd7f311fdb":{"line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6"},"S:bd8806c490":{"line":13,"name":"Board","path_id":"F:dd1be2cd7b"},"S:bd9f62784d":{"line":5,"name":"scenario","path_id":"F:28f278b1d9"},"S:be897872b9":{"line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444"},"S:bead992b70":{"line":48,"name":"isBillable","path_id":"F:8b5a1f94c4"},"S:bec355e18a":{"line":75,"name":"parseEntries","path_id":"F:1575110130"},"S:bf5cf69681":{"line":13,"name":"refund","path_id":"F:93f0f5d3de"},"S:bfb04089fa":{"line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914"},"S:c028c053e3":{"line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49"},"S:c063b246d1":{"line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1"},"S:c0981a3461":{"line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c"},"S:c0c2347579":{"line":5,"name":"ButtonVariant","path_id":"F:8b122c449e"},"S:c12913d4da":{"line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9"},"S:c1667b970b":{"line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0"},"S:c16b3b7bbf":{"line":10,"name":"Board","path_id":"F:6c0919b64e"},"S:c176253e9c":{"line":12,"name":"tmp","path_id":"F:fadcf390da"},"S:c1c63b1bf8":{"line":35,"name":"planFile","path_id":"F:d6401dd73e"},"S:c1e6062cfc":{"line":109,"name":"baseCfg","path_id":"F:ee02e563c6"},"S:c275cb33da":{"line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da"},"S:c2e502ad5e":{"line":409,"name":"levelFor","path_id":"F:522efae76d"},"S:c2e641f1c8":{"line":106,"name":"runSuite","path_id":"F:23917c6197"},"S:c36223901c":{"line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa"},"S:c388580f86":{"line":114,"name":"main","path_id":"F:90cbb2cf6a"},"S:c38d35b211":{"line":4,"name":"Roles","path_id":"F:973aaa9d86"},"S:c3a1d0f1a7":{"line":151,"name":"serializeEntry","path_id":"F:22566cb46e"},"S:c3d94f0812":{"line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a"},"S:c42dd60d39":{"line":126,"name":"sortRows","path_id":"F:128b647d9a"},"S:c44c6a3e42":{"line":35,"name":"parseEvidence","path_id":"F:8abf9e432a"},"S:c44da37a7d":{"line":12,"name":"Dashboard","path_id":"F:2470e60179"},"S:c47beeac78":{"line":11,"name":"normalizeRelative","path_id":"F:015261eab0"},"S:c4e4845bcc":{"line":181,"name":"manifestDigest","path_id":"F:4db1101024"},"S:c504685956":{"line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee"},"S:c52b041088":{"line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444"},"S:c53d33aa2a":{"line":71,"name":"scoreProposals","path_id":"F:e11f907cba"},"S:c546f7913f":{"line":108,"name":"main","path_id":"F:90e1fd2fd9"},"S:c5854b8940":{"line":27,"name":"snapshot","path_id":"F:0103cf3d56"},"S:c63f60f015":{"line":210,"name":"main","path_id":"F:f5d313e9f1"},"S:c68bb17ca2":{"line":17,"name":"TabsProps","path_id":"F:1db369d970"},"S:c6d0684785":{"line":1,"name":"MESSAGES","path_id":"F:b25dcdad19"},"S:c732826ee5":{"line":41,"name":"buildImportGraph","path_id":"F:015261eab0"},"S:c73cab5b60":{"line":42,"name":"ids","path_id":"F:cc65dd1342"},"S:c79db45132":{"line":11,"name":"helpers","path_id":"F:ae46bbab81"},"S:c7db2cc29d":{"line":3,"name":"InventoryService","path_id":"F:bd02b28f17"},"S:c7ebadadb9":{"line":19,"name":"Checking","path_id":"F:f9c98a8642"},"S:c7ef137e46":{"line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133"},"S:c80f0936ea":{"line":4,"name":"Budget","path_id":"F:a0abaf6a25"},"S:c850118bb2":{"line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94"},"S:c8ee4f2e2e":{"line":40,"name":"makePollutedRepo","path_id":"F:44a5987438"},"S:c928d805b5":{"line":8,"name":"ButtonProps","path_id":"F:8b122c449e"},"S:c932c7339f":{"line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249"},"S:c9785dab7b":{"line":6,"name":"scenario","path_id":"F:d744931e6a"},"S:ca3e7d6f59":{"line":72,"name":"redosFindings","path_id":"F:e7380d1444"},"S:cab56da046":{"line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820"},"S:cab6ecab70":{"line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0"},"S:cb1a5f81e0":{"line":78,"name":"reachableFrom","path_id":"F:f51cba9beb"},"S:cb3211f3c2":{"line":33,"name":"checkLicenses","path_id":"F:cc361bd05a"},"S:cb81b7e05c":{"line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820"},"S:cb8cdfa49f":{"line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9"},"S:cb97c7b3fc":{"line":27,"name":"mark","path_id":"F:9344d335a6"},"S:cbbe6a270b":{"line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e"},"S:cbe5a2e179":{"line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1"},"S:cd1b84d7ff":{"line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021"},"S:cd2e7eba8f":{"line":61,"name":"gitCommitAt","path_id":"F:0391f3b249"},"S:cd836c2fc7":{"line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4"},"S:cdac115f81":{"line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602"},"S:cde4a28e06":{"line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9"},"S:ce2faa5c80":{"line":18,"name":"loadConfig","path_id":"F:d480e40c97"},"S:ce5e964e25":{"line":4,"name":"ArmingMode","path_id":"F:e5e519f441"},"S:cec6405a03":{"line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b"},"S:cecb0a4a33":{"line":248,"name":"main","path_id":"F:128b647d9a"},"S:cefb8c3f64":{"line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5"},"S:cf03857559":{"line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602"},"S:cf3414acc5":{"line":10,"name":"TEST_FILE","path_id":"F:9a72895a04"},"S:cf413b97c8":{"line":113,"name":"write","path_id":"F:780c791407"},"S:cf88d1486b":{"line":16,"name":"run","path_id":"F:5956278014"},"S:cf9af1e29c":{"line":112,"name":"gatesFromVerify","path_id":"F:4db1101024"},"S:cf9f3a025e":{"line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c"},"S:cfdd1d8a7f":{"line":40,"name":"NumberField","path_id":"F:db651caf76"},"S:cfe87f9141":{"line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227"},"S:d029f96a64":{"line":27,"name":"flagValue","path_id":"F:c72e6949b9"},"S:d0478605fa":{"line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04"},"S:d0587dc399":{"line":1,"name":"MESSAGES","path_id":"F:b2efd505ef"},"S:d0c2835a28":{"line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927"},"S:d15b7063e3":{"line":76,"name":"roleCrons","path_id":"F:aea3c05bca"},"S:d1b03afffb":{"line":41,"name":"deriveRepoName","path_id":"F:128b647d9a"},"S:d22e005d52":{"line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5"},"S:d240732a9d":{"line":18,"name":"sampleAction","path_id":"F:195e9217ca"},"S:d25b3fbe33":{"line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c"},"S:d293a69125":{"line":49,"name":"LearningCard","path_id":"F:1d03291691"},"S:d2a299acb3":{"line":266,"name":"diffCmd","path_id":"F:780c791407"},"S:d2ef86c19f":{"line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461"},"S:d31fd4dafa":{"line":4,"name":"MESSAGES","path_id":"F:aa27d254da"},"S:d33c2c4d3e":{"line":534,"name":"runRoles","path_id":"F:ddeb486c49"},"S:d3f17c584a":{"line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86"},"S:d412af5fd3":{"line":1,"name":"MESSAGES","path_id":"F:9803feef4a"},"S:d4349c402c":{"line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba"},"S:d439b00c59":{"line":73,"name":"writeRunLog","path_id":"F:522efae76d"},"S:d444b209b8":{"line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0"},"S:d47456131b":{"line":40,"name":"getChangedFiles","path_id":"F:9427d264e6"},"S:d49b633132":{"line":67,"name":"isValidUrl","path_id":"F:4ebf08705b"},"S:d4e650f5ae":{"line":110,"name":"walkRepo","path_id":"F:cb66095cb4"},"S:d4ed2d5fe7":{"line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024"},"S:d4fd7f4ad3":{"line":12,"name":"Pair","path_id":"F:7008a20b1c"},"S:d56c1854d7":{"line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5"},"S:d5719588cb":{"line":48,"name":"llmsText","path_id":"F:a0d489df6d"},"S:d595535449":{"line":9,"name":"names","path_id":"F:2a74ae3f05"},"S:d5a9bb4227":{"line":47,"name":"capDiff","path_id":"F:2d6ef08990"},"S:d6cf821403":{"line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0"},"S:d7029fdff9":{"line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2"},"S:d7086f2a5b":{"line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e"},"S:d732af6be5":{"line":2,"name":"ClassValue","path_id":"F:7c8d518693"},"S:d737cd7277":{"line":52,"name":"flagValue","path_id":"F:1e5ef6ba70"},"S:d75c32ea9c":{"line":11,"name":"add","path_id":"F:90f0999521"},"S:d761c7660a":{"line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed"},"S:d7a4f68100":{"line":52,"name":"containedCwd","path_id":"F:aa77f227a6"},"S:d7d594dd8d":{"line":15,"name":"multiply","path_id":"F:90f0999521"},"S:d8edda2d76":{"line":12,"name":"makeMinimalRepo","path_id":"F:564b053598"},"S:d92119a484":{"line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2"},"S:d9c2336e09":{"line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff"},"S:d9eda62ca5":{"line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c"},"S:da2f845458":{"line":57,"name":"splitByTabs","path_id":"F:1a19f02364"},"S:da40a0864b":{"line":33,"name":"assertSameSet","path_id":"F:5eff4122c0"},"S:daac1f172a":{"line":12,"name":"cli","path_id":"F:40e4f39b59"},"S:dab0af7046":{"line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0"},"S:dab833b9a8":{"line":25,"name":"RiskTier","path_id":"F:c64c042051"},"S:db0bb71f37":{"line":41,"name":"clampSeverity","path_id":"F:05bffc70e9"},"S:db7c5c1950":{"line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff"},"S:dbf47f93d3":{"line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1"},"S:dc4ac94e5b":{"line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed"},"S:dcc6653dc4":{"line":114,"name":"staticPatternSources","path_id":"F:e7380d1444"},"S:dce77ef3c3":{"line":42,"name":"safetyErrors","path_id":"F:d480e40c97"},"S:dd05df51d3":{"line":26,"name":"Promoted","path_id":"F:250c8a0d4a"},"S:dd1940719c":{"line":46,"name":"parseArgs","path_id":"F:edb11415f0"},"S:dd37641bec":{"line":27,"name":"Spend","path_id":"F:e5e519f441"},"S:dd3b976184":{"line":380,"name":"handleRequest","path_id":"F:ab5077147a"},"S:ddc69b10ca":{"line":182,"name":"readForeignPack","path_id":"F:780c791407"},"S:dddb39652d":{"line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5"},"S:ddfea151e8":{"line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7"},"S:de0b2dc0df":{"line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3"},"S:de8e4d5857":{"line":128,"name":"digestMismatch","path_id":"F:780c791407"},"S:deea6aabbd":{"line":4,"name":"cx","path_id":"F:7c8d518693"},"S:df1472b647":{"line":47,"name":"docAbove","path_id":"F:36419aa427"},"S:df1c5c3628":{"line":33,"name":"adapter","path_id":"F:c598a2d684"},"S:df5cb6eb12":{"line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d"},"S:df7a91f366":{"line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e"},"S:df7e6c1db0":{"line":4,"name":"Disabled","path_id":"F:28b7af3c53"},"S:dff1725e3b":{"line":37,"name":"Escalated","path_id":"F:f9c98a8642"},"S:e03cf612ca":{"line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5"},"S:e0832e1baa":{"line":8,"name":"withRoot","path_id":"F:ddd82fc886"},"S:e099520832":{"line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514"},"S:e09a554f44":{"line":32,"name":"templateLevers","path_id":"F:87c30bdb4c"},"S:e0b068ef78":{"line":31,"name":"TS_SRC","path_id":"F:9a72895a04"},"S:e0eb326a77":{"line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce"},"S:e0f397f4e1":{"line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c"},"S:e15045d8a4":{"line":13,"name":"dryRun","path_id":"F:778c33cdc0"},"S:e152142e8c":{"line":399,"name":"patchMessages","path_id":"F:22566cb46e"},"S:e15dbc7540":{"line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b"},"S:e173063c31":{"line":4,"name":"Queued","path_id":"F:f9c98a8642"},"S:e1813dcc71":{"line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07"},"S:e18ceff2c8":{"line":230,"name":"main","path_id":"F:92d6903b5f"},"S:e193570e9e":{"line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc"},"S:e19487a8ae":{"line":22,"name":"resolveFiles","path_id":"F:ace169adc4"},"S:e23dca26d1":{"line":45,"name":"stripFlags","path_id":"F:116adfb9f8"},"S:e25d17a09c":{"line":17,"name":"SafeDefaults","path_id":"F:3319e5c923"},"S:e2861b1099":{"line":173,"name":"rollback","path_id":"F:1e5ef6ba70"},"S:e2afc6b75b":{"line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c"},"S:e31656bc1d":{"line":33,"name":"readConfig","path_id":"F:940d5f4399"},"S:e3c36060ec":{"line":95,"name":"makeMinimalRepo","path_id":"F:48355ccf4d"},"S:e3f95000e0":{"line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157"},"S:e41c3f2d61":{"line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff"},"S:e44c445050":{"line":21,"name":"HelpHint","path_id":"F:d5b496b125"},"S:e476893b3b":{"line":190,"name":"show","path_id":"F:780c791407"},"S:e4bb79a957":{"line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c"},"S:e5772fff07":{"line":29,"name":"LocalOnly","path_id":"F:c63a71fb57"},"S:e6654c6139":{"line":59,"name":"gateOrder","path_id":"F:edb11415f0"},"S:e6c1406727":{"line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024"},"S:e6e23439bf":{"line":8,"name":"tempRepo","path_id":"F:cba8f1d03b"},"S:e7e0d4979a":{"line":5,"name":"clean","path_id":"F:ffe5c1269b"},"S:e7f49cafe1":{"line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70"},"S:e80517f20b":{"line":6,"name":"ActivationCheck","path_id":"F:14edab923f"},"S:e89c164d25":{"line":54,"name":"titleFromId","path_id":"F:89aee72994"},"S:e8b27564c5":{"line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70"},"S:e8f6de81b4":{"line":259,"name":"selfTest","path_id":"F:aea3c05bca"},"S:e95adce358":{"line":4,"name":"DryRun","path_id":"F:a0068c8817"},"S:e95e85f904":{"line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8"},"S:e96fb86528":{"line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5"},"S:e99608caf1":{"line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b"},"S:e9e4290005":{"line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1"},"S:e9fcedbe8f":{"line":7,"name":"InputProps","path_id":"F:763efdd51c"},"S:ea113218d1":{"line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133"},"S:ea1469d710":{"line":70,"name":"validateConfig","path_id":"F:d480e40c97"},"S:ea5d04ea13":{"line":48,"name":"Armed","path_id":"F:2207a6ebce"},"S:ea76c925e2":{"line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c"},"S:ea841eb82d":{"line":49,"name":"diffConfig","path_id":"F:25e649633c"},"S:eaba90daa0":{"line":101,"name":"exists","path_id":"F:7232ada2da"},"S:eb4b11fdf2":{"line":25,"name":"Drawer","path_id":"F:71f0bfb455"},"S:eb51a5641a":{"line":7,"name":"makePacket","path_id":"F:ba97282cf5"},"S:eb647d4678":{"line":27,"name":"StatusPill","path_id":"F:2fc610bd94"},"S:eb67f0edae":{"line":219,"name":"getFileAt","path_id":"F:92d6903b5f"},"S:ebb9dad93b":{"line":12,"name":"tmp","path_id":"F:baf7641a01"},"S:ebd259dfef":{"line":43,"name":"planProposalReview","path_id":"F:2127a8caca"},"S:ebdb053467":{"line":17,"name":"docAbove","path_id":"F:c598a2d684"},"S:ebe2964819":{"line":198,"name":"CostVM","path_id":"F:0a85f3b8e5"},"S:ec18e42e1a":{"line":32,"name":"extractFile","path_id":"F:2554ddd30c"},"S:ec2e53ab2e":{"line":12,"name":"signature","path_id":"F:c598a2d684"},"S:ec6c0b3d73":{"line":245,"name":"RULES","path_id":"F:2f3e98ab2c"},"S:ecd0da924a":{"line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d"},"S:ed0a2f8660":{"line":28,"name":"git","path_id":"F:e9479e1a3b"},"S:ed1db0b6bb":{"line":176,"name":"reclaimStale","path_id":"F:5b113a0914"},"S:ed24428ce0":{"line":50,"name":"gitHead","path_id":"F:119e3c0fce"},"S:edacefac29":{"line":19,"name":"Sizes","path_id":"F:f6e100ab45"},"S:edb5058173":{"line":685,"name":"helpUri","path_id":"F:8a10462927"},"S:edd792ec6d":{"line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04"},"S:edeb959111":{"line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70"},"S:ee17355d71":{"line":133,"name":"updateSite","path_id":"F:8abf9e432a"},"S:ee3edffdff":{"line":25,"name":"AuditEvent","path_id":"F:76da13a8f7"},"S:ee4deb809d":{"line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da"},"S:ee5246d16c":{"line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b"},"S:ee57130d72":{"line":2,"name":"MESSAGES","path_id":"F:ccb72910b3"},"S:ee9b2c90d1":{"line":53,"name":"walk","path_id":"F:ca0833ac73"},"S:efe9cb11d4":{"line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130"},"S:efea80af4e":{"line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e"},"S:eff02f504b":{"line":689,"name":"toFindings","path_id":"F:8a10462927"},"S:f034e67219":{"line":36,"name":"normalizeLF","path_id":"F:116adfb9f8"},"S:f040dfb6c9":{"line":15,"name":"run","path_id":"F:e540f7b669"},"S:f0db7341e7":{"line":89,"name":"productState","path_id":"F:89aee72994"},"S:f12376c7b1":{"line":136,"name":"readDiff","path_id":"F:2d6ef08990"},"S:f22a53ac17":{"line":305,"name":"createWorkItem","path_id":"F:22566cb46e"},"S:f2642efdc2":{"line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8"},"S:f2e1ea8458":{"line":16,"name":"deriveMode","path_id":"F:0da05a2a05"},"S:f2e55d9b4a":{"line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed"},"S:f2f7e716af":{"line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef"},"S:f36d6a8da6":{"line":12,"name":"buildRemediationView","path_id":"F:5daab9894d"},"S:f3b8628cdb":{"line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9"},"S:f3d272846b":{"line":24,"name":"TierBadge","path_id":"F:da42f69531"},"S:f3e5c99141":{"line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5"},"S:f40a6dfd1b":{"line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff"},"S:f43dc8ad19":{"line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d"},"S:f51dd29844":{"line":145,"name":"normalizePaths","path_id":"F:4db1101024"},"S:f5a168e2ff":{"line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da"},"S:f5a71d2ca6":{"line":19,"name":"runScript","path_id":"F:bbb6476d71"},"S:f613554429":{"line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a"},"S:f6264503e8":{"line":1,"name":"MESSAGES","path_id":"F:a104667369"},"S:f650b22681":{"line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2"},"S:f71a25079c":{"line":549,"name":"main","path_id":"F:ddeb486c49"},"S:f794e6adf4":{"line":6,"name":"typeOf","path_id":"F:34cb2b6c48"},"S:f8004b7b76":{"line":475,"name":"invokeRole","path_id":"F:ddeb486c49"},"S:f80ff247d7":{"line":1,"name":"MESSAGES","path_id":"F:c6bd51a324"},"S:f8524caefc":{"line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9"},"S:f88498de73":{"line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407"},"S:f88ca29ea3":{"line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c"},"S:f93b3b8c7c":{"line":95,"name":"buildEvidence","path_id":"F:2e327963ed"},"S:f988f356bd":{"line":4,"name":"Variants","path_id":"F:f6e100ab45"},"S:f99cb9f35c":{"line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307"},"S:f99d630708":{"line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa"},"S:f9a749a2b1":{"line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820"},"S:f9a8f3309b":{"line":25,"name":"scaffold","path_id":"F:940d5f4399"},"S:f9d6a590e4":{"line":14,"name":"docAbove","path_id":"F:ffe5c1269b"},"S:fa36ece453":{"line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91"},"S:fa6785fa4b":{"line":1,"name":"MESSAGES","path_id":"F:3f1216fc11"},"S:fa71aef711":{"line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2"},"S:fb06279d5d":{"line":48,"name":"normalizeSignals","path_id":"F:e11f907cba"},"S:fb4a6826d7":{"line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80"},"S:fb6bf396bc":{"line":61,"name":"planReview","path_id":"F:2d6ef08990"},"S:fb81ef11a3":{"line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b"},"S:fc01241f03":{"line":13,"name":"cfg","path_id":"F:1bcaaff9eb"},"S:fc28898c78":{"line":44,"name":"resolveToken","path_id":"F:cdbe769ed3"},"S:fc3bb4bc24":{"line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9"},"S:fc6086da9e":{"line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da"},"S:fc6f0e771f":{"line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94"},"S:fc7eb05498":{"line":9,"name":"ArmingMode","path_id":"F:c64c042051"},"S:fc880b17bd":{"line":56,"name":"readOrNull","path_id":"F:4db1101024"},"S:fcf3c9d4a4":{"line":39,"name":"run","path_id":"F:4fad18c892"},"S:fd230402e2":{"line":323,"name":"deconfuse","path_id":"F:8a10462927"},"S:fd2e16186e":{"line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0"},"S:fd42584b25":{"line":1,"name":"MESSAGES","path_id":"F:efa02030ca"},"S:fd58589dfa":{"line":127,"name":"makePlan","path_id":"F:580d11b514"},"S:fd822bf451":{"line":45,"name":"tryTransition","path_id":"F:d135cffeaa"},"S:fd88bace68":{"line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236"},"S:fd9d32de9a":{"line":272,"name":"releaseLease","path_id":"F:22566cb46e"},"S:fdc2a33d21":{"line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157"},"S:fdf5ba078f":{"line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c"},"S:fe07a3bcbc":{"line":13,"name":"gitRepo","path_id":"F:de5ebbf586"},"S:fe1a464205":{"line":60,"name":"applyPatch","path_id":"F:872221b1da"},"S:fe27a88258":{"line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f"},"S:fe41df17f9":{"line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49"},"S:fe9c17eefa":{"line":12,"name":"tmp","path_id":"F:d7d4e8d2a9"},"S:fea88d42b6":{"line":5,"name":"TierBadgeProps","path_id":"F:da42f69531"},"S:fedbb5f441":{"line":4,"name":"NotificationService","path_id":"F:b9d806ba4d"},"S:ff45c441d1":{"line":67,"name":"canReach","path_id":"F:37f4a5c04e"},"S:fff471613b":{"line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53"}}},"edges":[{"from":"F:015261eab0","to":"F:f51cba9beb"},{"from":"F:03f476958e","to":"F:05a0f0d5a5"},{"from":"F:03f476958e","to":"F:09ea014068"},{"from":"F:03f476958e","to":"F:0c731e3460"},{"from":"F:03f476958e","to":"F:1127892e72"},{"from":"F:03f476958e","to":"F:179564da6f"},{"from":"F:03f476958e","to":"F:1ff2bf39a4"},{"from":"F:03f476958e","to":"F:2215d0e1fc"},{"from":"F:03f476958e","to":"F:23dbdd7e76"},{"from":"F:03f476958e","to":"F:240ace7a8f"},{"from":"F:03f476958e","to":"F:2715f09f24"},{"from":"F:03f476958e","to":"F:313bcfac46"},{"from":"F:03f476958e","to":"F:33c4d744f3"},{"from":"F:03f476958e","to":"F:35d4a12b63"},{"from":"F:03f476958e","to":"F:3835919e8e"},{"from":"F:03f476958e","to":"F:3f1216fc11"},{"from":"F:03f476958e","to":"F:40d8f235fd"},{"from":"F:03f476958e","to":"F:4d08d5472f"},{"from":"F:03f476958e","to":"F:597cc7ae15"},{"from":"F:03f476958e","to":"F:59b2499e4e"},{"from":"F:03f476958e","to":"F:5b5b4ddcae"},{"from":"F:03f476958e","to":"F:5d02ea0b02"},{"from":"F:03f476958e","to":"F:5d52d97b8a"},{"from":"F:03f476958e","to":"F:6a86908a3e"},{"from":"F:03f476958e","to":"F:86fd2cf669"},{"from":"F:03f476958e","to":"F:91e24dcac0"},{"from":"F:03f476958e","to":"F:9616513cb6"},{"from":"F:03f476958e","to":"F:964f89b6cc"},{"from":"F:03f476958e","to":"F:973aca5f3e"},{"from":"F:03f476958e","to":"F:9803feef4a"},{"from":"F:03f476958e","to":"F:99251bc045"},{"from":"F:03f476958e","to":"F:9a32917e56"},{"from":"F:03f476958e","to":"F:9b01a5cd4d"},{"from":"F:03f476958e","to":"F:9dbf431d3e"},{"from":"F:03f476958e","to":"F:a104667369"},{"from":"F:03f476958e","to":"F:a5822fdd03"},{"from":"F:03f476958e","to":"F:a8c32b8f15"},{"from":"F:03f476958e","to":"F:aa27d254da"},{"from":"F:03f476958e","to":"F:acc3f6b466"},{"from":"F:03f476958e","to":"F:b25dcdad19"},{"from":"F:03f476958e","to":"F:b2efd505ef"},{"from":"F:03f476958e","to":"F:b4f4e16ca1"},{"from":"F:03f476958e","to":"F:b502a0fe75"},{"from":"F:03f476958e","to":"F:bf4e255c6e"},{"from":"F:03f476958e","to":"F:c6bd51a324"},{"from":"F:03f476958e","to":"F:ccb72910b3"},{"from":"F:03f476958e","to":"F:d288a78085"},{"from":"F:03f476958e","to":"F:d328f97d94"},{"from":"F:03f476958e","to":"F:d8e37c4449"},{"from":"F:03f476958e","to":"F:da9133a29d"},{"from":"F:03f476958e","to":"F:dd58ae3791"},{"from":"F:03f476958e","to":"F:de188c1b79"},{"from":"F:03f476958e","to":"F:e2025a4e0c"},{"from":"F:03f476958e","to":"F:e6677dcd37"},{"from":"F:03f476958e","to":"F:e948251d2b"},{"from":"F:03f476958e","to":"F:e9f1cc1e5d"},{"from":"F:03f476958e","to":"F:ec3aa9930a"},{"from":"F:03f476958e","to":"F:efa02030ca"},{"from":"F:03f476958e","to":"F:f41378fed0"},{"from":"F:044b762a79","to":"F:1ecd18c4b9"},{"from":"F:059f9a812c","to":"F:cc361bd05a"},{"from":"F:05bffc70e9","to":"F:03f476958e"},{"from":"F:05bffc70e9","to":"F:1575110130"},{"from":"F:05bffc70e9","to":"F:34cb2b6c48"},{"from":"F:06b982f5a2","to":"F:ddeb486c49"},{"from":"F:06b982f5a2","to":"F:fd660a117b"},{"from":"F:08064e0c53","to":"F:2fc610bd94"},{"from":"F:08064e0c53","to":"F:71f0bfb455"},{"from":"F:08064e0c53","to":"F:b5ae6ee133"},{"from":"F:08064e0c53","to":"F:c64c042051"},{"from":"F:08064e0c53","to":"F:da42f69531"},{"from":"F:08064e0c53","to":"F:f942e88a8f"},{"from":"F:08441e59e8","to":"F:65193a9799"},{"from":"F:08b7435c86","to":"F:22566cb46e"},{"from":"F:08b7435c86","to":"F:8a3dd6ccff"},{"from":"F:08b7435c86","to":"F:fd4b8473fa"},{"from":"F:093689bb8e","to":"F:ddeb486c49"},{"from":"F:093689bb8e","to":"F:fd660a117b"},{"from":"F:09ba331878","to":"F:05bffc70e9"},{"from":"F:09ba331878","to":"F:4ebb5aa8a0"},{"from":"F:09ba331878","to":"F:ff2c4a08a4"},{"from":"F:0a1a9270a7","to":"F:583edef643"},{"from":"F:0c1c5ad5d9","to":"F:05bffc70e9"},{"from":"F:0c1c5ad5d9","to":"F:0cacf66a3b"},{"from":"F:0c1c5ad5d9","to":"F:245efb551c"},{"from":"F:0c1c5ad5d9","to":"F:65193a9799"},{"from":"F:0cc3e727ed","to":"F:763efdd51c"},{"from":"F:0e9e38f100","to":"F:ab334f34df"},{"from":"F:113387361d","to":"F:0a85f3b8e5"},{"from":"F:113387361d","to":"F:304fa8ef33"},{"from":"F:113387361d","to":"F:3c479cac6e"},{"from":"F:113387361d","to":"F:4ebf08705b"},{"from":"F:113387361d","to":"F:6627655633"},{"from":"F:113387361d","to":"F:757a70680a"},{"from":"F:113387361d","to":"F:95d4304133"},{"from":"F:113387361d","to":"F:9b3f18856e"},{"from":"F:113387361d","to":"F:e40ce1af48"},{"from":"F:114d351bdc","to":"F:1575110130"},{"from":"F:114d351bdc","to":"F:34cb2b6c48"},{"from":"F:114d351bdc","to":"F:932d33be00"},{"from":"F:114d351bdc","to":"F:9d69a6b766"},{"from":"F:116adfb9f8","to":"F:05bffc70e9"},{"from":"F:116adfb9f8","to":"F:2d93cea2d4"},{"from":"F:116adfb9f8","to":"F:2f3e98ab2c"},{"from":"F:12c7a4e461","to":"F:245efb551c"},{"from":"F:146a198c06","to":"F:d20e4b6b91"},{"from":"F:14edab923f","to":"F:7c8d518693"},{"from":"F:14edab923f","to":"F:8b122c449e"},{"from":"F:14edab923f","to":"F:c64c042051"},{"from":"F:14edab923f","to":"F:deab644e60"},{"from":"F:168fe4d371","to":"F:09ba331878"},{"from":"F:1714946cc1","to":"F:05bffc70e9"},{"from":"F:1714946cc1","to":"F:1a19f02364"},{"from":"F:1716017e02","to":"F:90fc20ddd8"},{"from":"F:182dcaa949","to":"F:956332d4b5"},{"from":"F:18f569225a","to":"F:ddeb486c49"},{"from":"F:18f569225a","to":"F:eb14a0bdeb"},{"from":"F:1a137480ae","to":"F:7c8d518693"},{"from":"F:1a137480ae","to":"F:deab644e60"},{"from":"F:1bc04b108f","to":"F:e7380d1444"},{"from":"F:1bcaaff9eb","to":"F:932d33be00"},{"from":"F:1bcaaff9eb","to":"F:ddeb486c49"},{"from":"F:1bcaaff9eb","to":"F:fd660a117b"},{"from":"F:1c1d4f7335","to":"F:819f72edf6"},{"from":"F:1d03291691","to":"F:2fc610bd94"},{"from":"F:1d03291691","to":"F:40eb542a82"},{"from":"F:1d03291691","to":"F:8b122c449e"},{"from":"F:1db369d970","to":"F:7c8d518693"},{"from":"F:1db369d970","to":"F:deab644e60"},{"from":"F:1e15c1666f","to":"F:4dabd020df"},{"from":"F:1e15c1666f","to":"F:cdbe769ed3"},{"from":"F:1e5ef6ba70","to":"F:05bffc70e9"},{"from":"F:1e5ef6ba70","to":"F:4a7eaceb5c"},{"from":"F:1e5ef6ba70","to":"F:8ffb11f281"},{"from":"F:1e5ef6ba70","to":"F:932d33be00"},{"from":"F:1e5ef6ba70","to":"F:ff2c4a08a4"},{"from":"F:2127a8caca","to":"F:304ce7b89d"},{"from":"F:2127a8caca","to":"F:8d2cb93236"},{"from":"F:2127a8caca","to":"F:932d33be00"},{"from":"F:214cc0a5f4","to":"F:7c8d518693"},{"from":"F:214cc0a5f4","to":"F:d5b496b125"},{"from":"F:22566cb46e","to":"F:05bffc70e9"},{"from":"F:22566cb46e","to":"F:1575110130"},{"from":"F:22566cb46e","to":"F:54df44aadd"},{"from":"F:22566cb46e","to":"F:cb3c5f7715"},{"from":"F:22566cb46e","to":"F:d480e40c97"},{"from":"F:22fab804b1","to":"F:94050e680d"},{"from":"F:23917c6197","to":"F:05bffc70e9"},{"from":"F:2554ddd30c","to":"F:3213d03b72"},{"from":"F:2554ddd30c","to":"F:36419aa427"},{"from":"F:2554ddd30c","to":"F:594f505f11"},{"from":"F:2554ddd30c","to":"F:c598a2d684"},{"from":"F:2554ddd30c","to":"F:ffe5c1269b"},{"from":"F:25e649633c","to":"F:0a85f3b8e5"},{"from":"F:268769c4a6","to":"F:7c8d518693"},{"from":"F:268769c4a6","to":"F:deab644e60"},{"from":"F:2a74ae3f05","to":"F:2554ddd30c"},{"from":"F:2a74ae3f05","to":"F:cecdb96382"},{"from":"F:2af556d595","to":"F:05bffc70e9"},{"from":"F:2af556d595","to":"F:1575110130"},{"from":"F:2b9c43b0ca","to":"F:245efb551c"},{"from":"F:2d4c555ba1","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:1a19f02364"},{"from":"F:2d6ef08990","to":"F:304ce7b89d"},{"from":"F:2d6ef08990","to":"F:8d2cb93236"},{"from":"F:2d6ef08990","to":"F:932d33be00"},{"from":"F:2f3e98ab2c","to":"F:68c4da7fe8"},{"from":"F:2f6c42c5ee","to":"F:deab644e60"},{"from":"F:2fc610bd94","to":"F:7c8d518693"},{"from":"F:2fc610bd94","to":"F:deab644e60"},{"from":"F:304ce7b89d","to":"F:8b5a1f94c4"},{"from":"F:304fa8ef33","to":"F:0a85f3b8e5"},{"from":"F:304fa8ef33","to":"F:3c479cac6e"},{"from":"F:304fa8ef33","to":"F:e406ceab72"},{"from":"F:31d378932b","to":"F:05bffc70e9"},{"from":"F:31d378932b","to":"F:4ebb5aa8a0"},{"from":"F:35c6d59157","to":"F:7c8d518693"},{"from":"F:35c6d59157","to":"F:deab644e60"},{"from":"F:373a946d5c","to":"F:ff3aef693f"},{"from":"F:373fee03a1","to":"F:08064e0c53"},{"from":"F:37f4a5c04e","to":"F:05bffc70e9"},{"from":"F:398655650f","to":"F:1575110130"},{"from":"F:398655650f","to":"F:304ce7b89d"},{"from":"F:398655650f","to":"F:932d33be00"},{"from":"F:3a2345f153","to":"F:b014028f57"},{"from":"F:3c53926ecd","to":"F:599f5b2f28"},{"from":"F:3d95ec2ed5","to":"F:68c4da7fe8"},{"from":"F:3dd926c4de","to":"F:f8609bae0b"},{"from":"F:3de9042953","to":"F:0c1c5ad5d9"},{"from":"F:3de9042953","to":"F:12c7a4e461"},{"from":"F:3de9042953","to":"F:245efb551c"},{"from":"F:3de9042953","to":"F:7b3e38c9a6"},{"from":"F:3fe6b95e07","to":"F:66264a042c"},{"from":"F:4096620673","to":"F:05bffc70e9"},{"from":"F:4096620673","to":"F:1575110130"},{"from":"F:4096620673","to":"F:34cb2b6c48"},{"from":"F:40eb542a82","to":"F:7c8d518693"},{"from":"F:40eb542a82","to":"F:d5b496b125"},{"from":"F:4377343f4f","to":"F:ddeb486c49"},{"from":"F:44a5987438","to":"F:4a7eaceb5c"},{"from":"F:4637e1fecb","to":"F:119e3c0fce"},{"from":"F:4637e1fecb","to":"F:245efb551c"},{"from":"F:4637e1fecb","to":"F:dbb9c92ca1"},{"from":"F:46c40327ad","to":"F:40eb542a82"},{"from":"F:4749cc43a0","to":"F:05bffc70e9"},{"from":"F:48355ccf4d","to":"F:34cb2b6c48"},{"from":"F:4a7eaceb5c","to":"F:6e0bd62fa3"},{"from":"F:4a7eaceb5c","to":"F:e4ff19bbe2"},{"from":"F:4b7eb18a4b","to":"F:da42f69531"},{"from":"F:4b91a9f65b","to":"F:68c4da7fe8"},{"from":"F:4c741a5b06","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:245efb551c"},{"from":"F:4db1101024","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:98529ba7ea"},{"from":"F:4ebb5aa8a0","to":"F:05bffc70e9"},{"from":"F:4ebf08705b","to":"F:0a85f3b8e5"},{"from":"F:4ebf08705b","to":"F:25e649633c"},{"from":"F:4ebf08705b","to":"F:3c479cac6e"},{"from":"F:4ebf08705b","to":"F:e406ceab72"},{"from":"F:4ebf08705b","to":"F:ec52ca3820"},{"from":"F:4fd28fc2ff","to":"F:05bffc70e9"},{"from":"F:4fd28fc2ff","to":"F:1575110130"},{"from":"F:500dd805f6","to":"F:35c6d59157"},{"from":"F:52338ea290","to":"F:eb14a0bdeb"},{"from":"F:52caf3b287","to":"F:54c6928de9"},{"from":"F:52ef6ad4a1","to":"F:4ebb5aa8a0"},{"from":"F:57ca5f1716","to":"F:2fc610bd94"},{"from":"F:57ca5f1716","to":"F:d5b496b125"},{"from":"F:580d11b514","to":"F:872221b1da"},{"from":"F:580d11b514","to":"F:ddeb486c49"},{"from":"F:580d11b514","to":"F:eb14a0bdeb"},{"from":"F:583edef643","to":"F:2fc610bd94"},{"from":"F:583edef643","to":"F:40eb542a82"},{"from":"F:583edef643","to":"F:8b122c449e"},{"from":"F:596687118c","to":"F:63351e350b"},{"from":"F:5994385869","to":"F:f07f8ebca9"},{"from":"F:5b113a0914","to":"F:05bffc70e9"},{"from":"F:5b113a0914","to":"F:34cb2b6c48"},{"from":"F:5daab9894d","to":"F:8ffb11f281"},{"from":"F:5e450ff82c","to":"F:a7ce0f6452"},{"from":"F:5f7910375b","to":"F:05bffc70e9"},{"from":"F:5f7910375b","to":"F:1575110130"},{"from":"F:5f7910375b","to":"F:f07f8ebca9"},{"from":"F:5f88bf32ca","to":"F:1d03291691"},{"from":"F:60548316f5","to":"F:f90930c3c3"},{"from":"F:61296e720c","to":"F:05bffc70e9"},{"from":"F:61296e720c","to":"F:6e0bd62fa3"},{"from":"F:61296e720c","to":"F:e4ff19bbe2"},{"from":"F:63351e350b","to":"F:7c8d518693"},{"from":"F:63351e350b","to":"F:a8cfe45d27"},{"from":"F:63c1c23ccb","to":"F:63351e350b"},{"from":"F:63c1c23ccb","to":"F:8b122c449e"},{"from":"F:65193a9799","to":"F:05bffc70e9"},{"from":"F:65193a9799","to":"F:34cb2b6c48"},{"from":"F:65193a9799","to":"F:68c4da7fe8"},{"from":"F:66264a042c","to":"F:7c8d518693"},{"from":"F:66264a042c","to":"F:deab644e60"},{"from":"F:6627655633","to":"F:0a85f3b8e5"},{"from":"F:6627655633","to":"F:f83d1100e9"},{"from":"F:667ef091ca","to":"F:14edab923f"},{"from":"F:686a544e0e","to":"F:2d6ef08990"},{"from":"F:698ea4b2e9","to":"F:ddeb486c49"},{"from":"F:6bfa4389b5","to":"F:2fc610bd94"},{"from":"F:6f247eb514","to":"F:1a19f02364"},{"from":"F:6f247eb514","to":"F:ae46bbab81"},{"from":"F:6f247eb514","to":"F:e11f907cba"},{"from":"F:7054844360","to":"F:7c8d518693"},{"from":"F:7054844360","to":"F:d5b496b125"},{"from":"F:7054844360","to":"F:deab644e60"},{"from":"F:70d12a92c6","to":"F:7a1f7d680b"},{"from":"F:71f0bfb455","to":"F:a8cfe45d27"},{"from":"F:7232ada2da","to":"F:05bffc70e9"},{"from":"F:757a70680a","to":"F:0a85f3b8e5"},{"from":"F:757a70680a","to":"F:3c479cac6e"},{"from":"F:757a70680a","to":"F:e406ceab72"},{"from":"F:758ab56395","to":"F:5a3543606b"},{"from":"F:758ab56395","to":"F:e8676a18b7"},{"from":"F:763efdd51c","to":"F:7c8d518693"},{"from":"F:763efdd51c","to":"F:d5b496b125"},{"from":"F:763efdd51c","to":"F:deab644e60"},{"from":"F:76da13a8f7","to":"F:86838d35ac"},{"from":"F:76da13a8f7","to":"F:deab644e60"},{"from":"F:780c791407","to":"F:05bffc70e9"},{"from":"F:780c791407","to":"F:1575110130"},{"from":"F:780c791407","to":"F:245efb551c"},{"from":"F:780c791407","to":"F:2d93cea2d4"},{"from":"F:780c791407","to":"F:34cb2b6c48"},{"from":"F:780c791407","to":"F:4db1101024"},{"from":"F:7a1f7d680b","to":"F:7c8d518693"},{"from":"F:7a1f7d680b","to":"F:c64c042051"},{"from":"F:7a1f7d680b","to":"F:deab644e60"},{"from":"F:7b3e38c9a6","to":"F:05bffc70e9"},{"from":"F:7b3e38c9a6","to":"F:245efb551c"},{"from":"F:7d236c9aa6","to":"F:0a85f3b8e5"},{"from":"F:815abebda1","to":"F:63c1c23ccb"},{"from":"F:819f72edf6","to":"F:7c8d518693"},{"from":"F:819f72edf6","to":"F:d5b496b125"},{"from":"F:819f72edf6","to":"F:deab644e60"},{"from":"F:81c495717c","to":"F:7c8d518693"},{"from":"F:81c495717c","to":"F:d5b496b125"},{"from":"F:828cf970bc","to":"F:304ce7b89d"},{"from":"F:849bc0a60f","to":"F:a402d2f9ed"},{"from":"F:85e076f56b","to":"F:deab644e60"},{"from":"F:868321590c","to":"F:05bffc70e9"},{"from":"F:868321590c","to":"F:1575110130"},{"from":"F:868321590c","to":"F:f07f8ebca9"},{"from":"F:87c30bdb4c","to":"F:05bffc70e9"},{"from":"F:87c30bdb4c","to":"F:1575110130"},{"from":"F:87c30bdb4c","to":"F:9d69a6b766"},{"from":"F:885187507a","to":"F:113387361d"},{"from":"F:885187507a","to":"F:4a6129eacb"},{"from":"F:89aee72994","to":"F:0a85f3b8e5"},{"from":"F:89f25e2f3d","to":"F:1db369d970"},{"from":"F:8a10462927","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:54df44aadd"},{"from":"F:8a3dd6ccff","to":"F:5daab9894d"},{"from":"F:8a9aff1529","to":"F:7c8d518693"},{"from":"F:8aa9ba4dcb","to":"F:d135cffeaa"},{"from":"F:8abf9e432a","to":"F:05bffc70e9"},{"from":"F:8b122c449e","to":"F:7c8d518693"},{"from":"F:8b122c449e","to":"F:deab644e60"},{"from":"F:8b2f3dbcba","to":"F:1575110130"},{"from":"F:8b2f3dbcba","to":"F:22566cb46e"},{"from":"F:8b2f3dbcba","to":"F:304ce7b89d"},{"from":"F:8b2f3dbcba","to":"F:d480e40c97"},{"from":"F:8b2f3dbcba","to":"F:ddeb486c49"},{"from":"F:8b7ee49cdd","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:f51cba9beb"},{"from":"F:8bb1b57470","to":"F:1ecd18c4b9"},{"from":"F:8bb1b57470","to":"F:54c6928de9"},{"from":"F:8bb1b57470","to":"F:599f5b2f28"},{"from":"F:8bb1b57470","to":"F:b9d806ba4d"},{"from":"F:8bb1b57470","to":"F:bd02b28f17"},{"from":"F:8bb1b57470","to":"F:ff3aef693f"},{"from":"F:8c6234a8cb","to":"F:2fc610bd94"},{"from":"F:8c6234a8cb","to":"F:7c8d518693"},{"from":"F:8c6234a8cb","to":"F:86838d35ac"},{"from":"F:8c6234a8cb","to":"F:deab644e60"},{"from":"F:8d2cb93236","to":"F:05bffc70e9"},{"from":"F:8fe56e5618","to":"F:1575110130"},{"from":"F:8fe56e5618","to":"F:65193a9799"},{"from":"F:8fe56e5618","to":"F:932d33be00"},{"from":"F:8ffb11f281","to":"F:4a7eaceb5c"},{"from":"F:9040e0c030","to":"F:2f6c42c5ee"},{"from":"F:90cbb2cf6a","to":"F:34cb2b6c48"},{"from":"F:90e1fd2fd9","to":"F:05bffc70e9"},{"from":"F:90e1fd2fd9","to":"F:cdbe769ed3"},{"from":"F:90e1fd2fd9","to":"F:ff2c4a08a4"},{"from":"F:90fc20ddd8","to":"F:7c8d518693"},{"from":"F:9204ee9f08","to":"F:9f0fb6ed8b"},{"from":"F:92d6903b5f","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:d480e40c97"},{"from":"F:933d506be9","to":"F:34cb2b6c48"},{"from":"F:933d506be9","to":"F:98529ba7ea"},{"from":"F:9344d335a6","to":"F:05bffc70e9"},{"from":"F:9344d335a6","to":"F:1575110130"},{"from":"F:9344d335a6","to":"F:4ebb5aa8a0"},{"from":"F:94050e680d","to":"F:2d6ef08990"},{"from":"F:94050e680d","to":"F:304ce7b89d"},{"from":"F:94050e680d","to":"F:8d2cb93236"},{"from":"F:94050e680d","to":"F:932d33be00"},{"from":"F:9427d264e6","to":"F:05bffc70e9"},{"from":"F:94c9bc6065","to":"F:34cb2b6c48"},{"from":"F:956332d4b5","to":"F:2fc610bd94"},{"from":"F:956332d4b5","to":"F:86838d35ac"},{"from":"F:956332d4b5","to":"F:8b122c449e"},{"from":"F:956332d4b5","to":"F:a402d2f9ed"},{"from":"F:956332d4b5","to":"F:f942e88a8f"},{"from":"F:95d4304133","to":"F:0a85f3b8e5"},{"from":"F:95d4304133","to":"F:0da05a2a05"},{"from":"F:95d4304133","to":"F:7d236c9aa6"},{"from":"F:95d4304133","to":"F:89aee72994"},{"from":"F:95d4304133","to":"F:ec52ca3820"},{"from":"F:9b3f18856e","to":"F:0a85f3b8e5"},{"from":"F:9b3f18856e","to":"F:3c479cac6e"},{"from":"F:9b3f18856e","to":"F:e406ceab72"},{"from":"F:9bb94e1b40","to":"F:90e1fd2fd9"},{"from":"F:9d69a6b766","to":"F:05bffc70e9"},{"from":"F:9d69a6b766","to":"F:1575110130"},{"from":"F:9dc816763b","to":"F:b16afebae9"},{"from":"F:9deac13db0","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:d5b496b125"},{"from":"F:9f0fb6ed8b","to":"F:deab644e60"},{"from":"F:9f36b3ef29","to":"F:34cb2b6c48"},{"from":"F:a0d489df6d","to":"F:119e3c0fce"},{"from":"F:a0d489df6d","to":"F:1575110130"},{"from":"F:a0d489df6d","to":"F:245efb551c"},{"from":"F:a0d489df6d","to":"F:2554ddd30c"},{"from":"F:a0d489df6d","to":"F:2b9c43b0ca"},{"from":"F:a0d489df6d","to":"F:cb66095cb4"},{"from":"F:a0d489df6d","to":"F:cecdb96382"},{"from":"F:a0d489df6d","to":"F:dbb9c92ca1"},{"from":"F:a402d2f9ed","to":"F:7c8d518693"},{"from":"F:a42da90970","to":"F:b3a2ad52bb"},{"from":"F:a52954a167","to":"F:08b7435c86"},{"from":"F:a862b1c3b6","to":"F:1a137480ae"},{"from":"F:a8cfe45d27","to":"F:7c8d518693"},{"from":"F:a8cfe45d27","to":"F:deab644e60"},{"from":"F:aa77f227a6","to":"F:05bffc70e9"},{"from":"F:ab334f34df","to":"F:7c8d518693"},{"from":"F:ab334f34df","to":"F:deab644e60"},{"from":"F:ac11b5379f","to":"F:05bffc70e9"},{"from":"F:ac11b5379f","to":"F:4ebb5aa8a0"},{"from":"F:ace169adc4","to":"F:05bffc70e9"},{"from":"F:ace169adc4","to":"F:68c4da7fe8"},{"from":"F:add7add561","to":"F:0a1a9270a7"},{"from":"F:add7add561","to":"F:0cc3e727ed"},{"from":"F:add7add561","to":"F:0e9e38f100"},{"from":"F:add7add561","to":"F:146a198c06"},{"from":"F:add7add561","to":"F:1716017e02"},{"from":"F:add7add561","to":"F:182dcaa949"},{"from":"F:add7add561","to":"F:1c1d4f7335"},{"from":"F:add7add561","to":"F:373fee03a1"},{"from":"F:add7add561","to":"F:3dd926c4de"},{"from":"F:add7add561","to":"F:3fe6b95e07"},{"from":"F:add7add561","to":"F:46c40327ad"},{"from":"F:add7add561","to":"F:4b7eb18a4b"},{"from":"F:add7add561","to":"F:500dd805f6"},{"from":"F:add7add561","to":"F:596687118c"},{"from":"F:add7add561","to":"F:5f88bf32ca"},{"from":"F:add7add561","to":"F:667ef091ca"},{"from":"F:add7add561","to":"F:6bfa4389b5"},{"from":"F:add7add561","to":"F:70d12a92c6"},{"from":"F:add7add561","to":"F:7c8d518693"},{"from":"F:add7add561","to":"F:815abebda1"},{"from":"F:add7add561","to":"F:849bc0a60f"},{"from":"F:add7add561","to":"F:85e076f56b"},{"from":"F:add7add561","to":"F:86838d35ac"},{"from":"F:add7add561","to":"F:89f25e2f3d"},{"from":"F:add7add561","to":"F:9040e0c030"},{"from":"F:add7add561","to":"F:9204ee9f08"},{"from":"F:add7add561","to":"F:a42da90970"},{"from":"F:add7add561","to":"F:a862b1c3b6"},{"from":"F:add7add561","to":"F:b39c90fbe6"},{"from":"F:add7add561","to":"F:b51ccbe79a"},{"from":"F:add7add561","to":"F:b677f38b10"},{"from":"F:add7add561","to":"F:bb2d98fca6"},{"from":"F:add7add561","to":"F:c14dd92bce"},{"from":"F:add7add561","to":"F:c2ff3fda15"},{"from":"F:add7add561","to":"F:c412f056b4"},{"from":"F:add7add561","to":"F:c5da07872e"},{"from":"F:add7add561","to":"F:c64c042051"},{"from":"F:add7add561","to":"F:d01156348d"},{"from":"F:add7add561","to":"F:d05701e1ab"},{"from":"F:add7add561","to":"F:d0d703a4e0"},{"from":"F:add7add561","to":"F:de988f64d4"},{"from":"F:add7add561","to":"F:ea9e0801d5"},{"from":"F:add7add561","to":"F:f00c212d41"},{"from":"F:add7add561","to":"F:f13b76e6fd"},{"from":"F:add7add561","to":"F:f57cf1a212"},{"from":"F:add7add561","to":"F:f6abfc128a"},{"from":"F:add7add561","to":"F:fb5935daaf"},{"from":"F:add7add561","to":"F:fc43ea4859"},{"from":"F:aea3c05bca","to":"F:932d33be00"},{"from":"F:aea3c05bca","to":"F:f51cba9beb"},{"from":"F:aecebb26be","to":"F:5daab9894d"},{"from":"F:b1598d4449","to":"F:119e3c0fce"},{"from":"F:b1598d4449","to":"F:cb66095cb4"},{"from":"F:b1598d4449","to":"F:dbb9c92ca1"},{"from":"F:b16afebae9","to":"F:34cb2b6c48"},{"from":"F:b28f13b600","to":"F:65193a9799"},{"from":"F:b28f13b600","to":"F:932d33be00"},{"from":"F:b28f13b600","to":"F:f07f8ebca9"},{"from":"F:b39c90fbe6","to":"F:9deac13db0"},{"from":"F:b3a2ad52bb","to":"F:7c8d518693"},{"from":"F:b3a2ad52bb","to":"F:deab644e60"},{"from":"F:b51ccbe79a","to":"F:b5ae6ee133"},{"from":"F:b5ae6ee133","to":"F:2fc610bd94"},{"from":"F:b5ae6ee133","to":"F:7c8d518693"},{"from":"F:b5ae6ee133","to":"F:c64c042051"},{"from":"F:b5ae6ee133","to":"F:da42f69531"},{"from":"F:b5ae6ee133","to":"F:deab644e60"},{"from":"F:b677f38b10","to":"F:7054844360"},{"from":"F:b806994000","to":"F:05bffc70e9"},{"from":"F:b806994000","to":"F:1575110130"},{"from":"F:b806994000","to":"F:2127a8caca"},{"from":"F:b806994000","to":"F:6f247eb514"},{"from":"F:b806994000","to":"F:f07f8ebca9"},{"from":"F:ba97282cf5","to":"F:65193a9799"},{"from":"F:bb0ec91260","to":"F:05bffc70e9"},{"from":"F:bb2d98fca6","to":"F:f942e88a8f"},{"from":"F:bbb6476d71","to":"F:4ebb5aa8a0"},{"from":"F:bbb6476d71","to":"F:f07f8ebca9"},{"from":"F:bf3dae9563","to":"F:6f247eb514"},{"from":"F:bf3dae9563","to":"F:f07f8ebca9"},{"from":"F:c14dd92bce","to":"F:8b122c449e"},{"from":"F:c1a96ec6e2","to":"F:a1baa3f01d"},{"from":"F:c2ff3fda15","to":"F:268769c4a6"},{"from":"F:c3cd2dc5c9","to":"F:1575110130"},{"from":"F:c412f056b4","to":"F:57ca5f1716"},{"from":"F:c4395c3023","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:1575110130"},{"from":"F:c5938c33fd","to":"F:98529ba7ea"},{"from":"F:c5da07872e","to":"F:c0e80ca327"},{"from":"F:c9493b5275","to":"F:05bffc70e9"},{"from":"F:c9493b5275","to":"F:4ebb5aa8a0"},{"from":"F:ca0833ac73","to":"F:05bffc70e9"},{"from":"F:ca0833ac73","to":"F:4a7eaceb5c"},{"from":"F:cb3c5f7715","to":"F:05bffc70e9"},{"from":"F:cb3c5f7715","to":"F:34cb2b6c48"},{"from":"F:cba8f1d03b","to":"F:a7ce0f6452"},{"from":"F:cc361bd05a","to":"F:05bffc70e9"},{"from":"F:cdbe769ed3","to":"F:05bffc70e9"},{"from":"F:ce1173e176","to":"F:2fc610bd94"},{"from":"F:ce1173e176","to":"F:86838d35ac"},{"from":"F:ce1173e176","to":"F:9deac13db0"},{"from":"F:ce1173e176","to":"F:a402d2f9ed"},{"from":"F:ce41983a53","to":"F:ddeb486c49"},{"from":"F:ce41983a53","to":"F:fd660a117b"},{"from":"F:d01156348d","to":"F:71f0bfb455"},{"from":"F:d05701e1ab","to":"F:8c6234a8cb"},{"from":"F:d0d703a4e0","to":"F:d5b496b125"},{"from":"F:d135cffeaa","to":"F:05bffc70e9"},{"from":"F:d1b898f17f","to":"F:b9d806ba4d"},{"from":"F:d20e4b6b91","to":"F:7c8d518693"},{"from":"F:d20e4b6b91","to":"F:a8cfe45d27"},{"from":"F:d480e40c97","to":"F:05bffc70e9"},{"from":"F:d480e40c97","to":"F:1575110130"},{"from":"F:d480e40c97","to":"F:34cb2b6c48"},{"from":"F:d5b496b125","to":"F:8a9aff1529"},{"from":"F:d5b496b125","to":"F:deab644e60"},{"from":"F:d754b827f4","to":"F:fd660a117b"},{"from":"F:d8fb8339ce","to":"F:2fc610bd94"},{"from":"F:d8fb8339ce","to":"F:7c8d518693"},{"from":"F:d8fb8339ce","to":"F:8b122c449e"},{"from":"F:d8fb8339ce","to":"F:deab644e60"},{"from":"F:da42f69531","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:d5b496b125"},{"from":"F:dbb9c92ca1","to":"F:015261eab0"},{"from":"F:dbb9c92ca1","to":"F:1575110130"},{"from":"F:dbb9c92ca1","to":"F:1cf31c4792"},{"from":"F:dbb9c92ca1","to":"F:245efb551c"},{"from":"F:dbb9c92ca1","to":"F:2554ddd30c"},{"from":"F:dbb9c92ca1","to":"F:2b9c43b0ca"},{"from":"F:dbb9c92ca1","to":"F:4b91a9f65b"},{"from":"F:dbb9c92ca1","to":"F:7944059823"},{"from":"F:dbb9c92ca1","to":"F:ae46bbab81"},{"from":"F:dbb9c92ca1","to":"F:cb66095cb4"},{"from":"F:ddd82fc886","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:304ce7b89d"},{"from":"F:ddeb486c49","to":"F:37f4a5c04e"},{"from":"F:ddeb486c49","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:5b113a0914"},{"from":"F:ddeb486c49","to":"F:851f776227"},{"from":"F:ddeb486c49","to":"F:872221b1da"},{"from":"F:ddeb486c49","to":"F:8b5a1f94c4"},{"from":"F:ddeb486c49","to":"F:8d2cb93236"},{"from":"F:ddeb486c49","to":"F:932d33be00"},{"from":"F:ddeb486c49","to":"F:aa77f227a6"},{"from":"F:ddeb486c49","to":"F:aea3c05bca"},{"from":"F:ddeb486c49","to":"F:fd660a117b"},{"from":"F:de988f64d4","to":"F:76da13a8f7"},{"from":"F:df4b55ecef","to":"F:fc21812307"},{"from":"F:e00aec45ce","to":"F:22566cb46e"},{"from":"F:e053923067","to":"F:ddeb486c49"},{"from":"F:e2f1b5ac07","to":"F:304ce7b89d"},{"from":"F:e2f1b5ac07","to":"F:932d33be00"},{"from":"F:e2f1b5ac07","to":"F:ddeb486c49"},{"from":"F:e406ceab72","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:25e649633c"},{"from":"F:e40ce1af48","to":"F:3c479cac6e"},{"from":"F:e40ce1af48","to":"F:e406ceab72"},{"from":"F:e4e18d0b80","to":"F:304ce7b89d"},{"from":"F:e4e18d0b80","to":"F:d480e40c97"},{"from":"F:e540f7b669","to":"F:4ebb5aa8a0"},{"from":"F:e7380d1444","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:4a7eaceb5c"},{"from":"F:e8676a18b7","to":"F:9a3e8ed7d2"},{"from":"F:ea9e0801d5","to":"F:db651caf76"},{"from":"F:ec52ca3820","to":"F:0a85f3b8e5"},{"from":"F:ed9c47feb2","to":"F:ddeb486c49"},{"from":"F:edb11415f0","to":"F:05bffc70e9"},{"from":"F:edb11415f0","to":"F:b014028f57"},{"from":"F:edb11415f0","to":"F:f51cba9beb"},{"from":"F:edf42fb1af","to":"F:05bffc70e9"},{"from":"F:ee02e563c6","to":"F:304ce7b89d"},{"from":"F:ee02e563c6","to":"F:8b5a1f94c4"},{"from":"F:ee02e563c6","to":"F:932d33be00"},{"from":"F:ee02e563c6","to":"F:ddeb486c49"},{"from":"F:ee21289902","to":"F:e4ff19bbe2"},{"from":"F:f00c212d41","to":"F:8a9aff1529"},{"from":"F:f07f8ebca9","to":"F:05bffc70e9"},{"from":"F:f07f8ebca9","to":"F:cb3c5f7715"},{"from":"F:f13b76e6fd","to":"F:214cc0a5f4"},{"from":"F:f57cf1a212","to":"F:ce1173e176"},{"from":"F:f5d313e9f1","to":"F:34cb2b6c48"},{"from":"F:f5d313e9f1","to":"F:aa77f227a6"},{"from":"F:f5d313e9f1","to":"F:cc361bd05a"},{"from":"F:f6abfc128a","to":"F:81c495717c"},{"from":"F:f8168b956f","to":"F:bd02b28f17"},{"from":"F:f8609bae0b","to":"F:b5ae6ee133"},{"from":"F:f8609bae0b","to":"F:c64c042051"},{"from":"F:f90930c3c3","to":"F:932d33be00"},{"from":"F:f921eecad7","to":"F:92d6903b5f"},{"from":"F:f942e88a8f","to":"F:7c8d518693"},{"from":"F:fa49930755","to":"F:05bffc70e9"},{"from":"F:fa851dabe1","to":"F:90cbb2cf6a"},{"from":"F:fb5935daaf","to":"F:d8fb8339ce"},{"from":"F:fc21812307","to":"F:05bffc70e9"},{"from":"F:fc21812307","to":"F:f51cba9beb"},{"from":"F:fc43ea4859","to":"F:a8cfe45d27"},{"from":"F:fc5d887ff6","to":"F:05bffc70e9"},{"from":"F:fd08562f92","to":"F:05bffc70e9"},{"from":"F:fd660a117b","to":"F:05bffc70e9"}],"merkle_root":"sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595","modules":[{"hash":"sha256:6dc63314489172db52e377b81586f4d971b3e8e8c97932bacbf1af2c6f8dfa34","id":"F:94b941cbd6","path":".design-sync/NOTES.md","purpose":"Design-sync notes for @modonome/design-system"},{"hash":"sha256:d388fef8f0ef810801a06a03ceb24df6cff996f52e1b83d795223e88e2fa3ac8","id":"F:e146bc5acb","path":".design-sync/conventions.md","purpose":"Modonome control-panel design system"},{"hash":"sha256:8ce50e2dd94a258eaa07c493d89f88ed31eb19fac52f66e263613f0a8189ab10","id":"F:2207a6ebce","path":".design-sync/previews/ActivationLadder.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:23d7645f8f2ae7d6d9f7d78bfd8124c24c32d7516226c992d45a1d71d6af83a0","id":"F:2470e60179","path":".design-sync/previews/AppShell.tsx","purpose":"function Dashboard"},{"hash":"sha256:cff8b3e50869d91ecf4e64d89b0bf46e06a0ac59b8f746500b0d29d942a0b72c","id":"F:28b7af3c53","path":".design-sync/previews/ArmingStateBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0b2ebe0d1c0ab726f746e4c802535c32113dcd0be638669fc2b6786d6a0fea55","id":"F:9c9edea0c9","path":".design-sync/previews/AuditTimeline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea473851738c286a9447e28999aca5834455f7d9cb18c34df8fd682e709ce18a","id":"F:f6e100ab45","path":".design-sync/previews/Button.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c31eb8ae99b2058922e089277497af5bab44f530b7a9cc92449594ddf26c61af","id":"F:3d505706cd","path":".design-sync/previews/Card.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:38c7bbf24e1e428bb1d6f81cb6298969901e21b3384c0dbe2480a4245f84862e","id":"F:3b4065b679","path":".design-sync/previews/Checkbox.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5966e42f7d9af4b42e3cf073e7021401a2df169bd1dd2b1798ab6e378d2fe928","id":"F:0a6a758e7d","path":".design-sync/previews/ConfirmDialog.tsx","purpose":"function ArmEngine"},{"hash":"sha256:c6090fad6e43e58babda80072cf2a6b49649eb3445a2f5ba7eee9b45d712eee7","id":"F:c63a71fb57","path":".design-sync/previews/CostPanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc1c2ec9b9f0017a6e607d532315276eea8db28cd99cac8594f37347ef8608ad","id":"F:3ce0fd77eb","path":".design-sync/previews/DecisionCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fae1e57fd27b44fe9f81dcbb786e712eb7fd2adad44ba559876a015489c63863","id":"F:41f5ffe77a","path":".design-sync/previews/Drawer.tsx","purpose":"function ItemDetail"},{"hash":"sha256:3038d7e248fc4717cd723d12c35a016302554050dd32154155539d037d181693","id":"F:7a43bf4ce5","path":".design-sync/previews/EmptyState.tsx","purpose":"function Queue"},{"hash":"sha256:e018db6be835e03424b38476f92e107a77b21f74d771329f961b45fe83f1ea29","id":"F:79467a3153","path":".design-sync/previews/ErrorState.tsx","purpose":"function Unreachable"},{"hash":"sha256:125b8b0930f89ffff0b4b79b27373e09c918f0b87540c4d50646044681d54d73","id":"F:bb6a874d58","path":".design-sync/previews/GatePanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2a40e8bb77149f133fea0da3eb37d69cd908fdf2f8b03f0e9414e7339175f7cc","id":"F:e19aab09cb","path":".design-sync/previews/HelpHint.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8cca0e33e7829d8f211b88580660e5eb88255beaa0eb350c3e5efa8d2b594d4f","id":"F:6bef3f93ab","path":".design-sync/previews/Icon.tsx","purpose":"function Set"},{"hash":"sha256:5c78ec1454886b9eb902dcb12f2959e0c7576329eb3b2a871eba20bf6ef7fd8d","id":"F:8972d37045","path":".design-sync/previews/IconButton.tsx","purpose":"function Row"},{"hash":"sha256:fc96c76182bca5d884808eac367770479920b0a26dd8589b05e67558c8aaea8e","id":"F:7008a20b1c","path":".design-sync/previews/IdentityChip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea7d6e9b5a0493031e4e3f6c4db5588f24e720447e26504b5bebdd074c4153b2","id":"F:5e207f73c7","path":".design-sync/previews/Input.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9ecceb08031c0dfb9aef94def837cc9323aee97400350cb6b081e27e25bc58fe","id":"F:250c8a0d4a","path":".design-sync/previews/LearningCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:336ba2dbb303f6d9cd43b74586e1a257f9558c2ecdc9d51133ea6b246f148d77","id":"F:31658eff0b","path":".design-sync/previews/LeaseTable.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e620053e7a3644efb9e55807fe283051e15a486fc2c14f5529e7368c01a5af99","id":"F:eecc78e7e8","path":".design-sync/previews/LoadingState.tsx","purpose":"function Reading"},{"hash":"sha256:418f59b1949eb49e0a691cc61ec16e66488904c2d8e10eff3df5a2f02ac86ff2","id":"F:e5e519f441","path":".design-sync/previews/MetricTile.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc59bdc51ec89727d6a6c8c93f47aa6c7bb7582d7fefb10bdaf328d3f6ce7a73","id":"F:4387a44284","path":".design-sync/previews/Modal.tsx","purpose":"function RaiseCap"},{"hash":"sha256:e0d0a49bad9e877cc356c787ffa0da6db285abd5c852588f04868584c774ebc3","id":"F:545c0ccfeb","path":".design-sync/previews/ModeSwitcher.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0d833fd549d8b4d5f442813338169460d362a2feb34e0b445b6bef6d096e325e","id":"F:84a5c32a4c","path":".design-sync/previews/NumberField.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fcf3376b833576255dbd3a04eb52a8a890dd86a72ac59e476dc6a23be31124b9","id":"F:d590ca62b9","path":".design-sync/previews/PermissionDeniedState.tsx","purpose":"function OwnerOnly"},{"hash":"sha256:4a78ba515e665d462f489516d0ab2a46a0bcc6b8534447ada6882f0e06d8c3f5","id":"F:a0abaf6a25","path":".design-sync/previews/ProgressMeter.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e071a9ba5ad50fe699a59d71534f1abd9a6cd1d8ee74028b03b8e8e303d1fbf5","id":"F:13d31b33ea","path":".design-sync/previews/ProtectedPathRow.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e481349dafae32464d94985ca42dcbbdd8a4269ab64003ca4360d9e3b56a72fd","id":"F:dd1be2cd7b","path":".design-sync/previews/QueueBoard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5b6f2c0cd438195208e8eef5115bdd969e0efab9a2eec99737e4b05232fa89ab","id":"F:973aaa9d86","path":".design-sync/previews/RoleBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2682007a94180ed7a815bd9396b26b2afb13349dcd07f9f7956cb16425ef6417","id":"F:3319e5c923","path":".design-sync/previews/SafetyStrip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:63be9d4779746eb6c05e1ef0d30a8642298979c377e8904416ec264a6c7e31a8","id":"F:08577063d4","path":".design-sync/previews/Select.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ebafef14ddabd45ded0276708625d66fc59f4e057ffb26231005e385e4b3681f","id":"F:1f40b6eb6e","path":".design-sync/previews/Slider.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:cb0ec11babc429a0a05100fe09f62f6dc9e3d0a4bb3066d24373d25c8ba7a458","id":"F:ca13fe2a5b","path":".design-sync/previews/Sparkline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ce4171194a1594c0faf6f8995b1c2090ce94ed85f019011f9047b023e37bd3f3","id":"F:10e76cfcd3","path":".design-sync/previews/StatusPill.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0c657cf2500f46881f17c88d45a343dd5eb5a12e5cf834bea56c633559beb857","id":"F:1aa7cf650d","path":".design-sync/previews/Table.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:a0075b8076d7d7273a92e39f26947d198feaf6178288edfaf909ae944543e77c","id":"F:6c0919b64e","path":".design-sync/previews/Tabs.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c80497f4fc76dfc93694a6e6a66493c37ca29bba5ae554ef0911318899fd29d7","id":"F:fe5ec971f8","path":".design-sync/previews/TierBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8e9e332a28ed3d1d95c08999f43bad01ec571eb1e1fd6340609763af2973d667","id":"F:7832db450f","path":".design-sync/previews/Toast.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:6611e0c1fe0f89d9896413183cd477107d3262a2e78eb9f60183a6a576da3ad3","id":"F:a0068c8817","path":".design-sync/previews/Toggle.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9e99851405022f58b67decb58571895fd3364ed5b5572255d1b205b4dc067a4b","id":"F:dca643f34b","path":".design-sync/previews/Tooltip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:db39ec6fae408a56c57a8057098117faa57d9c99e6a75dde16f20633369294ad","id":"F:f9c98a8642","path":".design-sync/previews/WorkItemCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:d1e58b99ee3bb38f608f1149ba9c91aec0b880efebfd39fa17ef86485c173d9a","id":"F:f0fbd8716f","path":".design-sync/previews/WorkItemDrawer.tsx","purpose":"function Detail"},{"hash":"sha256:98fa336aa591c02fa29e16ed588cf4b487cff2bd0b1af2281549198d5c2eff3d","id":"F:b2496e8029","path":".github/pull_request_template.md","purpose":"What this PR does"},{"hash":"sha256:b28f932a561debca1261a975b1372f34f7f65cab6b02540287e4dbf5f9f42bbd","id":"F:88c38fbc0f","path":".modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:8d72947d7df89abc064973db46ee441709345271e72590fe88fbac808ad102b9","id":"F:0f284c134c","path":".modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:8930a72be2","path":".modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:1091496939db093d5537491f17bfa0c6973389e9358351d459a7bd684c705a2d","id":"F:cac320dd97","path":".modonome/STATUS.md","purpose":"Modonome Status"},{"hash":"sha256:7612b8a03dec2d129e267e8d2388eb43b3fbb09491e5d645b63154ef2b0f3f28","id":"F:76f802c3ce","path":".modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:8d6bc8e18b55fc496653e39b579a6e78dd0f01963d4e067c193f040e3cc4e4b8","id":"F:7479c14986","path":"ADOPTION-GUIDE.md","purpose":"Adoption guide"},{"hash":"sha256:549f7b5474d361343fe50c72adcd71272c6d7ea9de671526312898108d339572","id":"F:a54ff182c7","path":"AGENTS.md","purpose":"Agent operating manual for modonome"},{"hash":"sha256:68959a7942b2071d37972af02218002fd5ed28e5f8424468a717556326bab99d","id":"F:8f6366fd8e","path":"ARCHITECTURE.md","purpose":"Architecture"},{"hash":"sha256:bf7540b3e98361366bd49f4425b5fea5fa031755c0e1fbb228fa9c09612a980b","id":"F:244a368695","path":"BREAK-THE-RATCHET.md","purpose":"Break the Ratchet"},{"hash":"sha256:ff4be50e055616fc1882022155d02cacc72dbeb81bdcf70775e583e3afab6644","id":"F:06572a96a5","path":"CHANGELOG.md","purpose":"Changelog"},{"hash":"sha256:579aac8dcce334ee66fe60c615dbb9eb6f2ccbc490927155683bbe1eebd4fb55","id":"F:6ebdb617a8","path":"CLAUDE.md","purpose":"Claude Code instructions for modonome"},{"hash":"sha256:4d727da51b5cd06505c3a5e6b5ad7c1a22c1bcefab642463bbd9af9c168eeb72","id":"F:2f41a784d9","path":"CODEX.md","purpose":"Codex instructions for modonome"},{"hash":"sha256:181625af6edfac7d6aec933f3b061d90ff82f197432aef15e7ce30a26fc3f800","id":"F:ffdbe3a1e7","path":"CODE_OF_CONDUCT.md","purpose":"Contributor Covenant Code of Conduct"},{"hash":"sha256:0c2aa53ee1a4c16fe977a05a53a2e5fc4b990fb75847109c67cd522d09d437f3","id":"F:eca12c0a30","path":"CONTRIBUTING.md","purpose":"Contributing to Modonome"},{"hash":"sha256:906963517f6ab1833ef5bd463ab4d5af9e1fca4b8d7c4f7a11c23f6b866d9324","id":"F:b60c6a93e9","path":"GOVERNANCE.md","purpose":"Governance"},{"hash":"sha256:7456d96e6a81d91da38daf2554bb2cd04b76a32fad3bb2b60496fd80b0c0f698","id":"F:c97cb4d123","path":"OWNER-ACTIONS.md","purpose":"Owner actions"},{"hash":"sha256:1aecab9188ddd263328850a7f1141dd9f9ed30df927d1a8502bb04a1c1671050","id":"F:147873af8b","path":"QUICKSTART.md","purpose":"Quickstart"},{"hash":"sha256:3cb87b223660d737234637bde0c24a33b2068e4c4b9f7db8f9ac3d5ed37db4f6","id":"F:b335630551","path":"README.md","purpose":"Try it in 60 seconds (read-only)"},{"hash":"sha256:eafe534d1d5b69ef5c0646285e4c908b4a60d57f24851c15421ecae609a62ad9","id":"F:705a3ca9b3","path":"RELEASE-EVIDENCE.md","purpose":"Release evidence"},{"hash":"sha256:66624a1dc2eda1103b06fd62c6148bc69f1315250fd814e29cc0160d6cfdbc03","id":"F:683343bdf9","path":"ROADMAP.md","purpose":"Roadmap"},{"hash":"sha256:fb1a431d5eba7189459def64f26d66e316f778bd990483f576ac1e6db2918d37","id":"F:f6ed156e4b","path":"SECURITY.md","purpose":"Security model"},{"hash":"sha256:13477e14ac1cce854455ced1d5b73ec311c0531937c72181bfa1f40714c020cb","id":"F:c5fe610b02","path":"SUPPORT.md","purpose":"Support"},{"hash":"sha256:e0123c5d471bb70a85c2817cd4149a7d2894cb03e5a154a9dcf48a0d222d2368","id":"F:cf2908e0f2","path":"agentproof/CONFORMANCE-INTERFACE.md","purpose":"AgentProof Conformance Interface"},{"hash":"sha256:351e5737e60cdb6dd71da251d46b0ba92883cc1a2f243cd6675cdc8dc9a9b600","id":"F:69ddfa4ff4","path":"agentproof/CONTRIBUTING.md","purpose":"Contributing to AgentProof"},{"hash":"sha256:1136550fe9dd1e28d6e35610417f02e781869050ef12b052941103a2b57b3357","id":"F:5621bc51b3","path":"agentproof/README.md","purpose":"AgentProof"},{"hash":"sha256:cec6a751469fad2823f03ef550ad5f2046e8b54aeb6e75028ba7d8247de128e2","id":"F:2ec4f6540b","path":"agentproof/SPEC.md","purpose":"AgentProof Specification"},{"hash":"sha256:f59a0beea3bd8744a2f6129af78d43fb5cafb5ed1f74e0242235bd9b9bd53f57","id":"F:02a5f8fc55","path":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:2e3364d087e95e36bb765de2eee6da2452b3a7bafb0a79a7fd63bd8f1d094db8","id":"F:a6d2bd3021","path":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","purpose":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised."},{"hash":"sha256:70221285edc659c839aaa46f647839ce1474b75c7832080f555c413b5e72b725","id":"F:3211d524ad","path":"apps/control-panel/README.md","purpose":"Modonome control panel"},{"hash":"sha256:d5a4aa57fa42de628b4471c5d83ce312f186f419dca82711b63b0d1ae0d7b724","id":"F:08b7435c86","path":"apps/control-panel/server/api.mjs","purpose":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the "},{"hash":"sha256:b3fc1a0f281280424df192b18996330aad770ec7b4f478d55a92739e39f17a84","id":"F:54df44aadd","path":"apps/control-panel/server/learningsFormat.mjs","purpose":"Shared parsing for the \"## Staged\" bullet lines in .modonome/LESSONS.md, so the"},{"hash":"sha256:228a98eb1b15ed2b88ee08a991cf28533a76b6e6915ff62903ced543efd19535","id":"F:8a3dd6ccff","path":"apps/control-panel/server/modonomeReader.mjs","purpose":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces"},{"hash":"sha256:974fef8a1f81a37bff27ba823e6628d4a3635fdb20e3ae7c641c22fa3430e579","id":"F:22566cb46e","path":"apps/control-panel/server/modonomeWriter.mjs","purpose":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent"},{"hash":"sha256:d3ade0ab81dcf1a4917ae08dbc212a45128eae37dd41a12e5c5c55224c419f8a","id":"F:fd4b8473fa","path":"apps/control-panel/server/ownership.mjs","purpose":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ remo"},{"hash":"sha256:009b188cdf39031d5ac114b143970b90ee5e0af27919c628ccf984f4c3b7599d","id":"F:5daab9894d","path":"apps/control-panel/server/remediationView.mjs","purpose":"Builds the read-only remediation view-model for the panel. Pure: it takes already"},{"hash":"sha256:6d2002d6c0e4d7c635579e95cb7f702b5557cd93ef9d495c2bdea0de888629ac","id":"F:113387361d","path":"apps/control-panel/src/App.tsx","purpose":"function App"},{"hash":"sha256:f4fbceb244e071e90647d343a88b4c0b8c9770a6a4b616d12afdfb1e9cedffcb","id":"F:f83d1100e9","path":"apps/control-panel/src/content/concepts.ts","purpose":"interface ConceptEntry"},{"hash":"sha256:3f26effc15065164e222f35c6afa4e14383abc81717ee9c82b4e4afc8cb227a0","id":"F:3c479cac6e","path":"apps/control-panel/src/lib/confirm.tsx","purpose":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying"},{"hash":"sha256:7c670d232646cedb62767ae274375ef101d1f0692207868dce3858f869fac18c","id":"F:e406ceab72","path":"apps/control-panel/src/lib/messages.ts","purpose":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to"},{"hash":"sha256:23ad78ee68f5ea7345ea24921f536f437550e368c05b57772bb4cd05ca13ea9d","id":"F:e40ce1af48","path":"apps/control-panel/src/screens/ArmingScreen.tsx","purpose":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separati"},{"hash":"sha256:e56fb3c60a9adcf8736b794dbe334b713a3b0f4a990ff27be97f35dd812fd33c","id":"F:304fa8ef33","path":"apps/control-panel/src/screens/GatesScreen.tsx","purpose":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duti"},{"hash":"sha256:4bd02344b5309e24886e004726a69625789261d1033fd4a56ffd81b9bf19db22","id":"F:757a70680a","path":"apps/control-panel/src/screens/LearningsScreen.tsx","purpose":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the le"},{"hash":"sha256:9b042842975fc785913060eba4c6d57051cc2731a5e94fbbd771925f61f1d3e4","id":"F:6627655633","path":"apps/control-panel/src/screens/OverviewScreen.tsx","purpose":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent act"},{"hash":"sha256:140a3167b9aef50622269cefaa249266db05395257e45ac4668418962e562dae","id":"F:4ebf08705b","path":"apps/control-panel/src/screens/SettingsScreen.tsx","purpose":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came fo"},{"hash":"sha256:a79197cd2a46b0c6aff0e216083609ba83f0968f235a1a1b92f741e24f870ff8","id":"F:9b3f18856e","path":"apps/control-panel/src/screens/WorkQueueScreen.tsx","purpose":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-o"},{"hash":"sha256:884d51c65ef17a85b1de66cbf069d6e1d7175821418c4e5b45942a97a710cc79","id":"F:95d4304133","path":"apps/control-panel/src/state/adapter.ts","purpose":"function finalizeState"},{"hash":"sha256:2aad779e74343b4f402fc303d1d8dfd21fe13949ea2a3928509a4c9cbd0fbee6","id":"F:0da05a2a05","path":"apps/control-panel/src/state/arming.ts","purpose":"function deriveMode"},{"hash":"sha256:94e47e65d592c6b417f883501a9aa9d5eee31af912800cc6b6c7d665b8231623","id":"F:25e649633c","path":"apps/control-panel/src/state/configDiff.ts","purpose":"function nestedMapChanged"},{"hash":"sha256:01e89e56bf70e21313d76809f34dfb3136f69e18b70663cc25a6cd7a66ea5925","id":"F:7d236c9aa6","path":"apps/control-panel/src/state/fixtures/host.ts","purpose":"const hostState"},{"hash":"sha256:5fae58196211667608e6b5aa19a2efb13369d01494d9e29ffbf0da6131428a23","id":"F:89aee72994","path":"apps/control-panel/src/state/fixtures/product.ts","purpose":"function titleFromId"},{"hash":"sha256:7f2f64711709f4e04e04ec8fcb7abdbf6c2182cd5ba512923fbd5ec4eefdc4ea","id":"F:ec52ca3820","path":"apps/control-panel/src/state/liveClient.ts","purpose":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway)."},{"hash":"sha256:d25e0a0d452ea3c90eddd7494e804239b14337a6282d043b32707e81a53deb09","id":"F:0a85f3b8e5","path":"apps/control-panel/src/state/types.ts","purpose":"The subject a mode points at: which repo the panel is reading."},{"hash":"sha256:43e8ac7af105c773703a9b6417945ec1746465970293ad9b9375840d6883b092","id":"F:f90930c3c3","path":"bin/modonome.mjs","purpose":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variab"},{"hash":"sha256:2e349c8b02be29e3512bc7eb25716062a4ed806d32990904b866d84ef41df9f4","id":"F:90cbb2cf6a","path":"challenge/judge.mjs","purpose":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {s"},{"hash":"sha256:e95a14ef3dbdb053d86c2199ef8ac89ddbb1e1a8b72032c7586ef31ab5943920","id":"F:5d2ce8ee7e","path":"checkerproof/README.md","purpose":"CheckerProof"},{"hash":"sha256:326f57c93fe3587633a56d23979ab4aa3d4e2397c059fcc10a43b681846578f4","id":"F:94050e680d","path":"checkerproof/runner.mjs","purpose":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output."},{"hash":"sha256:6414d67327b97282597ba13d4fe711331d1a96d6bdb0ad366626aedbe0848b04","id":"F:5376e86470","path":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","purpose":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves "},{"hash":"sha256:36a50a21ae88e90f3996e991501ff5133fe5dde362ea0635fc17bc123d5f01ba","id":"F:c7423b85cf","path":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","purpose":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unre"},{"hash":"sha256:4305f79d6b93ecb9d4211a358db37366621e7d542f655b45fca5fdb886cea192","id":"F:d744931e6a","path":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","purpose":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches pr"},{"hash":"sha256:0d704f6822c09c158318837fbe1507402d12fccac16861158c1490c4680ba5b0","id":"F:28f278b1d9","path":"checkerproof/scenarios/cp-04-scope-creep.mjs","purpose":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker "},{"hash":"sha256:a53be522971a73ada8bb992bdca820bc4a2d31addd30abfe133d13a2b37a3ac3","id":"F:34ca4e55d1","path":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","purpose":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, n"},{"hash":"sha256:93648a7d073062f5d92e5943903ce883ca68a951db56be4d45478ad630fc2989","id":"F:5253743405","path":"design-system/README.md","purpose":"@modonome/design-system"},{"hash":"sha256:cbcff3835f237d797f0c7ca291a991a0fd36dcb8b089ebcf744b05913d7a38a1","id":"F:14edab923f","path":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","purpose":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when ev"},{"hash":"sha256:57f80954a2d97a6a209b4475c07d16038fc6bba643f01328d4aff5fc794d5566","id":"F:268769c4a6","path":"design-system/src/components/AppShell/AppShell.tsx","purpose":"The Modonome brand mark: a teal ring with a check on the dark ground."},{"hash":"sha256:3993b916804f19ac4fa15d99e5a2b042607d43fc717c37d2617076c7ba25e0c1","id":"F:7a1f7d680b","path":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","purpose":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, ar"},{"hash":"sha256:f952f03815def29809be8f74ba31e88ce459b54a31cb4135688a030755eac1df","id":"F:76da13a8f7","path":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","purpose":"The kind of event recorded in the audit trail."},{"hash":"sha256:1c99d03bb6dd97a34c77c6752498ad51b9c1598b86316f7a7c336400a170967c","id":"F:8b122c449e","path":"design-system/src/components/Button/Button.tsx","purpose":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and *"},{"hash":"sha256:457c0d229b21452cd1ebbed360f195ff69dbfdbb14e231ecc10dc2bbbeec9279","id":"F:40eb542a82","path":"design-system/src/components/Card/Card.tsx","purpose":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, t"},{"hash":"sha256:056914568b3ca3d770f135b890f4c1538a4a74f92c13f8af95519900743bcc2f","id":"F:d20e4b6b91","path":"design-system/src/components/Carousel/Carousel.tsx","purpose":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scro"},{"hash":"sha256:efbb27ce7153b11fb7fc2f191d555a1f8f200616b90b6b9645bb44d3899c618d","id":"F:7054844360","path":"design-system/src/components/Checkbox/Checkbox.tsx","purpose":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * sur"},{"hash":"sha256:ca46497990303b19a2897b57a78af5475e4c21389901cdb21d7acd89fe38bc53","id":"F:81c495717c","path":"design-system/src/components/Slider/Slider.tsx","purpose":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announ"},{"hash":"sha256:1749a31827e26d5315b93b32f0835467bd966790860b259052dd1ef58a4429e6","id":"F:c0e80ca327","path":"design-system/src/components/Sparkline/Sparkline.tsx","purpose":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inlin"},{"hash":"sha256:0ce4a9dfe4be427aa7d81a5b7f1bcf1759b8d910b8184c57a02bf20cc732282b","id":"F:2f6c42c5ee","path":"design-system/src/components/States/States.tsx","purpose":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items "},{"hash":"sha256:a402f532e2ae9df7f4e1728c1c9a2891d67c4e70b584f2e879d36e86418b2fab","id":"F:2fc610bd94","path":"design-system/src/components/StatusPill/StatusPill.tsx","purpose":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or do"},{"hash":"sha256:7305e00d55b66cd30ad1083dff3787872a53e884744d212a333ffd022d93da4a","id":"F:a402d2f9ed","path":"design-system/src/components/Table/Table.tsx","purpose":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highli"},{"hash":"sha256:6390a12d96f31f795832d3cbcb460bd8142784a0e5498e05ec1439a43aefbeae","id":"F:1db369d970","path":"design-system/src/components/Tabs/Tabs.tsx","purpose":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-sel"},{"hash":"sha256:b455cb481a9f8ac3c2e29039fdcbff0d82ae37e5ca28409003fbe3529303a3b5","id":"F:da42f69531","path":"design-system/src/components/TierBadge/TierBadge.tsx","purpose":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, "},{"hash":"sha256:0eaf585024cc9b6b47c917317f09565c3e5905a901ea85698cd0dc299688dc2e","id":"F:ab334f34df","path":"design-system/src/components/Toast/Toast.tsx","purpose":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: m"},{"hash":"sha256:7c310667a053c1678db6dc008663b4a314b0c1f612bcb27f6f2d7bc3cc8c5c7d","id":"F:214cc0a5f4","path":"design-system/src/components/Toggle/Toggle.tsx","purpose":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a c"},{"hash":"sha256:2a9b6f1ea5893fbbf927c0709325446a864aed023ca789afc890fa32eb6030f5","id":"F:8a9aff1529","path":"design-system/src/components/Tooltip/Tooltip.tsx","purpose":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the"},{"hash":"sha256:6787fd41c6a7f0de4c0e2b7e8b5e4af929d3a3bda45cbc58fac0077cd897073c","id":"F:b5ae6ee133","path":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","purpose":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, s"},{"hash":"sha256:21f8d11ecf93eee3757dc47b0007b9ac0edf38eab77c113091e64b9a13283884","id":"F:08064e0c53","path":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","purpose":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens "},{"hash":"sha256:bdea45a54795dca5069c1ad0b5c8159fa4a00a292ce6e62c9c3b967748dcd58f","id":"F:7c8d518693","path":"design-system/src/lib/cx.ts","purpose":"Join class names, dropping falsy values. A tiny classnames helper."},{"hash":"sha256:7f07947b761351c40274e1af83ab1278dc6af2f268b61f8b11344506a794bd9f","id":"F:86838d35ac","path":"design-system/src/lib/format.ts","purpose":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\"."},{"hash":"sha256:18a15384b92501e8515b1bfc8b4a1e8947bea352611aeac378b1c71a23e7f9e4","id":"F:c64c042051","path":"design-system/src/tokens/tokens.ts","purpose":"CSS custom-property name for an arming mode color."},{"hash":"sha256:65423e5476fdd50a743b0ef1564643c98394d3f1ed2d347e0506dc1913b93949","id":"F:e5e9ec402f","path":"docs/LEXICON.md","purpose":"Lexicon"},{"hash":"sha256:b0182f65ef557aca79aec4bbf3bae9f1f4bb8a73d8c6e63542dede6a0cbc4b7a","id":"F:0b5ca119d2","path":"docs/README.md","purpose":"Modonome documentation"},{"hash":"sha256:d932cd4f5a2c1606a161167bb4f21ad7443112c207e5520e240f1806c72fecb4","id":"F:6e4723a45d","path":"docs/adapters.md","purpose":"Bringing an external agentic CLI (the adapter contract)"},{"hash":"sha256:173d95b4ae6ce1c5d0c93b6ff34196bde52d4117b07b33ddc6a7ee02b1983cb7","id":"F:6e4b629d3c","path":"docs/adr/ADR-001-self-governance-pipeline.md","purpose":"ADR-001: Self-Governance Pipeline"},{"hash":"sha256:853ce2cc504318bc8e294ab2a734aa7ed2f3c165500fa46eb5276db95093e7fc","id":"F:64c5acf802","path":"docs/adr/ADR-002-shadow-mode.md","purpose":"ADR-002: Shadow Mode"},{"hash":"sha256:7938a6cf42851b4c667e7c86f36f321531bb1cda42d8ec8be2e817ee7f2660a9","id":"F:14812742da","path":"docs/adr/ADR-003-agentproof-portability.md","purpose":"ADR-003: AgentProof Portability"},{"hash":"sha256:7b3919fdf35b4803351784a6e97f0fef53d943945922e8a01771c66b84285df0","id":"F:6dd88cde1c","path":"docs/adr/ADR-004-arming-isolation-enforcement.md","purpose":"ADR-004: Arming Isolation Enforcement"},{"hash":"sha256:4ae9f4aa1833fdb26a3ae2585ddd65ed7c2fa816c43e56755d666634926921e6","id":"F:d4ead22b1b","path":"docs/adr/ADR-005-run-observability.md","purpose":"ADR-005: Run Observability"},{"hash":"sha256:52484d1db4941c2e69b23dce3e059a364832a9213785e1011d53ea10f7c318ea","id":"F:dc00dfe394","path":"docs/adr/ADR-006-checker-independence.md","purpose":"ADR-006: Checker Independence"},{"hash":"sha256:670f9d8f98b830daf3398b8311c228b4533647f879e19e15b84bbaa161b48513","id":"F:0526aab88e","path":"docs/adr/ADR-007-claim-atomicity.md","purpose":"ADR-007: Claim Atomicity"},{"hash":"sha256:77402b5f5b6792751d2228af5fa40d754c4808c799955274db29405cb8510b59","id":"F:8c2e08ed12","path":"docs/adr/ADR-008-trusted-author-allowlist.md","purpose":"ADR-008: Trusted Author Allowlist"},{"hash":"sha256:85c78896e75ef98a0350008fa898323170454e918d5f1d40bfe75e969787ebbe","id":"F:00a0cb4ee4","path":"docs/adr/ADR-009-mcp-tool-auth-scope.md","purpose":"ADR-009: MCP Tool Authentication and Scope"},{"hash":"sha256:e0da3fc9d933331ecf32692d92e7aff081fe47d22936ab6899b274f4e03f5d4a","id":"F:de4538fe53","path":"docs/adr/ADR-010-knowledge-packet-trust.md","purpose":"ADR-010: Knowledge Packet Trust and Promotion"},{"hash":"sha256:3be6708edc9457216f91418d2d82adb51b902f99865cb15f2fa295110ceffadf","id":"F:d2b14b5b34","path":"docs/adr/ADR-011-ci-env-var-trust-scope.md","purpose":"ADR-011: CI Environment Variable Trust Scope"},{"hash":"sha256:6b260de5664608d0c560ba27d479991cfd25c470aae92b3f134be4f2da02410d","id":"F:6f5b5f0bc4","path":"docs/adr/ADR-012-harness-prompt-integrity.md","purpose":"ADR-012: Harness Prompt Integrity"},{"hash":"sha256:1dbf9afdac131fd48920ea6232c09671017209d989ef56150fa26fd5e126ffc4","id":"F:e844676be4","path":"docs/adr/ADR-013-config-downgrade-and-migration.md","purpose":"ADR-013: Config Downgrade and State Migration"},{"hash":"sha256:228b5b0f71563d679198d7a5e258a1f4d6c54e77015e03426e26029c4fc787b8","id":"F:1a58c06540","path":"docs/adr/ADR-014-knowledge-network-transport.md","purpose":"ADR-014: Knowledge Network Transport and Sync Model"},{"hash":"sha256:0b49c78427c07a5d4aa41f6d7ee3ccd490c380b61e0a8adf72b9fa7e2b4b26ed","id":"F:cbaff08a46","path":"docs/adr/ADR-015-knowledge-network-catalog.md","purpose":"ADR-015: Knowledge Network Catalog Design"},{"hash":"sha256:cd3664d5c465e78657dfad0c2394d890db8721ff17efa9b774d927392f9a5b62","id":"F:c077d16aeb","path":"docs/adr/ADR-016-knowledge-network-packet-identity.md","purpose":"ADR-016: Knowledge Network Packet Identity, Lineage, and Dedup"},{"hash":"sha256:dd3dbc63222d451861660dfc13cb3079a0ba00d4857d1dbe411937e4abbebd7c","id":"F:72b7ab4c3e","path":"docs/adr/ADR-017-knowledge-network-packet-signing.md","purpose":"ADR-017: Knowledge Network Packet Signing and Key Management"},{"hash":"sha256:9f6017d79d341d0cf99d4c68cb088b16e8fc7e24a81263855d3ac63e88dddcc8","id":"F:0a6b452f14","path":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","purpose":"ADR-018: Knowledge Network Import Pipeline and Local Re-Validation Ratchet"},{"hash":"sha256:d4975d473b876a68555a6fc8ff1df074ea53df18e5a8cdacacfbf2f75c460365","id":"F:28d4e1ad3d","path":"docs/adr/ADR-019-knowledge-network-execution-scope.md","purpose":"ADR-019: Knowledge Network Scripts Run in Base-Branch CI Scope"},{"hash":"sha256:2144d8d484fba40346bd38b105490b85586a29327f1c3aa290f287e3e6e376eb","id":"F:4aaece5252","path":"docs/adr/ADR-020-prompt-complexity-budget.md","purpose":"ADR-020: Prompt Complexity Budget"},{"hash":"sha256:fad6527345c252a1f413bea83f9d7e936ee47384a7b6f1cb0f96a7f0f9de7662","id":"F:24f28ae0fa","path":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","purpose":"ADR-021: Prompt Behavioral Regression Suite"},{"hash":"sha256:3c6cd64127ab8f6a7bc01e93892358dbf5b47571e10d561a1e5e558de9f3cd76","id":"F:35002ba3fe","path":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","purpose":"ADR-022: Anti-Rubber-Stamp Checker Telemetry"},{"hash":"sha256:f61b594192a7ace32fdaa94ba28e82b8dc27bfe839b49af8e637fca0391bc263","id":"F:b4279e0af6","path":"docs/adr/ADR-023-config-schema-migration-contract.md","purpose":"ADR-023: Config Schema Migration Contract"},{"hash":"sha256:1947cc76998fc11788589b2cfa1ace56293e64f75587e0be319c0f90772327a7","id":"F:a70145dc77","path":"docs/adr/ADR-024-capability-promotion-gate.md","purpose":"ADR-024: Capability Promotion Gate"},{"hash":"sha256:1b958ef93312b193f44193e203e8c253572f5f59211ff8137d6e67053e434574","id":"F:dc0cc6d551","path":"docs/adr/ADR-025-self-application-conformance.md","purpose":"ADR-025: Self-Application Conformance"},{"hash":"sha256:289e8dc568d7a9d4a02b0236d03fda1ae2b0323653fc3a023d3f3dba98c4de5d","id":"F:094efaca92","path":"docs/adr/ADR-026-learning-promotion-audit-trail.md","purpose":"ADR-026: Learning Promotion Audit Trail"},{"hash":"sha256:747626f0ebcb6a2b4458e4b6144ac86416a2a8953e602d6fae502e61a8038414","id":"F:d783999e16","path":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","purpose":"ADR-027: AgentProof Suite Expansion to 25 Scenarios"},{"hash":"sha256:bdf3ba61386081102e423597184d6b7b78ee53b60eaa2c23204d08cd4d7d1e16","id":"F:514a79560d","path":"docs/adr/ADR-028-portability.md","purpose":"ADR-028: Portability Validation Strategy"},{"hash":"sha256:7bd61ffe34ff4b25962fa8d5fa8f131b61782213fdff7c6fb31658380f2020a9","id":"F:d66f93d7b7","path":"docs/adr/ADR-029-adversarial-test-design.md","purpose":"ADR-029: Adversarial Test Design Principles"},{"hash":"sha256:c6b6bafc88dd8eed9f8dcd04b988d725c557dfbcd9972b6afdb8077f7fb1b3aa","id":"F:5a04bfa7a4","path":"docs/adr/ADR-030-embedding-safety.md","purpose":"ADR-030: Embedding Safety Framework"},{"hash":"sha256:c793fe2343c351a829714c39555b9f29dc73b23d3fa339065f14ca2a76d60633","id":"F:627afb27fd","path":"docs/adr/ADR-031-markdown-governance.md","purpose":"ADR-031: Markdown governance"},{"hash":"sha256:0d4fe4e04bc4cc160978de2d177a0aaacaa9da105dfe52e4801d95de95fe5a93","id":"F:3a70dc66ea","path":"docs/adr/ADR-032-oss-adapter-boundary.md","purpose":"ADR-032: OSS adapter boundary"},{"hash":"sha256:cc2816e62a042699a38168ce64bf0e43eb502277a49c7c9f464e33d2afb7d5c0","id":"F:b5f5700e4d","path":"docs/adr/ADR-033-repo-snapshot.md","purpose":"ADR-033: Repo snapshot"},{"hash":"sha256:48413d3e10d2c802c860ae06796c54b4a4f5c98a79122688fa75018c09af3e2d","id":"F:21752cf61a","path":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","purpose":"ADR-034: Compliance and audit doc staleness gate"},{"hash":"sha256:3b7df614cd01444cb19035016351d7148e86fa750ffdbde23fa262d0e6763e03","id":"F:c3588d683e","path":"docs/adr/ADR-035-metadata-remediator.md","purpose":"ADR-035: Metadata-only Commit-History Remediator"},{"hash":"sha256:ea9f950814081a796dab54219ab216345f187428dd8c3c262093f2fbc5f7ddcc","id":"F:750436d8c1","path":"docs/adr/ADR-036-policy-attestation.md","purpose":"ADR-036: Policy-Pack Manifest and Disclosure Attestation"},{"hash":"sha256:6c578562d5e2883fae66693c03afdeadec928657639626ff4dfa14d07ed2b208","id":"F:01a7edaeba","path":"docs/adr/ADR-037-policy-pack-adoption.md","purpose":"ADR-037: Policy-Pack Adoption Tooling"},{"hash":"sha256:f4ed302d621cdba1b05a7cb7338887ede84afae871cc2ad23fb5cfe5be0cfd03","id":"F:1a368a7935","path":"docs/adr/ADR-038-checker-as-review-service.md","purpose":"ADR-038: Checker as an Author-Agnostic Review Service"},{"hash":"sha256:cf60da2b108af71da94f3657a8edba35840ae517e00f172665351d6a0365de0e","id":"F:56a132aaca","path":"docs/adr/ADR-039-agent-capability-profiles.md","purpose":"ADR-039: Agent Capability Profiles and the Always-Run Crew"},{"hash":"sha256:d6c607ef85aef2400d7c407348195d6799c02bfcbb53c23151ca5190078c6504","id":"F:25fdf1f8f6","path":"docs/adr/ADR-040-end-to-end-operating-model.md","purpose":"ADR-040: The End-to-End Governed Operating Model"},{"hash":"sha256:364956eb17c4267d523eaed728c773af38e5f38bceeda9642bd4e50a5ed17935","id":"F:40887a152e","path":"docs/adr/ADR-041-gauntlet-replay.md","purpose":"ADR-041: The Gauntlet, a Host-Repo Gate-Integrity Replay"},{"hash":"sha256:ebc8e5161c570c7cb7b731014b9050033849966a11570ad3755d41560318dea4","id":"F:27086b6de3","path":"docs/adr/ADR-042-agentproof-verified.md","purpose":"ADR-042: AgentProof Verified and the Hardened Registry"},{"hash":"sha256:1c1c3ea0aee28bcf86addabaa79510b739e24299dc71d5122d7f326fc9650d87","id":"F:c7326495ec","path":"docs/adr/ADR-043-terraform-module.md","purpose":"ADR-043: Terraform module for org-level provisioning"},{"hash":"sha256:3370011df1de3044ed112eae438df4a907ac3621689864e4d97155472355e060","id":"F:ffcad313b6","path":"docs/adr/ADR-044-agent-org-structure.md","purpose":"ADR-044: The agent org structure and its configurability"},{"hash":"sha256:7813270906fcf35082b0fee1de9ff31db4b9e307e9f0038ce9b8e58619704136","id":"F:97fc86d7a3","path":"docs/adr/ADR-045-scope-focus.md","purpose":"ADR-045: Scope focus for launch. Proof before surface."},{"hash":"sha256:c608f49155da28e237edcaf817ba565fdf9d48c3a24856c142d26cd4fb793e44","id":"F:e9701967b3","path":"docs/adr/ADR-046-ship-the-deferred-features.md","purpose":"ADR-046: Ship adapter-verify, Break the Ratchet, and CheckerProof"},{"hash":"sha256:dec01f22db0eb7d3d510ae9c87c79e2e13ed72aa655189d46d13430176c2a1f3","id":"F:68d874f280","path":"docs/adr/ADR-047-risk-surface-guard.md","purpose":"ADR-047: Risk Surface Guard, a second deterministic PR-diff scanner"},{"hash":"sha256:07236c8a59dc7952655f1b442e82fb773b9ee2cfcfd82a4de87587d2feeb7c70","id":"F:c3b2fcfb69","path":"docs/agent-org.md","purpose":"The Modonome agent org"},{"hash":"sha256:735569ae4c95b9b3cc468abc2d8a6b863475a25cd8d14988e356e33c5c1ed5db","id":"F:a384388adc","path":"docs/agents.md","purpose":"Agents, roles, runners, and models"},{"hash":"sha256:1a3057039a6a458ddc3be94b408cd17f7078bc4f5d84dc5a1bb28da1a8534927","id":"F:8a7591db62","path":"docs/audits/claims-audit-2026-06-25.md","purpose":"Claims audit, 2026-06-25"},{"hash":"sha256:d82a943730259de4fd7d57f0e4a7b2c3b1d7d6d58f1bb95e5895190a3480a0da","id":"F:6a3a98df8c","path":"docs/audits/claims-audit-2026-07-01.md","purpose":"Claims audit, 2026-07-01"},{"hash":"sha256:736538bc53e263123890881fca15f42561555a6b1e4d13b22fbb19c266d6a62d","id":"F:efd369884e","path":"docs/audits/claims-audit-2026-07-08.md","purpose":"Claims audit, 2026-07-08"},{"hash":"sha256:2dac20871ea07e1ce3708fbf8cb8f546b893e418486c7ad1f29f64df74284829","id":"F:3dcdfa18c0","path":"docs/autonomy-plan.md","purpose":"Autonomy plan: governed autonomy on free models"},{"hash":"sha256:3f5e1ae50727d09485d21fc98a19f4bf5e18079d7f09598f9d834e30cdb933bf","id":"F:95e51a604d","path":"docs/compliance/compliance.md","purpose":"Compliance"},{"hash":"sha256:22d7361557fb51fe0f6e60c086efcecd8d647f9deee172c5aa69119928c75a57","id":"F:5fa0ad758b","path":"docs/compliance/eu-ai-act-classification.md","purpose":"EU AI Act Classification"},{"hash":"sha256:9d6370381372c370f5daae8bde8638d4c805d17726d6b11c74e6675028778b2f","id":"F:7983a5dd39","path":"docs/compliance/openssf-badge-evidence.md","purpose":"OpenSSF Best Practices badge evidence"},{"hash":"sha256:c56f5c3dbbfa26d338d5a039e3b01258daeb8f45888117f5753a9ccab50ded83","id":"F:83d4d07afc","path":"docs/control-panel-modes.md","purpose":"Control panel: modes, and what you can and cannot do"},{"hash":"sha256:97f78ccf4a2589ea2b8f147e070e012554082ce45a921fc15d9cf5d96a874972","id":"F:191a17b151","path":"docs/enterprise.md","purpose":"Enterprise estates"},{"hash":"sha256:646676d2908eee2dd7caa4559f055a986cc6551b03d4b1ef3712c26e1c366778","id":"F:b81cf7567f","path":"docs/guidelines/markdown-governance.md","purpose":"Markdown governance policy"},{"hash":"sha256:9582fbef8508d57553d7dce7978de17865198f2aede85767ad548e7c79b402b0","id":"F:6bee8a97f3","path":"docs/launch/article-seeds.md","purpose":"Article seeds"},{"hash":"sha256:4770f83af6300c58e41041ac390f81917943b925aa5fe4420999b4696962c6f3","id":"F:930bc5297d","path":"docs/launch/show-hn.md","purpose":"Show HN draft"},{"hash":"sha256:c2a8514369ddf12ce8565a62f9e7b10b2f11c1628312e9257ea5f612d23d8071","id":"F:2bfaa5759d","path":"docs/launch/x-thread.md","purpose":"X thread skeleton (@ModonomeLab)"},{"hash":"sha256:911e3c3d9d96e433b3d5734a91a6d8f7f3cdad8f080d9aa46e3b0665fad51cae","id":"F:61486b1ec2","path":"docs/ops/add-control.md","purpose":"Add-control runbook"},{"hash":"sha256:9ce795a33cc46ee5bb875f06197a022074d104169b32fb552108e78a918857b2","id":"F:9d53df2290","path":"docs/ops/add-gate.md","purpose":"Add-gate runbook"},{"hash":"sha256:8925cf704bc9c68e322c2a14ee3c7f544649f6a382a8c82cfb2753f886312027","id":"F:1339474d8c","path":"docs/ops/merge-governance-setup.md","purpose":"Merge governance setup (owner action)"},{"hash":"sha256:7ddc7ca071ed94c0fc6f0684198c6c6cfb06112a700347754d78a3c9f3155576","id":"F:08baf2c1e2","path":"docs/ops/preflight.md","purpose":"Preflight runbook: am I ready to push?"},{"hash":"sha256:0afb51d17728db3e9e95ed786890325cf78cbb0abb9f8ebd4e0f2000072d411c","id":"F:f1f2b57403","path":"docs/ops/runner-model-config.md","purpose":"Runner and Model Configuration (WS-H)"},{"hash":"sha256:699f12ea40894445b8d909cfe98cb36ea3291778a463432c111a3cad820a6943","id":"F:c54a514860","path":"docs/ops/work-item.md","purpose":"Work-item runbook: the queue discipline"},{"hash":"sha256:d5152c802dc8b1474c04a4bdd443a4e6ec7cc540e2c7c02871d1b8714519154b","id":"F:0a640a72f9","path":"docs/research/README.md","purpose":"Modonome Research Directions"},{"hash":"sha256:dbf7884a73eebe19e227d71297f93b00d74e089b7cf93cd1df1e81e76dd857ef","id":"F:83ecac7524","path":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","purpose":"Agentic Governance Mesh: Research Direction"},{"hash":"sha256:355a11f71e2855a77b700a36713b17efc9ac0c06d6bd1fc562279202ff4fbc6e","id":"F:492786871a","path":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","purpose":"RD-027: Governance Packet Protocol"},{"hash":"sha256:f6efbea820092a98600911ff787dcf104d6f66b636e737a5869337223a5811ec","id":"F:0e78eb22ec","path":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","purpose":"RD-028: Trust Network & Discovery"},{"hash":"sha256:d6fefc664720aeb755233cc106ccaa872b5ac5a84c92550f3177ee77954e7c09","id":"F:ff644711e7","path":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","purpose":"RD-029: Packet Lifecycle & Versioning"},{"hash":"sha256:96d7c204886019a60f16679bc715bc9856dd9f11c01cf7c0be9dd23bd4a7a8d3","id":"F:cb8c4aadaf","path":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","purpose":"RD-030: Cross-Repo Governance Feedback"},{"hash":"sha256:9d73bf60d826564abdf1274e681a59ab2fcd27b23b2776ff0beb124bb3623b93","id":"F:0c07096c4e","path":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","purpose":"RD-031: Semantic Compatibility & Conflicts"},{"hash":"sha256:c3df99eed2b4134afc312ef5626a3ea6ada93228563fc838c6a536abcae49e03","id":"F:79cec3a152","path":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","purpose":"RD-032: Network-Level Ratchet"},{"hash":"sha256:16b1b26c33c80b3f4f946231b9fe7b2f3f29b891445cf9d7784583940693dd4f","id":"F:acd892d4a0","path":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","purpose":"The Governance Mesh Vision: Modonome as a WWW for Repositories"},{"hash":"sha256:c7f8fdb4ff6ac66235b70abbc785628dc62d7afd2707b8349c489ce7f64a77cc","id":"F:bcd1c88877","path":"docs/research/knowledge-network-architecture.md","purpose":"Cross-Repo Knowledge Network: v0.2 Architecture"},{"hash":"sha256:97a2452d454b3687d0a7f91a275575ad98a3a1046da35d8aaa3638b3a4078e09","id":"F:c1ef63106a","path":"docs/risk-surface-guard.md","purpose":"Risk Surface Guard"},{"hash":"sha256:412df5caddf6378895f6a9a61f3e6175f0967ec36e8c550dc647f85d892869a8","id":"F:55673172df","path":"docs/specs/governed-autonomy-spec.md","purpose":"Governed Autonomy: A Specification for Safe Autonomous Software Engineering Agents"},{"hash":"sha256:a8be4604abf2f1f3f5069ca9519542d5cb297e1b8510b3d1fc62115e172cbc1d","id":"F:4d5cfa3611","path":"docs/specs/ratchet-spec.md","purpose":"Anti-Gaming Ratchet Specification"},{"hash":"sha256:117057588d3bde9166f502b23296313a7eb0d39c311d164c6ba6e3d9e2cff711","id":"F:c1cc304e56","path":"docs/versioning.md","purpose":"Versioning and embedding"},{"hash":"sha256:4cd43f8db80add0570df0f1adc1bddd8ba37dd1b3a04752a5b55846a09aba316","id":"F:88244532e4","path":"docs/vscode-workflow.md","purpose":"VS Code manual trigger workflow"},{"hash":"sha256:ab6445332dd2838b319c1a3c1ad357ce8d4190b81c7bd5674cb33c2012e0f4fb","id":"F:91a7efa0ba","path":"docs/workflow-fixes.md","purpose":"Workflow Push Event Fix"},{"hash":"sha256:8de7c8d5c9b8940c958fa8d7e6ce9fcdac2614927f9e38c6b4dd61ca51df634d","id":"F:fcc5f4b906","path":"examples/demo-app/README.md","purpose":"modonome-demo"},{"hash":"sha256:204b9ae011a6583c51ce31dcc14895f744c4b521410f72c2af62e1527b5c218f","id":"F:9666ca7f0d","path":"examples/demo-app/WALKTHROUGH.md","purpose":"Modonome on this demo app: dry-run, maker/checker cycle, and a real ratchet block"},{"hash":"sha256:8abb4449c6701801c43b4b9f03ce80f97f1ed09cf7e95630cffff687b422ed4b","id":"F:a37ab631dc","path":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","purpose":"Captured maker and checker run: demo-refund-coverage"},{"hash":"sha256:58dd762e7666111d5d22579223a5469d13cdc8141dcb2f9c293456b3ce62566f","id":"F:1174d7e2ba","path":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","purpose":"Captured gate-integrity run: the ratchet blocking a gaming diff"},{"hash":"sha256:ebe33167ee32caa55022fd15d7124f5f80e2e38bafdadd493e2a1cd73e868d02","id":"F:9444435647","path":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","purpose":"Captured run: the two-key arming mechanism, live, at a $0 budget"},{"hash":"sha256:add0234530427f1c666cc530f399c8c7242c071b75b2d953a1859dd27d2cd119","id":"F:599f5b2f28","path":"examples/demo-app/src/CartService.js","purpose":"CartService: manages user shopping carts stored in memory."},{"hash":"sha256:abcd98accc06e996929792a54325933e5c9062c7788870a06d911197d622996e","id":"F:54c6928de9","path":"examples/demo-app/src/CheckoutService.js","purpose":"CheckoutService: drives the checkout flow from cart to order."},{"hash":"sha256:21e75a44d724365e4a2fbf5f1869f91eaeaf9fd69c03f07f8cde66b70870d64b","id":"F:bd02b28f17","path":"examples/demo-app/src/InventoryService.js","purpose":"InventoryService: tracks stock levels for products in memory."},{"hash":"sha256:ac71e8f3cb979ba0a56453517c21600c02311dbe2a9fd83cd2ecf66ee002ddd6","id":"F:b9d806ba4d","path":"examples/demo-app/src/NotificationService.js","purpose":"NotificationService: records notifications sent to users."},{"hash":"sha256:7a9e84c178fbc67605c88dc5b987f5d274dcb5c1777b41f2ca2e4b5c3efaa987","id":"F:1ecd18c4b9","path":"examples/demo-app/src/OrderService.js","purpose":"OrderService: creates and manages orders."},{"hash":"sha256:a58caa051fa780ade55ccfbc3f97afd559f68bd99894f9195909169964ec46b4","id":"F:ff3aef693f","path":"examples/demo-app/src/PaymentProcessor.js","purpose":"PaymentProcessor: wraps a payment gateway with amount conversion."},{"hash":"sha256:75e7eb2c2d84332172ed6a023336c5ef9e7e4ccbccbdd47eed778eec4c1e7232","id":"F:8bb1b57470","path":"examples/demo-app/src/index.js","purpose":"Composition root for the demo app."},{"hash":"sha256:1afae5fa52dc4fb9da6958558524c5cef0cf50cc63beafe735d92d3a8922a8be","id":"F:3c53926ecd","path":"examples/demo-app/tests/CartService.test.js","purpose":"function makeDb"},{"hash":"sha256:b2320331f4ba103ef635b1377172c522abcbb95be380f15493e6deaf38278292","id":"F:52caf3b287","path":"examples/demo-app/tests/CheckoutService.test.js","purpose":"function makeCartService"},{"hash":"sha256:1bb3ddc7d9966c00d23c01cf9d9ed06cb002a002f01f759d8382bb4c547d0f09","id":"F:f8168b956f","path":"examples/demo-app/tests/InventoryService.test.js","purpose":"function makeDb"},{"hash":"sha256:3748cc9dfe7d9cc71b49559646c276a835ceb00cf11a7ad6ec31af6f0035edae","id":"F:044b762a79","path":"examples/demo-app/tests/OrderService.test.js","purpose":"Tests for OrderService."},{"hash":"sha256:41ca78f6845a8d5b2a3386a2e5dbd906e8e15936f8af9edd91a868e3dda27627","id":"F:373a946d5c","path":"examples/demo-app/tests/PaymentProcessor.test.js","purpose":"function makeGateway"},{"hash":"sha256:6cbc7df60ec7300fd8a38f82a14cd39b637b69acc15477bfb94e5b69a69000a9","id":"F:d52b08ebeb","path":"examples/node-typescript/README.md","purpose":"Example: Node and TypeScript service"},{"hash":"sha256:f04c42db742b1a61a21e1a5e4daa6e556879454a2ddb5213a8141c82e08fc689","id":"F:93f0f5d3de","path":"examples/node-typescript/src/checkout.ts","purpose":"type Card"},{"hash":"sha256:d244fe19489b99550187b195234440ed263227b76c6fc2f4e4b3231a4bda724d","id":"F:ae227d695d","path":"examples/python-service/README.md","purpose":"Example: Python service"},{"hash":"sha256:22be80cafe6ef2f172dcea2a76083692cb4cbaad6fda65011a3e4ebac72dff6f","id":"F:7ccad64380","path":"examples/python-service/app/orders.py","purpose":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after d"},{"hash":"sha256:6ac7d0d8b8789da8454f3774ed4e4c92e595378f15b9c065fc150bfe2c2eebcf","id":"F:2c2cc77861","path":"examples/python-service/tests/test_orders.py","purpose":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50"},{"hash":"sha256:572478361a59803f53a72fd7e2ef8a7f189f3765c6b65d07ee7caf80ebd41584","id":"F:c72e6949b9","path":"fixtures/adapters/reference-adapter.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9e256013a4969962340b88bc4fbd1a18faa54136e9c40145752d699faa37ad0a","id":"F:fdaf1308e4","path":"fixtures/evidence-tampered.md","purpose":"RELEASE-EVIDENCE"},{"hash":"sha256:b69a37444b540b95bbc9414c30f90effbae363f0a41c61d107d2fb41def038ad","id":"F:a1411f1423","path":"fixtures/negative-controls/app-syntax-error.js","purpose":"Negative control: intentional syntax error in example app"},{"hash":"sha256:c68d242c675ce2ac4f466c43367a1f62b3c88685dd8d7a91cf56d82aa25a09e6","id":"F:6fdd929a92","path":"fixtures/portability/prompt-injection-host/docs/guide.md","purpose":"Host Documentation"},{"hash":"sha256:f3a7f116395c8dc6344c12e3bb59a33c043c77322adf73ae260d8390c3518cd7","id":"F:90f0999521","path":"fixtures/portability/prompt-injection-host/src/main.js","purpose":"This file contains adversarial content in comments that should not affect Modonome."},{"hash":"sha256:d5ef951e3b520b4c771cfbfd415cfadb7ba2e7f40b7c3ec6e58f2eaddecf54c9","id":"F:7fcbf6b32d","path":"fixtures/portability/schema-collision/README.md","purpose":"Schema Collision Fixture"},{"hash":"sha256:433f5d3005e295d639f837ed731df3d1fc9f69d87454a9059c20919cc1eb8e69","id":"F:c0714e4bf0","path":"prompts/modonome.bundle.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:05ea9c92a67465908f531a11893fb6e9e79800ae0754db9922348bfc37b408fc","id":"F:1c3b1b469e","path":"prompts/modonome.core.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:4f717a8789ae5bff9f95be1bdc42f7d8c5524217a166b837b487bc0aac54d6fd","id":"F:41623f0bcd","path":"prompts/modules/adoption.md","purpose":"Adoption pass"},{"hash":"sha256:6a9f76705145d5337c587b7f29a2e41b5a80fea39888b8ab99069027f4d99e13","id":"F:36693b0d8b","path":"prompts/modules/control-panel.md","purpose":"Operator control panel"},{"hash":"sha256:053fa9757f27a93ab0f30c796d714ae61d0d1f30b47ea3a93b81d39cf899bae4","id":"F:02359d48d5","path":"prompts/modules/gates.md","purpose":"Deterministic gates"},{"hash":"sha256:e66de7085c9cb23c1bf9e93144adfa2415b80134202d294c3cdc8b8a3aff2e0c","id":"F:c98f6b55e3","path":"prompts/modules/network.md","purpose":"Cross-repo knowledge network (Milestone 2, not shipped)"},{"hash":"sha256:5367fd6d871586fed38e0da4f9a287dec6baf532fe519d06569378f8f54f5481","id":"F:8f62475ebe","path":"prompts/modules/roles.md","purpose":"Agent roles"},{"hash":"sha256:cfaa37419ed0b88debeb9f9e2ce712a9e6e88e34b46a3b779722f794e47e0b88","id":"F:c324fab0cc","path":"prompts/modules/snapshot.md","purpose":"Repo snapshot"},{"hash":"sha256:bd2ccd3653b7c86cd3ad87326f69db6b788065c060516a2a7c5cffe2c27d7f45","id":"F:9a28b4e90e","path":"prompts/modules/state-machine.md","purpose":"Durable state machine"},{"hash":"sha256:3d7b33777faa2baf4d1b4f057fc4ea0381f6777f6ca342c607e760131208ddd9","id":"F:f5d313e9f1","path":"scripts/adapter-verify.mjs","purpose":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * "},{"hash":"sha256:9cb8c6696aa47049d5f8193269996b2849efba0073ef8bf5bd3b2a240c2267ee","id":"F:5b113a0914","path":"scripts/agent/action-queue.mjs","purpose":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued."},{"hash":"sha256:56b52308decd179cc645822572b7b57e2fef714fe9b8c58eaf4250493d6c47f9","id":"F:872221b1da","path":"scripts/agent/apply-patch.mjs","purpose":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker."},{"hash":"sha256:ba80f6381cc467a9c683002821c35d5b27c6019096ba81dc9c2c6ea2d1b401f6","id":"F:8d2cb93236","path":"scripts/agent/openai-client.mjs","purpose":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUr"},{"hash":"sha256:d9f7d2a9b42c3f1c8733b4082327011bc64cd445c82cded91b0ae1102e304ff8","id":"F:851f776227","path":"scripts/agent/parse-checker-telemetry.mjs","purpose":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true."},{"hash":"sha256:a21893a1726194e08208e2a6805c3e186aa9818c611b30234a4edeb9f63acbb1","id":"F:8b5a1f94c4","path":"scripts/agent/providers.mjs","purpose":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here."},{"hash":"sha256:92fe8a966146d773b203e831a54eb2a655572beae435b439aa325115a7fafd24","id":"F:fd660a117b","path":"scripts/agent/render-prompt.mjs","purpose":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read t"},{"hash":"sha256:990c960a7bdd181c31fba92eeeb60d7fa01360ecb16c2e93e6f41dff01e6c0b7","id":"F:304ce7b89d","path":"scripts/agent/resolve-role.mjs","purpose":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative whe"},{"hash":"sha256:e5779dca1895b87903260631ce711391e9a9eb5639c5c91158f7955f9a78928e","id":"F:2d6ef08990","path":"scripts/agent/review-diff.mjs","purpose":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into ap"},{"hash":"sha256:cebe0dc7f6340cb3f141af88716bcda80f3b1fb13ced87e84097dbcc9e0e6104","id":"F:2127a8caca","path":"scripts/agent/review-proposals.mjs","purpose":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mj"},{"hash":"sha256:abb3bebb9b8ef6e4bd91e48facd8e44d7d645556859045d19b6097676af5f55e","id":"F:37f4a5c04e","path":"scripts/agent/route-action.mjs","purpose":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the"},{"hash":"sha256:43cf44b9edf6feca7efb0f71f7e26c4a26ba530d6ef7a206ecb8e20382811cab","id":"F:ddeb486c49","path":"scripts/agent/run-cycle.mjs","purpose":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the res"},{"hash":"sha256:edeb925a87b920bb9b64a63c2a3218b0281b7237af6ad86ca1608b170e14d6fd","id":"F:aa77f227a6","path":"scripts/agent/tool-loop-adapter.mjs","purpose":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value "},{"hash":"sha256:3b7c9ec492dec9c378f582afef587b2ff23ec768bd982857ecdc4c0d77ecd04e","id":"F:aea3c05bca","path":"scripts/agent/triggers.mjs","purpose":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.ym"},{"hash":"sha256:87bc294cf5068d051e6d20d6056432da9925110e6f8db55b99660f8e36fc0bd1","id":"F:af6de66499","path":"scripts/agentproof-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9275fe5c20751f990b51b1021467f17e59250f4c38a45aa3b5b3a35daf6ace69","id":"F:5f7910375b","path":"scripts/arm.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:bd263b1245941e1b4041001b4afb0ba97b394dc5c9d8a1e1471ee33451bfd247","id":"F:fa49930755","path":"scripts/assert-governed-change.mjs","purpose":"function gitDiff"},{"hash":"sha256:f1141bf6b8313e4155e84d70e8fc631dd391abf85a19ee92218eb681161d6fe3","id":"F:c9493b5275","path":"scripts/audit-learnings.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:f8e07c6c13183b7fbf33578abd8ff3d70686fba63ffae44d0982a7368fc8eed5","id":"F:2e327963ed","path":"scripts/build-compliance-evidence.mjs","purpose":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object."},{"hash":"sha256:061241e18cce8d0dcf12c11db8c58927dea9d4ded02e2078c7def7f325a1ef58","id":"F:780c791407","path":"scripts/build-policy-attestation.mjs","purpose":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure."},{"hash":"sha256:dd530f7ea86c3a22ac08fdf514d8f7551be74ce4deb5f12d10fc1b22731d5a2b","id":"F:c4395c3023","path":"scripts/build-prompt.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:be7f3355b469f9afc2e06391aceaa8174ce7e70695aa6b0d573ac92274b07834","id":"F:9344d335a6","path":"scripts/build-release-evidence.mjs","purpose":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), s"},{"hash":"sha256:c77a817b7fc82d4ebee7775b907c151db19eac9863dbca666c8e0eef641f3529","id":"F:b16afebae9","path":"scripts/check-agentproof-registry.mjs","purpose":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:5c29d7dbd4be83018e5d25810618ca7a31df62a8e437b9144ea2554e2144d5ca","id":"F:4749cc43a0","path":"scripts/check-architecture-drift.mjs","purpose":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match "},{"hash":"sha256:b29bdd09ee9c05a106aff2d333fe6dd9842839d3dfe6b08a539674391590245c","id":"F:e8676a18b7","path":"scripts/check-attribution-fp-corpus.mjs","purpose":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (provin"},{"hash":"sha256:d216d2f5903d4bdc8eadf06f3dac38cae0f3df9786ab318881ab622a310559a7","id":"F:fc5d887ff6","path":"scripts/check-checker-engagement.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3310b9321df769c49419a6203cd88c79bcbd1a10655abba8798aa6665ef29198","id":"F:92d6903b5f","path":"scripts/check-decisions-authority.mjs","purpose":"Parse DECISIONS.md text into heading violations and Resolved-section entries."},{"hash":"sha256:d60e08a38e4005ed25ee758d7cf8e61ef9b751d0d32245c45a68c391066fa251","id":"F:87c30bdb4c","path":"scripts/check-drift.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:579e7403d192e1755d1ddf4a5f8567dd8ff14642db3442800583a173a1802c14","id":"F:9427d264e6","path":"scripts/check-edit-set-compliance.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3216227092f32ee7c6f96f49e7604bab76e808b6459685c22c1853f07ea067c0","id":"F:ace169adc4","path":"scripts/check-evidence-secrets.mjs","purpose":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync."},{"hash":"sha256:6cc5d9ddecbd7b9711cbd42d94e8aa0be9b4c3937308dceb03eda4cbe246e311","id":"F:fc21812307","path":"scripts/check-gate-dag.mjs","purpose":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no "},{"hash":"sha256:9702cbaa25ff0244bbfd29c1f63ae498861dd5e5ea84914860c672c2a762c875","id":"F:cc361bd05a","path":"scripts/check-licenses.mjs","purpose":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:50afc330cf4fac557f8b99eb5906ca2932616c858ea4811adcd03e542080fd37","id":"F:fd08562f92","path":"scripts/check-md-governance.mjs","purpose":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research."},{"hash":"sha256:3c601bbcdfc8b45a42b893b35a86a22321f7c5f56c6e03e591f64eeb2da92d94","id":"F:2d4c555ba1","path":"scripts/check-portability.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:abfc4b3e72056ce2540816630ffb66f166c0cfcc906ddc57ab2274ccbb88ced4","id":"F:c5938c33fd","path":"scripts/check-promotion-readiness.mjs","purpose":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate."},{"hash":"sha256:07bdd20c05fa3927668884c14b436f491487d1b590b057d9a8d8a4ed02a7ea01","id":"F:e7380d1444","path":"scripts/check-regex-safety.mjs","purpose":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped."},{"hash":"sha256:3313c93f4758a857263196d58fcb974ec3a68b431b6555e7db7c20cb922e55fc","id":"F:61296e720c","path":"scripts/check-repo-hygiene.mjs","purpose":"Helper"},{"hash":"sha256:cf3a2a2c4b0db7a9cced4f9df643afb5da1a2be8a3a9ae44bcc5c0138aac40d5","id":"F:4096620673","path":"scripts/check-self-application.mjs","purpose":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is p"},{"hash":"sha256:a44590cf10dbd2cd48800f5864c83a939307510be49125345ace97e1dbbec8e2","id":"F:8b8d3c46b3","path":"scripts/check-state-machine-acyclic.mjs","purpose":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned boun"},{"hash":"sha256:28cc840559474e83a1ee21dba95c35e28b268902f1a72fb2372147047d23f808","id":"F:ca0833ac73","path":"scripts/check-style.mjs","purpose":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase "},{"hash":"sha256:eaf537f197bd578bec1076407cda89e4c85973635231d5cdc3999ba527596b0b","id":"F:d6401dd73e","path":"scripts/connect.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:97433b7af1d83122e5a0b5dae4a3b004d4033de57d3c30803d82b670693bf2fd","id":"F:09ba331878","path":"scripts/detect-near-miss.mjs","purpose":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch."},{"hash":"sha256:3c6707888df8aaaaa3f402c119fbe05164b9c19b4c95df42abb4c3372a97602c","id":"F:6f247eb514","path":"scripts/dry-run-sweep.mjs","purpose":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing "},{"hash":"sha256:e1dcceba4e0522d0c121c0788768de2a53a50d140904067ae9643d931335aa74","id":"F:128b647d9a","path":"scripts/fleet-ledger.mjs","purpose":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse."},{"hash":"sha256:5cfd1768d2a265c8c9c50898d37377c3da90f9a0870fe804e32cea74fc5bbbc8","id":"F:522efae76d","path":"scripts/gauntlet.mjs","purpose":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rul"},{"hash":"sha256:563d044fe89ec39aa32f05e04406003e5cc38ff7850a003d9ad12da714eb5505","id":"F:8a10462927","path":"scripts/guard-ratchet.mjs","purpose":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote "},{"hash":"sha256:99de1dee24fee158bebf0282beea7c691e1db08ffcd225c96a3c861939b7b07c","id":"F:90e1fd2fd9","path":"scripts/hygiene.mjs","purpose":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves)."},{"hash":"sha256:ea137b388471eabcc768a50eaa87370d0d8ff22c5930538f2b02b7ee389abb7e","id":"F:a7ce0f6452","path":"scripts/install-hooks.mjs","purpose":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than"},{"hash":"sha256:d244edfb949175f0c6f949f0552a3b44c868873ac1fd477b8f9f3be0ebf499cb","id":"F:5a3543606b","path":"scripts/lib/attribution-fp-corpus.mjs","purpose":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word."},{"hash":"sha256:39eb059a2ae2d05ffea008a764c8ee54d4512f392d93c49cba0d1d0df7a26e78","id":"F:6e0bd62fa3","path":"scripts/lib/branch-name.mjs","purpose":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first"},{"hash":"sha256:1ad1f8a9b02017c0d197db0d6cc81425f8a7f7006aba988237647420fc958885","id":"F:245efb551c","path":"scripts/lib/canonical-json.mjs","purpose":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another."},{"hash":"sha256:ec29a7bc4bd47ae47abf9977d1ce9ea482f08c973cdaa5b07198c394fdc23bfa","id":"F:98529ba7ea","path":"scripts/lib/capability-flags.mjs","purpose":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/c"},{"hash":"sha256:a602b02d47546bf2f61d1ce0115814be8d94f25d26f8944bc2745caa4af2ddc0","id":"F:2d93cea2d4","path":"scripts/lib/cli-args.mjs","purpose":"Minimal argv helper shared by scripts that take `--flag value` pairs."},{"hash":"sha256:cac7448be7d7d4dd22883cdcf78a7f351b926cd087505967814a1c2ff5dee2be","id":"F:e4ff19bbe2","path":"scripts/lib/commit-identity.mjs","purpose":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendo"},{"hash":"sha256:437e6ab7ef1994b7b6f1c508dfb7b50e66b454cc1c6bbbca20921583425f5741","id":"F:d480e40c97","path":"scripts/lib/config-validate.mjs","purpose":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers:"},{"hash":"sha256:784a3f9087775417d015cb26550348ea7b24b163a99df58d7004ad5a09dc3e69","id":"F:1a19f02364","path":"scripts/lib/control-panel-audit.mjs","purpose":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary "},{"hash":"sha256:ccc5c76cd7b844283a20f6e510b6aae9bf403f654cbb16bf1e632162e722a085","id":"F:4a7eaceb5c","path":"scripts/lib/detect-attribution.mjs","purpose":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the fir"},{"hash":"sha256:4b4b88d9bb97bd5f214e3321b995b646f067843323838c567bf2a73206bc1369","id":"F:0cacf66a3b","path":"scripts/lib/ed25519.mjs","purpose":"Raw 32-byte public key as base64, accepting either a public or private KeyObject."},{"hash":"sha256:71b31aebe22a8c98aafef65bed9f562e02b56bc00515de949a947f30ad9ecc9e","id":"F:9a72895a04","path":"scripts/lib/file-classifiers.mjs","purpose":"Test files: any language."},{"hash":"sha256:a3488a4f708323ac66b888445195aa30435c0447782db57b995a3599ad92f935","id":"F:ff2c4a08a4","path":"scripts/lib/git-scope.mjs","purpose":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo)"},{"hash":"sha256:521f61f9241e90e815aa0be486910b589b4eeaaa40b81d80b7c3c21cdf4887cf","id":"F:cdbe769ed3","path":"scripts/lib/github-api.mjs","purpose":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin."},{"hash":"sha256:151594baff293acbee5d59624d372828624fc07b8ca255ce1c69e894136afcd2","id":"F:f51cba9beb","path":"scripts/lib/graph.mjs","purpose":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the"},{"hash":"sha256:943e69c8656c227f4aaec006181a2ccfce440d491533c7d254a3ed1a57446a01","id":"F:34cb2b6c48","path":"scripts/lib/jsonschema.mjs","purpose":"A small, dependency-free JSON Schema validator."},{"hash":"sha256:d7e0fde286931884db99d3a1a496f428bd6c68fbddf5de8e75cb0fd7a6209a51","id":"F:594f505f11","path":"scripts/lib/lang-adapters/generic.mjs","purpose":"Fallback extractor for languages without a dedicated adapter. It captures common"},{"hash":"sha256:8e61f09199636a2a7bd4ed653ebb4176fd0f5c41f8f8719956613f0227db1122","id":"F:ffe5c1269b","path":"scripts/lib/lang-adapters/go.mjs","purpose":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding l"},{"hash":"sha256:39f6d32bbcecdcc56e34c94fa12cd68b0e0f303302324d2ce24d5fb85cae150d","id":"F:2554ddd30c","path":"scripts/lib/lang-adapters/index.mjs","purpose":"Resolve the adapter for a path by extension, defaulting to the generic fallback."},{"hash":"sha256:31bd1870b3685735b96c6fa032a6c9b7601c963658638d182dedf17103802d1c","id":"F:c598a2d684","path":"scripts/lib/lang-adapters/java.mjs","purpose":"Dependency-free signature extractor for Java. It captures type declarations"},{"hash":"sha256:7f8e7109694e05aadc965af340c67bab5cda5a9c0d0495535b5cf7385ed5a95b","id":"F:36419aa427","path":"scripts/lib/lang-adapters/js-ts.mjs","purpose":"Dependency-free signature extractor for JavaScript and TypeScript. It scans top"},{"hash":"sha256:752af1565feb9bf566c2683e75abb951d701ab390777e88c42baf1a6921b50ae","id":"F:3213d03b72","path":"scripts/lib/lang-adapters/python.mjs","purpose":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and im"},{"hash":"sha256:110290b3d6d591798432e680943ee28a30281a47504da121b58e834fa09c31e9","id":"F:cecdb96382","path":"scripts/lib/lang-adapters/tree-sitter.mjs","purpose":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered."},{"hash":"sha256:d6c309ff2f4bd2cc17f802ca282a312583327a153f10049310dbe98a6dad1f08","id":"F:4ebb5aa8a0","path":"scripts/lib/learnings.mjs","purpose":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evic"},{"hash":"sha256:e18e2c920e97766971ead19dfa0b82eb4911a2fe957cfb73ce7fe1ca2b5eac71","id":"F:2b9c43b0ca","path":"scripts/lib/merkle.mjs","purpose":"Hash raw file bytes (Buffer or string) into a prefixed digest."},{"hash":"sha256:60fea90ed1969e529114e0c8c88a58607618b0570bbc9c735bc56011da83d561","id":"F:e9f1cc1e5d","path":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:38ac9166a3c80ca01dc4aaeb0167cf9f4f1f138b707f2212528a70bbb3f678f3","id":"F:91e24dcac0","path":"scripts/lib/message-catalog/advisory/build-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:896322295191ba28f7c351678ad86b1b1fcdb22b729484173b52b8dc0068431b","id":"F:99251bc045","path":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:83f8ea50cb0ade3033e437971998189dd92da02f85c41655960254d08f8531c3","id":"F:c6bd51a324","path":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","purpose":"const MESSAGES"},{"hash":"sha256:56d58644294be2ef66bde21bac0dff8edca53bd83f4990fb809531cb2a0495c2","id":"F:1ff2bf39a4","path":"scripts/lib/message-catalog/advisory/github-api.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8ef6c2e14a8d0b58ece3bb7b3e1a7f98d780e799045c8ec2aa83d95379709441","id":"F:d328f97d94","path":"scripts/lib/message-catalog/advisory/hygiene.mjs","purpose":"const MESSAGES"},{"hash":"sha256:90d0f7c077bacdb650e433022ac8e2c968d7d8253dda7cd4e6c71aad0721ccb9","id":"F:4d08d5472f","path":"scripts/lib/message-catalog/advisory/learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8f8037a5cb63473a4912543f0203211419999bb61bde7d77fc6637a770f9283f","id":"F:d8e37c4449","path":"scripts/lib/message-catalog/advisory/migrate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:013ac5fd17e1afecd4793e8f132990132e1b4191fddeca1e89248bc236ec9c3f","id":"F:9b01a5cd4d","path":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","purpose":"const MESSAGES"},{"hash":"sha256:dcf18fb07eb5c297b55075a40d7a267da2f4632f1e23e0b9dd19b73578ba9793","id":"F:d288a78085","path":"scripts/lib/message-catalog/advisory/sign-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7aba6be92f59e9b9e0c22e1d4163686fce03fc729fc6097689f9df011b2c1a1a","id":"F:9a32917e56","path":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","purpose":"const MESSAGES"},{"hash":"sha256:e6844e187fe342bf462bbec7dc26ae8ca192285c46ed51cd6d2f82c7460df954","id":"F:dd58ae3791","path":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c63edcd93cab1923edcfa9e9e1fab374e4eac71b15fdfa171e26d787cf1314d9","id":"F:09ea014068","path":"scripts/lib/message-catalog/advisory/verify-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b6a5e7e1c42beacee11eb5a45f0f13999566e46c9fd486797a2ceb483f36f294","id":"F:da9133a29d","path":"scripts/lib/message-catalog/agent-run/action-queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9151a420940e33c897078aea7224430d08cb455aae601e44a078073cbe37cedb","id":"F:aa27d254da","path":"scripts/lib/message-catalog/agent-run/arm.mjs","purpose":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or dow"},{"hash":"sha256:6658d1a5b449f2ef7e2a8340fcb477ddb2e64d5dea0b79e31da5adb92a982ee8","id":"F:9616513cb6","path":"scripts/lib/message-catalog/agent-run/disarm.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0934bc4ec371ff52ae9f3e431d7c429ac048d7e0d663487f29c3a481bf380dae","id":"F:9803feef4a","path":"scripts/lib/message-catalog/agent-run/openai-client.mjs","purpose":"const MESSAGES"},{"hash":"sha256:4572c1be5d02623ba2bb952d81f8690ee828af9a8122439c64ec4d534d7f1b0a","id":"F:e948251d2b","path":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3586e3392442081e34ff5d91ca35569cf944c745c236df06978711a3726e0a5e","id":"F:5d52d97b8a","path":"scripts/lib/message-catalog/agent-run/queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:17f6398c9cb42806adabf7da20358039e55b6f7ac17715e85707cc6edd63df34","id":"F:a5822fdd03","path":"scripts/lib/message-catalog/agent-run/release.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c58f58b0e6aae4da93c0bc1922a47b9485abbe4b8cfa10bf31edb37942c5fbe5","id":"F:33c4d744f3","path":"scripts/lib/message-catalog/agent-run/remediate.mjs","purpose":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, "},{"hash":"sha256:7dd6e91aca949390bc9be664d950656960f20631ee69a4c14efae7ed61005d5b","id":"F:59b2499e4e","path":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:40bedb377bf613e45e81cfa30972c95cd5de3a4b36eaf721ef85503deb44c64d","id":"F:e2025a4e0c","path":"scripts/lib/message-catalog/agent-run/route-action.mjs","purpose":"const MESSAGES"},{"hash":"sha256:09d36c5933378524789996b727dac4db3cdedd84e1a2e9a0f22c3cc66d977bd5","id":"F:acc3f6b466","path":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","purpose":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advi"},{"hash":"sha256:4b3f343aa8615dec423fbddc2c090cb6ef30bd01589e8b164da68b6b79f915f2","id":"F:313bcfac46","path":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9735efc423677e7249cb9b85b4d7b4144a3aaa377780279637bc281408429a2d","id":"F:6a86908a3e","path":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9f526f99d6bbdeb34a67e2b03cc8bc011ba3d45875923a4397fd3220df6670ac","id":"F:1127892e72","path":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","purpose":"const MESSAGES"},{"hash":"sha256:db26343cd0406efc3d0147aca404aaac49ab5111b5e27bf7d6281473febdf79f","id":"F:964f89b6cc","path":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","purpose":"const MESSAGES"},{"hash":"sha256:eb0cfb783b0b42137f4f059e1a0bb6c713c511a335672b35298e5cd0bde4a6ee","id":"F:40d8f235fd","path":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3d6c96d1905aba0e8b1b3dfdb98a50cff5c6619329afdf92eb0c53c6c21e7d1e","id":"F:35d4a12b63","path":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","purpose":"const MESSAGES"},{"hash":"sha256:15411f6601e2524b7760c0b4ce06f61bfbaae59c924360d294dc104aadefcf16","id":"F:2715f09f24","path":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","purpose":"const MESSAGES"},{"hash":"sha256:62195cc465a6caa11f1bb8ac74b69e363a2015c75f072b2cd3a0a2e76bffc0ae","id":"F:a8c32b8f15","path":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:de8580a9807af52726a195ff6bbea0ba59024896e43e64ad563209a1ae931607","id":"F:b502a0fe75","path":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9b1d901e95fe1a39f690959333ef957b63c9b647fb6bdb8c90d95297d9262e7a","id":"F:2215d0e1fc","path":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0b53053e37e90fe399af325eecb321bd0259c7ec1009f414d40353c11e1da95d","id":"F:ccb72910b3","path":"scripts/lib/message-catalog/gate/check-drift.mjs","purpose":"Catalog entries for scripts/check-drift.mjs."},{"hash":"sha256:986f0df07a4720d88fbbc1b5742636295b56b156f0a85ef1dca5537551f89939","id":"F:05a0f0d5a5","path":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","purpose":"Catalog entries for scripts/check-edit-set-compliance.mjs."},{"hash":"sha256:2733747219e41422cb94f686f76ae82cabcdf6a6b04a8eb5e5ac7f45e93ed55a","id":"F:efa02030ca","path":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","purpose":"const MESSAGES"},{"hash":"sha256:74ed10d3af65d1c4cfd60c3bc16c0d223ba6ab2119cbba1436786a2d287328b0","id":"F:240ace7a8f","path":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","purpose":"const MESSAGES"},{"hash":"sha256:88f3cd8aef67912ef0e255cb4741653c5477fc1a4c6beb8a30f35aa142f1598e","id":"F:0c731e3460","path":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0dbe8208bead033ac950619986c6aa89ca356ba356dc77a184134a542606677b","id":"F:3835919e8e","path":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b276d73e960984be67d9728b2e2df11212942149bafcbbeeaa64265cb7d0ab8b","id":"F:3f1216fc11","path":"scripts/lib/message-catalog/gate/check-licenses.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5f842574f39f155e2a8da073e72208396eae4900cff3e05b455e3da8af71ae12","id":"F:b25dcdad19","path":"scripts/lib/message-catalog/gate/check-md-governance.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0da9a0f1224bb89807786944653c7da3e344f26722b53faaed0406518f23f0da","id":"F:23dbdd7e76","path":"scripts/lib/message-catalog/gate/check-portability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:d0b4806531e17afd05fe7e81b647f61dc3fc6633c4cce3282a93277fbba86617","id":"F:973aca5f3e","path":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","purpose":"const MESSAGES"},{"hash":"sha256:bc09937690d9279d167eebde956fd80e6d9da09ba5139df802dd1a5ff6bdfe80","id":"F:b4f4e16ca1","path":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","purpose":"const MESSAGES"},{"hash":"sha256:973c6d0a27ab11310c8414b6bf85549764f86882b6fa6bd55163b716b5eebee3","id":"F:597cc7ae15","path":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","purpose":"Catalog entries for scripts/check-repo-hygiene.mjs."},{"hash":"sha256:da60e62990a8ee27166781413a9718cd755c64104e7ad801a8447c56200e4100","id":"F:de188c1b79","path":"scripts/lib/message-catalog/gate/check-self-application.mjs","purpose":"const MESSAGES"},{"hash":"sha256:6e35dc5881832f52e637ba331d6361c7ee8fa741fd4cbf88e86a520ed02374f6","id":"F:179564da6f","path":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5e7ec0986719e01a5f2d8bd52df29ca0e60cc88f511822992031be12848a4e41","id":"F:9dbf431d3e","path":"scripts/lib/message-catalog/gate/check-style.mjs","purpose":"Catalog entries for scripts/check-style.mjs."},{"hash":"sha256:53cf657d4da273c63e8f24ee82f7582658d90fed61a0ed127950462ab7c2f197","id":"F:b2efd505ef","path":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c7bbeb3b7d9f0e776386632aa64287228eac6fc294f6b166c67209a2606a80d7","id":"F:e6677dcd37","path":"scripts/lib/message-catalog/gate/check-work-items.mjs","purpose":"const MESSAGES"},{"hash":"sha256:306896f7104deb562b7631cbc392ed01b500270b0225a1da73ac44002dd5c568","id":"F:86fd2cf669","path":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","purpose":"Catalog entries for scripts/guard-ratchet.mjs."},{"hash":"sha256:257f8f916af5a3759c0fe7845403f145f751db39db0b423034170e37ff6b4434","id":"F:5d02ea0b02","path":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","purpose":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a find"},{"hash":"sha256:74717fcb0f99085d9d122db58e8e4ba94805d7322aef6bc620cf0d3cc199c774","id":"F:5b5b4ddcae","path":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","purpose":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (age"},{"hash":"sha256:ef1721e2305e6bb4ce9d7161f7539715485f76a36d1fec7ed074ab34049cd756","id":"F:a104667369","path":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","purpose":"const MESSAGES"},{"hash":"sha256:1bcf14f7da5da91f3110ecfeab482e2df7ebdedddb1ab0566a7f1a29dd2f5c1a","id":"F:ec3aa9930a","path":"scripts/lib/message-catalog/gate/validate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7c112cd9b24871b493e467957094dfd12be3a18b9b982fdf43a73dc252b1a206","id":"F:bf4e255c6e","path":"scripts/lib/message-catalog/gate/validate-work-item.mjs","purpose":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune"},{"hash":"sha256:24902ba5e2972a58c469e213a43a9029b202d1cdd8b4684dd204880a6175d7db","id":"F:03f476958e","path":"scripts/lib/message-catalog/index.mjs","purpose":"AUTO-GENERATED by a one-off script during migration. Aggregates every"},{"hash":"sha256:1169c59a31929d875f93c908e8979f38939fdbeedc3fc8c296e40b25b01522e5","id":"F:f41378fed0","path":"scripts/lib/message-catalog/panel/control-panel.mjs","purpose":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wo"},{"hash":"sha256:0694d9599d0f9d3dea44ee03d796aff6c9bde8ae2229bc7766948b9100274297","id":"F:05bffc70e9","path":"scripts/lib/messages.mjs","purpose":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries."},{"hash":"sha256:4f7779cf5392e036bb31212825c280df1825f69daaceeba4812ea39ed04d0882","id":"F:9a3e8ed7d2","path":"scripts/lib/near-miss.mjs","purpose":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identiti"},{"hash":"sha256:d60fc11156d34e1e740eb83a35af450377fa564f0d6cf64bf73422407451a6ed","id":"F:12c7a4e461","path":"scripts/lib/packet-id.mjs","purpose":"Content-addressed packet identity (ADR-016). The id is sha256 over the JCS of the"},{"hash":"sha256:facc1024c7256850c5287a76a89e091c1db28a5046cf9451b11379f16b242a70","id":"F:4db1101024","path":"scripts/lib/policy-manifest.mjs","purpose":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored"},{"hash":"sha256:3658a4a3013851c5dcb36c815d539c96ada209792b97326f384bfc670fb9e365","id":"F:8ffb11f281","path":"scripts/lib/remediate.mjs","purpose":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis"},{"hash":"sha256:22f072717e361c8cb6eca4926f99b8aa51fdb569f05b7586fb82f769c768f2e9","id":"F:ae46bbab81","path":"scripts/lib/repo-detect.mjs","purpose":"Build the small file helpers a detector needs, bound to one target directory."},{"hash":"sha256:65a01363eb81852d5ebbd1a54f3127224aa8e3d69b26e341353d7374865a87de","id":"F:2f3e98ab2c","path":"scripts/lib/risk-surface-rules.mjs","purpose":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- a"},{"hash":"sha256:7ea23105d1a1d923578a3c606d67aca39d5d6a01c06edc0da696b4fa2b6f8290","id":"F:b014028f57","path":"scripts/lib/run-gate-capped.mjs","purpose":"Thin wrapper around spawnSync with a hard timeout and output-size cap."},{"hash":"sha256:495d8f38fcbb601695c8f161eb1b02aea33adac82569ddd8bd6a002495589f9e","id":"F:68c4da7fe8","path":"scripts/lib/secret-patterns.mjs","purpose":"Returns an array of { name } objects for every pattern that matches text."},{"hash":"sha256:be57418797ef4ee54f3c3e71d7b3b13a89b5adc1ce0fbf9616db542bacc23156","id":"F:1cf31c4792","path":"scripts/lib/snapshot-anchors.mjs","purpose":"A short, stable id from a string. Hex keeps it deterministic across platforms."},{"hash":"sha256:d3e330978bbbc5f009688d69510b6c683fb59eaa66f154df8f911bd0a53fd278","id":"F:119e3c0fce","path":"scripts/lib/snapshot-cache.mjs","purpose":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option"},{"hash":"sha256:237f5b4282a76f71b0a2953e54c663750f138b5454aed474ea906a7f02587692","id":"F:dbb9c92ca1","path":"scripts/lib/snapshot-core.mjs","purpose":"Detect binary content by scanning a prefix for a null byte."},{"hash":"sha256:b538e22f73b15770c75edab736311cf48d00324e81e8aab01c6f4f274a5445ed","id":"F:015261eab0","path":"scripts/lib/snapshot-graph.mjs","purpose":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\"."},{"hash":"sha256:60c433da29ddd383027d0bb950d4cc1b4e74437b7448fc71e57e69ad4cf49ef6","id":"F:4b91a9f65b","path":"scripts/lib/snapshot-redact.mjs","purpose":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked."},{"hash":"sha256:97f8769695906c86e13308edb05def7aaa9fbcd592f29ee56d5c4d346e62a3a5","id":"F:cb66095cb4","path":"scripts/lib/snapshot-walk.mjs","purpose":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), *"},{"hash":"sha256:642e97312574db19dec8b678ebf04827ddcceecb6b5d7f960823006045ac03f2","id":"F:7944059823","path":"scripts/lib/token-estimate.mjs","purpose":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which"},{"hash":"sha256:3cf0f082a2ffc271f28e040c0432af60005821bc9e72152b73598d200bd4e204","id":"F:a1baa3f01d","path":"scripts/lib/work-item-staleness.mjs","purpose":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing o"},{"hash":"sha256:773578d3c2dc5529756fcbce2ad2f9d157a79d6b06b5772feee7d0c9bf2577c3","id":"F:cb3c5f7715","path":"scripts/lib/work-item-validate.mjs","purpose":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (the"},{"hash":"sha256:d53fbc6f62dfaab45537134168c78b39e1d4aa41ceb079fb829fb5876466c5de","id":"F:1575110130","path":"scripts/lib/yaml-lite.mjs","purpose":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string."},{"hash":"sha256:0209679156fb05ba27ff06b76b8eda2eeee8afd83c15b6e4a7e73edc23d8ddb1","id":"F:ab5077147a","path":"scripts/mcp-server.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ee850affb3bf19cd5b253535cf806dc341e885ff118589641c3208cbce63019a","id":"F:9d69a6b766","path":"scripts/migrate-config.mjs","purpose":"Safe defaults for every lever. Migration fills any missing key from here."},{"hash":"sha256:93cd048e0c8b17b97337fbb587101af43b3ea3d289e155fbb9baebeb8d4755d9","id":"F:7232ada2da","path":"scripts/preflight-embedding.mjs","purpose":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`."},{"hash":"sha256:b348d37fc2e50832baadc43039a306a4b5049507debcabde313087323b882d78","id":"F:ac11b5379f","path":"scripts/promote-learning.mjs","purpose":"Slugify a lesson into a deterministic ID."},{"hash":"sha256:47e7d2ead1129a6bd6a4a2202883e524778c990715b2027c5bca3b701ee5e079","id":"F:e9479e1a3b","path":"scripts/ratchet-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:08c26d5e35bea28010341cc485b8bacbc1def7ecf03d812a9b9d4d3ed7899054","id":"F:edf42fb1af","path":"scripts/release.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:a109bb6467a8c6c433d7839dfeeb8f605c0ed8f4fec6ceb69fdf3870be25d3d1","id":"F:1e5ef6ba70","path":"scripts/remediate.mjs","purpose":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-"},{"hash":"sha256:c03c8e271e9be99be123b63baca4bf1e24818c705bcd486d45eef82df7423d27","id":"F:3b382f95c0","path":"scripts/report.mjs","purpose":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he"},{"hash":"sha256:edda86a8c8fcb3334fd459b232cd3b7951b8d23441baf7cc9d0b2ae69c65472f","id":"F:116adfb9f8","path":"scripts/risk-surface-guard.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ace3ba225e4ff802da64a42e737843913c708e466602ab98a23151fb34d642ad","id":"F:edb11415f0","path":"scripts/run-gate-pipeline.mjs","purpose":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name."},{"hash":"sha256:cbe2d6ea83610d9a33c48f6dce83e514d1672687c85a032a873539b2cb2e5914","id":"F:5e450ff82c","path":"scripts/scaffold.mjs","purpose":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp"},{"hash":"sha256:d215c06b5aafdb9ff71a4c1ada37e33b202a688248f8098d8d238b4f30f72d74","id":"F:e11f907cba","path":"scripts/score-proposals.mjs","purpose":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale."},{"hash":"sha256:f6388f045a2cd30e25ab513e6b47875572c02ff15a17340b081446188fd31b4f","id":"F:7b3e38c9a6","path":"scripts/sign-packet.mjs","purpose":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rath"},{"hash":"sha256:cb7db504e88426d42954eb37c6b4695b11c738a38483e905b146d18f1654689d","id":"F:a0d489df6d","path":"scripts/snapshot.mjs","purpose":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yield"},{"hash":"sha256:3952dac12800b17c8153ed462ab6073b0ed24af0a188e898e5491f324fe84cc1","id":"F:8abf9e432a","path":"scripts/sync-site-data.mjs","purpose":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read wher"},{"hash":"sha256:aa0aa9abb59be3ae19db00c9ef7db9d6cc08045d3416b359875a1ec76b9da0f2","id":"F:23917c6197","path":"scripts/test-prompt-behavior.mjs","purpose":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns "},{"hash":"sha256:56007d9acd788c62cb891a03f1d22790b844390830a7c5aafda1347e4b3a4d89","id":"F:d135cffeaa","path":"scripts/transition-work-item.mjs","purpose":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older i"},{"hash":"sha256:f89c1fd863164fde2d373634069d30c4d3631be96a9768d5630901b52064d54b","id":"F:3b96b6dfed","path":"scripts/tripwire-check.mjs","purpose":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor bef"},{"hash":"sha256:18d20c24e1fc001459bc1926c55be66dac198f93ec7bf15e02be87818761585b","id":"F:65193a9799","path":"scripts/validate-knowledge-packet.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:240b429dd6418ed77a6ecad1a0635969884c96035107da3eb3e06183e7158e01","id":"F:0c1c5ad5d9","path":"scripts/verify-packet.mjs","purpose":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather t"},{"hash":"sha256:ce19e9a81b804f9827f62afc8d794ffbb68bdab9e5a744c9a0efc2303356ac66","id":"F:669d2a51f4","path":"site/README.md","purpose":"Modonome landing page (modonome.com)"},{"hash":"sha256:60feb6f02f574a9b483a6c31048de9ef990f7bed92e0ac12c5d85a3942da6051","id":"F:aef9cf1e27","path":"site/index.html","purpose":"class Component"},{"hash":"sha256:41cc004d9a3d9f8d0701d181a235ae206d248470c009de18176e540f6b4a1888","id":"F:6a5934a79d","path":"templates/.github/copilot-instructions.md","purpose":"Copilot review guidance: gate integrity"},{"hash":"sha256:1e6ba7bac7bbcc6d85acac2228227493609359e98bcaae632ede494533923f87","id":"F:037178c793","path":"templates/.modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:1d2f92bf5237ba63d8447070c29beff13597b9668ab64f9f017a2e485bfe6ff7","id":"F:26c8e3a19a","path":"templates/.modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:515a65a35b","path":"templates/.modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:8918ad8e3a343b8450ba620de91ea940fb320d0cfd4c2b312a035aa6fe9fdc6f","id":"F:e27748d089","path":"templates/.modonome/STATUS.md","purpose":"Modonome status"},{"hash":"sha256:d528b04b9da3809145bc30439e8a0577daa9d4cfd059d7436aec7858660ec7b0","id":"F:75c1125713","path":"templates/.modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:1a28680281da45ca68d4e4d912b5cc4147c97f5d61c2b95d17513a69804347a7","id":"F:2148814594","path":"terraform/README.md","purpose":"Modonome org-provisioning module"},{"hash":"sha256:faafda4763433ac754f4936ae5a7545fe0f2aac848ef92003a78b1ac6f8fdef3","id":"F:195e9217ca","path":"tests/action-queue.test.mjs","purpose":"function tmpQueue"},{"hash":"sha256:66d197135fce5140ea1ee62cdf60ce50c1f2565d5589e95fce7657b99d8bc830","id":"F:cacaab56e1","path":"tests/adapter-verify.test.mjs","purpose":"Coverage for the adapter conformance verifier (docs/adapters.md). Tier 1"},{"hash":"sha256:f03b2f065139b4a025ce69bef63c9ab58d672c1674bcaf9628bc18e6a3013f8d","id":"F:18f569225a","path":"tests/agent-model-fallback.test.mjs","purpose":"WI-041 (ADR-039 follow-up): runtime model fallback in the loop. resolveRoleModelChain"},{"hash":"sha256:c6049e544a248e0df041509b989f0e4717b4df24aaa212aeb2ac984a48fad4d0","id":"F:1bc6d1449f","path":"tests/agentproof-attestation.test.mjs","purpose":"Tests for the AgentProof conformance attestation (ADR-042). The Statement shape and"},{"hash":"sha256:270640c566b3fb72ea5a277b4db30f7ed12cf51cc0e63472de3b6ebb4248bc88","id":"F:940d5f4399","path":"tests/arm-disarm.test.mjs","purpose":"Tests for `modonome arm` and `modonome disarm`: the guided ceremony that flips"},{"hash":"sha256:43bbfe482e04ee3d5f5310c89bb7ea589d5a9a57078fea7d007331560f81332b","id":"F:60548316f5","path":"tests/arming.test.mjs","purpose":"function tmpRepo"},{"hash":"sha256:0d90c61482079b4e23bcd539618b23439c4b11c4e026cbc7e677a3328f5df0ea","id":"F:8fe56e5618","path":"tests/chaos.test.mjs","purpose":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure."},{"hash":"sha256:825ad054cf87ff7205f4d60e6cb87fa820f7aeb1addb4b1d005dc71a480cbe5d","id":"F:564b053598","path":"tests/check-architecture-drift.test.mjs","purpose":"function makeMinimalRepo"},{"hash":"sha256:a9ca00820366b64f0e6c4b6d9108c7d0e7b152671ff5fe423e428ef0710f9f4c","id":"F:df4b55ecef","path":"tests/check-gate-dag.test.mjs","purpose":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says."},{"hash":"sha256:30690fee946ac10a3ecc618e5909fc2bb31f51b111173e2f2e52d999f2d01443","id":"F:0391f3b249","path":"tests/check-md-governance.test.mjs","purpose":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under te"},{"hash":"sha256:91b3a910fa42af06c4cfeba5b735c93e31a0268ef94c5c1c94f77bef05fb8497","id":"F:e359adb110","path":"tests/check-style-lexicon.test.mjs","purpose":"Tests for the Lexicon Gate wired into scripts/check-style.mjs: a banned term from"},{"hash":"sha256:4cba8865613c76bc3e95b3308f1be5cc76e5ba7b2a1003a85602f95e4c0f8aa6","id":"F:40e4f39b59","path":"tests/cli-dispatch.test.mjs","purpose":"function cli"},{"hash":"sha256:c803e7cccf71bd7bfc883e20cf0612e043e0ca62ef8b64215e32f1a71209b75e","id":"F:3ea503e7c0","path":"tests/compliance-evidence.test.mjs","purpose":"Helper reused by the mapping test."},{"hash":"sha256:cb57af34873242513701019e39d38d9336899d37c263372f90fcbbc74ef417ff","id":"F:5eff4122c0","path":"tests/config-key-parity.test.mjs","purpose":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`."},{"hash":"sha256:b1abc614f5f29ceacb2dbe8490be13605cbbab487feee98818689423b5fb451a","id":"F:5956278014","path":"tests/connect.test.mjs","purpose":"Tests for `modonome connect`, which registers the read-only MCP server with an agent"},{"hash":"sha256:2037529df3e0aa6dd33508e799f1cf299758373e3daf4c18dfa3b6920e803cdb","id":"F:d0da1cab80","path":"tests/control-panel-ownership.test.mjs","purpose":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config."},{"hash":"sha256:a0d9d96354cbf39c606470a59f64a93247ac045059b0e654319de426b68fb0c8","id":"F:e00aec45ce","path":"tests/control-panel-work-item-writer.test.mjs","purpose":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory."},{"hash":"sha256:6b5ed813cc8f8442ef1975e65f3a1cad7db442e8f7323a668e8acf41d13f5274","id":"F:8b2f3dbcba","path":"tests/control-panel-writer-nested.test.mjs","purpose":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state."},{"hash":"sha256:4e1f4b2cf905b3e5f11747628e019caeb327d4f1d9b77220575715ab16506836","id":"F:f921eecad7","path":"tests/decisions-authority.test.mjs","purpose":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }."},{"hash":"sha256:c80f660e875231f20615c19af04c4a405427dd7822dbbf8b48334c6d9aa4f8f3","id":"F:b70824b13e","path":"tests/dependency.test.mjs","purpose":"Read all .mjs files in a directory (non-recursive by default)."},{"hash":"sha256:c2a5852ebeed046ca14df04e80f524f33a60f0608226bb36a19b55bf6ed7ba95","id":"F:778c33cdc0","path":"tests/dry-run.test.mjs","purpose":"function dryRun"},{"hash":"sha256:56a9c14022247f4b8398927593ddee297edf4c37cc70fcc82446998691b173eb","id":"F:9cbe9238f8","path":"tests/e2e.test.mjs","purpose":"function tmp"},{"hash":"sha256:4cc22fbbf064820e9641e044e84851171e2b401d1f18d0d946875e9bce143951","id":"F:cc65dd1342","path":"tests/embedding-safety.test.mjs","purpose":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into"},{"hash":"sha256:e2138a1e49810b80b6b1bdd808e8139b7d586bc22874a53008f044e7faa897bb","id":"F:06b982f5a2","path":"tests/envisioner-role.test.mjs","purpose":"Envisioner role (ADR-039/ADR-040, Milestone 5): scoped innovation proposals from an"},{"hash":"sha256:c884fce8a5b2e930ae9a000272d3a4faa55a3e017229ab755bb695a370aec720","id":"F:571aa2f3ae","path":"tests/fleet-ledger.test.mjs","purpose":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals."},{"hash":"sha256:c4b0075f9fbb43245412a6ea6c9b4a8e7e43d6a6aab66477de3323fbf14d5046","id":"F:6da7bd8294","path":"tests/gauntlet.test.mjs","purpose":"Tests for `modonome gauntlet` (see docs/adr/ADR-041-gauntlet-replay.md): a read-only"},{"hash":"sha256:7aa6848dd94a7b5dc83ae094f4175a91cb90d6c063ac64311cdf78757efd7f66","id":"F:4dabd020df","path":"tests/helpers/mock-github-server.mjs","purpose":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @pa"},{"hash":"sha256:8f4842a323938cbfa8f9b1a0c8200938b87cee281a26dea3bd75f76d6c92e0c8","id":"F:eb14a0bdeb","path":"tests/helpers/mock-openai-server.mjs","purpose":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] "},{"hash":"sha256:159dd5948af7b763cca4920cd28fd95d9df9dc496cfbf88e69c7d776357163cc","id":"F:9bb94e1b40","path":"tests/hygiene.test.mjs","purpose":"function cli"},{"hash":"sha256:aa5c6b359e7da8f7b228dcb2a6e39a272695c3c9a4bb1a8bc512808e505b6b82","id":"F:cba8f1d03b","path":"tests/install-hooks.test.mjs","purpose":"function tempRepo"},{"hash":"sha256:27e8759927ffe5f7f0342d88dee88b66d761fa6eb8458b5696da274656995701","id":"F:54a3c626d9","path":"tests/learnings.test.mjs","purpose":"function run"},{"hash":"sha256:15169d4a2e50f7cebfddf83be2b0616b2d0d5dcf18202f83ab1a00288382fa19","id":"F:5994385869","path":"tests/maker-checker.test.mjs","purpose":"function run"},{"hash":"sha256:0e60f6fabd39f650beed080526df7fe86b8fc589a3b71b89f47cc52922ced78e","id":"F:093689bb8e","path":"tests/marketresearcher-role.test.mjs","purpose":"Market-researcher role (ADR-039/ADR-040, Milestone 5): an opt-in ecosystem scan,"},{"hash":"sha256:a1eb606786fdd89c7f98afcc4aa05eae41cfe658a4576a060335d499329b27d9","id":"F:a167609a41","path":"tests/mcp-compliance.test.mjs","purpose":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the st"},{"hash":"sha256:92582915bee1a0805d1bdba172b6b977e595259d11e36c09e790fcd065796ae2","id":"F:fadcf390da","path":"tests/metrics.test.mjs","purpose":"Schema-conformant event line using \"event\" field (not \"type\")."},{"hash":"sha256:201277007ce3e5c29c3424e6a238772c624c5d5398b20cd4baa147e91895310f","id":"F:55b3a4e2c0","path":"tests/migrate-lessons-rename.test.mjs","purpose":"Tests for `modonome migrate --rename-lessons`: the file-rename half of the LEARNINGS ->"},{"hash":"sha256:7701733aef7d6c28befcc6e63452082dbd3b00b8d8d351c6aa1577be6969e120","id":"F:3de9042953","path":"tests/packet-signing.test.mjs","purpose":"function setup"},{"hash":"sha256:eea7438755704a2c9aebdf7685484a77e9aff97e7b7d53d4db8ccc7930a55a2a","id":"F:b28f13b600","path":"tests/performance.test.mjs","purpose":"Build a synthetic 1000-line diff that is clean (no gaming patterns)."},{"hash":"sha256:75b053f720a36f2d63161f5be3a70fcec9c6fa29dba432e517124b391589a996","id":"F:137056535b","path":"tests/policy-attestation.test.mjs","purpose":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind."},{"hash":"sha256:e7d7eb8b5d39ac2311b724a6c4f4665ec1c8d7bb5d0b70763c250a63a484768a","id":"F:fd6ebce602","path":"tests/portability.test.mjs","purpose":"Run validate-config.mjs against a given config path."},{"hash":"sha256:8b3911ae2cc0de4fb6990f765ec3412ec60af1ebb34a2d997e75f322a5ce00a4","id":"F:e540f7b669","path":"tests/promote-learning.test.mjs","purpose":"function run"},{"hash":"sha256:72142379302da73a19ab7a02001f93b893a909a0066d609fcd6b3ff4a412f468","id":"F:ddd82fc886","path":"tests/promoted-learnings.test.mjs","purpose":"function withRoot"},{"hash":"sha256:cb2324595499e121c6c87625451a14ad222a01194ae72ef88d2ad3fccc2e2c0f","id":"F:ba97282cf5","path":"tests/provenance.test.mjs","purpose":"Base valid packet factory: returns a fresh object each call."},{"hash":"sha256:a2902a5457d0fcb137970762dc3a90f1f6f111c1b2cea892a1313bea8349350b","id":"F:ee02e563c6","path":"tests/providers.test.mjs","purpose":"function baseCfg"},{"hash":"sha256:e8cb0e1034dc9e30ccb24b0d3f85669463a1ed529752fd8edf71c2a2c568129c","id":"F:9f6dd5e5a3","path":"tests/queue.test.mjs","purpose":"Tests for `modonome queue`: converts scored dry-run proposals into schema-valid"},{"hash":"sha256:772d914bb9dbe6a2f28760d78c9f636fa97137e89f585137b041c0323d9585ce","id":"F:92dde817ee","path":"tests/ratchet-attestation.test.mjs","purpose":"Tests for the gate-integrity in-toto receipt. The Statement shape and predicate type"},{"hash":"sha256:3f465e8c640ee3a806371b2dd83ea7aba8fd2ee34a1c4bf726919ff0abb02743","id":"F:cede5f9fa2","path":"tests/ratchet-format.test.mjs","purpose":"Tests for the machine-readable ratchet output (--json and --sarif). These lock in"},{"hash":"sha256:a1600871aa4fc565b91d374e0b7944f56464a5dde0feab3b57d8174cdc51cb35","id":"F:f238d164c9","path":"tests/ratchet.test.mjs","purpose":"function ratchet"},{"hash":"sha256:63511f631cfdeb4f83708b6f72d1de0b0624fbf3036cc45ed2d24cc7b6a1b897","id":"F:44a5987438","path":"tests/remediate.test.mjs","purpose":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commi"},{"hash":"sha256:abe1d5445a00324d9c4fa6fcd367756fab6cae0f0939280c43695f586b009318","id":"F:8a3433b070","path":"tests/report-impact.test.mjs","purpose":"function tmp"},{"hash":"sha256:2f40d127b1ebdbf3e1719bcdaf07937b5d0e20fff5d66fb2d161bca1c541234b","id":"F:ce41983a53","path":"tests/researcher-role.test.mjs","purpose":"WI-042 (ADR-039/ADR-040 follow-up): the researcher actually running in the loop."},{"hash":"sha256:8a080243725f1755a2510cf3b8082e58a08643ccfa60112569072228a4ca2cc8","id":"F:4fad18c892","path":"tests/risk-surface-guard.test.mjs","purpose":"function run"},{"hash":"sha256:b87d5890928df18b21f8c57d5b46e743d330f1d4a108e3b682fb4254279a7df1","id":"F:e2f1b5ac07","path":"tests/role-registry.test.mjs","purpose":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are "},{"hash":"sha256:94e8507428bca4a9f2a0183ad7754b1e4380364e5c170115acc0f978a0d79f26","id":"F:0103cf3d56","path":"tests/rollback.test.mjs","purpose":"Recursively snapshot path -> \"size:sha-like(content)\" for every file."},{"hash":"sha256:5aa570f9f5b52b1376719c311c4348cccd1eedcaec959f655fcd0b04a236bdb7","id":"F:704e42d42b","path":"tests/route-action.test.mjs","purpose":"A config where each runner declares its environment and reach."},{"hash":"sha256:192c851aec2639e573cfac1e35f7b91fd162eaca7bfff35561dd3a38df433558","id":"F:580d11b514","path":"tests/run-cycle-openai.test.mjs","purpose":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be "},{"hash":"sha256:84c54d851c6f663b48b14ec859edb9176d4fe3f214b8c5502d7cafd8163d29d1","id":"F:d7d4e8d2a9","path":"tests/run-log.test.mjs","purpose":"function tmp"},{"hash":"sha256:b0ccad59d3b2eb7f575bb28dc4c0cdeae656b734372ef1c4f5a28283aca7763f","id":"F:de5ebbf586","path":"tests/scaffold-adoption.test.mjs","purpose":"function gitRepo"},{"hash":"sha256:1e02b7398beb3677a6c47fd19e64031339d004a57c9fd18db6941d7c32084eb6","id":"F:48355ccf4d","path":"tests/self-application.test.mjs","purpose":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true})."},{"hash":"sha256:939dff56c806160478559ac542a3ac09753c42c0cad986b79c0515d83225a153","id":"F:9f36b3ef29","path":"tests/snapshot-cli.test.mjs","purpose":"function run"},{"hash":"sha256:98db4465944b66bc892fa065a25ff21499c9c8b36790c7e484cce522c06d4c94","id":"F:2a74ae3f05","path":"tests/snapshot-golden.test.mjs","purpose":"function names"},{"hash":"sha256:c58456e425434ea92d0315727dbf7493b7bf5163acccc471865359b53708fdc3","id":"F:4637e1fecb","path":"tests/snapshot-incremental.test.mjs","purpose":"function repo"},{"hash":"sha256:1ac7429a13d1ee6d63273a9f1c12642328bbf454c9be2f3954c3518912bf5160","id":"F:ca05b6ba1c","path":"tests/terraform-module-shape.test.mjs","purpose":"function tf"},{"hash":"sha256:c5fcee70cbe65990dba4744c7b0e29280ad8e2165a7fce074f20773d5356cfe7","id":"F:baf7641a01","path":"tests/tick.test.mjs","purpose":"function tmp"},{"hash":"sha256:53a0c9a0ab5516f2c454f41ecf22f0516829d55376940b4daa24f91af95bbb8e","id":"F:ed9c47feb2","path":"tests/tool-loop-adapter.test.mjs","purpose":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close)."},{"hash":"sha256:325d8278b663211e574a2afc843024be684cf1dd5d51278b4a39a622dd38a824","id":"F:61c2a29876","path":"tests/tripwire.test.mjs","purpose":"Tripwires: the local, best-effort editor hook kernel (scripts/tripwire-check.mjs)."},{"hash":"sha256:c2c7ad14be6fbc5d9e6fe5cc3e40a4a0f72e82745c9c74948decc2628c1357b4","id":"F:1bcaaff9eb","path":"tests/ws-b-harness.test.mjs","purpose":"A config fixture with distinct maker/checker models and a models registry."},{"hash":"sha256:b2fde6e1764d60ca1135a54c765a9183d684d3c44012fe19e79dcf49b4114c77","id":"F:bbb6476d71","path":"tests/ws-e-negative-controls.test.mjs","purpose":"WS-E: negative-control fixtures that prove governance gates have teeth."},{"hash":"sha256:670746ec74b6650d92a5081683d9d20bf923b2141dcd011cee1a82126c8cbcfc","id":"F:2b49c74e74","path":"tests/ws-e-ratchet-languages.test.mjs","purpose":"function runRatchet"}],"schema_version":1,"token_budget":120000,"token_estimate":138602,"truncated":false}
+{"api":[{"anchor":"S:c5854b8940","doc":"Recursively snapshot path -> \"size:sha-like(content)\" for every file.","kind":"function","line":27,"name":"snapshot","path_id":"F:0103cf3d56","signature":"async function snapshot(dir)"},{"anchor":"S:44e7188c1d","doc":"Tiny content hash (FNV-1a): avoids a crypto import and is deterministic.","kind":"function","line":50,"name":"hash","path_id":"F:0103cf3d56","signature":"function hash(buf)"},{"anchor":"S:4ee042ed06","kind":"function","line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56","signature":"async function makeHostRepo()"},{"anchor":"S:08df8d7472","kind":"function","line":70,"name":"runPreflight","path_id":"F:0103cf3d56","signature":"function runPreflight(target)"},{"anchor":"S:c47beeac78","doc":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\".","kind":"function","line":11,"name":"normalizeRelative","path_id":"F:015261eab0","signature":"function normalizeRelative(fromPath, module)"},{"anchor":"S:0d7b0da50a","doc":"Resolve a relative import to a repo file, trying common extensions and index files. External and bare imports return null and become no edge.","kind":"function","line":24,"name":"resolveImport","path_id":"F:015261eab0","signature":"function resolveImport(fromPath, module, fileSet)"},{"anchor":"S:c732826ee5","doc":"Build an adjacency map { relPath -> [relPath, ...] } from per-file imports. Only edges that resolve to another repo file are kept.","kind":"function","line":41,"name":"buildImportGraph","path_id":"F:015261eab0","signature":"export function buildImportGraph(perFile, fileSet)"},{"anchor":"S:79144070a6","doc":"Degree centrality: out-edges of a node plus in-edges pointing at it.","kind":"function","line":55,"name":"centrality","path_id":"F:015261eab0","signature":"export function centrality(adj)"},{"anchor":"S:bb578790a3","doc":"PageRank over the import graph. Fixed iteration count keeps it deterministic. Dangling nodes (no out-edges) redistribute their rank uniformly.","kind":"function","line":67,"name":"pagerank","path_id":"F:015261eab0","signature":"export function pagerank(adj, { damping = 0.85, iterations = 40 } = {})"},{"anchor":"S:4d0bae812e","kind":"function","line":91,"name":"round","path_id":"F:015261eab0","signature":"function round(n, places = 6)"},{"anchor":"S:b88ce47ede","doc":"Rank files by a normalized composite of churn, centrality, and PageRank. Returns a sorted list of { path, churn, centrality, pagerank, score }, highest first.","kind":"function","line":98,"name":"attentionRank","path_id":"F:015261eab0","signature":"export function attentionRank(paths, { churn = new Map(), centralityMap = new Map(), pagerankMap = new Map() } = {})"},{"anchor":"S:5ad0c942a1","doc":"Report whether the import graph has a cycle and one example cycle, reusing the shared cycle detector so the snapshot can warn about circular dependencies.","kind":"function","line":117,"name":"findCycle","path_id":"F:015261eab0","signature":"export function findCycle(adj)"},{"anchor":"S:1e6749f65a","kind":"function","line":31,"name":"run","path_id":"F:02a5f8fc55","signature":"function run(env)"},{"anchor":"S:c932c7339f","doc":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under test can make the run fail or pass.","kind":"function","line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249","signature":"function makeMinimalRepo()"},{"anchor":"S:0ab594146c","kind":"function","line":33,"name":"runScript","path_id":"F:0391f3b249","signature":"function runScript(tmp)"},{"anchor":"S:689125598d","doc":"A git-init'd variant of makeMinimalRepo(), for the staleness check, which shells out to `git log` and needs a real repository to query.","kind":"function","line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249","signature":"function makeMinimalGitRepo()"},{"anchor":"S:bac2ebbef5","kind":"function","line":53,"name":"gitCommit","path_id":"F:0391f3b249","signature":"function gitCommit(tmp, message)"},{"anchor":"S:cd2e7eba8f","doc":"Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as ","kind":"function","line":61,"name":"gitCommitAt","path_id":"F:0391f3b249","signature":"function gitCommitAt(tmp, message, isoDate)"},{"anchor":"S:405ee38bbe","kind":"const","line":67,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e","signature":"export const CATALOG_PARTIALS = ["},{"anchor":"S:949f988c9e","kind":"function","line":10,"name":"makeDb","path_id":"F:044b762a79","signature":"function makeDb(orders = new Map())"},{"anchor":"S:e96fb86528","doc":"Catalog entries for scripts/check-edit-set-compliance.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5","signature":"export const MESSAGES ="},{"anchor":"S:f8524caefc","kind":"const","line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9","signature":"export const SEVERITY_RANK = { ok: 0, info: 1, attention: 2, blocked: 3 };"},{"anchor":"S:c12913d4da","kind":"function","line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9","signature":"function mergeCatalog(sources)"},{"anchor":"S:4bea381dfd","kind":"const","line":33,"name":"MESSAGES","path_id":"F:05bffc70e9","signature":"export const MESSAGES = mergeCatalog(CATALOG_SOURCES);"},{"anchor":"S:81c9c1291a","kind":"function","line":35,"name":"interpolate","path_id":"F:05bffc70e9","signature":"function interpolate(template, params)"},{"anchor":"S:db0bb71f37","doc":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries.","kind":"function","line":41,"name":"clampSeverity","path_id":"F:05bffc70e9","signature":"function clampSeverity(entry, requestedSeverity)"},{"anchor":"S:a79dad6e97","kind":"function","line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9","signature":"export function loadMessageOverrides(modonomeDir)"},{"anchor":"S:0044d1a126","doc":"Validate an overrides document (the parsed contents of messages.yaml) against both the JSON schema and the severity-floor rule. Shared by scripts/check-message-catalog-integrity.mjs (CI) and the contr","kind":"function","line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9","signature":"export function checkOverridesIntegrity(overridesDoc, schema)"},{"anchor":"S:8282a0b575","doc":"Look up a message by id, apply any operator override (clamped to the floor for non_suppressible entries), interpolate {param} tokens, and return the resolved { id, severity, suppressed, message } read","kind":"function","line":85,"name":"formatMessage","path_id":"F:05bffc70e9","signature":"export function formatMessage(id, params = {}, overrides = {})"},{"anchor":"S:6dde857e83","doc":"List every catalog entry with its resolved (override-applied) state, for the control panel's Messages tab.","kind":"function","line":104,"name":"listMessages","path_id":"F:05bffc70e9","signature":"export function listMessages(overrides = {})"},{"anchor":"S:ab3548c3d0","kind":"function","line":16,"name":"baseCfg","path_id":"F:06b982f5a2","signature":"function baseCfg(extra = {})"},{"anchor":"S:0a11409d06","doc":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens the * item: identities, lease, allowed e","kind":"interface","line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53","signature":"export interface WorkItemDetail extends WorkItemSummary"},{"anchor":"S:6a4d8aa30d","kind":"interface","line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53","signature":"export interface WorkItemDrawerProps"},{"anchor":"S:1e67af68fc","kind":"function","line":52,"name":"Section","path_id":"F:08064e0c53","signature":"function Section({ label, children }: { label: string; children: ReactNode })"},{"anchor":"S:fff471613b","doc":"A read-only inspector for a single work item, presented in the shared `Drawer` * primitive. Lays out status, the maker and checker identities, lease and branch * info, attempt count, the allowed edit ","kind":"function","line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53","signature":"export function WorkItemDrawer({ item, open, onClose }: WorkItemDrawerProps)"},{"anchor":"S:9f9c07db7d","kind":"function","line":10,"name":"Model","path_id":"F:08577063d4","signature":"export const Model = () => ("},{"anchor":"S:d3f17c584a","kind":"function","line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86","signature":"function isSelfGovernance(dir)"},{"anchor":"S:02e2e85572","kind":"function","line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86","signature":"function resolveModonomeDir(rawMode, dirParam)"},{"anchor":"S:8097fe47fc","kind":"function","line":40,"name":"readBody","path_id":"F:08b7435c86","signature":"function readBody(req)"},{"anchor":"S:a10a756308","kind":"function","line":59,"name":"sendJson","path_id":"F:08b7435c86","signature":"function sendJson(res, status, body)"},{"anchor":"S:0e6240f5b7","doc":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the base flag first (off => nothing is writa","kind":"function","line":70,"name":"writeGate","path_id":"F:08b7435c86","signature":"function writeGate(baseWritable, dir)"},{"anchor":"S:b06f3444be","kind":"function","line":86,"name":"stateWithSource","path_id":"F:08b7435c86","signature":"function stateWithSource(baseWritable, dir, mode)"},{"anchor":"S:62210684b4","doc":"Best-effort reachability probe for an OpenAI-compatible endpoint (LM Studio, Ollama, a gateway). Read-only and network-only: it never touches config.yaml, so it needs no write guard. Always resolves (","kind":"function","line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86","signature":"function buildModelsUrl(baseUrl)"},{"anchor":"S:3f9e6b3a7b","kind":"function","line":104,"name":"testConnection","path_id":"F:08b7435c86","signature":"async function testConnection(baseUrl)"},{"anchor":"S:5092562c12","kind":"function","line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86","signature":"export function modonomeApiPlugin()"},{"anchor":"S:9b40c124ce","kind":"function","line":17,"name":"baseCfg","path_id":"F:093689bb8e","signature":"function baseCfg(extra = {})"},{"anchor":"S:7078ce1661","kind":"function","line":40,"name":"today","path_id":"F:09ba331878","signature":"function today()"},{"anchor":"S:735c642c3a","doc":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch.","kind":"function","line":46,"name":"collectNearMisses","path_id":"F:09ba331878","signature":"export function collectNearMisses({ branch, commits })"},{"anchor":"S:4358d9c393","doc":"A denylist proposal is per unique (tier, surface, token): the widener proposes adding a token, not fixing N occurrences. Keep the first occurrence as evidence.","kind":"function","line":67,"name":"proposalsFrom","path_id":"F:09ba331878","signature":"export function proposalsFrom(findings)"},{"anchor":"S:b89188d9e3","kind":"function","line":76,"name":"main","path_id":"F:09ba331878","signature":"function main(argv)"},{"anchor":"S:79997ba94d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:09ea014068","signature":"export const MESSAGES ="},{"anchor":"S:b29fc4b0d5","kind":"function","line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d","signature":"export const ArmEngine = () => ("},{"anchor":"S:8cd25e6f09","kind":"type","line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:40a4170626","kind":"type","line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5","signature":"export type ArmingMode = \"disabled\" | \"dry-run\" | \"armed\";"},{"anchor":"S:49f97badd7","kind":"type","line":12,"name":"WorkState","path_id":"F:0a85f3b8e5","signature":"export type WorkState ="},{"anchor":"S:3e9158c80b","kind":"type","line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5","signature":"export type RiskTier = 1 | 2 | 3 | 4;"},{"anchor":"S:86cb290127","doc":"The subject a mode points at: which repo the panel is reading.","kind":"interface","line":25,"name":"Subject","path_id":"F:0a85f3b8e5","signature":"export interface Subject"},{"anchor":"S:a337ae8f0b","doc":"The engine configuration (schemas/config.schema.json), the levers the panel edits.","kind":"interface","line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5","signature":"export interface ModonomeConfig"},{"anchor":"S:577a1daeb3","kind":"type","line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5","signature":"export type MessageSeverity = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:6605365375","doc":"One entry of the built-in message catalog (scripts/lib/messages.mjs), with * this subject's .modonome/messages.yaml overrides already resolved. A * non_suppressible entry's severity/suppressed always ","kind":"interface","line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5","signature":"export interface MessageCatalogEntryVM"},{"anchor":"S:d22e005d52","doc":"A patch to one message's override, as sent to onSaveMessages. Omitted * fields reset to the catalog default; severity/suppressed are rejected * server-side for a non_suppressible id.","kind":"interface","line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5","signature":"export interface MessageOverridePatch"},{"anchor":"S:d56c1854d7","doc":"One prerequisite in the armed-mode gate checklist.","kind":"interface","line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5","signature":"export interface ArmingCheck"},{"anchor":"S:6bc87187a8","kind":"interface","line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5","signature":"export interface ArmingStatus"},{"anchor":"S:a4a9a79fbe","kind":"type","line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5","signature":"export type WorkItemType = \"fix-issue\" | \"develop-feature\" | \"create-article\" | \"create-plan\" | \"update-docs\" | \"chore\";"},{"anchor":"S:3f93aaa307","doc":"True for any state where a real actor could be actively working the item: * mutating it destructively (delete) needs the lease released first.","kind":"const","line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5","signature":"export const IN_FLIGHT_STATES: WorkState[] = [\"claimed\", \"making\", \"checking\", \"rework\", \"merge_ready\", \"merging\"];"},{"anchor":"S:5a49db2766","kind":"interface","line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemVM"},{"anchor":"S:f3e5c99141","kind":"interface","line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5","signature":"export interface LeaseVM"},{"anchor":"S:dddb39652d","kind":"type","line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:9bc07de53c","kind":"interface","line":181,"name":"GateVM","path_id":"F:0a85f3b8e5","signature":"export interface GateVM"},{"anchor":"S:126357e421","kind":"interface","line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5","signature":"export interface CostByModel"},{"anchor":"S:ebe2964819","kind":"interface","line":198,"name":"CostVM","path_id":"F:0a85f3b8e5","signature":"export interface CostVM"},{"anchor":"S:72a5c214ac","kind":"interface","line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5","signature":"export interface LearningVM"},{"anchor":"S:e03cf612ca","kind":"interface","line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5","signature":"export interface DecisionVM"},{"anchor":"S:6ef3b2f2e5","doc":"One commit the metadata-only remediator would rewrite, and why.","kind":"interface","line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationProposalVM"},{"anchor":"S:b41535d6e7","doc":"The armed metadata-only remediator (ADR-035) as a read-only surface plus one owner * lever. `applyEnabled` mirrors the config flag; `ready` is true only when every arming * condition is met, and `bloc","kind":"interface","line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationVM"},{"anchor":"S:3ad2d564a8","kind":"type","line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5","signature":"export type AuditKind ="},{"anchor":"S:7c6ba2a644","kind":"interface","line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5","signature":"export interface AuditEventVM"},{"anchor":"S:19226d4902","kind":"interface","line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5","signature":"export interface ProtectedPathVM"},{"anchor":"S:61e677ae40","kind":"interface","line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5","signature":"export interface TrendPoint"},{"anchor":"S:cefb8c3f64","doc":"Where a loaded PanelState actually came from, so the UI never presents demo data as real.","kind":"interface","line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5","signature":"export interface PanelSource"},{"anchor":"S:4a0171ecb5","kind":"interface","line":295,"name":"PanelState","path_id":"F:0a85f3b8e5","signature":"export interface PanelState"},{"anchor":"S:6dcad3cdf1","doc":"Fields a new work item is created with. Always starts in state \"queued\".","kind":"interface","line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5","signature":"export interface NewWorkItemInput"},{"anchor":"S:7934857ce3","doc":"Safe-to-edit-anytime fields: never state, owner, or lease, since those change only * through the existing lease/transition machinery, never a generic metadata edit.","kind":"interface","line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemPatch"},{"anchor":"S:a2d9480f78","kind":"interface","line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5","signature":"export interface WriteActions"},{"anchor":"S:6dd199eea1","doc":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads itself","kind":"function","line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9","signature":"export function resolveActiveKey(peerKeys, alias, now = new Date(), overrides = {})"},{"anchor":"S:f3b8628cdb","doc":"Full ordered verification. options.skipContentGate runs only the signature checks (steps 3 to 5), used when the caller already ran the schema and redaction gate.","kind":"function","line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9","signature":"export function verifyPacket(packet, peerKeys, { now = new Date(), skipContentGate = false, overrides = {} } = {})"},{"anchor":"S:0af608ade0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:0c731e3460","signature":"export const MESSAGES ="},{"anchor":"S:ee5246d16c","kind":"function","line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b","signature":"export function generateKeypair()"},{"anchor":"S:842e875c5a","doc":"Raw 32-byte public key as base64, accepting either a public or private KeyObject.","kind":"function","line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyB64(keyObject)"},{"anchor":"S:8a971e3c54","doc":"Public KeyObject from a raw 32-byte base64 public key.","kind":"function","line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyFromB64(b64)"},{"anchor":"S:380b82547c","doc":"Private KeyObject from base64 PKCS8 DER (the env-secret format).","kind":"function","line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyFromB64Pkcs8(b64)"},{"anchor":"S:19e5ddb185","kind":"function","line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyToB64Pkcs8(keyObject)"},{"anchor":"S:1c7919b4ea","kind":"function","line":40,"name":"signMessage","path_id":"F:0cacf66a3b","signature":"export function signMessage(message, privateKeyObject)"},{"anchor":"S:fb81ef11a3","kind":"function","line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b","signature":"export function verifyMessage(message, sigB64, publicKeyObject)"},{"anchor":"S:4a08c48993","doc":"Short fingerprint for out-of-band key comparison (ADR-017 enrollment): the first 16 hex characters of sha256 over the raw public key bytes.","kind":"function","line":54,"name":"fingerprint","path_id":"F:0cacf66a3b","signature":"export function fingerprint(pubB64)"},{"anchor":"S:f2e1ea8458","kind":"function","line":16,"name":"deriveMode","path_id":"F:0da05a2a05","signature":"export function deriveMode(config: ModonomeConfig, envArmed: boolean): ArmingMode"},{"anchor":"S:97bc3f0eb4","kind":"function","line":22,"name":"deriveArming","path_id":"F:0da05a2a05","signature":"export function deriveArming("},{"anchor":"S:a3fb13b441","kind":"function","line":4,"name":"Tones","path_id":"F:10e76cfcd3","signature":"export const Tones = () => ("},{"anchor":"S:14ef0a45e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1127892e72","signature":"export const MESSAGES ="},{"anchor":"S:a1d4334d94","kind":"function","line":44,"name":"App","path_id":"F:113387361d","signature":"export function App()"},{"anchor":"S:f034e67219","kind":"function","line":41,"name":"normalizeLF","path_id":"F:116adfb9f8","signature":"function normalizeLF(s)"},{"anchor":"S:e23dca26d1","kind":"function","line":50,"name":"stripFlags","path_id":"F:116adfb9f8","signature":"export function stripFlags(argv)"},{"anchor":"S:8fc6479414","kind":"function","line":78,"name":"getDiff","path_id":"F:116adfb9f8","signature":"function getDiff(positional)"},{"anchor":"S:6202790aac","kind":"class","line":109,"name":"UsageError","path_id":"F:116adfb9f8","signature":"class UsageError extends Error {}"},{"anchor":"S:a8ccdc0c7d","kind":"function","line":118,"name":"parseDiff","path_id":"F:116adfb9f8","signature":"export function parseDiff(diffText)"},{"anchor":"S:4295d27685","kind":"function","line":164,"name":"makeFinding","path_id":"F:116adfb9f8","signature":"function makeFinding(rule, file, line, rawText)"},{"anchor":"S:afdc9fa742","kind":"function","line":178,"name":"scanFile","path_id":"F:116adfb9f8","signature":"export function scanFile(filePath, addedLines)"},{"anchor":"S:9435112073","kind":"function","line":200,"name":"scanDiff","path_id":"F:116adfb9f8","signature":"export function scanDiff(diffText)"},{"anchor":"S:34df82b1c2","kind":"function","line":221,"name":"hasHighOrCritical","path_id":"F:116adfb9f8","signature":"function hasHighOrCritical(findings)"},{"anchor":"S:40aaf05c36","doc":"A suppressed finding (allowlist match) never counts toward the exit code, the result verdict, or the finding count in the summary line, even though it stays visible in the output. This is the whole po","kind":"function","line":229,"name":"activeFindings","path_id":"F:116adfb9f8","signature":"function activeFindings(findings)"},{"anchor":"S:672926584c","kind":"function","line":233,"name":"decideExitCode","path_id":"F:116adfb9f8","signature":"export function decideExitCode(mode, findings)"},{"anchor":"S:6117b8ec80","kind":"function","line":238,"name":"decideResult","path_id":"F:116adfb9f8","signature":"export function decideResult(mode, findings)"},{"anchor":"S:74c8951fb9","kind":"function","line":245,"name":"severityToSarifLevel","path_id":"F:116adfb9f8","signature":"export function severityToSarifLevel(severity)"},{"anchor":"S:8b3d7e9050","kind":"function","line":255,"name":"summaryMessage","path_id":"F:116adfb9f8","signature":"function summaryMessage(mode, findings)"},{"anchor":"S:17bc177192","kind":"function","line":267,"name":"formatHuman","path_id":"F:116adfb9f8","signature":"export function formatHuman(findings, { mode })"},{"anchor":"S:82407637b4","kind":"function","line":284,"name":"emitJson","path_id":"F:116adfb9f8","signature":"export function emitJson(findings, { mode })"},{"anchor":"S:38407e52ac","kind":"function","line":292,"name":"emitSarif","path_id":"F:116adfb9f8","signature":"export function emitSarif(findings)"},{"anchor":"S:9f6788d90d","kind":"function","line":336,"name":"runCli","path_id":"F:116adfb9f8","signature":"function runCli()"},{"anchor":"S:670e55d75a","kind":"const","line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce","signature":"export const CACHE_SCHEMA_VERSION = 1;"},{"anchor":"S:31032f0509","doc":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option (some git options can read or write fil","kind":"function","line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce","signature":"export function isPlausibleRevision(value)"},{"anchor":"S:7762c6d861","kind":"function","line":21,"name":"cachePath","path_id":"F:119e3c0fce","signature":"function cachePath(root)"},{"anchor":"S:59b9039619","doc":"Load the cache for a repo, or null when absent, unreadable, or a different version.","kind":"function","line":28,"name":"loadCache","path_id":"F:119e3c0fce","signature":"export function loadCache(root)"},{"anchor":"S:ba5f7d1ffe","doc":"Persist the cache. entries is { relPath: { hash, symbols, imports, purposeRaw } }.","kind":"function","line":41,"name":"saveCache","path_id":"F:119e3c0fce","signature":"export function saveCache(root, { built_at_head = null, entries = {} })"},{"anchor":"S:ed24428ce0","doc":"The current git HEAD sha for the repo, or null when unavailable.","kind":"function","line":50,"name":"gitHead","path_id":"F:119e3c0fce","signature":"export function gitHead(root)"},{"anchor":"S:236237bc1b","doc":"Strip git's optional quoting from a porcelain path.","kind":"function","line":56,"name":"unquote","path_id":"F:119e3c0fce","signature":"function unquote(p)"},{"anchor":"S:93d0a78f18","doc":"The set of paths that changed since the cache was built: uncommitted work (git status) plus commits since cache.built_at_head. Returns null when git is not usable, which forces a full rebuild.","kind":"function","line":65,"name":"changedPaths","path_id":"F:119e3c0fce","signature":"export function changedPaths(root, cache)"},{"anchor":"S:c3d94f0812","doc":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse.","kind":"function","line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a","signature":"export function parseRepoFromUrl(url)"},{"anchor":"S:d1b03afffb","doc":"Derive a stable repo label. The generator block credits the tool (generator.name is always \"modonome\"), so the per-repo identity lives in generator.repository. Prefer that, then fall back to the filen","kind":"function","line":41,"name":"deriveRepoName","path_id":"F:128b647d9a","signature":"export function deriveRepoName(att, filename)"},{"anchor":"S:3a57c07db5","doc":"Three-way posture from the attestation posture block.","kind":"function","line":48,"name":"derivePosture","path_id":"F:128b647d9a","signature":"export function derivePosture(posture)"},{"anchor":"S:26df582c22","doc":"Build one row from a filename and its raw text. A parse or shape problem is recorded on the row and reported as a table cell; it never throws, so one bad file cannot crash the whole run.","kind":"function","line":57,"name":"buildRow","path_id":"F:128b647d9a","signature":"export function buildRow(filename, text)"},{"anchor":"S:ba36fd17d6","doc":"Read every *.json file in dir and build a row for each. Files are read once with readFileSync (no separate stat then read, so there is no check-to-use race window). Returns unsorted rows.","kind":"function","line":100,"name":"collectRows","path_id":"F:128b647d9a","signature":"export function collectRows(dir)"},{"anchor":"S:c42dd60d39","doc":"Deterministic order: by repo label, then by filename as a tie-break.","kind":"function","line":126,"name":"sortRows","path_id":"F:128b647d9a","signature":"export function sortRows(rows)"},{"anchor":"S:7619cf060d","kind":"function","line":133,"name":"escapeHtml","path_id":"F:128b647d9a","signature":"function escapeHtml(s)"},{"anchor":"S:7bcf8115de","kind":"function","line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a","signature":"function capabilitiesCell(caps)"},{"anchor":"S:b366c411d2","doc":"Render the sorted rows to a self-contained HTML document. Pure: given the same rows and options it returns the same string.","kind":"function","line":150,"name":"renderHtml","path_id":"F:128b647d9a","signature":"export function renderHtml(rows, options = {})"},{"anchor":"S:5afb2ca954","doc":"Full pipeline: directory to HTML string. Exported for tests.","kind":"function","line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a","signature":"export function renderLedgerFromDir(dir, options = {})"},{"anchor":"S:0255163ba3","kind":"function","line":229,"name":"parseArgs","path_id":"F:128b647d9a","signature":"function parseArgs(argv)"},{"anchor":"S:cecb0a4a33","kind":"function","line":248,"name":"main","path_id":"F:128b647d9a","signature":"function main(argv)"},{"anchor":"S:3968554637","kind":"const","line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461","signature":"export const VOLATILE_FIELDS = ['id', 'signature'];"},{"anchor":"S:9f7fa8d585","kind":"function","line":10,"name":"packetContent","path_id":"F:12c7a4e461","signature":"export function packetContent(packet)"},{"anchor":"S:a0ea4d9d0f","kind":"function","line":18,"name":"computePacketId","path_id":"F:12c7a4e461","signature":"export function computePacketId(packet)"},{"anchor":"S:d2ef86c19f","kind":"function","line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461","signature":"export function packetIdMatches(packet)"},{"anchor":"S:4700befa2a","kind":"function","line":16,"name":"run","path_id":"F:137056535b","signature":"function run(args = [], env = {})"},{"anchor":"S:bc56c13940","doc":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind.","kind":"function","line":22,"name":"preservingArtifact","path_id":"F:137056535b","signature":"function preservingArtifact(fn)"},{"anchor":"S:2cd4d9571d","kind":"function","line":189,"name":"withTempFile","path_id":"F:137056535b","signature":"function withTempFile(name, content, fn)"},{"anchor":"S:5708b6bd2b","kind":"function","line":4,"name":"PendingApproval","path_id":"F:13d31b33ea","signature":"export const PendingApproval = () => ("},{"anchor":"S:4f265e8008","kind":"function","line":8,"name":"Approved","path_id":"F:13d31b33ea","signature":"export const Approved = () => ("},{"anchor":"S:93e0292f30","kind":"function","line":12,"name":"Protected","path_id":"F:13d31b33ea","signature":"export const Protected = () => ;"},{"anchor":"S:e80517f20b","kind":"interface","line":6,"name":"ActivationCheck","path_id":"F:14edab923f","signature":"export interface ActivationCheck"},{"anchor":"S:30eded078f","kind":"interface","line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f","signature":"export interface ActivationLadderProps"},{"anchor":"S:73a3da9f65","doc":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when every * prerequisite holds. Items marked o","kind":"function","line":46,"name":"ActivationLadder","path_id":"F:14edab923f","signature":"export function ActivationLadder("},{"anchor":"S:237d74cadf","kind":"function","line":21,"name":"parseScalar","path_id":"F:1575110130","signature":"function parseScalar(raw)"},{"anchor":"S:299c43d83e","kind":"function","line":40,"name":"stripQuotes","path_id":"F:1575110130","signature":"function stripQuotes(s)"},{"anchor":"S:0b7b39d873","doc":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string.","kind":"function","line":49,"name":"extractRawValue","path_id":"F:1575110130","signature":"function extractRawValue(afterColon)"},{"anchor":"S:b4a3093fe9","doc":"Count leading spaces to determine nesting depth.","kind":"function","line":66,"name":"indentOf","path_id":"F:1575110130","signature":"function indentOf(line)"},{"anchor":"S:bec355e18a","doc":"Parse an array of non-empty, non-comment lines into a nested object. Each entry is { indent, key, rawValue, isItem }, where a sequence-item line (\"- value\") has isItem: true and key: null.","kind":"function","line":75,"name":"parseEntries","path_id":"F:1575110130","signature":"function parseEntries(entries, start, minIndent)"},{"anchor":"S:8990e6571f","kind":"function","line":118,"name":"parseFlatYaml","path_id":"F:1575110130","signature":"export function parseFlatYaml(text)"},{"anchor":"S:5bac9ae6d5","kind":"function","line":151,"name":"formatScalarForYaml","path_id":"F:1575110130","signature":"function formatScalarForYaml(value)"},{"anchor":"S:efe9cb11d4","doc":"Patch one or more top-level (zero-indent) scalar keys in a config.yaml's raw text, line by line. Every other line, including every comment, is left untouched, so a hand-written config file survives an","kind":"function","line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130","signature":"export function patchTopLevelYaml(text, patch)"},{"anchor":"S:0b56ac32a5","kind":"const","line":1,"name":"MESSAGES","path_id":"F:179564da6f","signature":"export const MESSAGES ="},{"anchor":"S:1b14fa60f7","kind":"function","line":92,"name":"git","path_id":"F:18f569225a","signature":"function git(args, cwd)"},{"anchor":"S:34df99c630","kind":"function","line":98,"name":"makeGitFixture","path_id":"F:18f569225a","signature":"function makeGitFixture()"},{"anchor":"S:a3cae87964","kind":"function","line":109,"name":"makePlan","path_id":"F:18f569225a","signature":"function makePlan(role, roleDescriptor, transcriptSubdir, extra = {})"},{"anchor":"S:0eec918c49","kind":"function","line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a","signature":"function cleanupTranscripts()"},{"anchor":"S:0064b473e6","kind":"function","line":14,"name":"tmpQueue","path_id":"F:195e9217ca","signature":"function tmpQueue()"},{"anchor":"S:d240732a9d","kind":"function","line":18,"name":"sampleAction","path_id":"F:195e9217ca","signature":"function sampleAction(id, target = \"ci\")"},{"anchor":"S:05a5299b28","kind":"interface","line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae","signature":"export interface ConceptTileProps extends ButtonHTMLAttributes"},{"anchor":"S:14c08c7efc","doc":"A compact, focusable tile naming one engine concept: an icon, its name, and a short * category tag. Renders as a real button so it is keyboard-reachable on its own, meant * to be wrapped in a HoverCar","kind":"function","line":20,"name":"ConceptTile","path_id":"F:1a137480ae","signature":"export function ConceptTile({ icon, label, tag, className, ...rest }: ConceptTileProps)"},{"anchor":"S:76d7b21daf","doc":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary ceiling.","kind":"const","line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364","signature":"export const MAX_CONTROLS_PER_TAB = 10;"},{"anchor":"S:b840cddd67","kind":"function","line":20,"name":"readScreens","path_id":"F:1a19f02364","signature":"function readScreens(root)"},{"anchor":"S:7a05eaea5a","doc":"Every field in config.schema.json must resolve to either a literal reference in a screen (a real control, or read-only display) or a documented exemption in exposure.json. A plain substring search, no","kind":"function","line":34,"name":"auditCoverage","path_id":"F:1a19f02364","signature":"export function auditCoverage(root)"},{"anchor":"S:da2f845458","doc":"Splits a screen's source into one segment per tab (by source order, using the `{tab === \"id\" ?` marker this codebase's tabbed screens consistently use), or a single whole-file segment for screens with","kind":"function","line":57,"name":"splitByTabs","path_id":"F:1a19f02364","signature":"function splitByTabs(text)"},{"anchor":"S:6a7737bb57","kind":"function","line":66,"name":"extractTags","path_id":"F:1a19f02364","signature":"function extractTags(text, tagNames)"},{"anchor":"S:0ac24bec51","doc":"Two checks, both numeric: a screen/tab must not exceed the control-density budget, and every value-entry control (Toggle, NumberField, Slider, Select) must carry a hint. Input is excluded from the hin","kind":"function","line":76,"name":"auditCoherence","path_id":"F:1a19f02364","signature":"export function auditCoherence(root)"},{"anchor":"S:762b3eaf4a","kind":"function","line":17,"name":"Models","path_id":"F:1aa7cf650d","signature":"export const Models = () => ("},{"anchor":"S:8da618623d","kind":"function","line":18,"name":"headSha","path_id":"F:1bc6d1449f","signature":"function headSha()"},{"anchor":"S:fc01241f03","doc":"A config fixture with distinct maker/checker models and a models registry.","kind":"function","line":13,"name":"cfg","path_id":"F:1bcaaff9eb","signature":"function cfg(overrides = {})"},{"anchor":"S:55b15c0abb","doc":"A short, stable id from a string. Hex keeps it deterministic across platforms.","kind":"function","line":9,"name":"short","path_id":"F:1cf31c4792","signature":"function short(text, len = 10)"},{"anchor":"S:2e016b842d","kind":"function","line":13,"name":"fileAnchor","path_id":"F:1cf31c4792","signature":"export function fileAnchor(relPath)"},{"anchor":"S:00db09c5a8","kind":"function","line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792","signature":"export function symbolAnchor(relPath, name)"},{"anchor":"S:ab79b43633","doc":"Build the path dictionary from walked files. Returns { paths, pathIdByPath } where `paths` is the serializable { id -> relPath } map and `pathIdByPath` is the reverse lookup callers use to reference p","kind":"function","line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792","signature":"export function buildPathDictionary(relPaths)"},{"anchor":"S:63613c3a63","doc":"Build the symbol dictionary from API entries. Each entry carries its anchor, owning path id, name, and line, so an anchor resolves to an exact location.","kind":"function","line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792","signature":"export function buildSymbolDictionary(apiEntries)"},{"anchor":"S:a3ca73d34c","doc":"Lifecycle status of a learning: staged for review, or promoted into a permanent gate.","kind":"type","line":6,"name":"LearningStatus","path_id":"F:1d03291691","signature":"export type LearningStatus = \"staged\" | \"promoted\";"},{"anchor":"S:6cbed7ff26","doc":"Plain data shape for a single learning surfaced by the system. Components in this * package define their own shape rather than importing app-level types, so this * interface is the contract a host app","kind":"interface","line":13,"name":"LearningSummary","path_id":"F:1d03291691","signature":"export interface LearningSummary"},{"anchor":"S:8b9971d92a","kind":"interface","line":30,"name":"LearningCardProps","path_id":"F:1d03291691","signature":"export interface LearningCardProps"},{"anchor":"S:d293a69125","doc":"A card summarizing a single learning the system has surfaced: the lesson learned, * how old it is, what signal or evidence produced it, and its lifecycle status. * Staged learnings offer Promote and P","kind":"function","line":49,"name":"LearningCard","path_id":"F:1d03291691","signature":"export function LearningCard({ learning, onPromote, onPrune }: LearningCardProps)"},{"anchor":"S:14850052c8","kind":"interface","line":6,"name":"TabItem","path_id":"F:1db369d970","signature":"export interface TabItem"},{"anchor":"S:c68bb17ca2","kind":"interface","line":17,"name":"TabsProps","path_id":"F:1db369d970","signature":"export interface TabsProps"},{"anchor":"S:bd1a0a35f8","doc":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-selected`, and only the active tab is in th","kind":"function","line":35,"name":"Tabs","path_id":"F:1db369d970","signature":"export function Tabs({ tabs, active, onChange, className }: TabsProps)"},{"anchor":"S:d737cd7277","kind":"function","line":52,"name":"flagValue","path_id":"F:1e5ef6ba70","signature":"function flagValue(argv, name)"},{"anchor":"S:8f93f4689a","doc":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-024: even an armed engine will not rewri","kind":"function","line":60,"name":"armState","path_id":"F:1e5ef6ba70","signature":"function armState(root, env = process.env)"},{"anchor":"S:46d884501c","kind":"function","line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70","signature":"function armingBlockers(arm)"},{"anchor":"S:baa16abe42","kind":"function","line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70","signature":"function targetIdentity(argv)"},{"anchor":"S:6140d7ae56","kind":"function","line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70","signature":"function identityUsable(id)"},{"anchor":"S:edeb959111","doc":"Gather the branch-unique commit range oldest-first with the fields the applier needs: tree object, first parent, author and committer identity and dates, and raw message. Enforces the protected-histor","kind":"function","line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70","signature":"function gatherRange()"},{"anchor":"S:4bc9723575","doc":"Advisory range for `plan`: tolerant of a missing origin/main so the proposal works in a fresh clone. Newest-first from git log; reversed to oldest-first for stable output.","kind":"function","line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70","signature":"function advisoryRange()"},{"anchor":"S:59807c1a98","kind":"function","line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70","signature":"function buildPlan(branch, commits, identity)"},{"anchor":"S:2484ffb006","kind":"function","line":142,"name":"printPlan","path_id":"F:1e5ef6ba70","signature":"function printPlan(plan, identity)"},{"anchor":"S:e7f49cafe1","kind":"function","line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70","signature":"function isDirtyTracked()"},{"anchor":"S:e2861b1099","kind":"function","line":173,"name":"rollback","path_id":"F:1e5ef6ba70","signature":"function rollback(savedHead)"},{"anchor":"S:e8b27564c5","doc":"Replay the range from the first changed commit forward, reusing each original tree object so the rewrite is metadata-only. Verifies tree-SHA invariance per commit and rolls back on any failure. Return","kind":"function","line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70","signature":"function applyPlan(commits, plan)"},{"anchor":"S:b97efe3854","kind":"function","line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70","signature":"function cmdPlan(argv)"},{"anchor":"S:69db4ad7cc","kind":"function","line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70","signature":"function cmdApply(argv, root)"},{"anchor":"S:602e030d27","kind":"function","line":297,"name":"main","path_id":"F:1e5ef6ba70","signature":"function main(argv)"},{"anchor":"S:5a6c3aef24","kind":"class","line":7,"name":"OrderService","path_id":"F:1ecd18c4b9","signature":"export class OrderService"},{"anchor":"S:a2fef04067","kind":"function","line":4,"name":"Budget","path_id":"F:1f40b6eb6e","signature":"export const Budget = () => ("},{"anchor":"S:2ed4ecfad7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4","signature":"export const MESSAGES ="},{"anchor":"S:8c2cd9c54f","doc":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mjs.","kind":"function","line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca","signature":"export function buildProposalReviewPrompt(proposal, checkerModel, authorLabel)"},{"anchor":"S:ebd259dfef","doc":"Resolve the checker and plan its review of a proposal, without calling a model. * * @returns {{ checker: object, authorLabel: string, proposal: string, prompt: string }}","kind":"function","line":43,"name":"planProposalReview","path_id":"F:2127a8caca","signature":"export function planProposalReview(cfg, { proposal, authorLabel = \"an external author\" } = {})"},{"anchor":"S:a1cc5660fe","doc":"A garbled review, or one with no explicit marker, must NOT read as an approval: a proposal is admitted to the backlog only on an explicit APPROVE: yes. Fail closed.","kind":"function","line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca","signature":"export function parseProposalVerdict(text)"},{"anchor":"S:3fc87c5f7e","doc":"Plan the proposal review and, under execute:true, run the checker on its endpoint. * The live path supports the openai-http transport (a local or free/gateway model), * matching the local-first cost s","kind":"function","line":73,"name":"reviewProposal","path_id":"F:2127a8caca","signature":"export async function reviewProposal(cfg, { proposal, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:537ea4dfe0","kind":"type","line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4","signature":"export type ToggleTone = \"primary\" | \"info\" | \"owner\";"},{"anchor":"S:cd836c2fc7","kind":"interface","line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4","signature":"export interface ToggleProps"},{"anchor":"S:84b00e90de","doc":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a checkbox so the on/off semantics are anno","kind":"function","line":28,"name":"Toggle","path_id":"F:214cc0a5f4","signature":"export function Toggle("},{"anchor":"S:b919653baa","kind":"function","line":44,"name":"DryRun","path_id":"F:2207a6ebce","signature":"export const DryRun = () => ("},{"anchor":"S:ea5d04ea13","kind":"function","line":48,"name":"Armed","path_id":"F:2207a6ebce","signature":"export const Armed = () => ("},{"anchor":"S:e193570e9e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc","signature":"export const MESSAGES ="},{"anchor":"S:7cd45cbc03","kind":"function","line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e","signature":"function formatYamlScalar(value)"},{"anchor":"S:1c5d801590","doc":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent scalar or array keys are touched here; ","kind":"function","line":70,"name":"patchYamlText","path_id":"F:22566cb46e","signature":"function patchYamlText(text, patch)"},{"anchor":"S:15b3a95566","doc":"Locate a top-level `key:` block-opening line (a zero-indent key whose value is empty, meaning what follows is a nested map) and the half-open [start, end) line range it and its indented content occupy","kind":"function","line":100,"name":"findBlock","path_id":"F:22566cb46e","signature":"function findBlock(lines, key)"},{"anchor":"S:aa8f9a7b3d","doc":"Split a block's interior lines into ordered segments: a real entry (a line at exactly ENTRY_INDENT spaces naming a key, plus every following line indented deeper than that), or \"other\" (blank lines, a","kind":"function","line":122,"name":"captureSegments","path_id":"F:22566cb46e","signature":"function captureSegments(lines, start, end)"},{"anchor":"S:c3a1d0f1a7","kind":"function","line":151,"name":"serializeEntry","path_id":"F:22566cb46e","signature":"function serializeEntry(topKey, entryKey, value)"},{"anchor":"S:af28852c7f","kind":"function","line":169,"name":"deepEqualJson","path_id":"F:22566cb46e","signature":"function deepEqualJson(a, b)"},{"anchor":"S:2eef7d840d","doc":"Reconcile one nested map's block against its new value, entry by entry. An entry present in both, unchanged, is copied verbatim (comments and all); a changed entry is re-serialized (dropping any comme","kind":"function","line":180,"name":"rewriteBlock","path_id":"F:22566cb46e","signature":"function rewriteBlock(lines, topKey, oldValue, newValue)"},{"anchor":"S:b06714d9c5","kind":"function","line":225,"name":"patchConfig","path_id":"F:22566cb46e","signature":"export function patchConfig(modonomeDir, patch)"},{"anchor":"S:8b67ef3e8b","kind":"function","line":266,"name":"workItemFile","path_id":"F:22566cb46e","signature":"function workItemFile(modonomeDir, itemId)"},{"anchor":"S:fd9d32de9a","kind":"function","line":272,"name":"releaseLease","path_id":"F:22566cb46e","signature":"export function releaseLease(modonomeDir, itemId)"},{"anchor":"S:d7086f2a5b","kind":"function","line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e","signature":"function loadConfigForValidation(modonomeDir)"},{"anchor":"S:f22a53ac17","kind":"function","line":305,"name":"createWorkItem","path_id":"F:22566cb46e","signature":"export function createWorkItem(modonomeDir, input)"},{"anchor":"S:a4e623c70b","doc":"Metadata-only edit: type, assigned_role, allowed_edit_set, gates, max_attempts, and touches_protected_path are safe to change regardless of the item's current state, including in flight, since none of","kind":"function","line":354,"name":"updateWorkItem","path_id":"F:22566cb46e","signature":"export function updateWorkItem(modonomeDir, itemId, patch)"},{"anchor":"S:14cb0e8cbb","doc":"Refuses outright for any in-flight state, regardless of whether its lease has technically expired: an item past \"queued\" represents real record of what happened (a branch, a PR, attempts, a maker iden","kind":"function","line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e","signature":"export function deleteWorkItem(modonomeDir, itemId)"},{"anchor":"S:e152142e8c","doc":"Merge a patch of { id: { severity?, text?, suppressed? } } into .modonome/messages.yaml's overrides map, re-validate against both the schema and the severity-floor rule (the same checkOverridesIntegri","kind":"function","line":399,"name":"patchMessages","path_id":"F:22566cb46e","signature":"export function patchMessages(modonomeDir, patch)"},{"anchor":"S:5b0e153cfb","kind":"function","line":424,"name":"pruneLearning","path_id":"F:22566cb46e","signature":"export function pruneLearning(modonomeDir, lesson)"},{"anchor":"S:a931ad2e62","doc":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns {string} the concatenated committed prom","kind":"function","line":46,"name":"resolvePromptText","path_id":"F:23917c6197","signature":"export function resolvePromptText(root)"},{"anchor":"S:0a5fed1978","doc":"Load every fixture JSON file from a directory. * @param {string} dir directory holding fixture *.json files * @returns {Array} parsed fixture objects, sorted by file name for stable output","kind":"function","line":59,"name":"loadFixtures","path_id":"F:23917c6197","signature":"export function loadFixtures(dir)"},{"anchor":"S:407ded8730","doc":"Evaluate one fixture against the committed prompt text. A fixture is ok only when * every one of its anchors is present, meaning the governing rule that produces its * golden decision still exists in ","kind":"function","line":79,"name":"evaluateFixture","path_id":"F:23917c6197","signature":"export function evaluateFixture(fixture, promptText)"},{"anchor":"S:c2e641f1c8","doc":"Run the whole suite: load fixtures, resolve prompt text, evaluate each. * @param {string} root repository root * @param {string} fixturesDir directory holding fixtures * @returns {{ results: Array<{id","kind":"function","line":106,"name":"runSuite","path_id":"F:23917c6197","signature":"export function runSuite(root, fixturesDir)"},{"anchor":"S:87ceb91d57","kind":"const","line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76","signature":"export const MESSAGES ="},{"anchor":"S:b5883cd7f4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:240ace7a8f","signature":"export const MESSAGES ="},{"anchor":"S:76171943e3","kind":"function","line":7,"name":"canonicalize","path_id":"F:245efb551c","signature":"export function canonicalize(value)"},{"anchor":"S:781c4112a2","doc":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another.","kind":"const","line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c","signature":"export const PACKET_DOMAIN = 'modonome.knowledge-packet.v1\\n';"},{"anchor":"S:210b0c6999","doc":"The exact bytes a packet signature covers: the domain tag followed by the JCS of the packet with its signature object removed.","kind":"function","line":26,"name":"signedBytes","path_id":"F:245efb551c","signature":"export function signedBytes(packet)"},{"anchor":"S:c44da37a7d","kind":"function","line":12,"name":"Dashboard","path_id":"F:2470e60179","signature":"export const Dashboard = () => ("},{"anchor":"S:7d5af2fca1","kind":"function","line":22,"name":"Staged","path_id":"F:250c8a0d4a","signature":"export const Staged = () => ("},{"anchor":"S:dd05df51d3","kind":"function","line":26,"name":"Promoted","path_id":"F:250c8a0d4a","signature":"export const Promoted = () => ;"},{"anchor":"S:4df7a92e8e","kind":"function","line":15,"name":"registerAdapter","path_id":"F:2554ddd30c","signature":"export function registerAdapter(adapter)"},{"anchor":"S:a07487517b","doc":"Resolve the adapter for a path by extension, defaulting to the generic fallback.","kind":"function","line":25,"name":"getAdapter","path_id":"F:2554ddd30c","signature":"export function getAdapter(relPath)"},{"anchor":"S:ec18e42e1a","doc":"Extract from one file, guarding against any adapter error so a single bad file never aborts a whole snapshot.","kind":"function","line":32,"name":"extractFile","path_id":"F:2554ddd30c","signature":"export function extractFile(relPath, source)"},{"anchor":"S:2fbd29545b","kind":"function","line":42,"name":"nestedMapChanged","path_id":"F:25e649633c","signature":"function nestedMapChanged(a: Record | undefined, b: Record | undefined): boolean"},{"anchor":"S:ea841eb82d","kind":"function","line":49,"name":"diffConfig","path_id":"F:25e649633c","signature":"export function diffConfig(base: ModonomeConfig, edited: ModonomeConfig): Partial"},{"anchor":"S:4426823827","kind":"interface","line":5,"name":"NavItem","path_id":"F:268769c4a6","signature":"export interface NavItem"},{"anchor":"S:a4155f5067","kind":"interface","line":16,"name":"AppShellProps","path_id":"F:268769c4a6","signature":"export interface AppShellProps"},{"anchor":"S:24b854ce78","doc":"The Modonome brand mark: a teal ring with a check on the dark ground.","kind":"function","line":36,"name":"BrandMark","path_id":"F:268769c4a6","signature":"function BrandMark()"},{"anchor":"S:5154763a93","doc":"The application frame: a fixed sidebar of primary navigation, a sticky top bar for * the mode switch and arming status, and a scrollable content column. It establishes * the mdn-root wrapper (the dark","kind":"function","line":60,"name":"AppShell","path_id":"F:268769c4a6","signature":"export function AppShell("},{"anchor":"S:33dfee21e3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2715f09f24","signature":"export const MESSAGES ="},{"anchor":"S:df7e6c1db0","kind":"function","line":4,"name":"Disabled","path_id":"F:28b7af3c53","signature":"export const Disabled = () => ;"},{"anchor":"S:36be7c4ac5","kind":"function","line":6,"name":"DryRun","path_id":"F:28b7af3c53","signature":"export const DryRun = () => ;"},{"anchor":"S:813f68335e","kind":"function","line":8,"name":"Armed","path_id":"F:28b7af3c53","signature":"export const Armed = () => ;"},{"anchor":"S:28578fa81a","kind":"function","line":10,"name":"Large","path_id":"F:28b7af3c53","signature":"export const Large = () => ;"},{"anchor":"S:bd9f62784d","doc":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker that only reads the rationale and skims ","kind":"const","line":5,"name":"scenario","path_id":"F:28f278b1d9","signature":"export const scenario ="},{"anchor":"S:d595535449","kind":"function","line":9,"name":"names","path_id":"F:2a74ae3f05","signature":"function names(result)"},{"anchor":"S:a5baaff840","kind":"function","line":12,"name":"modules","path_id":"F:2a74ae3f05","signature":"function modules(result)"},{"anchor":"S:b9942b1651","kind":"function","line":11,"name":"runRatchet","path_id":"F:2b49c74e74","signature":"function runRatchet(diffFile)"},{"anchor":"S:015c572711","doc":"Hash raw file bytes (Buffer or string) into a prefixed digest.","kind":"function","line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca","signature":"export function hashFileContent(bytes)"},{"anchor":"S:b926c18911","doc":"Hash an arbitrary string, used for oversized or unreadable files where content is represented by a stable stand-in rather than its bytes.","kind":"function","line":15,"name":"hashString","path_id":"F:2b9c43b0ca","signature":"export function hashString(text)"},{"anchor":"S:a320bea4da","doc":"Build a Merkle tree from file leaves. `entries` is [{ relPath, hash }]. Returns { root, nodes } where nodes maps every directory path (root is \".\") to its hash.","kind":"function","line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca","signature":"export function buildMerkleTree(entries)"},{"anchor":"S:85c852fd1a","doc":"File-level diff between two { relPath -> hash } maps. Returns sorted lists of added, removed, and changed paths. Directory node hashes (from buildMerkleTree) let a caller skip re-extracting an unchang","kind":"function","line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca","signature":"export function diffMerkle(prevFiles, nextFiles)"},{"anchor":"S:ad4edf7e81","kind":"function","line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861","signature":"def test_total_sums_prices()"},{"anchor":"S:54d2db3f99","doc":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50%, etc.) to verify correct discount calc","kind":"function","line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861","signature":"def test_apply_discount_zero_percent()"},{"anchor":"S:93fa315ac7","kind":"function","line":48,"name":"fail","path_id":"F:2d4c555ba1","signature":"function fail(code, message)"},{"anchor":"S:8252cf2ba8","kind":"function","line":52,"name":"warn","path_id":"F:2d4c555ba1","signature":"function warn(code, message)"},{"anchor":"S:003e6c53c4","kind":"function","line":56,"name":"info","path_id":"F:2d4c555ba1","signature":"function info(code, message)"},{"anchor":"S:5ef7e9a80c","doc":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into approving itself (the new attack surface a","kind":"function","line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990","signature":"export function buildReviewPrompt(diff, checkerModel, authorLabel)"},{"anchor":"S:d5a9bb4227","kind":"function","line":47,"name":"capDiff","path_id":"F:2d6ef08990","signature":"function capDiff(diff)"},{"anchor":"S:fb6bf396bc","doc":"Resolve the checker and plan its review of a diff, without calling any model. * Enforces checker independence: when the change's maker model is known and distinct * models are required, the checker mu","kind":"function","line":61,"name":"planReview","path_id":"F:2d6ef08990","signature":"export function planReview(cfg, { diff, makerModel = null, authorLabel = \"an external author\" } = {})"},{"anchor":"S:9ab63d4bb2","doc":"Extract a coarse structured verdict from the checker's free text. Deliberately simple: the summary is the first line, REQUEST_CHANGES drives the requestChanges flag. A missing marker is treated as \"no","kind":"function","line":83,"name":"parseVerdict","path_id":"F:2d6ef08990","signature":"export function parseVerdict(text)"},{"anchor":"S:bca7722767","doc":"Plan the review and, under execute:true, run the checker on its configured endpoint. * The spike's live path supports the openai-http transport (a local or free/gateway * model, matching the local-fir","kind":"function","line":100,"name":"reviewDiff","path_id":"F:2d6ef08990","signature":"export async function reviewDiff(cfg, { diff, makerModel, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:568ac62670","doc":"--- CLI ---------------------------------------------------------------------","kind":"function","line":124,"name":"parseArgs","path_id":"F:2d6ef08990","signature":"function parseArgs(argv)"},{"anchor":"S:f12376c7b1","kind":"function","line":136,"name":"readDiff","path_id":"F:2d6ef08990","signature":"function readDiff(path)"},{"anchor":"S:2d24ebcbdf","doc":"A markdown block for a human, and for GitHub Actions the same block lands in the job summary when the workflow redirects stdout to $GITHUB_STEP_SUMMARY.","kind":"function","line":143,"name":"renderReport","path_id":"F:2d6ef08990","signature":"function renderReport({ plan, executed, review })"},{"anchor":"S:118e66be10","doc":"Minimal argv helper shared by scripts that take `--flag value` pairs.","kind":"function","line":2,"name":"flagValue","path_id":"F:2d93cea2d4","signature":"export function flagValue(argv, name)"},{"anchor":"S:4bacff1244","kind":"function","line":15,"name":"fileExists","path_id":"F:2e327963ed","signature":"function fileExists(root, ...candidates)"},{"anchor":"S:41050d03a4","kind":"function","line":19,"name":"readIfExists","path_id":"F:2e327963ed","signature":"function readIfExists(root, rel)"},{"anchor":"S:1be3814c77","kind":"function","line":24,"name":"listWorkflows","path_id":"F:2e327963ed","signature":"function listWorkflows(root)"},{"anchor":"S:8f1da92228","doc":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object.","kind":"function","line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed","signature":"export function detectRepoFacts(root)"},{"anchor":"S:74bea9ecdf","doc":"A criterion entry: a stable id, the framework and level, whether the observed facts satisfy it, and the evidence or remediation note.","kind":"function","line":59,"name":"criterion","path_id":"F:2e327963ed","signature":"function criterion(id, framework, level, met, evidence)"},{"anchor":"S:8e94f927e1","doc":"Map observed facts to criteria across the supported frameworks. Pure.","kind":"function","line":64,"name":"mapToCriteria","path_id":"F:2e327963ed","signature":"export function mapToCriteria(facts)"},{"anchor":"S:a0db477c6e","kind":"function","line":90,"name":"summarize","path_id":"F:2e327963ed","signature":"export function summarize(criteria)"},{"anchor":"S:f93b3b8c7c","kind":"function","line":95,"name":"buildEvidence","path_id":"F:2e327963ed","signature":"export function buildEvidence(root, generatedAt)"},{"anchor":"S:43f1c85009","kind":"function","line":108,"name":"renderMarkdown","path_id":"F:2e327963ed","signature":"export function renderMarkdown(evidence)"},{"anchor":"S:b6efca77f5","kind":"function","line":17,"name":"basename","path_id":"F:2f3e98ab2c","signature":"function basename(path)"},{"anchor":"S:e2afc6b75b","kind":"function","line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c","signature":"export function isContentExempt(path)"},{"anchor":"S:1562160a7c","kind":"function","line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c","signature":"export function isJsTsScope(path)"},{"anchor":"S:c0981a3461","kind":"function","line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c","signature":"export function isPythonScope(path)"},{"anchor":"S:4195e187b2","kind":"function","line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c","signature":"export function isWorkflowScope(path)"},{"anchor":"S:732a1c21fe","kind":"function","line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerComposeScope(path)"},{"anchor":"S:d25b3fbe33","kind":"function","line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerfileScope(path)"},{"anchor":"S:55386d6b24","kind":"function","line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c","signature":"export function isK8sScope(path)"},{"anchor":"S:2216bfd660","kind":"function","line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c","signature":"export function isTerraformScope(path)"},{"anchor":"S:f88ca29ea3","kind":"function","line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c","signature":"export function isBroadScope(path)"},{"anchor":"S:823d7fa306","kind":"const","line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c","signature":"export const PROTECTED_PATH_GLOBS = ["},{"anchor":"S:2dc33a851f","kind":"function","line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c","signature":"export function globToRegExp(glob)"},{"anchor":"S:5e20ef9f71","kind":"function","line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c","signature":"export function matchesProtectedPath(path)"},{"anchor":"S:bb036fe763","kind":"function","line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripSameLineNoise(rawLine)"},{"anchor":"S:7d38304e55","kind":"function","line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripPythonSameLineNoise(line)"},{"anchor":"S:cf9f3a025e","doc":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the ","kind":"function","line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c","signature":"export function stripHashComment(line)"},{"anchor":"S:d9eda62ca5","kind":"function","line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c","signature":"export function stripForScope(path, line)"},{"anchor":"S:e4bb79a957","kind":"function","line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c","signature":"export function redactMatchedText(text, opts = {})"},{"anchor":"S:ec6c0b3d73","kind":"const","line":250,"name":"RULES","path_id":"F:2f3e98ab2c","signature":"export const RULES = ["},{"anchor":"S:02759ae11a","kind":"const","line":973,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c","signature":"export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));"},{"anchor":"S:c504685956","kind":"interface","line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee","signature":"export interface EmptyStateProps"},{"anchor":"S:80e9a1f555","doc":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it","kind":"function","line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee","signature":"export function EmptyState({ title, message, icon = \"queue\", action }: EmptyStateProps)"},{"anchor":"S:baacff5701","kind":"interface","line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee","signature":"export interface LoadingStateProps"},{"anchor":"S:0a9b63cb4b","doc":"Centered spinner with a label, used while a screen or panel is fetching data. * The spinner is a decorative rotating ring; the label carries the accessible * status via `role=\"status\"` so assistive te","kind":"function","line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee","signature":"export function LoadingState({ label = \"Loading\" }: LoadingStateProps)"},{"anchor":"S:9382da6a24","kind":"interface","line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee","signature":"export interface ErrorStateProps"},{"anchor":"S:78e9af551d","doc":"Danger-toned placeholder for a screen or panel that failed to load. Pairs the * danger color with an alert icon and text so the failure is never color-only. * Use `role=\"alert\"` semantics are carried ","kind":"function","line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee","signature":"export function ErrorState({ title = \"Something went wrong\", message, action }: ErrorStateProps)"},{"anchor":"S:79676d74df","kind":"interface","line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee","signature":"export interface PermissionDeniedStateProps"},{"anchor":"S:3800b0c645","doc":"Owner-toned placeholder shown when the current actor lacks the role needed to * view or act on a screen. Pairs the owner color with a lock icon and text so the * restriction is never color-only.","kind":"function","line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee","signature":"export function PermissionDeniedState("},{"anchor":"S:fc6f0e771f","kind":"type","line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94","signature":"export type StatusPillTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:0518e5f603","kind":"type","line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94","signature":"export type StatusPillSize = \"sm\" | \"md\";"},{"anchor":"S:c850118bb2","kind":"interface","line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94","signature":"export interface StatusPillProps extends HTMLAttributes"},{"anchor":"S:eb647d4678","doc":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or dot) so * the status reads correctly even ","kind":"function","line":27,"name":"StatusPill","path_id":"F:2fc610bd94","signature":"export function StatusPill("},{"anchor":"S:35a01a919e","doc":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative when present preserves every existing confi","kind":"function","line":45,"name":"primaryModel","path_id":"F:304ce7b89d","signature":"function primaryModel(roleCfg, roleDefaults)"},{"anchor":"S:0713a27a1f","kind":"function","line":51,"name":"resolveRole","path_id":"F:304ce7b89d","signature":"export function resolveRole(cfg, role)"},{"anchor":"S:433f196465","doc":"Resolve a role's prioritized model list into an ordered array of fully-resolved model descriptors, highest priority first. Source is roleCfg.models when present, else the single primary model, so a ro","kind":"function","line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d","signature":"export function resolveRoleModelChain(cfg, role)"},{"anchor":"S:5aed523637","doc":"Pick the first model in a chain that is affordable under the daily budget, so a prioritized list falls back from a paid frontier choice to a free or local one when no budget is set. A local or free mo","kind":"function","line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d","signature":"export function selectUsableModel(chain, { budgetUsdPerDay = 0 } = {})"},{"anchor":"S:a2d5fcb920","doc":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duties * contract (distinct maker, checker, ","kind":"function","line":13,"name":"GatesScreen","path_id":"F:304fa8ef33","signature":"export function GatesScreen({ state }: { state: PanelState })"},{"anchor":"S:b6cbeed65d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:313bcfac46","signature":"export const MESSAGES ="},{"anchor":"S:6425f5a6c7","kind":"function","line":10,"name":"WithLeases","path_id":"F:31658eff0b","signature":"export const WithLeases = () => {}} />;"},{"anchor":"S:618d055a7c","doc":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and import edges. Bodies are never included. e","kind":"function","line":5,"name":"clean","path_id":"F:3213d03b72","signature":"function clean(text)"},{"anchor":"S:37c1996b57","kind":"function","line":10,"name":"signature","path_id":"F:3213d03b72","signature":"function signature(line)"},{"anchor":"S:1bafda617f","doc":"The docstring is the first triple-quoted string on the line(s) after a def/class.","kind":"function","line":15,"name":"docBelow","path_id":"F:3213d03b72","signature":"function docBelow(lines, defIndex)"},{"anchor":"S:82727ee8e7","kind":"function","line":35,"name":"collectImports","path_id":"F:3213d03b72","signature":"function collectImports(trimmed, lineNo, out)"},{"anchor":"S:aaa1eac555","kind":"const","line":47,"name":"adapter","path_id":"F:3213d03b72","signature":"export const adapter ="},{"anchor":"S:a63cef8ef8","kind":"function","line":4,"name":"Armed","path_id":"F:3319e5c923","signature":"export const Armed = () => ("},{"anchor":"S:e25d17a09c","kind":"function","line":17,"name":"SafeDefaults","path_id":"F:3319e5c923","signature":"export const SafeDefaults = () => ("},{"anchor":"S:457f8a5e17","doc":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi","kind":"const","line":4,"name":"MESSAGES","path_id":"F:33c4d744f3","signature":"export const MESSAGES ="},{"anchor":"S:52027883f7","doc":"parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at this boundary: whenever errors is non-empty, entries is always []. Callers never need to remember to check errors before trust","kind":"function","line":24,"name":"parseAllowlist","path_id":"F:33ffae019c","signature":"export function parseAllowlist(text)"},{"anchor":"S:8c5294d2ea","doc":"loadAllowlist(path) -> { entries, errors }. A missing file is the default, backward-compatible state (zero suppressions), never an error.","kind":"function","line":49,"name":"loadAllowlist","path_id":"F:33ffae019c","signature":"export function loadAllowlist(path)"},{"anchor":"S:27874d43ac","doc":"isSuppressed(finding, entries, today) -> the matching entry, or null. `today` is a \"YYYY-MM-DD\" string passed explicitly by the caller (never read from the system clock in here), so this stays determi","kind":"function","line":62,"name":"isSuppressed","path_id":"F:33ffae019c","signature":"export function isSuppressed(finding, entries, today)"},{"anchor":"S:f4e42f5cd6","doc":"applyAllowlist(findings, entries, today) -> findings with a new `suppressed` field on each ({entry_id, reason} or null). Every other field is untouched.","kind":"function","line":75,"name":"applyAllowlist","path_id":"F:33ffae019c","signature":"export function applyAllowlist(findings, entries, today)"},{"anchor":"S:4b38793395","doc":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal","kind":"const","line":8,"name":"scenario","path_id":"F:34ca4e55d1","signature":"export const scenario ="},{"anchor":"S:f794e6adf4","kind":"function","line":6,"name":"typeOf","path_id":"F:34cb2b6c48","signature":"function typeOf(value)"},{"anchor":"S:0768a4cf0f","kind":"function","line":13,"name":"matchesType","path_id":"F:34cb2b6c48","signature":"function matchesType(value, type)"},{"anchor":"S:52913852e3","kind":"function","line":22,"name":"validate","path_id":"F:34cb2b6c48","signature":"export function validate(schema, value, path = \"$\", errors = [])"},{"anchor":"S:4b7a72e608","kind":"type","line":4,"name":"Role","path_id":"F:35c6d59157","signature":"export type Role ="},{"anchor":"S:fdc2a33d21","kind":"type","line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157","signature":"export type RoleBadgeSize = \"sm\" | \"md\";"},{"anchor":"S:e3f95000e0","kind":"interface","line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157","signature":"export interface RoleBadgeProps"},{"anchor":"S:301cb496d5","doc":"A labeled chip identifying a governance actor or role, pairing an icon with the * human-readable name. The four core review actors (maker, checker, merge authority, * owner) get distinct accent colors","kind":"function","line":72,"name":"RoleBadge","path_id":"F:35c6d59157","signature":"export function RoleBadge({ role, size = \"md\" }: RoleBadgeProps)"},{"anchor":"S:35902c8cc1","kind":"const","line":1,"name":"MESSAGES","path_id":"F:35d4a12b63","signature":"export const MESSAGES ="},{"anchor":"S:61ec9209fc","kind":"function","line":22,"name":"matchSymbol","path_id":"F:36419aa427","signature":"function matchSymbol(trimmed)"},{"anchor":"S:500f4c1cd3","kind":"function","line":30,"name":"cleanSignature","path_id":"F:36419aa427","signature":"function cleanSignature(trimmed)"},{"anchor":"S:3602dcc44c","kind":"function","line":37,"name":"cleanDoc","path_id":"F:36419aa427","signature":"function cleanDoc(text)"},{"anchor":"S:df1472b647","kind":"function","line":47,"name":"docAbove","path_id":"F:36419aa427","signature":"function docAbove(lines, index)"},{"anchor":"S:ac015d1f81","kind":"function","line":67,"name":"collectImports","path_id":"F:36419aa427","signature":"function collectImports(trimmed, lineNo)"},{"anchor":"S:70c4ff437c","kind":"const","line":80,"name":"adapter","path_id":"F:36419aa427","signature":"export const adapter ="},{"anchor":"S:65d6e9b42e","kind":"function","line":112,"name":"dedupeImports","path_id":"F:36419aa427","signature":"function dedupeImports(imports)"},{"anchor":"S:442c9dff6c","kind":"function","line":5,"name":"makeGateway","path_id":"F:373a946d5c","signature":"function makeGateway()"},{"anchor":"S:af1450421c","doc":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the github-models provider (needs models:re","kind":"function","line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e","signature":"export function classifyEndpoint(role)"},{"anchor":"S:cbbe6a270b","doc":"A base_url points at a private/self-hosted host when its hostname is localhost, a loopback address, a *.local mDNS name, or an RFC1918 range.","kind":"function","line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e","signature":"function isPrivateHost(baseUrl)"},{"anchor":"S:ff45c441d1","doc":"Decide whether a runner target can reach a role's endpoint. A target declares * its reach with optional fields on its config entry: * reachable_providers: provider names it can call (for example [\"loc","kind":"function","line":67,"name":"canReach","path_id":"F:37f4a5c04e","signature":"export function canReach(target, roleEndpoint)"},{"anchor":"S:55ee648216","doc":"Resolve the required execution target (environment id) for a role's model * endpoint. Reads cfg.runners and returns the first target that both declares an * environment and can reach the endpoint, pre","kind":"function","line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e","signature":"export function resolveExecutionTarget(role, cfg, overrides = {})"},{"anchor":"S:2a28972ca4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3835919e8e","signature":"export const MESSAGES ="},{"anchor":"S:a9b3acb352","kind":"function","line":16,"name":"writeRunLog","path_id":"F:3b382f95c0","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:4118076b3e","kind":"function","line":29,"name":"pad","path_id":"F:3b382f95c0","signature":"function pad(s, n) { return String(s).padEnd(n); }"},{"anchor":"S:0ba2f17fcf","kind":"function","line":30,"name":"rpad","path_id":"F:3b382f95c0","signature":"function rpad(s, n) { return String(s).padStart(n); }"},{"anchor":"S:02e9b6beea","kind":"function","line":32,"name":"parseMetrics","path_id":"F:3b382f95c0","signature":"function parseMetrics()"},{"anchor":"S:5962011a99","kind":"function","line":41,"name":"summarize","path_id":"F:3b382f95c0","signature":"function summarize(events)"},{"anchor":"S:b288f69305","kind":"function","line":76,"name":"agentproofScore","path_id":"F:3b382f95c0","signature":"function agentproofScore()"},{"anchor":"S:145bc035b8","kind":"function","line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0","signature":"function listFilesRecursive(dir, matches, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:5967648d07","doc":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple heuristic, not a full doc-coverage analysi","kind":"function","line":116,"name":"isDocumented","path_id":"F:3b382f95c0","signature":"function isDocumented(filePath)"},{"anchor":"S:98d9caecec","doc":"Advisory, bounded heuristic: an exported symbol is a \"dead code suspect\" when its declared name never appears again (by plain text match) anywhere else under scripts/ or tests/. This is a name-collisi","kind":"function","line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0","signature":"function findExportedSymbols(filePath)"},{"anchor":"S:cab6ecab70","kind":"function","line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0","signature":"export function computeDeadCodeSuspects(sourceFiles, root, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:62f42e9591","doc":"Computes a deterministic, offline snapshot of repo-impact metrics rooted at `root` (a directory containing scripts/, tests/, docs/). Pure aside from filesystem reads; never writes anything.","kind":"function","line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function computeImpactSnapshot(root)"},{"anchor":"S:882efb23a5","doc":"Reads the newest run log under runsDir that carries an `impact` field. Returns null if none exists (first run, no baseline).","kind":"function","line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function findPriorImpactSnapshot(runsDir)"},{"anchor":"S:d444b209b8","doc":"Pure delta computation: current minus prior for each numeric field. When prior is null/undefined, returns a \"first run, no baseline\" marker instead of numeric deltas.","kind":"function","line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0","signature":"export function computeImpactDelta(current, prior)"},{"anchor":"S:bafcfbb33c","kind":"function","line":224,"name":"formatDelta","path_id":"F:3b382f95c0","signature":"function formatDelta(n)"},{"anchor":"S:b6eeacb415","kind":"function","line":4,"name":"Requirement","path_id":"F:3b4065b679","signature":"export const Requirement = () => ("},{"anchor":"S:35e362f448","kind":"function","line":79,"name":"emit","path_id":"F:3b96b6dfed","signature":"function emit(format, decision, reason)"},{"anchor":"S:073124e2d8","kind":"function","line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed","signature":"function extractFromClaudeToolInput(toolName, input, cwd)"},{"anchor":"S:40cce153df","doc":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor beforeShellExecution payload carries `comma","kind":"function","line":135,"name":"extractChange","path_id":"F:3b96b6dfed","signature":"function extractChange(payload)"},{"anchor":"S:f2e55d9b4a","kind":"function","line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed","signature":"function guessFileFromCommand(cmd)"},{"anchor":"S:209a48ca7f","doc":"Best-effort parse of a `sed 's/PATTERN/REPLACEMENT/'` (or `#`, `|`, `,`, `@` delimited) substitution. This is the one shell idiom common enough, and structured enough, to reliably recover a real befor","kind":"function","line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed","signature":"function parseSedReplacement(cmd)"},{"anchor":"S:485d7c5e96","kind":"function","line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed","signature":"function unescapeSed(s)"},{"anchor":"S:4214f7fa01","doc":"Best-effort parse of a shell redirect target (`> file`, `>> file`), which names the exact file the command is about to write, stronger than any token guess.","kind":"function","line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed","signature":"function parseRedirectTarget(cmd)"},{"anchor":"S:2305f3725a","kind":"function","line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed","signature":"function diffForCommand(cmd)"},{"anchor":"S:d761c7660a","kind":"function","line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed","signature":"function diffForReplace(filePath, oldText, newText)"},{"anchor":"S:2df1658785","kind":"function","line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed","signature":"function diffForMultiEdit(filePath, edits)"},{"anchor":"S:ae3c96ae84","kind":"function","line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed","signature":"function diffForWrite(filePath, content, cwd)"},{"anchor":"S:7d253ea6b0","kind":"function","line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed","signature":"function buildSyntheticDiff(change)"},{"anchor":"S:8761033dfb","kind":"function","line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed","signature":"function runGuardRatchet(diffText)"},{"anchor":"S:12c1e0f104","kind":"function","line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed","signature":"function formatDenyReason(findings)"},{"anchor":"S:745c98231d","kind":"function","line":338,"name":"main","path_id":"F:3b96b6dfed","signature":"function main()"},{"anchor":"S:efea80af4e","doc":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying the * control-panel requirement of a co","kind":"function","line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e","signature":"export function ConfirmProvider({ children }: { children: ReactNode })"},{"anchor":"S:7989466d34","kind":"function","line":59,"name":"useConfirm","path_id":"F:3c479cac6e","signature":"export function useConfirm(): ConfirmFn"},{"anchor":"S:b908c74a11","kind":"function","line":5,"name":"makeDb","path_id":"F:3c53926ecd","signature":"function makeDb()"},{"anchor":"S:225c7a7d84","kind":"function","line":21,"name":"Open","path_id":"F:3ce0fd77eb","signature":"export const Open = () => {}} />;"},{"anchor":"S:a2df9a5c24","kind":"function","line":23,"name":"Resolved","path_id":"F:3ce0fd77eb","signature":"export const Resolved = () => ;"},{"anchor":"S:7c44412e8a","kind":"function","line":4,"name":"WithHeader","path_id":"F:3d505706cd","signature":"export const WithHeader = () => ("},{"anchor":"S:72d4f657d5","kind":"function","line":91,"name":"setup","path_id":"F:3de9042953","signature":"function setup()"},{"anchor":"S:09a834e684","kind":"function","line":14,"name":"makeRepo","path_id":"F:3ea503e7c0","signature":"function makeRepo(spec)"},{"anchor":"S:64de4c98b6","doc":"Helper reused by the mapping test.","kind":"function","line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0","signature":"function makeRepoOnce()"},{"anchor":"S:fa6785fa4b","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3f1216fc11","signature":"export const MESSAGES ="},{"anchor":"S:91c42b4f27","kind":"function","line":23,"name":"read","path_id":"F:4096620673","signature":"function read(rel)"},{"anchor":"S:87c8d03eb8","doc":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that","kind":"function","line":132,"name":"dirsFromCodeowners","path_id":"F:4096620673","signature":"function dirsFromCodeowners()"},{"anchor":"S:4287ee7685","kind":"const","line":1,"name":"MESSAGES","path_id":"F:40d8f235fd","signature":"export const MESSAGES ="},{"anchor":"S:daac1f172a","kind":"function","line":12,"name":"cli","path_id":"F:40e4f39b59","signature":"function cli(...args)"},{"anchor":"S:1c82a73570","kind":"function","line":19,"name":"tmp","path_id":"F:40e4f39b59","signature":"function tmp()"},{"anchor":"S:586705c7a0","kind":"type","line":5,"name":"CardTone","path_id":"F:40eb542a82","signature":"export type CardTone = \"default\" | \"raised\";"},{"anchor":"S:1ae77ae47b","kind":"interface","line":7,"name":"CardProps","path_id":"F:40eb542a82","signature":"export interface CardProps extends HTMLAttributes"},{"anchor":"S:555c013724","doc":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, then the * body. When no title, eyebrow, ","kind":"function","line":31,"name":"Card","path_id":"F:40eb542a82","signature":"export function Card("},{"anchor":"S:b6fce3a5a9","kind":"function","line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a","signature":"export const ItemDetail = () => ("},{"anchor":"S:afe9763761","kind":"function","line":3,"name":"RaiseCap","path_id":"F:4387a44284","signature":"export const RaiseCap = () => ("},{"anchor":"S:24f0960624","kind":"function","line":29,"name":"runRemediate","path_id":"F:44a5987438","signature":"function runRemediate(args, { cwd, env = {} })"},{"anchor":"S:c8ee4f2e2e","doc":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commit.","kind":"function","line":40,"name":"makePollutedRepo","path_id":"F:44a5987438","signature":"function makePollutedRepo()"},{"anchor":"S:3e43134e83","kind":"function","line":69,"name":"arm","path_id":"F:44a5987438","signature":"function arm(dir, overrides = {})"},{"anchor":"S:48356203e2","kind":"function","line":13,"name":"repo","path_id":"F:4637e1fecb","signature":"function repo()"},{"anchor":"S:fd2e16186e","doc":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is ","kind":"function","line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0","signature":"function escapeRegExp(s)"},{"anchor":"S:e3c36060ec","doc":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).","kind":"function","line":98,"name":"makeMinimalRepo","path_id":"F:48355ccf4d","signature":"function makeMinimalRepo()"},{"anchor":"S:7c9eb8f22d","kind":"function","line":116,"name":"runScript","path_id":"F:48355ccf4d","signature":"function runScript(tmp)"},{"anchor":"S:43cc2b28a1","kind":"function","line":230,"name":"withStubRunner","path_id":"F:48355ccf4d","signature":"function withStubRunner(tmp, score, extendedScore, totalScore)"},{"anchor":"S:bb570e99d8","kind":"const","line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c","signature":"export const AI_SIGNATURE_RE = new RegExp(P, \"iu\");"},{"anchor":"S:ba4cb77f9c","doc":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions ","kind":"function","line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c","signature":"export function branchHasModelSegment(name)"},{"anchor":"S:4bfc88b9a8","doc":"Propose a compliant branch name by replacing any denylisted segment with a neutral * placeholder, preserving the rest of the path so the suggestion stays meaningful. * \"claude/fix-config\" -> \"change/f","kind":"function","line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c","signature":"export function suggestBranchName(name)"},{"anchor":"S:38e44b5fa7","doc":"Scan a branch name and return a finding if it carries a model identifier.","kind":"function","line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c","signature":"export function detectBranch(name)"},{"anchor":"S:e0f397f4e1","doc":"Scan commits for forbidden author/committer identity (reusing commit-identity.mjs) * AND for AI signatures inside commit-message bodies. The identity check and the body * check are complementary: the ","kind":"function","line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c","signature":"export function detectCommits(logOutput, bodies = [])"},{"anchor":"S:099c6ccde0","doc":"Scan a block of free text (PR body, a comment, a tracked file) for AI signatures. * Returns one finding per matching line so the remedy can point at the exact spot.","kind":"function","line":132,"name":"detectText","path_id":"F:4a7eaceb5c","signature":"export function detectText(kind, where, text)"},{"anchor":"S:6c21b6660b","kind":"function","line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c","signature":"function firstMatch(text)"},{"anchor":"S:af6abeace9","doc":"Render a precomputed, actionable remedy so a blocked violation is never a dead end. * The message names the exact fix and, where applicable, the literal git commands to * apply it, so a reviewer paste","kind":"function","line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c","signature":"export function formatRemedy(findings)"},{"anchor":"S:3ef15e4c1b","doc":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked.","kind":"function","line":13,"name":"redactText","path_id":"F:4b91a9f65b","signature":"export function redactText(text, { strict = false } = {})"},{"anchor":"S:7379962c7e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:4d08d5472f","signature":"export const MESSAGES ="},{"anchor":"S:5e08a11ce4","doc":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @param {Array} [options.comments] -","kind":"function","line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df","signature":"export function startMockGitHubServer(options = {})"},{"anchor":"S:2ea6241ebd","kind":"function","line":68,"name":"writeJson","path_id":"F:4dabd020df","signature":"function writeJson(res, status, body)"},{"anchor":"S:a76a61b560","doc":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored copy cannot silently drop credit to mod","kind":"const","line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024","signature":"export const MANIFEST_VERSION = 2;"},{"anchor":"S:d4ed2d5fe7","kind":"const","line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024","signature":"export const ATTESTATION_KIND = \"policy-attestation\";"},{"anchor":"S:78dd5bd63d","kind":"function","line":52,"name":"sha256Hex","path_id":"F:4db1101024","signature":"function sha256Hex(bytes)"},{"anchor":"S:fc880b17bd","kind":"function","line":56,"name":"readOrNull","path_id":"F:4db1101024","signature":"function readOrNull(root, rel)"},{"anchor":"S:262e039096","doc":"Extract a Markdown section body: the heading whose text matches `heading` (case-insensitive) and the lines beneath it, up to the next heading of the same or higher level. Returns null when no such hea","kind":"function","line":68,"name":"extractSection","path_id":"F:4db1101024","signature":"export function extractSection(markdown, heading)"},{"anchor":"S:e6c1406727","kind":"function","line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024","signature":"function fingerprintDisclosureSources(root)"},{"anchor":"S:41514ae74b","kind":"function","line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024","signature":"function fingerprintPolicyFiles(root)"},{"anchor":"S:cf9af1e29c","doc":"The disclosed gate set is derived from the actual `verify` npm script so it cannot drift from what the project runs. One level of `npm run ` / `npm test` aliases is flattened so gates hidden beh","kind":"function","line":112,"name":"gatesFromVerify","path_id":"F:4db1101024","signature":"export function gatesFromVerify(pkgJson)"},{"anchor":"S:5f317ed26b","kind":"function","line":127,"name":"capabilities","path_id":"F:4db1101024","signature":"function capabilities(config)"},{"anchor":"S:44c14f3d19","doc":"The credit block (ADR-037). Populated from package.json, never hardcoded twice, so a rename in package.json is what moves this, not a second literal to keep in sync. The repository URL is stripped of ","kind":"function","line":135,"name":"generator","path_id":"F:4db1101024","signature":"function generator(pkgJson)"},{"anchor":"S:f51dd29844","kind":"function","line":145,"name":"normalizePaths","path_id":"F:4db1101024","signature":"function normalizePaths(list)"},{"anchor":"S:a92333a9ea","doc":"Build the deterministic manifest body (without the content_digest) from repo state.","kind":"function","line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024","signature":"export function buildPolicyManifestBody({ root, config, pkgJson })"},{"anchor":"S:c4e4845bcc","doc":"Content digest over the canonical (RFC 8785 JCS) serialization of the body, so a re-serialized or key-reordered file yields the same digest and only a real policy change moves it.","kind":"function","line":181,"name":"manifestDigest","path_id":"F:4db1101024","signature":"export function manifestDigest(body)"},{"anchor":"S:b29d404deb","doc":"The full manifest: the body plus its self-describing content_digest.","kind":"function","line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024","signature":"export function buildPolicyManifest({ root, config, pkgJson })"},{"anchor":"S:72cb0b7406","kind":"const","line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0","signature":"export const REQUIRED_FIELDS = ["},{"anchor":"S:005abb5200","doc":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evict.\" Until now nothing enforced it; appen","kind":"const","line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0","signature":"export const MAX_STAGED_ENTRIES = 20;"},{"anchor":"S:2064ebd573","doc":"A staged line, per LESSONS.md's own \"Staged format\": - [YYYY-MM-DD] (signal: gate|review|incident|rework) lesson - evidence: ref","kind":"const","line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0","signature":"export const STAGED_LINE_RE ="},{"anchor":"S:391a920cca","kind":"function","line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0","signature":"function learningsPath(root)"},{"anchor":"S:6831eb78e0","doc":"Extract the first fenced json block that appears after the \"## Promoted\" heading.","kind":"function","line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0","signature":"export function readPromotedLearnings(root)"},{"anchor":"S:dab0af7046","doc":"Return the staged bullet lines (the \"- [date] ...\" entries) between the \"## Staged\" and \"## Promoted\" headings. Lines that do not begin a bullet are ignored, so surrounding prose does not count agains","kind":"function","line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0","signature":"export function readStagedEntries(root)"},{"anchor":"S:30e8b022de","doc":"Append one staged candidate line to LESSONS.md, enforcing the format and the cap. Never evicts: a full section throws so a human promotes or prunes first. Idempotent on an exact-duplicate line. Return","kind":"function","line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0","signature":"export function appendStagedEntry(root, line)"},{"anchor":"S:2ca5ab6d7f","kind":"function","line":18,"name":"previewText","path_id":"F:4ebf08705b","signature":"function previewText(template: string)"},{"anchor":"S:d49b633132","kind":"function","line":67,"name":"isValidUrl","path_id":"F:4ebf08705b","signature":"function isValidUrl(value: string): boolean"},{"anchor":"S:6d2334f815","doc":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-","kind":"function","line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b","signature":"export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:fcf3c9d4a4","kind":"function","line":40,"name":"run","path_id":"F:4fad18c892","signature":"function run(diffPath, extraArgs = [])"},{"anchor":"S:9e3d232a1b","kind":"function","line":44,"name":"fixture","path_id":"F:4fad18c892","signature":"function fixture(dir, name)"},{"anchor":"S:d439b00c59","doc":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rule.","kind":"function","line":73,"name":"writeRunLog","path_id":"F:522efae76d","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:76dbb025c9","kind":"function","line":116,"name":"removeFirstMatch","path_id":"F:522efae76d","signature":"function removeFirstMatch(text, re)"},{"anchor":"S:4316722ab5","kind":"function","line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d","signature":"function insertBeforeFirst(text, re, render)"},{"anchor":"S:0ed808bd36","kind":"function","line":132,"name":"insertAfterFirst","path_id":"F:522efae76d","signature":"function insertAfterFirst(text, re, render)"},{"anchor":"S:49ad410798","kind":"function","line":140,"name":"replaceFirst","path_id":"F:522efae76d","signature":"function replaceFirst(text, findRe, replaceRe, replacement)"},{"anchor":"S:47c5321a5f","doc":"--------------------------------------------------------------------------- Target-repo file listing. Prefer git (fast, respects .gitignore, skips node_modules) and fall back to a bounded manual walk ","kind":"function","line":264,"name":"listFiles","path_id":"F:522efae76d","signature":"function listFiles(target)"},{"anchor":"S:474ceb514b","doc":"Opens the file once and sizes/reads it through that one file descriptor, rather than statSync(path) followed by a separate readFileSync(path): a path-based check-then-use leaves a window where the pat","kind":"function","line":289,"name":"readCapped","path_id":"F:522efae76d","signature":"function readCapped(abs)"},{"anchor":"S:a8f75707be","doc":"A minimal single-hunk unified diff for a localized edit, headed with the file's REAL repo-relative path so guard-ratchet classifies it as the real file, not a temp path.","kind":"function","line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d","signature":"function makeUnifiedDiff(relPath, before, after)"},{"anchor":"S:33d286d62d","doc":"Run a guard-ratchet at `scriptPath` against a saved diff. `json` asks for the machine format (used for the oracle, to read the MR code); the graded host run only needs the exit code. --diff mode reads","kind":"function","line":330,"name":"runRatchet","path_id":"F:522efae76d","signature":"function runRatchet(scriptPath, diffFile, json)"},{"anchor":"S:867db3037b","doc":"--------------------------------------------------------------------------- Decide what gate the target actually has configured. -----------------------------------------------------------------------","kind":"function","line":343,"name":"resolveGate","path_id":"F:522efae76d","signature":"function resolveGate(target)"},{"anchor":"S:4e5c54ea09","doc":"--------------------------------------------------------------------------- Run one category: find a real file, synthesize a weakening on a scratch copy, confirm it with the oracle, then grade it agai","kind":"function","line":369,"name":"runCategory","path_id":"F:522efae76d","signature":"function runCategory(cat, target, files, gate, scratchRoot)"},{"anchor":"S:c2e502ad5e","doc":"--------------------------------------------------------------------------- Level from the applicable (tested) categories only. N/A categories are excluded from both numerator and denominator so a rep","kind":"function","line":409,"name":"levelFor","path_id":"F:522efae76d","signature":"function levelFor(pass, applicable, gateConfigured)"},{"anchor":"S:086ff230f0","kind":"function","line":417,"name":"main","path_id":"F:522efae76d","signature":"function main(argv)"},{"anchor":"S:ad302fbf54","kind":"function","line":5,"name":"makeCartService","path_id":"F:52caf3b287","signature":"function makeCartService(cart)"},{"anchor":"S:8d10c3ed6e","kind":"function","line":13,"name":"makeOrderService","path_id":"F:52caf3b287","signature":"function makeOrderService()"},{"anchor":"S:6c21f00789","doc":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves the assertion's expected value to match ","kind":"const","line":7,"name":"scenario","path_id":"F:5376e86470","signature":"export const scenario ="},{"anchor":"S:2a04172292","kind":"function","line":4,"name":"HostSelected","path_id":"F:545c0ccfeb","signature":"export const HostSelected = () => {}} />;"},{"anchor":"S:2bd0a26c48","kind":"function","line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb","signature":"export const ProductSelected = () => {}} />;"},{"anchor":"S:0d3e338a93","kind":"function","line":15,"name":"run","path_id":"F:54784dcc0a","signature":"function run(...args)"},{"anchor":"S:5e3d6fa91f","kind":"function","line":20,"name":"run","path_id":"F:54a3c626d9","signature":"function run(script, args = [], env = {})"},{"anchor":"S:2f1892a712","kind":"function","line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9","signature":"function makeStagedFixture(stagedLines = [])"},{"anchor":"S:5ea90f5e50","kind":"class","line":3,"name":"CheckoutService","path_id":"F:54c6928de9","signature":"export class CheckoutService"},{"anchor":"S:712330cf3e","kind":"function","line":6,"name":"parseStagedLine","path_id":"F:54df44aadd","signature":"export function parseStagedLine(line)"},{"anchor":"S:041a6b87af","kind":"function","line":14,"name":"tmp","path_id":"F:55b3a4e2c0","signature":"function tmp()"},{"anchor":"S:32c99a4337","kind":"function","line":18,"name":"run","path_id":"F:55b3a4e2c0","signature":"function run(...args)"},{"anchor":"S:05af4c96a8","kind":"function","line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0","signature":"function seedLearnings(dir)"},{"anchor":"S:d8edda2d76","kind":"function","line":12,"name":"makeMinimalRepo","path_id":"F:564b053598","signature":"function makeMinimalRepo()"},{"anchor":"S:7cd6925ad6","kind":"function","line":19,"name":"runScript","path_id":"F:564b053598","signature":"function runScript(tmp)"},{"anchor":"S:634b7012be","doc":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals.","kind":"function","line":17,"name":"makeAtt","path_id":"F:571aa2f3ae","signature":"function makeAtt(repoUrl, autonomyEnabled, dryRun, caps, digest)"},{"anchor":"S:bbdb581d9d","kind":"interface","line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716","signature":"export interface SafetyStripProps"},{"anchor":"S:3f2874e2ce","doc":"A horizontal, wrapping strip of small labeled cells summarizing the safety-relevant * levers for a project at a glance: whether autonomy and auto-merge are on, dry-run * status, merge and budget caps,","kind":"function","line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716","signature":"export function SafetyStrip("},{"anchor":"S:42b8608c58","kind":"function","line":92,"name":"Cell","path_id":"F:57ca5f1716","signature":"function Cell({ label, help, children }: CellProps)"},{"anchor":"S:0f004d17fa","kind":"function","line":24,"name":"git","path_id":"F:580d11b514","signature":"function git(args, cwd)"},{"anchor":"S:4b391a8eee","doc":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be well-formed and to apply cleanly against","kind":"function","line":34,"name":"makeGitFixture","path_id":"F:580d11b514","signature":"function makeGitFixture()"},{"anchor":"S:fd58589dfa","doc":"Build a minimal plan shape invokeRoleOpenAI needs: plan[role] (a resolved role descriptor) plus runId/transcriptDir. transcriptDir is deliberately kept under the repo's gitignored runs/ prefix (see .g","kind":"function","line":127,"name":"makePlan","path_id":"F:580d11b514","signature":"function makePlan(role, roleDescriptor, transcriptSubdir)"},{"anchor":"S:b7db5f4d64","kind":"function","line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514","signature":"function cleanupTranscripts()"},{"anchor":"S:47cde5f81f","doc":"Lifecycle status of a decision: still open for input, or already resolved.","kind":"type","line":6,"name":"DecisionStatus","path_id":"F:583edef643","signature":"export type DecisionStatus = \"open\" | \"resolved\";"},{"anchor":"S:707883a645","doc":"Plain data shape for a single decision awaiting (or having received) human input. * Components in this package define their own shape rather than importing app-level * types, so this interface is the ","kind":"interface","line":14,"name":"DecisionSummary","path_id":"F:583edef643","signature":"export interface DecisionSummary"},{"anchor":"S:6e1dfe647a","kind":"interface","line":29,"name":"DecisionCardProps","path_id":"F:583edef643","signature":"export interface DecisionCardProps"},{"anchor":"S:5c69e2b109","doc":"A card summarizing a single decision the system is asking a human to make: the * question, an optional recommendation in an info-tinted inset, and its lifecycle * status. Open decisions with a hold-by","kind":"function","line":45,"name":"DecisionCard","path_id":"F:583edef643","signature":"export function DecisionCard({ decision, onResolve }: DecisionCardProps)"},{"anchor":"S:bd63b1e408","kind":"function","line":15,"name":"cleanSignature","path_id":"F:594f505f11","signature":"function cleanSignature(line)"},{"anchor":"S:21635cbeda","kind":"const","line":19,"name":"adapter","path_id":"F:594f505f11","signature":"export const adapter ="},{"anchor":"S:cf88d1486b","kind":"function","line":16,"name":"run","path_id":"F:5956278014","signature":"function run(...args)"},{"anchor":"S:06c0c85d92","kind":"function","line":20,"name":"tmp","path_id":"F:5956278014","signature":"function tmp()"},{"anchor":"S:069ca5f436","doc":"Catalog entries for scripts/check-repo-hygiene.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:597cc7ae15","signature":"export const MESSAGES ="},{"anchor":"S:7d89fd8d95","kind":"function","line":13,"name":"run","path_id":"F:5994385869","signature":"function run(script, args = [], env = {})"},{"anchor":"S:1ef7d0ea53","kind":"class","line":3,"name":"CartService","path_id":"F:599f5b2f28","signature":"export class CartService"},{"anchor":"S:bb5d1b5426","kind":"const","line":1,"name":"MESSAGES","path_id":"F:59b2499e4e","signature":"export const MESSAGES ="},{"anchor":"S:e99608caf1","doc":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word.","kind":"const","line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b","signature":"export const SAFE_BRANCH_NAMES = ["},{"anchor":"S:59dcca7090","doc":"Commit identities no layer may flag. dependabot is ordinary automation, allowed.","kind":"const","line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b","signature":"export const SAFE_IDENTITIES = ["},{"anchor":"S:7bfb1bf049","doc":"Free-text snippets (PR-body/commit-body shaped) no layer may flag. These exercise the ordinary-English and in-repo-vocabulary collisions that bare-word or substring matching would trip on.","kind":"const","line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b","signature":"export const SAFE_TEXT_SNIPPETS = ["},{"anchor":"S:9ef12b47d5","doc":"Inputs the STRICT detector intentionally flags today. This is a documented, deliberate over-block, not a false positive: the corpus locks the current behavior so any future change to it is a conscious","kind":"const","line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b","signature":"export const DOCUMENTED_STRICT_OVERBLOCKS = ["},{"anchor":"S:bfb04089fa","kind":"const","line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914","signature":"export const DEFAULT_QUEUE_DIR = join(root, \".modonome\", \"queue\");"},{"anchor":"S:04f5060b44","kind":"const","line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914","signature":"export const DEFAULT_LEASE_MINUTES = 30;"},{"anchor":"S:7bc320f853","doc":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued.","kind":"function","line":27,"name":"assertValid","path_id":"F:5b113a0914","signature":"function assertValid(record)"},{"anchor":"S:556ab0a4ef","kind":"function","line":34,"name":"recordPath","path_id":"F:5b113a0914","signature":"function recordPath(dir, id)"},{"anchor":"S:29fd3ef66c","doc":"Atomic write: serialize to a temp file in the same directory, then rename over the destination. Rename is atomic on the same filesystem, so a reader never observes a partial record.","kind":"function","line":41,"name":"writeAtomic","path_id":"F:5b113a0914","signature":"function writeAtomic(dir, id, record)"},{"anchor":"S:2102bdee1c","kind":"function","line":49,"name":"readRecord","path_id":"F:5b113a0914","signature":"function readRecord(dir, file)"},{"anchor":"S:a364864213","kind":"function","line":53,"name":"listRecords","path_id":"F:5b113a0914","signature":"function listRecords(dir)"},{"anchor":"S:96b040bf38","doc":"Enqueue an action. Fills schema_version, state, and created_at when omitted, * validates the record, and writes it atomically. Returns the stored record. * * @param {object} action - At least id, targ","kind":"function","line":76,"name":"enqueue","path_id":"F:5b113a0914","signature":"export function enqueue(action, dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:852d083fcb","doc":"List queued (not claimed/done/failed) actions, oldest first by created_at. * * @param {string} [dir] * @returns {object[]}","kind":"function","line":97,"name":"listQueued","path_id":"F:5b113a0914","signature":"export function listQueued(dir = DEFAULT_QUEUE_DIR)"},{"anchor":"S:ba017108fd","doc":"A lease is live if the record is claimed and its expiry is strictly in the future.","kind":"function","line":104,"name":"leaseIsLive","path_id":"F:5b113a0914","signature":"function leaseIsLive(record, now)"},{"anchor":"S:6b0614bdf6","doc":"Atomically lease the oldest queued action this worker environment can serve. * A record is servable when its target equals the worker env or appears in the * worker env's served set. Sets state to cla","kind":"function","line":127,"name":"claim","path_id":"F:5b113a0914","signature":"export function claim(workerEnv, dir = DEFAULT_QUEUE_DIR, now = new Date(), leaseMinutes = DEFAULT_LEASE_MINUTES)"},{"anchor":"S:194e854c70","doc":"Mark a claimed action done or failed, attaching an optional result object. * * @param {string} id * @param {object|null} result * @param {string} [dir] * @param {boolean} [ok] - true marks done, false","kind":"function","line":156,"name":"complete","path_id":"F:5b113a0914","signature":"export function complete(id, result, dir = DEFAULT_QUEUE_DIR, ok = true)"},{"anchor":"S:ed1db0b6bb","doc":"Revert every claimed record whose lease has expired back to queued, clearing * its owner and expiry. Returns the list of reclaimed records. * * @param {string} [dir] * @param {Date} [now] * @returns {","kind":"function","line":176,"name":"reclaimStale","path_id":"F:5b113a0914","signature":"export function reclaimStale(dir = DEFAULT_QUEUE_DIR, now = new Date())"},{"anchor":"S:26ee7911e3","doc":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (agentproof, CI log scraping), not a human-f","kind":"const","line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae","signature":"export const MESSAGES ="},{"anchor":"S:92bd39eb47","doc":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a finding's reason, reviewer_guidance, and lim","kind":"const","line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02","signature":"export const MESSAGES ="},{"anchor":"S:64ebce69bf","kind":"const","line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a","signature":"export const MESSAGES ="},{"anchor":"S:f36d6a8da6","kind":"function","line":12,"name":"buildRemediationView","path_id":"F:5daab9894d","signature":"export function buildRemediationView({ config = {}, envArmed = false, commits = [], identity = { name: \"\", email: \"\" } } = {})"},{"anchor":"S:ddfea151e8","kind":"function","line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7","signature":"export const TrustedAuthor = () => ("},{"anchor":"S:ea76c925e2","doc":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipped with --no-snapshot. Never overwrites ","kind":"function","line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c","signature":"function enableSnapshot(target, here)"},{"anchor":"S:8c6ccd3e8b","kind":"function","line":64,"name":"listTemplate","path_id":"F:5e450ff82c","signature":"function listTemplate(dir, base = \"\")"},{"anchor":"S:6dcbe228c5","kind":"function","line":75,"name":"scaffold","path_id":"F:5e450ff82c","signature":"export function scaffold(target, write)"},{"anchor":"S:950b7153af","doc":"Install the Tripwires editor hook packs into a target repo: the two hook config templates (.claude/settings.json, .cursor/hooks.json) plus the shared kernel and the detector it shells out to, so a hos","kind":"function","line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c","signature":"function scaffoldTripwires(target, here)"},{"anchor":"S:1856df868b","kind":"function","line":163,"name":"writeRunLog","path_id":"F:5e450ff82c","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:d6cf821403","doc":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`.","kind":"function","line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0","signature":"function keysFromDeclaration(source, declName)"},{"anchor":"S:da40a0864b","kind":"function","line":33,"name":"assertSameSet","path_id":"F:5eff4122c0","signature":"function assertSameSet(a, b, label)"},{"anchor":"S:0a677c2e37","kind":"function","line":19,"name":"msg","path_id":"F:5f7910375b","signature":"function msg(id, params)"},{"anchor":"S:397210a79e","kind":"function","line":24,"name":"pass","path_id":"F:5f7910375b","signature":"function pass(msg)"},{"anchor":"S:4bd4d449f1","kind":"function","line":27,"name":"fail","path_id":"F:5f7910375b","signature":"function fail(msg)"},{"anchor":"S:5d58defc25","kind":"function","line":14,"name":"tmpRepo","path_id":"F:60548316f5","signature":"function tmpRepo(configBody)"},{"anchor":"S:580f464240","kind":"function","line":23,"name":"runStatus","path_id":"F:60548316f5","signature":"function runStatus(dir, env)"},{"anchor":"S:0cfad6d2cf","kind":"function","line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c","signature":"function findSafeToDeleteFiles(dir)"},{"anchor":"S:17985dad90","doc":"Helper","kind":"function","line":245,"name":"execSync","path_id":"F:61296e720c","signature":"function execSync(cmd, opts)"},{"anchor":"S:2441bf3938","kind":"function","line":17,"name":"run","path_id":"F:61c2a29876","signature":"function run(format, payload)"},{"anchor":"S:581a43b877","kind":"function","line":26,"name":"parseJsonLine","path_id":"F:61c2a29876","signature":"function parseJsonLine(stdout)"},{"anchor":"S:5a2d3d98ce","kind":"type","line":6,"name":"ModalSize","path_id":"F:63351e350b","signature":"export type ModalSize = \"sm\" | \"md\";"},{"anchor":"S:b5d72ba60f","kind":"interface","line":8,"name":"ModalProps","path_id":"F:63351e350b","signature":"export interface ModalProps"},{"anchor":"S:5d9d040e28","doc":"The generic centered dialog: a panel over a scrim, closable by Escape, a scrim * click, or its own close button. Moves focus into the dialog on open. This is the * base primitive that composed dialogs","kind":"function","line":30,"name":"Modal","path_id":"F:63351e350b","signature":"export function Modal({ open, onClose, title, children, footer, size = \"md\" }: ModalProps)"},{"anchor":"S:1f19b07227","kind":"interface","line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb","signature":"export interface ConfirmDialogProps"},{"anchor":"S:0a9885ca9d","doc":"A confirmation dialog for destructive or high-consequence controls. Every control * that arms the engine, releases a lease, approves a protected path, or prunes a * learning routes through this so an ","kind":"function","line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb","signature":"export function ConfirmDialog("},{"anchor":"S:4abcc2a45b","kind":"function","line":21,"name":"redactionErrors","path_id":"F:65193a9799","signature":"export function redactionErrors(packet)"},{"anchor":"S:a8a643fda8","kind":"function","line":55,"name":"validatePacket","path_id":"F:65193a9799","signature":"export function validatePacket(packet)"},{"anchor":"S:489fa8bc67","kind":"type","line":14,"name":"HoverCardSide","path_id":"F:66264a042c","signature":"export type HoverCardSide = \"top\" | \"bottom\";"},{"anchor":"S:551c7477f2","kind":"interface","line":16,"name":"HoverCardSource","path_id":"F:66264a042c","signature":"export interface HoverCardSource"},{"anchor":"S:5ed8ee5c0a","kind":"interface","line":23,"name":"HoverCardProps","path_id":"F:66264a042c","signature":"export interface HoverCardProps"},{"anchor":"S:312c004ac1","doc":"A richer sibling of Tooltip: a small card (heading, body copy, source citation) for * reference content pulled from real documentation, rather than a one-line hint. Unlike * Tooltip, its content accep","kind":"function","line":46,"name":"HoverCard","path_id":"F:66264a042c","signature":"export function HoverCard({ title, body, source, children, side = \"bottom\" }: HoverCardProps)"},{"anchor":"S:050ec6eff9","doc":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent activity.","kind":"function","line":26,"name":"OverviewScreen","path_id":"F:6627655633","signature":"export function OverviewScreen("},{"anchor":"S:e95e85f904","kind":"const","line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8","signature":"export const SECRET_PATTERNS = ["},{"anchor":"S:9c4deaa396","doc":"Returns an array of { name } objects for every pattern that matches text.","kind":"function","line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8","signature":"export function scanForSecrets(text)"},{"anchor":"S:8b7542071f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:6a86908a3e","signature":"export const MESSAGES ="},{"anchor":"S:4eb76c8a83","kind":"function","line":9,"name":"Set","path_id":"F:6bef3f93ab","signature":"export const Set = () => ("},{"anchor":"S:c16b3b7bbf","kind":"function","line":10,"name":"Board","path_id":"F:6c0919b64e","signature":"export const Board = () => {}} />;"},{"anchor":"S:96ffd586d6","kind":"function","line":19,"name":"tmp","path_id":"F:6da7bd8294","signature":"function tmp()"},{"anchor":"S:0f77533ed4","kind":"function","line":23,"name":"run","path_id":"F:6da7bd8294","signature":"function run(...args)"},{"anchor":"S:4adffc8b06","kind":"function","line":27,"name":"seedJsTest","path_id":"F:6da7bd8294","signature":"function seedJsTest(dir)"},{"anchor":"S:354e31ec69","kind":"function","line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294","signature":"function snapshotFiles(dir)"},{"anchor":"S:7698d9efeb","doc":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first segment is \"feature\"; only a leading \"a","kind":"function","line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3","signature":"export function isModelIdentifierBranch(name)"},{"anchor":"S:99c574f83d","doc":"Resolve the branch under review from CI environment variables. Prefers the * pull request head ref, then the push ref name. Returns an empty string when * neither is set so callers can fall back to a ","kind":"function","line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3","signature":"export function resolveBranchName(env = process.env)"},{"anchor":"S:bb800288d9","kind":"function","line":12,"name":"writeRunLog","path_id":"F:6f247eb514","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:002c9f1daa","kind":"function","line":25,"name":"slug","path_id":"F:6f247eb514","signature":"function slug(text)"},{"anchor":"S:3d6f7980b3","kind":"function","line":33,"name":"proposeWork","path_id":"F:6f247eb514","signature":"function proposeWork(stack, hotFiles)"},{"anchor":"S:e099520832","doc":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing otherwise), so this stays safe and inert","kind":"function","line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514","signature":"function proposeControlPanelWork(targetDir)"},{"anchor":"S:24407449b3","doc":"Order proposals by descending deterministic priority score (highest-value, lowest-risk first). Signals are derived heuristically from each proposal's text and the hot-file churn count for the file it ","kind":"function","line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514","signature":"export function orderProposalsByScore(proposals, hotFiles)"},{"anchor":"S:7fb0e9b59c","kind":"function","line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514","signature":"export function proposalToWorkItem(proposal, opts = {})"},{"anchor":"S:ab8d34f24a","doc":"Run stack/protected-path/instruction/hot-file detection and score the resulting proposals for a target directory. Read-only: writes nothing. Shared by the CLI printer below, `--emit-work-item`, and `q","kind":"function","line":119,"name":"sweepTarget","path_id":"F:6f247eb514","signature":"export function sweepTarget(target)"},{"anchor":"S:19ecd8efbf","kind":"function","line":134,"name":"main","path_id":"F:6f247eb514","signature":"function main(args)"},{"anchor":"S:5fe0061772","kind":"function","line":4,"name":"Maker","path_id":"F:7008a20b1c","signature":"export const Maker = () => ("},{"anchor":"S:93ab3c1c15","kind":"function","line":8,"name":"Checker","path_id":"F:7008a20b1c","signature":"export const Checker = () => ("},{"anchor":"S:d4fd7f4ad3","kind":"function","line":12,"name":"Pair","path_id":"F:7008a20b1c","signature":"export const Pair = () => ("},{"anchor":"S:ba7fe0b6d3","doc":"A config where each runner declares its environment and reach.","kind":"function","line":10,"name":"routedConfig","path_id":"F:704e42d42b","signature":"function routedConfig()"},{"anchor":"S:435432f041","kind":"interface","line":6,"name":"CheckboxProps","path_id":"F:7054844360","signature":"export interface CheckboxProps"},{"anchor":"S:0b453b55b9","doc":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` visually replaced by a styl","kind":"function","line":25,"name":"Checkbox","path_id":"F:7054844360","signature":"export function Checkbox({ checked, onCheckedChange, label, hint, disabled }: CheckboxProps)"},{"anchor":"S:145586915d","kind":"interface","line":5,"name":"DrawerProps","path_id":"F:71f0bfb455","signature":"export interface DrawerProps"},{"anchor":"S:eb4b11fdf2","doc":"A right-side sheet that slides in over a scrim, for focused tasks that need more * room than a popover but should not leave the current page's context (inspecting a * work item, editing a policy). Tra","kind":"function","line":25,"name":"Drawer","path_id":"F:71f0bfb455","signature":"export function Drawer({ open, onClose, title, width = 480, children }: DrawerProps)"},{"anchor":"S:eaba90daa0","kind":"function","line":101,"name":"exists","path_id":"F:7232ada2da","signature":"async function exists(p)"},{"anchor":"S:7b87285e6c","kind":"function","line":110,"name":"readTextSafe","path_id":"F:7232ada2da","signature":"async function readTextSafe(p)"},{"anchor":"S:934c97a052","kind":"function","line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da","signature":"async function listFilesRecursive(dir, { maxDepth = 5 } = {})"},{"anchor":"S:7048bb8a3d","doc":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`.","kind":"function","line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da","signature":"function parseCiJobNames(yamlText)"},{"anchor":"S:fc6086da9e","doc":"Extremely small YAML-ish key:value reader for flat config files. Good enough to inspect schema_version and the boolean arming levers without a YAML dep.","kind":"function","line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da","signature":"function parseFlatYaml(yamlText)"},{"anchor":"S:c275cb33da","doc":"(a) Schema collision: target has .modonome/ with incompatible config.","kind":"function","line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da","signature":"export async function checkSchemaCollision(targetDir)"},{"anchor":"S:8660e770ea","doc":"(b) CI job name conflict: target's CI files use Modonome job names.","kind":"function","line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da","signature":"export async function checkCiJobConflict(targetDir)"},{"anchor":"S:ee4deb809d","doc":"(c) Script shadowing: target has scripts/ that shadow Modonome scripts.","kind":"function","line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da","signature":"export async function checkScriptShadowing(targetDir)"},{"anchor":"S:f5a168e2ff","doc":"(d) Env var pollution: MODONOME_* env vars set that override safe defaults. Reads from the current process environment (the shell preparing to embed) AND statically inspects, read-only, the target's `","kind":"function","line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da","signature":"export async function checkEnvPollution(targetDir, env = process.env)"},{"anchor":"S:8a6e48a119","doc":"(e) Dependency conflict: target has deps that conflict with Modonome requirements.","kind":"function","line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da","signature":"export async function checkDependencyConflict(targetDir)"},{"anchor":"S:22ac6bb569","doc":"(f) Prompt injection risk: governance-override patterns in the target. Trusted locations (.modonome/, schemas/, CI dirs) are scanned exhaustively; for the rest of the repo we scan source-bearing files","kind":"function","line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da","signature":"export async function checkPromptInjection(targetDir)"},{"anchor":"S:522a86b0ed","doc":"(g) Node version incompatibility: target requires Node < 18.","kind":"function","line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da","signature":"export async function checkNodeVersion(targetDir)"},{"anchor":"S:03145d5ec3","kind":"const","line":519,"name":"CHECKS","path_id":"F:7232ada2da","signature":"export const CHECKS = ["},{"anchor":"S:0dd1d1c53a","kind":"function","line":529,"name":"runPreflight","path_id":"F:7232ada2da","signature":"export async function runPreflight(targetDir)"},{"anchor":"S:80ded7ba90","kind":"function","line":542,"name":"renderHuman","path_id":"F:7232ada2da","signature":"function renderHuman(report)"},{"anchor":"S:1ba042e0cf","kind":"function","line":565,"name":"main","path_id":"F:7232ada2da","signature":"async function main()"},{"anchor":"S:4514b4c1f0","doc":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the lessons * the engine has staged from repea","kind":"function","line":19,"name":"LearningsScreen","path_id":"F:757a70680a","signature":"export function LearningsScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:e9fcedbe8f","kind":"interface","line":7,"name":"InputProps","path_id":"F:763efdd51c","signature":"export interface InputProps extends InputHTMLAttributes"},{"anchor":"S:6981533501","doc":"A labeled single-line text input. Shares the labeled-field frame used by every * form control in the panel: an optional label, an optional hint bubble, and an * optional error message below. Use for f","kind":"function","line":24,"name":"Input","path_id":"F:763efdd51c","signature":"export function Input("},{"anchor":"S:b4b12fd408","doc":"The kind of event recorded in the audit trail.","kind":"type","line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7","signature":"export type AuditEventKind ="},{"anchor":"S:ee3edffdff","doc":"Plain data shape for a single audit-trail event. Components in this package define * their own shape rather than importing app-level types, so this interface is the * contract a host app maps its own ","kind":"interface","line":25,"name":"AuditEvent","path_id":"F:76da13a8f7","signature":"export interface AuditEvent"},{"anchor":"S:62d1cf1f06","kind":"interface","line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7","signature":"export interface AuditTimelineProps"},{"anchor":"S:35ac020356","doc":"A vertical audit trail with a connecting line down the left edge. Each event shows a * colored node carrying an icon for its kind (so the event type is never carried by * color alone), the relative ti","kind":"function","line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7","signature":"export function AuditTimeline({ events, limit }: AuditTimelineProps)"},{"anchor":"S:e15045d8a4","kind":"function","line":13,"name":"dryRun","path_id":"F:778c33cdc0","signature":"function dryRun(dir)"},{"anchor":"S:f88498de73","doc":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure.","kind":"const","line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407","signature":"export const ATTESTATION_DOMAIN = \"modonome.policy-attestation.v1\\n\";"},{"anchor":"S:b455c897cf","doc":"Relative-to-root display path. Safe on any input: a path outside root (e.g. under ADOPT_ROOT when MODONOME_ADOPT_ROOT points elsewhere) is returned unchanged rather than sliced by a bare string-prefix","kind":"function","line":66,"name":"rel","path_id":"F:780c791407","signature":"function rel(p)"},{"anchor":"S:5b8a5996df","kind":"function","line":70,"name":"fail","path_id":"F:780c791407","signature":"function fail(msg)"},{"anchor":"S:87013bd4c3","kind":"function","line":75,"name":"loadInputs","path_id":"F:780c791407","signature":"export function loadInputs(r = root)"},{"anchor":"S:aacff6bc1c","doc":"The exact bytes a signature covers: the domain tag followed by the JCS of the manifest with its signature and content_digest removed (the content_digest is itself derived from that body, so signing th","kind":"function","line":84,"name":"attestationBytes","path_id":"F:780c791407","signature":"export function attestationBytes(manifest)"},{"anchor":"S:120830c7dd","kind":"function","line":91,"name":"maybeSign","path_id":"F:780c791407","signature":"function maybeSign(manifest, env)"},{"anchor":"S:5aff27256c","kind":"function","line":109,"name":"schema","path_id":"F:780c791407","signature":"function schema()"},{"anchor":"S:cf413b97c8","kind":"function","line":113,"name":"write","path_id":"F:780c791407","signature":"function write(env)"},{"anchor":"S:de8e4d5857","doc":"Recomputes a manifest body's digest and compares it to its own recorded content_digest. Shared by check(), verifyCmd(), and adoptCmd() so this self-consistency test is defined once; each caller still ","kind":"function","line":128,"name":"digestMismatch","path_id":"F:780c791407","signature":"function digestMismatch(m)"},{"anchor":"S:53158831f9","kind":"function","line":135,"name":"check","path_id":"F:780c791407","signature":"function check()"},{"anchor":"S:5ef4400e5e","doc":"The generator credit line, tolerant of a foreign pack that predates manifest_version 2: such a pack is shown honestly as claiming no credit rather than crashing on a missing field. homepage is guarded","kind":"function","line":169,"name":"generatorLine","path_id":"F:780c791407","signature":"function generatorLine(m)"},{"anchor":"S:2d4876abe2","kind":"function","line":174,"name":"readPack","path_id":"F:780c791407","signature":"function readPack(path)"},{"anchor":"S:ddc69b10ca","doc":"Reads and parses a caller-supplied pack file, failing with the tool's normal clean error instead of an uncaught exception. Every command that accepts a user-supplied path (--show, --verify, --diff, --","kind":"function","line":182,"name":"readForeignPack","path_id":"F:780c791407","signature":"function readForeignPack(path)"},{"anchor":"S:e476893b3b","kind":"function","line":190,"name":"show","path_id":"F:780c791407","signature":"function show(path)"},{"anchor":"S:acc91dc6fe","kind":"function","line":210,"name":"verifyCmd","path_id":"F:780c791407","signature":"function verifyCmd(path)"},{"anchor":"S:b9d44c6996","doc":"Set-valued policy fields (denylist, protected paths, gates): report what the foreign pack adds and what it is missing relative to this repo's live policy.","kind":"function","line":230,"name":"diffSet","path_id":"F:780c791407","signature":"function diffSet(label, local, foreign)"},{"anchor":"S:0be1a2cd09","kind":"function","line":244,"name":"diffCapabilities","path_id":"F:780c791407","signature":"function diffCapabilities(local, foreign)"},{"anchor":"S:90b2cf611f","kind":"function","line":255,"name":"diffPosture","path_id":"F:780c791407","signature":"function diffPosture(local, foreign)"},{"anchor":"S:d2a299acb3","doc":"Read-only comparison of a foreign pack's disclosed policy against this repo's own live policy. Always succeeds (never a pass/fail gate); a human uses this to decide whether to adopt. The foreign pack'","kind":"function","line":266,"name":"diffCmd","path_id":"F:780c791407","signature":"function diffCmd(path)"},{"anchor":"S:8735f37dad","doc":"Vendor a foreign policy pack into this repo, refusing on any integrity or credit failure. Order matters: schema validation catches a pack whose generator block was stripped outright (manifest_version ","kind":"function","line":288,"name":"adoptCmd","path_id":"F:780c791407","signature":"function adoptCmd(path, alias)"},{"anchor":"S:67852685cf","kind":"function","line":4,"name":"Info","path_id":"F:7832db450f","signature":"export const Info = () => ;"},{"anchor":"S:96c461f8cd","kind":"function","line":6,"name":"Success","path_id":"F:7832db450f","signature":"export const Success = () => ;"},{"anchor":"S:21a4872ace","kind":"function","line":8,"name":"Blocked","path_id":"F:7832db450f","signature":"export const Blocked = () => ;"},{"anchor":"S:59617d720e","doc":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which keeps the utility portable. It is used ","kind":"function","line":5,"name":"estimateTokens","path_id":"F:7944059823","signature":"export function estimateTokens(text)"},{"anchor":"S:a48d9e0b16","doc":"Greedily keep pre-ranked items until the token budget is spent. `sizeFn` returns the token cost of an item. A falsy or non-finite budget keeps everything. Returns { kept, dropped, tokens } so the call","kind":"function","line":13,"name":"budgetTier","path_id":"F:7944059823","signature":"export function budgetTier(items, maxTokens, sizeFn)"},{"anchor":"S:3ed1d37c7b","kind":"function","line":3,"name":"Unreachable","path_id":"F:79467a3153","signature":"export const Unreachable = () => ("},{"anchor":"S:cec6405a03","kind":"interface","line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b","signature":"export interface ArmingStateBadgeProps"},{"anchor":"S:3bae21fee6","doc":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, armed is * teal. The mode label always ren","kind":"function","line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b","signature":"export function ArmingStateBadge({ mode, envArmed, size = \"md\" }: ArmingStateBadgeProps)"},{"anchor":"S:130202d7f0","kind":"function","line":3,"name":"Queue","path_id":"F:7a43bf4ce5","signature":"export const Queue = () => ("},{"anchor":"S:8ec4bd5dec","doc":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads it","kind":"function","line":25,"name":"signPacket","path_id":"F:7b3e38c9a6","signature":"export function signPacket(packet, privateKeyObject, { keyAlias, signedAt }, overrides = {})"},{"anchor":"S:d732af6be5","doc":"Join class names, dropping falsy values. A tiny classnames helper.","kind":"type","line":2,"name":"ClassValue","path_id":"F:7c8d518693","signature":"export type ClassValue = string | false | null | undefined;"},{"anchor":"S:deea6aabbd","kind":"function","line":4,"name":"cx","path_id":"F:7c8d518693","signature":"export function cx(...values: ClassValue[]): string"},{"anchor":"S:41443bba10","kind":"function","line":1,"name":"total","path_id":"F:7ccad64380","signature":"def total(items)"},{"anchor":"S:05fcfe1c5b","doc":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after discount","kind":"function","line":5,"name":"apply_discount","path_id":"F:7ccad64380","signature":"def apply_discount(items, discount_percent)"},{"anchor":"S:90f1a56d4e","kind":"const","line":180,"name":"hostState","path_id":"F:7d236c9aa6","signature":"export const hostState: PanelState ="},{"anchor":"S:64376e38db","kind":"interface","line":6,"name":"SelectOption","path_id":"F:819f72edf6","signature":"export interface SelectOption"},{"anchor":"S:8af9c33a76","kind":"interface","line":13,"name":"SelectProps","path_id":"F:819f72edf6","signature":"export interface SelectProps"},{"anchor":"S:0b0e197734","doc":"A styled native `` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * surface treatment of the other form control","kind":"function","line":35,"name":"Select","path_id":"F:819f72edf6","signature":"export function Select("},{"anchor":"S:66cd7b74c6","kind":"interface","line":5,"name":"SliderProps","path_id":"F:81c495717c","signature":"export interface SliderProps"},{"anchor":"S:a91334a377","doc":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announcements) while the track and thumb pick ","kind":"function","line":32,"name":"Slider","path_id":"F:81c495717c","signature":"export function Slider("},{"anchor":"S:74e8f23a0b","kind":"function","line":4,"name":"MergeCap","path_id":"F:84a5c32a4c","signature":"export const MergeCap = () => ("},{"anchor":"S:14b57397ed","kind":"function","line":14,"name":"Budget","path_id":"F:84a5c32a4c","signature":"export const Budget = () => ("},{"anchor":"S:88bc43a62b","doc":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true.","kind":"const","line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227","signature":"export const CHANGE_REQUEST_SIGNALS = ["},{"anchor":"S:90b86b1f26","doc":"True when the transcript contains any documented change-request signal * phrase (case-insensitive). Pure string search: no partial-word surprises * beyond what the phrase itself implies. * * @param {s","kind":"function","line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227","signature":"export function hasChangeRequestSignal(transcript)"},{"anchor":"S:328dcdf4cc","doc":"Count distinct raised concerns/questions in the transcript. * * Heuristic (documented, approximate, not semantic): * - Any line ending in \"?\" counts once. * - Any line starting with \"concern:\", \"quest","kind":"function","line":76,"name":"countRaisedQuestions","path_id":"F:851f776227","signature":"export function countRaisedQuestions(transcript)"},{"anchor":"S:cfe87f9141","doc":"Derive checker-engagement telemetry from a checker transcript. * * @param {string|undefined|null} transcript - Full checker transcript text. * @returns {{checker_requested_changes: boolean, checker_qu","kind":"function","line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227","signature":"export function parseCheckerTelemetry(transcript)"},{"anchor":"S:6c778494b3","doc":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\".","kind":"function","line":7,"name":"relativeTime","path_id":"F:86838d35ac","signature":"export function relativeTime(iso: string, now: number = Date.parse(\"2026-07-01T09:45:00Z\")): string"},{"anchor":"S:8641765bb2","doc":"Format a duration in milliseconds as a compact string, for example \"1.2s\" or \"9s\".","kind":"function","line":34,"name":"formatDuration","path_id":"F:86838d35ac","signature":"export function formatDuration(ms?: number): string"},{"anchor":"S:6cb93e992c","doc":"Format a USD amount with two decimals.","kind":"function","line":45,"name":"formatUsd","path_id":"F:86838d35ac","signature":"export function formatUsd(usd: number): string"},{"anchor":"S:0aee45c73e","doc":"Catalog entries for scripts/guard-ratchet.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:86fd2cf669","signature":"export const MESSAGES ="},{"anchor":"S:88426a3883","doc":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker.","kind":"function","line":12,"name":"looksLikeDiff","path_id":"F:872221b1da","signature":"function looksLikeDiff(body)"},{"anchor":"S:074c2b3c02","doc":"Pull a unified diff out of a model response. Prefers a fenced ```diff or * ```patch block; falls back to a bare fenced block whose body looks like a * diff; falls back to treating the whole text as a ","kind":"function","line":28,"name":"extractDiff","path_id":"F:872221b1da","signature":"export function extractDiff(text)"},{"anchor":"S:fe1a464205","doc":"Apply a unified diff to a working directory using the git binary. * Validates with `git apply --check` first; git apply is atomic, so a diff * that fails validation or application is never partially a","kind":"function","line":60,"name":"applyPatch","path_id":"F:872221b1da","signature":"export function applyPatch(diff, cwd, deps = {})"},{"anchor":"S:6b5288f35f","kind":"function","line":18,"name":"coreLevers","path_id":"F:87c30bdb4c","signature":"function coreLevers()"},{"anchor":"S:b4e887ed4f","kind":"function","line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c","signature":"function schemaLevers()"},{"anchor":"S:e09a554f44","kind":"function","line":32,"name":"templateLevers","path_id":"F:87c30bdb4c","signature":"function templateLevers()"},{"anchor":"S:5d118d4b60","kind":"function","line":3,"name":"Row","path_id":"F:8972d37045","signature":"export const Row = () => ("},{"anchor":"S:e89c164d25","kind":"function","line":54,"name":"titleFromId","path_id":"F:89aee72994","signature":"function titleFromId(id: string): string"},{"anchor":"S:f0db7341e7","kind":"const","line":89,"name":"productState","path_id":"F:89aee72994","signature":"export const productState: PanelState ="},{"anchor":"S:89e92655dd","kind":"function","line":57,"name":"normalizeLF","path_id":"F:8a10462927","signature":"function normalizeLF(s)"},{"anchor":"S:a34306cc67","kind":"function","line":61,"name":"getDiff","path_id":"F:8a10462927","signature":"function getDiff()"},{"anchor":"S:974654287c","kind":"function","line":304,"name":"count","path_id":"F:8a10462927","signature":"function count(lines, re)"},{"anchor":"S:fd230402e2","kind":"function","line":323,"name":"deconfuse","path_id":"F:8a10462927","signature":"function deconfuse(line)"},{"anchor":"S:457528354e","kind":"function","line":331,"name":"stripInlineComment","path_id":"F:8a10462927","signature":"function stripInlineComment(line)"},{"anchor":"S:d0c2835a28","doc":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote or that does not close on this line, or ","kind":"function","line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927","signature":"function stripLineLocalNoise(line)"},{"anchor":"S:a4c389d72a","kind":"function","line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927","signature":"function isVacuousAssertion(line)"},{"anchor":"S:17945c542e","kind":"function","line":393,"name":"countBareAsserts","path_id":"F:8a10462927","signature":"function countBareAsserts(lines)"},{"anchor":"S:4d3ac94b7c","kind":"function","line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927","signature":"function isVacuousPyAssert(line)"},{"anchor":"S:0b8ff85c9c","kind":"function","line":666,"name":"classifyCode","path_id":"F:8a10462927","signature":"function classifyCode(msg)"},{"anchor":"S:2358b05e12","doc":"Each problem message is \": \". Recover the file path for a location.","kind":"function","line":680,"name":"fileOf","path_id":"F:8a10462927","signature":"function fileOf(msg)"},{"anchor":"S:edb5058173","kind":"function","line":685,"name":"helpUri","path_id":"F:8a10462927","signature":"function helpUri(code)"},{"anchor":"S:eff02f504b","kind":"function","line":689,"name":"toFindings","path_id":"F:8a10462927","signature":"function toFindings(list)"},{"anchor":"S:42188b3bb9","kind":"function","line":696,"name":"emitJson","path_id":"F:8a10462927","signature":"function emitJson(findings)"},{"anchor":"S:1d0f5bc129","kind":"function","line":708,"name":"emitSarif","path_id":"F:8a10462927","signature":"function emitSarif(findings)"},{"anchor":"S:06700c1faf","doc":"Advisory-only, informational, never affects the exit code (see the comment where assertionTally is declared above). Printed in both outcomes so a reviewer sees the cross-file shape whether or not a sp","kind":"function","line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927","signature":"function printAssertionTallyAdvisory()"},{"anchor":"S:69f3537d3b","kind":"function","line":13,"name":"tmp","path_id":"F:8a3433b070","signature":"function tmp()"},{"anchor":"S:1fe8548dac","kind":"function","line":17,"name":"fixture","path_id":"F:8a3433b070","signature":"function fixture()"},{"anchor":"S:33534dd596","kind":"function","line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff","signature":"export function readModonomeState(modonomeDir, { mode })"},{"anchor":"S:895b1937bd","kind":"function","line":61,"name":"readConfig","path_id":"F:8a3dd6ccff","signature":"function readConfig(modonomeDir)"},{"anchor":"S:6044b46e0f","doc":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces in CI, so the panel can never display a","kind":"function","line":100,"name":"readMessages","path_id":"F:8a3dd6ccff","signature":"function readMessages(modonomeDir)"},{"anchor":"S:9287ce102a","kind":"function","line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff","signature":"function readWorkItems(modonomeDir)"},{"anchor":"S:064519e650","kind":"function","line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff","signature":"function titleFromId(id)"},{"anchor":"S:ac0d90ea9c","kind":"function","line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff","signature":"function toWorkItemVM(item)"},{"anchor":"S:23afcde4ab","doc":"A gate's status is implied by the state of every work item that declares it, never by a fabricated pass. A repo that has only ever run dry-run sweeps shows every declared gate as \"pending\", which is t","kind":"function","line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff","signature":"function impliedGateStatus(state)"},{"anchor":"S:639160c471","kind":"function","line":186,"name":"buildGates","path_id":"F:8a3dd6ccff","signature":"function buildGates(items)"},{"anchor":"S:e41c3f2d61","kind":"function","line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff","signature":"function buildProtectedPaths(config, items)"},{"anchor":"S:4741feecf9","doc":"modonome's own agent runner does not yet record a dollar cost per call (see scripts/agent/run-cycle.mjs), so real spend is honestly zero until that lands. Calls are still counted from the real maker_r","kind":"function","line":234,"name":"buildCost","path_id":"F:8a3dd6ccff","signature":"function buildCost(config, metrics)"},{"anchor":"S:77031e48f4","kind":"function","line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff","signature":"function readLearnings(modonomeDir)"},{"anchor":"S:783d91f2ed","kind":"function","line":319,"name":"extractSection","path_id":"F:8a3dd6ccff","signature":"function extractSection(text, heading)"},{"anchor":"S:b02fc1cd06","kind":"function","line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff","signature":"function readDecisions(modonomeDir)"},{"anchor":"S:4350272f8a","kind":"function","line":357,"name":"readRuns","path_id":"F:8a3dd6ccff","signature":"function readRuns(modonomeDir)"},{"anchor":"S:d9c2336e09","doc":"Real telemetry only. metrics.example.jsonl documents the schema and must never be read here: the promoted learning L-001 in this repo's own LESSONS.md exists specifically because sample telemetry was ","kind":"function","line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff","signature":"function readMetrics(modonomeDir)"},{"anchor":"S:409d8caf58","kind":"function","line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff","signature":"function describeMetric(m, kind)"},{"anchor":"S:b8469e1267","kind":"function","line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff","signature":"function buildAudit(runs, metrics)"},{"anchor":"S:a8971aba2c","kind":"function","line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff","signature":"function buildTrends(runs)"},{"anchor":"S:b81af2dbe4","kind":"function","line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff","signature":"function latestAgentProofScore(runs)"},{"anchor":"S:db7c5c1950","doc":"Mirrors latestAgentProofScore, but for `npx modonome gauntlet` runs (a distinct command, never conflated with `report`). Undefined (not 0) when the tool has never been run, since a 0 score and \"never ","kind":"function","line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff","signature":"function latestGauntletScore(runs)"},{"anchor":"S:baab120dbc","kind":"function","line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff","signature":"function gitInfo(repoRoot)"},{"anchor":"S:f40a6dfd1b","doc":"The unpublished commit range (origin/main..HEAD) with the identity and message fields the remediation planner reads. Bounded to origin/main so the panel only ever proposes over history that has not be","kind":"function","line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff","signature":"function gitCommits(repoRoot)"},{"anchor":"S:37268eb979","doc":"The repository's own git identity, the target a reauthor rewrite would use. Empty when unset, which the planner and the CLI both treat as \"not usable for apply\".","kind":"function","line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff","signature":"function gitIdentity(repoRoot)"},{"anchor":"S:4cd48cf92e","kind":"function","line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff","signature":"function buildSubject({ repoRoot, modonomeDir, mode, config, queue, runs })"},{"anchor":"S:77a4165d99","kind":"type","line":12,"name":"TooltipSide","path_id":"F:8a9aff1529","signature":"export type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";"},{"anchor":"S:0b70780ca5","kind":"interface","line":14,"name":"TooltipProps","path_id":"F:8a9aff1529","signature":"export interface TooltipProps"},{"anchor":"S:7bdca9af48","doc":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the same * information), and closes on blur","kind":"function","line":30,"name":"Tooltip","path_id":"F:8a9aff1529","signature":"export function Tooltip({ content, children, side = \"top\" }: TooltipProps)"},{"anchor":"S:55fc57e799","doc":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read where the file could be removed out from und","kind":"function","line":17,"name":"readIfExists","path_id":"F:8abf9e432a","signature":"function readIfExists(path)"},{"anchor":"S:c44c6a3e42","doc":"Parse RELEASE-EVIDENCE.md to extract gate counts and autonomy status","kind":"function","line":35,"name":"parseEvidence","path_id":"F:8abf9e432a","signature":"function parseEvidence()"},{"anchor":"S:208ce5b839","doc":"Count work items by state","kind":"function","line":65,"name":"countWorkItems","path_id":"F:8abf9e432a","signature":"function countWorkItems()"},{"anchor":"S:370b67baf2","doc":"Parse the product version from package.json. (.modonome/version holds a schema version, not the product version, so it must not be used here.)","kind":"function","line":90,"name":"readVersion","path_id":"F:8abf9e432a","signature":"function readVersion()"},{"anchor":"S:4afb276004","doc":"Parse the normative AgentProof score and level from agentproof/README.md.","kind":"function","line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a","signature":"function parseAgentproof()"},{"anchor":"S:172b08e199","doc":"Update the meta block in site/repo-data.js (version, score, level).","kind":"function","line":118,"name":"updateRepoData","path_id":"F:8abf9e432a","signature":"function updateRepoData(data)"},{"anchor":"S:ee17355d71","doc":"Update site/index.html with live data","kind":"function","line":133,"name":"updateSite","path_id":"F:8abf9e432a","signature":"function updateSite(data)"},{"anchor":"S:03b000e190","doc":"Verify site data matches evidence (used in CI gate)","kind":"function","line":153,"name":"verifySiteData","path_id":"F:8abf9e432a","signature":"function verifySiteData(data)"},{"anchor":"S:c0c2347579","kind":"type","line":5,"name":"ButtonVariant","path_id":"F:8b122c449e","signature":"export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";"},{"anchor":"S:05e617fb30","kind":"type","line":6,"name":"ButtonSize","path_id":"F:8b122c449e","signature":"export type ButtonSize = \"sm\" | \"md\" | \"lg\";"},{"anchor":"S:c928d805b5","kind":"interface","line":8,"name":"ButtonProps","path_id":"F:8b122c449e","signature":"export interface ButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:b1bbb81b82","doc":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and * `danger` for anything that arms, delete","kind":"function","line":30,"name":"Button","path_id":"F:8b122c449e","signature":"export function Button("},{"anchor":"S:6c4ca00b53","doc":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state.","kind":"function","line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba","signature":"function scratchModonomeDir(sourcePath = realConfigPath)"},{"anchor":"S:a57f8c1bdc","doc":"Lines present in the original file that are untouched by a given patch: every line outside the blocks the patch's keys live in. Used to assert a patch changes only what it says it changes.","kind":"function","line":39,"name":"otherLines","path_id":"F:8b2f3dbcba","signature":"function otherLines(originalText, touchedTopKeys)"},{"anchor":"S:542af83b15","doc":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here.","kind":"const","line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4","signature":"export const BUILTIN_PROVIDERS ="},{"anchor":"S:6ee308cae0","doc":"Resolve a provider descriptor by name. Built-ins are merged with an optional * config-provided override map (cfg.providers), so a host repo can redefine or * add providers without touching this file. ","kind":"function","line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4","signature":"export function resolveProvider(name, providersOverride)"},{"anchor":"S:bead992b70","doc":"A cost class is billable only when it is \"paid\". Free and local roles never require remote_model_budget_usd_per_day.","kind":"function","line":48,"name":"isBillable","path_id":"F:8b5a1f94c4","signature":"export function isBillable(costClass)"},{"anchor":"S:97a7516354","doc":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned bounded-retry escapes and must not count as ","kind":"function","line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3","signature":"function buildAdjacency(machine, { includeCapGuard })"},{"anchor":"S:a716bbdaa8","doc":"reaches(adjacency, start, targets) -> bool Whether any node in `targets` is reachable from `start` along the edges.","kind":"function","line":33,"name":"reaches","path_id":"F:8b8d3c46b3","signature":"function reaches(adjacency, start, targets)"},{"anchor":"S:982b9fa62d","kind":"function","line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3","signature":"export function stateMachineErrors(machine)"},{"anchor":"S:a1828ef829","kind":"function","line":59,"name":"main","path_id":"F:8bb1b57470","signature":"async function main()"},{"anchor":"S:796295afbe","kind":"type","line":6,"name":"GateStatus","path_id":"F:8c6234a8cb","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:0906a625c3","kind":"interface","line":8,"name":"GateRow","path_id":"F:8c6234a8cb","signature":"export interface GateRow"},{"anchor":"S:2db1222578","kind":"interface","line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb","signature":"export interface GatePanelProps"},{"anchor":"S:0d46d60d35","doc":"A vertical list of CI gate rows, used to visualize the merge-blocking checks and * the anti-gaming ratchet on a work item or pipeline. Each row pairs an icon, a color, * and a text label for its statu","kind":"function","line":63,"name":"GatePanel","path_id":"F:8c6234a8cb","signature":"export function GatePanel({ gates, title = \"CI gates\" }: GatePanelProps)"},{"anchor":"S:aecf05317d","doc":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUrl * @returns {string}","kind":"function","line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236","signature":"export function buildChatCompletionsUrl(baseUrl)"},{"anchor":"S:b9ed6b7b01","doc":"Build the request headers, including the Authorization header when a token * is supplied. No Authorization header is sent when authToken is falsy, which * suits local endpoints that need none. * * @pa","kind":"function","line":44,"name":"buildHeaders","path_id":"F:8d2cb93236","signature":"export function buildHeaders(authToken, authScheme = \"Bearer\")"},{"anchor":"S:403ac351dd","doc":"Build the JSON request body. max_tokens is omitted when maxTokens is * undefined, since some endpoints reject an explicit null/undefined field. * * @param {string} model * @param {Array} messa","kind":"function","line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236","signature":"export function buildRequestBody(model, messages, maxTokens)"},{"anchor":"S:37693a15d4","doc":"Normalize a parsed OpenAI chat-completions response into * { text, finishReason, usage }. Throws a clear error on a malformed body * (missing choices, missing message). * * @param {any} data * @return","kind":"function","line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236","signature":"export function normalizeResponse(data)"},{"anchor":"S:fd88bace68","doc":"Retry only on 429 (rate limit) and 5xx (server error). Any other non-2xx status is a caller error and must not be retried.","kind":"function","line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236","signature":"function isRetryableStatus(status)"},{"anchor":"S:969658a48c","kind":"function","line":91,"name":"sleep","path_id":"F:8d2cb93236","signature":"function sleep(ms)"},{"anchor":"S:705c285e25","doc":"POST a chat-completions request to an OpenAI-compatible endpoint and return * a normalized result. * * @param {object} opts * @param {string} opts.baseUrl - Endpoint base, e.g. \"https://api.example.co","kind":"function","line":112,"name":"chatCompletion","path_id":"F:8d2cb93236","signature":"export async function chatCompletion("},{"anchor":"S:8041c36b7b","doc":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure.","kind":"function","line":18,"name":"noThrow","path_id":"F:8fe56e5618","signature":"function noThrow(fn)"},{"anchor":"S:856f3a5bea","doc":"Wrap guard-ratchet call with a hard 5-second timeout.","kind":"function","line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618","signature":"function ratchetWithTimeout(content)"},{"anchor":"S:744cc47208","doc":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and deterministic. * * Never returns an empty message:","kind":"function","line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281","signature":"export function cleanCommitMessage(message)"},{"anchor":"S:bc4bff4faa","doc":"Decide the metadata-only rewrite for each commit in a range. Input `commits` is the * range oldest-first, each { sha, an, ae, cn, ce, message }. `identity` is the target * { name, email } that replace","kind":"function","line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281","signature":"export function planCommitRewrites(commits, identity)"},{"anchor":"S:792d313360","doc":"A deterministic fingerprint of a rewrite plan. Same findings and target identity * produce the same plan and therefore the same fingerprint, which is what lets an owner * approve a proposal and later ","kind":"function","line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281","signature":"export function remediationFingerprint(plan)"},{"anchor":"S:18ff6b9c89","doc":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {string} dir * @returns {{ patchPath: stri","kind":"function","line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a","signature":"export function loadSubmission(dir)"},{"anchor":"S:00452332a2","doc":"Run the ratchet against the submitted diff TEXT ONLY, via its existing * --diff mode. Never applies or executes the diff. Returns the ratchet's raw * exit status and output for the report. * @param {s","kind":"function","line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a","signature":"export function runRatchetAgainstSubmission(patchPath, deps = {})"},{"anchor":"S:4296da48b7","doc":"Combine the declaration and the ratchet's verdict into a judged result. * Pure. \"confirmed-break\" only when the submitter claimed the diff should be * blocked and the ratchet, in fact, did not block i","kind":"function","line":86,"name":"judge","path_id":"F:90cbb2cf6a","signature":"export function judge(declaration, ratchetResult)"},{"anchor":"S:c388580f86","kind":"function","line":114,"name":"main","path_id":"F:90cbb2cf6a","signature":"async function main(argv)"},{"anchor":"S:fc3bb4bc24","doc":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves).","kind":"function","line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9","signature":"function collectFindings()"},{"anchor":"S:400a8c02c3","kind":"function","line":61,"name":"applyFix","path_id":"F:90e1fd2fd9","signature":"function applyFix(branch, findings)"},{"anchor":"S:6fab505fa4","doc":"Parse an optional `--pr ` flag. Returns the positive integer PR number, or null when absent. Throws on a malformed value so the caller can report it.","kind":"function","line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9","signature":"function parsePrNumber(rest)"},{"anchor":"S:cde4a28e06","doc":"Fetch the PR title, body, and conversation comments and scan them with the strict detector. Uses the same AI_SIGNATURE_RE as every other surface, so this is a hard detection gate, not the advisory nea","kind":"function","line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9","signature":"async function collectPrFindings(prNumber, client = createGitHubClient())"},{"anchor":"S:c546f7913f","kind":"function","line":108,"name":"main","path_id":"F:90e1fd2fd9","signature":"async function main(argv)"},{"anchor":"S:d75c32ea9c","kind":"function","line":11,"name":"add","path_id":"F:90f0999521","signature":"export function add(a, b)"},{"anchor":"S:d7d594dd8d","kind":"function","line":15,"name":"multiply","path_id":"F:90f0999521","signature":"export function multiply(a, b)"},{"anchor":"S:7902cd38d0","kind":"interface","line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8","signature":"export interface MdnRootProps extends HTMLAttributes"},{"anchor":"S:f2642efdc2","doc":"The design-system root. Establishes the dark ground, the body font, and the token * scope that every component inherits. Wrap an app or a screen in this (AppShell already * does). It is also the wrapp","kind":"function","line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8","signature":"export function MdnRoot({ children, className, style, ...rest }: MdnRootProps)"},{"anchor":"S:2b6631cd33","kind":"const","line":1,"name":"MESSAGES","path_id":"F:91e24dcac0","signature":"export const MESSAGES ="},{"anchor":"S:3b092e9ab0","doc":"Parse DECISIONS.md text into heading violations and Resolved-section entries.","kind":"function","line":64,"name":"parseDecisions","path_id":"F:92d6903b5f","signature":"export function parseDecisions(text)"},{"anchor":"S:183f710a08","kind":"function","line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f","signature":"function readCodeownersUsers(rootDir)"},{"anchor":"S:fe27a88258","doc":"Given a PR's reviews (GitHub API shape: [{ user: { login }, state }]) and its author login, is there at least one APPROVED review from a CODEOWNERS-listed login that is not the author themselves? Self","kind":"function","line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f","signature":"export function hasEligibleApproval(reviews, prAuthorLogin, codeownersUsers)"},{"anchor":"S:890ccb5d6b","kind":"function","line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f","signature":"async function fetchPRReviews(repoSlug, prNumber, token)"},{"anchor":"S:9554538925","doc":"Read the current PR's number, author login, and repo slug from GitHub Actions' standard environment (or from MODONOME_PR_* overrides, for tests and manual runs against a specific PR). Returns null whe","kind":"function","line":196,"name":"readPRContext","path_id":"F:92d6903b5f","signature":"function readPRContext()"},{"anchor":"S:eb67f0edae","kind":"function","line":219,"name":"getFileAt","path_id":"F:92d6903b5f","signature":"function getFileAt(ref, rootDir)"},{"anchor":"S:e18ceff2c8","kind":"function","line":230,"name":"main","path_id":"F:92d6903b5f","signature":"async function main()"},{"anchor":"S:a8fe6446c0","kind":"function","line":17,"name":"headSha","path_id":"F:92dde817ee","signature":"function headSha()"},{"anchor":"S:342fb4655a","kind":"function","line":23,"name":"gate","path_id":"F:9344d335a6","signature":"function gate(script, args = [])"},{"anchor":"S:cb97c7b3fc","kind":"function","line":27,"name":"mark","path_id":"F:9344d335a6","signature":"function mark(ok) { return ok ? \"pass\" : \"FAIL\"; }"},{"anchor":"S:bcddbe684b","doc":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), so summarizing them stays reproducible fr","kind":"function","line":62,"name":"listCaptures","path_id":"F:9344d335a6","signature":"function listCaptures()"},{"anchor":"S:0bae1275b2","kind":"type","line":1,"name":"Card","path_id":"F:93f0f5d3de","signature":"export type Card = { number: string; expired: boolean };"},{"anchor":"S:94383b0aef","kind":"type","line":3,"name":"RefundResult","path_id":"F:93f0f5d3de","signature":"export type RefundResult ="},{"anchor":"S:16a3c28802","kind":"function","line":9,"name":"charge","path_id":"F:93f0f5d3de","signature":"export function charge(card: Card): \"ok\" | \"declined\""},{"anchor":"S:bf5cf69681","kind":"function","line":13,"name":"refund","path_id":"F:93f0f5d3de","signature":"export function refund(card: Card, amount: number): RefundResult"},{"anchor":"S:5cc853b5b1","doc":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output.","kind":"function","line":50,"name":"loadScenarios","path_id":"F:94050e680d","signature":"export async function loadScenarios(dir = join(here, \"scenarios\"))"},{"anchor":"S:8e586c7c13","kind":"function","line":60,"name":"commandOnPath","path_id":"F:94050e680d","signature":"function commandOnPath(command)"},{"anchor":"S:44432e7cb0","doc":"Run one scenario against the resolved checker role. Never throws: every * failure to reach a model (binary absent, spawn error, non-zero exit, no * base_url for an openai-http checker) resolves to a \"","kind":"function","line":75,"name":"runScenario","path_id":"F:94050e680d","signature":"export async function runScenario(scenario, checker, deps = {})"},{"anchor":"S:5607ca9508","kind":"function","line":116,"name":"main","path_id":"F:94050e680d","signature":"async function main(argv)"},{"anchor":"S:517ace9ff8","kind":"function","line":17,"name":"tmp","path_id":"F:940d5f4399","signature":"function tmp()"},{"anchor":"S:2fb48a9b04","kind":"function","line":21,"name":"run","path_id":"F:940d5f4399","signature":"function run(script, ...args)"},{"anchor":"S:f9a8f3309b","kind":"function","line":25,"name":"scaffold","path_id":"F:940d5f4399","signature":"function scaffold(dir)"},{"anchor":"S:e31656bc1d","kind":"function","line":33,"name":"readConfig","path_id":"F:940d5f4399","signature":"function readConfig(dir)"},{"anchor":"S:1b794f5743","kind":"function","line":21,"name":"getDiff","path_id":"F:9427d264e6","signature":"function getDiff(baseRef = \"origin/main\")"},{"anchor":"S:d47456131b","kind":"function","line":40,"name":"getChangedFiles","path_id":"F:9427d264e6","signature":"function getChangedFiles(diff)"},{"anchor":"S:2f0240b93f","kind":"function","line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6","signature":"function loadCurrentWorkItem()"},{"anchor":"S:56a4782fc2","kind":"function","line":77,"name":"matchesPattern","path_id":"F:9427d264e6","signature":"function matchesPattern(path, patterns)"},{"anchor":"S:636b7af50c","doc":"A single active claim lease on a work item, as shown in the lease table.","kind":"interface","line":10,"name":"LeaseRow","path_id":"F:956332d4b5","signature":"export interface LeaseRow"},{"anchor":"S:46ca0706e7","kind":"interface","line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5","signature":"export interface LeaseTableProps"},{"anchor":"S:5eba6876fa","doc":"A table of active claim leases: which work item, who holds it, when it expires * (relative and exact), and whether it has gone stale. When `onRelease` is provided, * each row gets a danger \"Release\" b","kind":"function","line":36,"name":"LeaseTable","path_id":"F:956332d4b5","signature":"export function LeaseTable({ leases, onRelease }: LeaseTableProps)"},{"anchor":"S:7b984e047b","kind":"function","line":18,"name":"finalizeState","path_id":"F:95d4304133","signature":"export function finalizeState(base: PanelState): PanelState"},{"anchor":"S:559455c526","kind":"function","line":25,"name":"loadPanelState","path_id":"F:95d4304133","signature":"export async function loadPanelState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:b8ed1c85bb","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9616513cb6","signature":"export const MESSAGES ="},{"anchor":"S:8fe737eaa0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:964f89b6cc","signature":"export const MESSAGES ="},{"anchor":"S:c38d35b211","kind":"function","line":4,"name":"Roles","path_id":"F:973aaa9d86","signature":"export const Roles = () => ("},{"anchor":"S:257f8f1622","kind":"const","line":1,"name":"MESSAGES","path_id":"F:973aca5f3e","signature":"export const MESSAGES ="},{"anchor":"S:d412af5fd3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9803feef4a","signature":"export const MESSAGES ="},{"anchor":"S:944e1f3b0b","doc":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/check-promotion-readiness.mjs), which fai","kind":"const","line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea","signature":"export const CAPABILITY_FLAGS = ["},{"anchor":"S:2bba65c029","kind":"const","line":1,"name":"MESSAGES","path_id":"F:99251bc045","signature":"export const MESSAGES ="},{"anchor":"S:1dc2770ace","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9a32917e56","signature":"export const MESSAGES ="},{"anchor":"S:5a7bfc5a1b","doc":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identities is safe. The existing strict tokens a","kind":"const","line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER1_TOKENS = ["},{"anchor":"S:f650b22681","doc":"Tier 2: generic or ambiguous words that would explode with false positives under substring or free-text matching (\"assistant professor\", \"once you grok this\", \"the argument doesn't cohere\"). Matched O","kind":"const","line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TIER2_TOKENS = [\"assistant\", \"grok\", \"cohere\"];"},{"anchor":"S:0c9de67184","doc":"Free text (commit bodies, PR text) is the noisiest surface: this repo legitimately names \"claude\"/\"gpt\" in prose, and \"grok\"/\"cohere\" are ordinary words there. So free-text scanning is limited to the ","kind":"const","line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2","signature":"export const TEXT_TOKENS = [\"mistral\", \"deepseek\", \"qwen\"];"},{"anchor":"S:680cec9dbd","kind":"function","line":64,"name":"clamp","path_id":"F:9a3e8ed7d2","signature":"function clamp(s)"},{"anchor":"S:25a03d4ee2","doc":"Lowercase and strip separators (`/ - _ .` and whitespace) so \"claude-code\", * \"claude_code\", and \"Claude Code\" all normalize to a form containing \"claudecode\". * Used for Tier-1 substring matching on ","kind":"function","line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2","signature":"export function normalizeForMatch(s)"},{"anchor":"S:7b7ddcaa20","doc":"Split a branch name or identity into its bare word segments for exact Tier-2 matching: \"feature/grok-adapter\" -> [\"feature\", \"grok\", \"adapter\"].","kind":"function","line":79,"name":"segments","path_id":"F:9a3e8ed7d2","signature":"function segments(s)"},{"anchor":"S:89065c6f4b","kind":"function","line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2","signature":"function tier1Hit(normalized)"},{"anchor":"S:7910b636e8","kind":"function","line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2","signature":"function tier2Hit(segs)"},{"anchor":"S:a657233cd5","doc":"Near-miss on a branch name. Returns a finding, or null when clean or when the * strict segment check already catches it (so the widener never duplicates strict).","kind":"function","line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissBranch(name)"},{"anchor":"S:d92119a484","doc":"Near-miss on a commit author/committer identity. Checks the name (Tier 1 substring * and Tier 2 exact word) and the email (Tier 1 substring, catching vendor domains * such as \"@mistral.ai\"). Returns n","kind":"function","line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissIdentity(name, email)"},{"anchor":"S:b121dfe1ec","doc":"Near-miss on free text, scanned line by line. A line is a candidate only when it * both names a distinctive new-vendor TEXT_TOKEN (as a whole word) AND carries an * attribution cue, and the strict AI_","kind":"function","line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2","signature":"export function matchNearMissText(where, text)"},{"anchor":"S:fa71aef711","doc":"Render one LESSONS.md Staged line from a finding. The line is a PROPOSED denylist * addition for human review, never an applied change. The (signal: review) tag marks * it as a review-surfaced candida","kind":"function","line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2","signature":"export function formatStagedLine(finding, { date, evidence })"},{"anchor":"S:cf3414acc5","doc":"Test files: any language.","kind":"const","line":10,"name":"TEST_FILE","path_id":"F:9a72895a04","signature":"export const TEST_FILE = new RegExp(["},{"anchor":"S:1c6f22237b","doc":"Python test files: pytest uses the bare `assert` statement (no call parens), which a call-site-only assertion counter cannot see. These need language-aware handling for the removal check and a vacuous","kind":"const","line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04","signature":"export const PYTHON_TEST = /(?:^|\\/)(?:test_[^/]*|[^/]*_test)\\.py$/;"},{"anchor":"S:2e1baab2ff","doc":"Source files by language (for non-test type-escape checks).","kind":"const","line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04","signature":"export const JAVA_SRC = /\\.java$/;"},{"anchor":"S:7ad858b9a2","kind":"const","line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04","signature":"export const DOTNET_SRC = /\\.cs$/;"},{"anchor":"S:e0b068ef78","kind":"const","line":31,"name":"TS_SRC","path_id":"F:9a72895a04","signature":"export const TS_SRC = /\\.(c|m)?[jt]sx?$/;"},{"anchor":"S:4d36cf3d1c","doc":"JaCoCo / Gradle / Coverlet config files.","kind":"const","line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04","signature":"export const JAVA_BUILD = /^(pom\\.xml|build\\.gradle(\\.kts)?)$/;"},{"anchor":"S:edd792ec6d","kind":"const","line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04","signature":"export const DOTNET_BUILD = /\\.(runsettings|csproj|props)$/;"},{"anchor":"S:d0478605fa","kind":"const","line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04","signature":"export const TS_CONFIG = /tsconfig.*\\.json$/;"},{"anchor":"S:4c9526df5f","kind":"const","line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04","signature":"export const COVERAGE_CONFIG = /(?:jest|vitest)\\.config\\.(js|ts|mjs|cjs)$|pyproject\\.toml$/;"},{"anchor":"S:f43dc8ad19","kind":"const","line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d","signature":"export const MESSAGES ="},{"anchor":"S:4a7db1c0d0","kind":"function","line":45,"name":"emptyDraft","path_id":"F:9b3f18856e","signature":"function emptyDraft(defaultRole: string): WorkItemDraft"},{"anchor":"S:84220fc054","doc":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-only * inspector drawer with the item's i","kind":"function","line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e","signature":"export function WorkQueueScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:700d752004","kind":"function","line":11,"name":"cli","path_id":"F:9bb94e1b40","signature":"function cli(...args)"},{"anchor":"S:46d90cc86e","kind":"function","line":13,"name":"Timeline","path_id":"F:9c9edea0c9","signature":"export const Timeline = () => ;"},{"anchor":"S:a1107105c3","kind":"function","line":26,"name":"tmp","path_id":"F:9cbe9238f8","signature":"function tmp()"},{"anchor":"S:641774928a","kind":"function","line":30,"name":"run","path_id":"F:9cbe9238f8","signature":"function run(script, ...args)"},{"anchor":"S:765b4574da","kind":"function","line":34,"name":"mcpCall","path_id":"F:9cbe9238f8","signature":"function mcpCall(method, params = {})"},{"anchor":"S:3fd1032067","kind":"const","line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766","signature":"export const CURRENT_SCHEMA_VERSION = 1;"},{"anchor":"S:18c9f379c0","doc":"Safe defaults for every lever. Migration fills any missing key from here.","kind":"const","line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766","signature":"export const SAFE_DEFAULTS ="},{"anchor":"S:b8cdbe3fd3","kind":"function","line":73,"name":"migrate","path_id":"F:9d69a6b766","signature":"export function migrate(cfg)"},{"anchor":"S:7803dea04b","doc":"Catalog entries for scripts/check-style.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e","signature":"export const MESSAGES ="},{"anchor":"S:8822b8498d","kind":"type","line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0","signature":"export type ProgressMeterTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:c1667b970b","kind":"interface","line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0","signature":"export interface ProgressMeterProps"},{"anchor":"S:8dfe0cf637","doc":"A horizontal meter for bounded quantities such as budget consumed or checker * coverage. Renders a label row (with a mono value/max readout) above a track, * with a filled bar sized to the current val","kind":"function","line":27,"name":"ProgressMeter","path_id":"F:9deac13db0","signature":"export function ProgressMeter("},{"anchor":"S:95871faa22","kind":"function","line":75,"name":"formatNumber","path_id":"F:9deac13db0","signature":"function formatNumber(n: number): string"},{"anchor":"S:5f8c0130c3","kind":"type","line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b","signature":"export type MetricTileTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:e15dbc7540","kind":"interface","line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b","signature":"export interface MetricTileProps"},{"anchor":"S:1beab0dc0c","doc":"A dashboard stat tile: an eyebrow label (with an optional HelpHint), a large value * with unit, and optional icon, trend slot, and sub text. This is the core building * block of the Overview screen's ","kind":"function","line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b","signature":"export function MetricTile({ label, value, unit, hint, tone = \"neutral\", icon, trend, sub }: MetricTileProps)"},{"anchor":"S:ad93bbf998","kind":"function","line":14,"name":"run","path_id":"F:9f36b3ef29","signature":"function run(args, cwd)"},{"anchor":"S:107eb40a1d","kind":"function","line":18,"name":"makeRepo","path_id":"F:9f36b3ef29","signature":"function makeRepo()"},{"anchor":"S:704fff1c43","kind":"function","line":15,"name":"tmp","path_id":"F:9f6dd5e5a3","signature":"function tmp()"},{"anchor":"S:13fdf696a0","kind":"function","line":19,"name":"run","path_id":"F:9f6dd5e5a3","signature":"function run(...args)"},{"anchor":"S:0a6b98d712","kind":"function","line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3","signature":"function scaffold(dir)"},{"anchor":"S:247c34d405","kind":"function","line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3","signature":"function itemsDir(dir)"},{"anchor":"S:e95adce358","kind":"function","line":4,"name":"DryRun","path_id":"F:a0068c8817","signature":"export const DryRun = () => ("},{"anchor":"S:9598b17b9e","kind":"function","line":14,"name":"AutoMerge","path_id":"F:a0068c8817","signature":"export const AutoMerge = () => ("},{"anchor":"S:c80f0936ea","kind":"function","line":4,"name":"Budget","path_id":"F:a0abaf6a25","signature":"export const Budget = () => ("},{"anchor":"S:5115891196","kind":"function","line":8,"name":"Coverage","path_id":"F:a0abaf6a25","signature":"export const Coverage = () => ;"},{"anchor":"S:996743005b","kind":"function","line":29,"name":"flagValue","path_id":"F:a0d489df6d","signature":"function flagValue(argv, name)"},{"anchor":"S:59ba63dbab","kind":"function","line":34,"name":"readConfig","path_id":"F:a0d489df6d","signature":"function readConfig(root)"},{"anchor":"S:3c2bad87be","kind":"function","line":40,"name":"snapshotDir","path_id":"F:a0d489df6d","signature":"function snapshotDir(root) { return join(root, \".modonome\", \"snapshot\"); }"},{"anchor":"S:5353762af1","kind":"function","line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d","signature":"function loadCommittedSignature(root)"},{"anchor":"S:d5719588cb","kind":"function","line":48,"name":"llmsText","path_id":"F:a0d489df6d","signature":"function llmsText(signature)"},{"anchor":"S:88bd705d3f","kind":"function","line":64,"name":"badgeJson","path_id":"F:a0d489df6d","signature":"function badgeJson(signature, map)"},{"anchor":"S:bc3262b829","kind":"function","line":73,"name":"writeArtifact","path_id":"F:a0d489df6d","signature":"function writeArtifact(root, built)"},{"anchor":"S:3466f40801","kind":"function","line":83,"name":"buildOptions","path_id":"F:a0d489df6d","signature":"function buildOptions(root, argv, now)"},{"anchor":"S:6584162247","kind":"function","line":97,"name":"nowIso","path_id":"F:a0d489df6d","signature":"function nowIso() { return new Date().toISOString(); }"},{"anchor":"S:383c03d511","doc":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yields a full rebuild that produces identical","kind":"function","line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d","signature":"function incrementalInputs(root, argv)"},{"anchor":"S:df5cb6eb12","doc":"Recompute file hashes and the Merkle root directly from disk. Used by --verify.","kind":"function","line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d","signature":"function recomputeMerkle(root)"},{"anchor":"S:8d131c2429","doc":"A --since ref is free-form git revision syntax (branch, tag, HEAD~N, a SHA), so it cannot be restricted to a fixed pattern the way a cache-internal SHA can. The one property that must hold is that it ","kind":"function","line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d","signature":"function isSafeGitRevision(value)"},{"anchor":"S:2a5511d42c","kind":"function","line":125,"name":"gitDelta","path_id":"F:a0d489df6d","signature":"function gitDelta(root, ref)"},{"anchor":"S:2ce7a5bbe7","kind":"function","line":146,"name":"positional","path_id":"F:a0d489df6d","signature":"function positional(argv)"},{"anchor":"S:ecd0da924a","doc":"Register the tree-sitter parser when requested via --parser or config, with a graceful fallback to the heuristic default when tree-sitter is not installed.","kind":"function","line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d","signature":"async function maybeRegisterParser(root, argv)"},{"anchor":"S:68308360b1","kind":"function","line":166,"name":"main","path_id":"F:a0d489df6d","signature":"async function main(argv)"},{"anchor":"S:f6264503e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a104667369","signature":"export const MESSAGES ="},{"anchor":"S:7369c62b84","kind":"class","line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423","signature":"export class OrderServiceBroken"},{"anchor":"S:07a58ff928","doc":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the stdin-close race in batch mode.","kind":"function","line":14,"name":"rpc","path_id":"F:a167609a41","signature":"function rpc(requests, expectedIds)"},{"anchor":"S:8e42d127b7","doc":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing out or parked for a human, so staleness d","kind":"const","line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d","signature":"export const OPEN_STATES = [\"queued\", \"claimed\", \"making\", \"checking\", \"rework\"];"},{"anchor":"S:b3a28348ad","doc":"A lease is live when it has a holder and an unexpired expiry, mirroring transition-work-item.mjs's own leaseIsLive so the two files can never disagree about what \"actively claimed\" means.","kind":"function","line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d","signature":"export function hasLiveLease(item, now = new Date())"},{"anchor":"S:25139ebf6c","doc":"Every `tests.test.mjs` (or agentproof.test.mjs) path literally named in an item's gates array, deduplicated. Broad gates like \"npm run verify\" or \"node scripts/check-style.mjs .\" name no specific file","kind":"function","line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d","signature":"export function extractOwnTestFiles(gates = [])"},{"anchor":"S:87fa79bea3","doc":"Every allowed_edit_set entry that is not itself one of the item's own test files: the implementation surface the test files are supposed to prove exists.","kind":"function","line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d","signature":"export function implementationPaths(item)"},{"anchor":"S:3fac1340a4","doc":"Decide whether a single open-state item looks stale, without running anything. Returns a reason string when every static precondition holds (has a resolvable test file, every implementation path exist","kind":"function","line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d","signature":"export function staleCandidate(item, now = new Date())"},{"anchor":"S:098af8d3e8","doc":"Run one already-existing test file and report whether it passed. Spawned, not imported, so a crash or hang in the target test cannot take this checker down with it; `node --test` on a single file is f","kind":"function","line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d","signature":"export function testFilePasses(testFile, { spawn = spawnSync } = {})"},{"anchor":"S:980a6a0449","doc":"Full check across every work item. Returns the list of stale findings; each entry names the item, the state it is stuck in, and the evidence (which test files and implementation paths already exist an","kind":"function","line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d","signature":"export function findStaleWorkItems(items, { spawn = spawnSync, now = new Date() } = {})"},{"anchor":"S:dc4ac94e5b","kind":"type","line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed","signature":"export type TableColumnAlign = \"left\" | \"right\" | \"center\";"},{"anchor":"S:aabd2d1e55","kind":"interface","line":6,"name":"TableColumn","path_id":"F:a402d2f9ed","signature":"export interface TableColumn"},{"anchor":"S:1d4c8df8c0","kind":"interface","line":19,"name":"TableProps","path_id":"F:a402d2f9ed","signature":"export interface TableProps"},{"anchor":"S:9f9ed94a62","doc":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highlight on * hover; when `onRowClick` is set","kind":"function","line":42,"name":"Table","path_id":"F:a402d2f9ed","signature":"export function Table({ columns, rows, getRowKey, onRowClick, empty, dense }: TableProps)"},{"anchor":"S:396f1000ae","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a5822fdd03","signature":"export const MESSAGES ="},{"anchor":"S:cd1b84d7ff","doc":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised.","kind":"function","line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021","signature":"function makeMinimalRepo()"},{"anchor":"S:336ebe7ff5","kind":"function","line":52,"name":"run","path_id":"F:a6d2bd3021","signature":"function run(tmp)"},{"anchor":"S:0ca7d7cb9c","doc":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than by path, so it holds under a copied or ","kind":"function","line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452","signature":"export function isModonomeRepo(targetRoot)"},{"anchor":"S:2681abe2e5","doc":"Install the pre-commit hook into targetRoot. Returns \"installed\", \"kept\" (a host hook already existed and was preserved), or \"no-git\". self=true writes modonome's own dev hook and overwrites; a host i","kind":"function","line":60,"name":"installHooks","path_id":"F:a7ce0f6452","signature":"export function installHooks(targetRoot, { self = false, mode = \"snapshot\" } = {})"},{"anchor":"S:0126079093","kind":"const","line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15","signature":"export const MESSAGES ="},{"anchor":"S:0b4b18fb8a","kind":"type","line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27","signature":"export type IconButtonVariant = \"ghost\" | \"secondary\" | \"danger\";"},{"anchor":"S:49158af5a6","kind":"type","line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27","signature":"export type IconButtonSize = \"sm\" | \"md\";"},{"anchor":"S:b4354229d8","kind":"interface","line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27","signature":"export interface IconButtonProps extends ButtonHTMLAttributes"},{"anchor":"S:8c83339acb","doc":"A square, icon-only button. Always carries an `aria-label` built from the required * `label` prop so the control has an accessible name even though no text is visible. * Use for compact affordances su","kind":"function","line":25,"name":"IconButton","path_id":"F:a8cfe45d27","signature":"export function IconButton("},{"anchor":"S:d31fd4dafa","doc":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or downgrade a failed precondition.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:aa27d254da","signature":"export const MESSAGES ="},{"anchor":"S:170dcaab55","doc":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value is * a bare command name resolved agains","kind":"function","line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6","signature":"export function resolveAdapterCommand(adapterEntry)"},{"anchor":"S:d7a4f68100","doc":"Enforce ADR-009 path containment. The adapter's working directory must resolve * to exactly the target directory (resolve(root, plan.target)); a cwd outside the * target, reached via \"..\" or an absolu","kind":"function","line":52,"name":"containedCwd","path_id":"F:aa77f227a6","signature":"export function containedCwd(root, target)"},{"anchor":"S:5b2eae49a8","kind":"function","line":62,"name":"sep","path_id":"F:aa77f227a6","signature":"function sep()"},{"anchor":"S:7ed39c68da","doc":"Build the argument vector for the external CLI. Points it at the resolved * endpoint (base URL and model), forwards a bounded max-turns flag, and reads the * prompt from stdin (so no prompt text lands","kind":"function","line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6","signature":"export function buildAdapterArgs(endpoint, maxTurns, adapterEntry)"},{"anchor":"S:bd7f311fdb","doc":"Run the external agentic CLI for one role. Never throws on a bounded/expected * failure (spawn error, non-zero exit, timeout, cap hit): returns a clean status * object mirroring the single-shot path's","kind":"function","line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6","signature":"export async function runToolLoopAdapter("},{"anchor":"S:2cd9cbf595","kind":"type","line":4,"name":"ToastTone","path_id":"F:ab334f34df","signature":"export type ToastTone = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:00c956ccf3","kind":"interface","line":6,"name":"ToastProps","path_id":"F:ab334f34df","signature":"export interface ToastProps"},{"anchor":"S:5eb8ce722f","doc":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: mount * one `Toast` per visible notificat","kind":"function","line":31,"name":"Toast","path_id":"F:ab334f34df","signature":"export function Toast({ tone = \"info\", title, message, onDismiss }: ToastProps)"},{"anchor":"S:55a57d9fd6","kind":"function","line":168,"name":"toolRatchet","path_id":"F:ab5077147a","signature":"async function toolRatchet(args)"},{"anchor":"S:a4d0ce8fea","kind":"function","line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a","signature":"async function toolValidateConfig(args)"},{"anchor":"S:2d1eeb5346","kind":"function","line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a","signature":"async function toolValidateWorkItem(args)"},{"anchor":"S:6499fa18ee","kind":"function","line":264,"name":"toolStatus","path_id":"F:ab5077147a","signature":"async function toolStatus(args)"},{"anchor":"S:2d2b3ccfa2","kind":"function","line":318,"name":"toolCompliance","path_id":"F:ab5077147a","signature":"async function toolCompliance(args)"},{"anchor":"S:f613554429","kind":"function","line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a","signature":"async function toolVerifyAttestation(args)"},{"anchor":"S:521fca28ad","kind":"function","line":344,"name":"toolSnapshot","path_id":"F:ab5077147a","signature":"async function toolSnapshot(args)"},{"anchor":"S:16d8c02a8e","kind":"function","line":372,"name":"send","path_id":"F:ab5077147a","signature":"function send(obj)"},{"anchor":"S:2306976428","kind":"function","line":376,"name":"errorResponse","path_id":"F:ab5077147a","signature":"function errorResponse(id, code, message)"},{"anchor":"S:dd3b976184","kind":"function","line":380,"name":"handleRequest","path_id":"F:ab5077147a","signature":"async function handleRequest(req)"},{"anchor":"S:a6ff0bb6d7","doc":"Slugify a lesson into a deterministic ID.","kind":"function","line":28,"name":"slugifyId","path_id":"F:ac11b5379f","signature":"function slugifyId(lesson)"},{"anchor":"S:928743a069","doc":"Build a learning record from options.","kind":"function","line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f","signature":"export function buildLearningRecord(opts = {})"},{"anchor":"S:562052e079","doc":"Validate a learning record. Returns an array of error strings. Empty array means valid.","kind":"function","line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f","signature":"export function validateLearningRecord(record)"},{"anchor":"S:ba65eaae5b","doc":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advisory notice.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:acc3f6b466","signature":"export const MESSAGES ="},{"anchor":"S:e19487a8ae","doc":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync.","kind":"function","line":22,"name":"resolveFiles","path_id":"F:ace169adc4","signature":"function resolveFiles(argPath)"},{"anchor":"S:c79db45132","doc":"Build the small file helpers a detector needs, bound to one target directory.","kind":"function","line":11,"name":"helpers","path_id":"F:ae46bbab81","signature":"function helpers(target)"},{"anchor":"S:13fa2b4863","doc":"Detect the primary stack. Returns { name, pm, gates } exactly as the dry-run sweep expects, plus { entrypoints, commands } for the snapshot signature.","kind":"function","line":20,"name":"detectStack","path_id":"F:ae46bbab81","signature":"export function detectStack(target = \".\")"},{"anchor":"S:3575202801","doc":"Paths that must never be auto-merged. Same list the dry-run sweep reports.","kind":"function","line":57,"name":"detectProtected","path_id":"F:ae46bbab81","signature":"export function detectProtected(target = \".\")"},{"anchor":"S:9e9207d834","doc":"Repo instruction files an agent should read first.","kind":"function","line":67,"name":"detectInstructions","path_id":"F:ae46bbab81","signature":"export function detectInstructions(target = \".\")"},{"anchor":"S:7c716c856e","doc":"Rank files by how often they changed in recent git history. The dry-run sweep uses the default limit of 3; the snapshot passes a larger limit to score churn across the whole tree. Returns [] when git ","kind":"function","line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81","signature":"export function detectHotFiles(target = \".\", { commits = 200, limit = 3 } = {})"},{"anchor":"S:7fe7ee7f43","kind":"function","line":94,"name":"dedupe","path_id":"F:ae46bbab81","signature":"function dedupe(arr)"},{"anchor":"S:3d3f20848d","doc":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.yml). Both are excluded from the schedule ","kind":"const","line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca","signature":"export const CORE_ROLE_SEQUENCE = [\"maker\", \"checker\"];"},{"anchor":"S:96e9e4a020","doc":"Normalize a role's trigger field (string shorthand, object, or absent) into a stable shape. A bare string s becomes { type: s }. Absent becomes { type: null }. after and cron default to an empty list ","kind":"function","line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca","signature":"export function normalizeTrigger(trigger)"},{"anchor":"S:0427f639c4","doc":"Normalize a role's schedule field into { cron, timezone } or null when absent. Pure.","kind":"function","line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca","signature":"export function normalizeSchedule(schedule)"},{"anchor":"S:d15b7063e3","doc":"The cron expressions a role fires on: its schedule.cron plus a trigger.cron (or a trigger.type of schedule that carries a cron), de-duplicated and sorted for a stable render. Returns an empty array fo","kind":"function","line":76,"name":"roleCrons","path_id":"F:aea3c05bca","signature":"export function roleCrons(roleCfg)"},{"anchor":"S:afa2ffd4a2","doc":"The crew roles the schedule generator manages: every configured role that is not a reserved role (maker, checker, self-govern) and has a prompt to run. Sorted for a stable render. Pure aside from read","kind":"function","line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca","signature":"export function schedulableCrewRoles(cfg)"},{"anchor":"S:33846c9bba","doc":"Build the executed role order from after-role triggers. Returns null when no role declares trigger.after, so the caller keeps its existing default (a pure maker -> checker run) with zero behavior chan","kind":"function","line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca","signature":"export function deriveTriggerSequence(cfg)"},{"anchor":"S:73cbfa5a7d","doc":"Render one job for a scheduled crew role. It checks out, runs the role as a single dry-run invocation of run-cycle.mjs, and only executes behind an explicit repository variable. When the role carries ","kind":"function","line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca","signature":"function renderRoleJob(role, crons)"},{"anchor":"S:9cda312f51","doc":"Render the full scheduled-crew workflow as a deterministic YAML string. The trigger block is the sorted union of every managed role's crons plus workflow_dispatch, so a role always has a manual path a","kind":"function","line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca","signature":"export function renderScheduleWorkflow(cfg)"},{"anchor":"S:65004e9f74","doc":"Load the repo config through the same loader run-cycle uses, so the generator reads exactly what the loop reads. Falls back to an empty roles map when the file is absent.","kind":"function","line":215,"name":"loadCfg","path_id":"F:aea3c05bca","signature":"function loadCfg()"},{"anchor":"S:5327d3b72c","kind":"function","line":223,"name":"main","path_id":"F:aea3c05bca","signature":"function main()"},{"anchor":"S:e8f6de81b4","kind":"function","line":259,"name":"selfTest","path_id":"F:aea3c05bca","signature":"function selfTest()"},{"anchor":"S:52826c5034","kind":"class","line":768,"name":"Component","path_id":"F:aef9cf1e27","signature":"class Component extends DCLogic"},{"anchor":"S:52be3c746f","kind":"function","line":32,"name":"git","path_id":"F:af6de66499","signature":"function git(...a)"},{"anchor":"S:48102a3f37","kind":"function","line":37,"name":"parseFraction","path_id":"F:af6de66499","signature":"function parseFraction(s)"},{"anchor":"S:6122b96d0b","kind":"function","line":11,"name":"runGateCapped","path_id":"F:b014028f57","signature":"export function runGateCapped(cmdArray, { timeoutMs = 30000, maxBuffer = 67108864 } = {})"},{"anchor":"S:4fb0095605","doc":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":22,"name":"checkRegistry","path_id":"F:b16afebae9","signature":"export function checkRegistry(registry, schema)"},{"anchor":"S:837b5a8d1e","doc":"CLI: read the registry and schema from the repo root and report PASS/FAIL.","kind":"function","line":38,"name":"runCli","path_id":"F:b16afebae9","signature":"function runCli()"},{"anchor":"S:c6d0684785","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b25dcdad19","signature":"export const MESSAGES ="},{"anchor":"S:41ad75ea93","doc":"Build a synthetic 1000-line diff that is clean (no gaming patterns).","kind":"function","line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600","signature":"function buildLargeDiff(lines)"},{"anchor":"S:d0587dc399","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b2efd505ef","signature":"export const MESSAGES ="},{"anchor":"S:dbaef09fdf","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b37de0ee8e","signature":"export const MESSAGES ="},{"anchor":"S:3e2d44a335","kind":"type","line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:0c7a33bcbe","kind":"interface","line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb","signature":"export interface ModeSwitcherProps"},{"anchor":"S:5b0828ff4b","doc":"The global context switch. Host mode reads the engine as installed in a customer * repo; product mode reads modonome governing its own repository (self-application). * The same screens serve either su","kind":"function","line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb","signature":"export function ModeSwitcher({ mode, onModeChange, hostLabel, productLabel }: ModeSwitcherProps)"},{"anchor":"S:4bfea4387c","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1","signature":"export const MESSAGES ="},{"anchor":"S:700c80e34d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:b502a0fe75","signature":"export const MESSAGES ="},{"anchor":"S:ea113218d1","doc":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, so this * interface is the contract a hos","kind":"interface","line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133","signature":"export interface WorkItemSummary"},{"anchor":"S:42d33f191a","kind":"interface","line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133","signature":"export interface WorkItemCardProps"},{"anchor":"S:c7ef137e46","doc":"A compact, clickable summary card for a single work item: title with its id, * current-state pill, risk tier, a protected-path lock indicator, attempt count, and * pull request number. Used in queue b","kind":"function","line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133","signature":"export function WorkItemCard({ item, onClick }: WorkItemCardProps)"},{"anchor":"S:18da5ae581","doc":"Read all .mjs files in a directory (non-recursive by default).","kind":"function","line":13,"name":"listMjs","path_id":"F:b70824b13e","signature":"function listMjs(dir, recursive = false)"},{"anchor":"S:df7a91f366","doc":"Extract import specifiers from a file's source text. Only matches actual import statements (not comments or JSDoc).","kind":"function","line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e","signature":"function extractImportSpecifiers(source)"},{"anchor":"S:3702b2fefe","kind":"function","line":47,"name":"isAllowedImport","path_id":"F:b70824b13e","signature":"function isAllowedImport(specifier)"},{"anchor":"S:fedbb5f441","kind":"class","line":4,"name":"NotificationService","path_id":"F:b9d806ba4d","signature":"export class NotificationService"},{"anchor":"S:eb51a5641a","doc":"Base valid packet factory: returns a fresh object each call.","kind":"function","line":7,"name":"makePacket","path_id":"F:ba97282cf5","signature":"function makePacket(overrides = {})"},{"anchor":"S:ebb9dad93b","kind":"function","line":12,"name":"tmp","path_id":"F:baf7641a01","signature":"function tmp()"},{"anchor":"S:79a288a97f","kind":"function","line":16,"name":"runTick","path_id":"F:baf7641a01","signature":"function runTick(stateDir)"},{"anchor":"S:77054cfc82","kind":"function","line":23,"name":"makeItem","path_id":"F:baf7641a01","signature":"function makeItem(overrides = {})"},{"anchor":"S:028a668f8e","kind":"function","line":34,"name":"writeItem","path_id":"F:baf7641a01","signature":"function writeItem(itemsDir, name, item)"},{"anchor":"S:357942abbf","kind":"function","line":38,"name":"readItem","path_id":"F:baf7641a01","signature":"function readItem(itemsDir, name)"},{"anchor":"S:b01ec1a6ac","kind":"function","line":25,"name":"Gates","path_id":"F:bb6a874d58","signature":"export const Gates = () => ;"},{"anchor":"S:f5a71d2ca6","kind":"function","line":19,"name":"runScript","path_id":"F:bbb6476d71","signature":"function runScript(script, args = [], env = {})"},{"anchor":"S:c7db2cc29d","kind":"class","line":3,"name":"InventoryService","path_id":"F:bd02b28f17","signature":"export class InventoryService"},{"anchor":"S:0bf3d508cb","doc":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune their wording without a code change.","kind":"const","line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e","signature":"export const MESSAGES ="},{"anchor":"S:ac1ae69e0f","kind":"type","line":3,"name":"SparklineTone","path_id":"F:c0e80ca327","signature":"export type SparklineTone = \"primary\" | \"info\" | \"owner\" | \"danger\";"},{"anchor":"S:b27476e527","kind":"interface","line":5,"name":"SparklineProps","path_id":"F:c0e80ca327","signature":"export interface SparklineProps"},{"anchor":"S:655f25fbed","doc":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inline * next to a metric (cost trend, throug","kind":"function","line":33,"name":"Sparkline","path_id":"F:c0e80ca327","signature":"export function Sparkline("},{"anchor":"S:a272c887e3","kind":"function","line":82,"name":"toPoints","path_id":"F:c0e80ca327","signature":"function toPoints(data: number[], innerW: number, innerH: number, padding: number): [number, number][]"},{"anchor":"S:686192f35d","kind":"function","line":97,"name":"toLinePath","path_id":"F:c0e80ca327","signature":"function toLinePath(points: [number, number][]): string"},{"anchor":"S:27005d8f20","kind":"function","line":27,"name":"buildBundle","path_id":"F:c4395c3023","signature":"function buildBundle()"},{"anchor":"S:3ad956fb93","kind":"function","line":36,"name":"configDefaults","path_id":"F:c5938c33fd","signature":"function configDefaults(rel)"},{"anchor":"S:1e5dabea9c","doc":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate.","kind":"function","line":43,"name":"hasHeading","path_id":"F:c5938c33fd","signature":"function hasHeading(text, section)"},{"anchor":"S:6b1894b02c","kind":"function","line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd","signature":"function findPromotionAdr(flag)"},{"anchor":"S:03b490fb81","kind":"function","line":7,"name":"clean","path_id":"F:c598a2d684","signature":"function clean(text)"},{"anchor":"S:ec2e53ab2e","kind":"function","line":12,"name":"signature","path_id":"F:c598a2d684","signature":"function signature(line)"},{"anchor":"S:ebdb053467","kind":"function","line":17,"name":"docAbove","path_id":"F:c598a2d684","signature":"function docAbove(lines, index)"},{"anchor":"S:df1c5c3628","kind":"const","line":33,"name":"adapter","path_id":"F:c598a2d684","signature":"export const adapter ="},{"anchor":"S:95e56b0a9c","kind":"function","line":27,"name":"Remote","path_id":"F:c63a71fb57","signature":"export const Remote = () => ;"},{"anchor":"S:e5772fff07","kind":"function","line":29,"name":"LocalOnly","path_id":"F:c63a71fb57","signature":"export const LocalOnly = () => ;"},{"anchor":"S:749446c25e","kind":"const","line":8,"name":"armingModes","path_id":"F:c64c042051","signature":"export const armingModes = [\"disabled\", \"dry-run\", \"armed\"] as const;"},{"anchor":"S:fc7eb05498","kind":"type","line":9,"name":"ArmingMode","path_id":"F:c64c042051","signature":"export type ArmingMode = (typeof armingModes)[number];"},{"anchor":"S:5465e6de42","kind":"const","line":11,"name":"workStates","path_id":"F:c64c042051","signature":"export const workStates = ["},{"anchor":"S:725b07739e","kind":"type","line":22,"name":"WorkState","path_id":"F:c64c042051","signature":"export type WorkState = (typeof workStates)[number];"},{"anchor":"S:544b9ce58e","kind":"const","line":24,"name":"riskTiers","path_id":"F:c64c042051","signature":"export const riskTiers = [1, 2, 3, 4] as const;"},{"anchor":"S:dab833b9a8","kind":"type","line":25,"name":"RiskTier","path_id":"F:c64c042051","signature":"export type RiskTier = (typeof riskTiers)[number];"},{"anchor":"S:8289602f81","doc":"CSS custom-property name for an arming mode color.","kind":"function","line":28,"name":"modeVar","path_id":"F:c64c042051","signature":"export function modeVar(mode: ArmingMode): string"},{"anchor":"S:583c8b60d3","doc":"CSS custom-property name for a work-item state color.","kind":"function","line":34,"name":"stateVar","path_id":"F:c64c042051","signature":"export function stateVar(state: WorkState): string"},{"anchor":"S:89566a4918","doc":"CSS custom-property name for a risk-tier color.","kind":"function","line":39,"name":"tierVar","path_id":"F:c64c042051","signature":"export function tierVar(tier: RiskTier): string"},{"anchor":"S:a26ee6eefd","doc":"Human labels for the work states, in flow order.","kind":"const","line":44,"name":"workStateLabels","path_id":"F:c64c042051","signature":"export const workStateLabels: Record ="},{"anchor":"S:644e7adeef","kind":"const","line":56,"name":"tokens","path_id":"F:c64c042051","signature":"export const tokens ="},{"anchor":"S:f80ff247d7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:c6bd51a324","signature":"export const MESSAGES ="},{"anchor":"S:d029f96a64","kind":"function","line":27,"name":"flagValue","path_id":"F:c72e6949b9","signature":"function flagValue(argv, name)"},{"anchor":"S:44a852f5e1","kind":"function","line":32,"name":"readStdin","path_id":"F:c72e6949b9","signature":"function readStdin()"},{"anchor":"S:276edd396a","kind":"function","line":45,"name":"postJson","path_id":"F:c72e6949b9","signature":"function postJson(url, body, apiKey)"},{"anchor":"S:301d436113","kind":"function","line":80,"name":"main","path_id":"F:c72e6949b9","signature":"async function main(argv)"},{"anchor":"S:29574da2e9","doc":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unrelated, low-value assertions are added to","kind":"const","line":7,"name":"scenario","path_id":"F:c7423b85cf","signature":"export const scenario ="},{"anchor":"S:9299cd9a70","kind":"function","line":31,"name":"matches","path_id":"F:c9493b5275","signature":"function matches(l)"},{"anchor":"S:00f913bfd8","kind":"function","line":11,"name":"tf","path_id":"F:ca05b6ba1c","signature":"function tf(name)"},{"anchor":"S:3696870ce9","doc":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase \"packet\".","kind":"function","line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73","signature":"function literalPhraseRe(phrase)"},{"anchor":"S:55eb1af9ca","doc":"docs/LEXICON.md explains the rationale; this loads the terms it documents. A grandfathered term (see lexicon.json) warns instead of failing, so an approved rename can ship before every pre-existing fi","kind":"function","line":32,"name":"loadLexicon","path_id":"F:ca0833ac73","signature":"function loadLexicon()"},{"anchor":"S:ee9b2c90d1","kind":"function","line":53,"name":"walk","path_id":"F:ca0833ac73","signature":"function walk(dir, out = [])"},{"anchor":"S:aa4de9995b","kind":"function","line":4,"name":"Trends","path_id":"F:ca13fe2a5b","signature":"export const Trends = () => ("},{"anchor":"S:66ac4b8d64","kind":"function","line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:039c3576c4","doc":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (they fall through the family check and are ","kind":"function","line":23,"name":"modelFamily","path_id":"F:cb3c5f7715","signature":"export function modelFamily(model)"},{"anchor":"S:b128b3a196","doc":"Governance rules that JSON Schema cannot express (cross-field invariants).","kind":"function","line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715","signature":"export function governanceErrors(item, config = {})"},{"anchor":"S:16267c791e","kind":"function","line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715","signature":"export function validateWorkItem(item, config = {})"},{"anchor":"S:7c5c3a31a4","doc":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), * (within a segment), ** (across segments","kind":"function","line":41,"name":"compilePattern","path_id":"F:cb66095cb4","signature":"function compilePattern(pattern)"},{"anchor":"S:531cf59eb3","doc":"Build an ignore predicate for a repo root. The predicate takes a posix relative path and returns true when the path should be excluded. Later patterns win, so a negation can re-include a path a broad ","kind":"function","line":86,"name":"loadIgnore","path_id":"F:cb66095cb4","signature":"export function loadIgnore(root)"},{"anchor":"S:d4e650f5ae","doc":"Walk a repository into a sorted list of files. Symlinks are skipped to avoid cycles and escapes. Returns [{ relPath, absPath, size }] ordered by relPath.","kind":"function","line":110,"name":"walkRepo","path_id":"F:cb66095cb4","signature":"export function walkRepo(root, { ignore = () => false, maxDepth = 12 } = {})"},{"anchor":"S:e6e23439bf","kind":"function","line":8,"name":"tempRepo","path_id":"F:cba8f1d03b","signature":"function tempRepo({ withGit = true, pkgName = \"some-host\" } = {})"},{"anchor":"S:25117f5b1d","kind":"function","line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a","signature":"function normalizeLicense(raw)"},{"anchor":"S:cb3211f3c2","doc":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network.","kind":"function","line":33,"name":"checkLicenses","path_id":"F:cc361bd05a","signature":"export function checkLicenses(pkg, manifest)"},{"anchor":"S:310e2149b2","doc":"CLI: read package.json and adapters.json from the repo root and report PASS/FAIL.","kind":"function","line":80,"name":"runCli","path_id":"F:cc361bd05a","signature":"function runCli()"},{"anchor":"S:298b204d13","doc":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into the env-pollution check.","kind":"function","line":22,"name":"runPreflight","path_id":"F:cc65dd1342","signature":"function runPreflight(fixtureName)"},{"anchor":"S:c73cab5b60","kind":"function","line":42,"name":"ids","path_id":"F:cc65dd1342","signature":"function ids(report)"},{"anchor":"S:2ca7aeeeaf","kind":"function","line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342","signature":"function findingsBySeverity(report, severity)"},{"anchor":"S:ee57130d72","doc":"Catalog entries for scripts/check-drift.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:ccb72910b3","signature":"export const MESSAGES ="},{"anchor":"S:83ad315769","doc":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin.","kind":"function","line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3","signature":"export function resolveRepo(env = process.env, originUrl = null, overrides = {})"},{"anchor":"S:4d35869e55","kind":"function","line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3","signature":"function readOriginUrl()"},{"anchor":"S:fc28898c78","doc":"The credential, from GITHUB_TOKEN or GH_TOKEN. Empty string means unauthenticated.","kind":"function","line":44,"name":"resolveToken","path_id":"F:cdbe769ed3","signature":"export function resolveToken(env = process.env)"},{"anchor":"S:a4e7d71500","kind":"function","line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3","signature":"function isRetryableStatus(status)"},{"anchor":"S:95e22729ee","kind":"function","line":52,"name":"sleep","path_id":"F:cdbe769ed3","signature":"function sleep(ms)"},{"anchor":"S:de0b2dc0df","doc":"Build a read-only client bound to one repository. All inputs are injectable so * tests drive it against a local mock server with no real network call.","kind":"function","line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3","signature":"export function createGitHubClient("},{"anchor":"S:66b4da1ed7","kind":"type","line":6,"name":"ModelCostClass","path_id":"F:ce1173e176","signature":"export type ModelCostClass = \"paid\" | \"free\" | \"local\";"},{"anchor":"S:2e3ac2ba9f","kind":"interface","line":8,"name":"ModelCostRow","path_id":"F:ce1173e176","signature":"export interface ModelCostRow"},{"anchor":"S:61579a6235","kind":"interface","line":21,"name":"CostSummary","path_id":"F:ce1173e176","signature":"export interface CostSummary"},{"anchor":"S:8cf2204c43","kind":"interface","line":36,"name":"CostPanelProps","path_id":"F:ce1173e176","signature":"export interface CostPanelProps"},{"anchor":"S:13f1b3c9c0","doc":"A summary of model spend and call volume for a period: a budget meter for remote * USD spend, a small stat row of local calls, remote calls, and cache saves (framed * positively as retries avoided), a","kind":"function","line":93,"name":"CostPanel","path_id":"F:ce1173e176","signature":"export function CostPanel({ cost }: CostPanelProps)"},{"anchor":"S:4ed98bc995","kind":"function","line":18,"name":"baseCfg","path_id":"F:ce41983a53","signature":"function baseCfg(extra = {})"},{"anchor":"S:ad7d7732a1","kind":"function","line":24,"name":"makeExtract","path_id":"F:cecdb96382","signature":"function makeExtract(Parser, grammar)"},{"anchor":"S:464c90cba5","doc":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered.","kind":"function","line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382","signature":"export async function registerTreeSitter(register)"},{"anchor":"S:7c0d389b98","kind":"function","line":17,"name":"runRatchet","path_id":"F:cede5f9fa2","signature":"function runRatchet(...args)"},{"anchor":"S:703e56c471","doc":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config.","kind":"function","line":45,"name":"scratchRepo","path_id":"F:d0da1cab80","signature":"function scratchRepo(codeowners)"},{"anchor":"S:fb4a6826d7","kind":"function","line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80","signature":"function fakeGitEmail(email)"},{"anchor":"S:8d1ca74a54","doc":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older items, the schema's `owner` field; either","kind":"function","line":29,"name":"leaseHolder","path_id":"F:d135cffeaa","signature":"function leaseHolder(item)"},{"anchor":"S:87ca9c146a","kind":"function","line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa","signature":"function leaseIsLive(item, now)"},{"anchor":"S:fd822bf451","doc":"tryTransition(item, fromState, toState, writerId, now) -> result { ok: true, item } swap succeeded; item is a fresh copy { ok: false, conflict: \"\" } swap refused; item is left untouched `now` ","kind":"function","line":45,"name":"tryTransition","path_id":"F:d135cffeaa","signature":"export function tryTransition(item, fromState, toState, writerId, now = new Date())"},{"anchor":"S:fa36ece453","kind":"interface","line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91","signature":"export interface CarouselProps"},{"anchor":"S:36acbff697","doc":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scrolls a * focused item into view automatic","kind":"function","line":21,"name":"Carousel","path_id":"F:d20e4b6b91","signature":"export function Carousel({ children, label, className }: CarouselProps)"},{"anchor":"S:19aab1f03f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d288a78085","signature":"export const MESSAGES ="},{"anchor":"S:3ae3f92415","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d328f97d94","signature":"export const MESSAGES ="},{"anchor":"S:ce2faa5c80","kind":"function","line":18,"name":"loadConfig","path_id":"F:d480e40c97","signature":"export function loadConfig(path)"},{"anchor":"S:75c48595da","doc":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers: config values such as autonomy_enabled ","kind":"function","line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97","signature":"function primaryRoleModel(roleCfg)"},{"anchor":"S:dce77ef3c3","kind":"function","line":42,"name":"safetyErrors","path_id":"F:d480e40c97","signature":"export function safetyErrors(cfg)"},{"anchor":"S:ea1469d710","kind":"function","line":70,"name":"validateConfig","path_id":"F:d480e40c97","signature":"export function validateConfig(cfg)"},{"anchor":"S:655cf75cf0","kind":"function","line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9","signature":"export const OwnerOnly = () => ("},{"anchor":"S:733f5fd096","kind":"interface","line":5,"name":"HelpHintProps","path_id":"F:d5b496b125","signature":"export interface HelpHintProps"},{"anchor":"S:e44c445050","doc":"A tiny circular help affordance: a `help` icon button that reveals its text in a * Tooltip on hover or keyboard focus. This is the pervasive \"hover for context\" * control placed next to section labels","kind":"function","line":21,"name":"HelpHint","path_id":"F:d5b496b125","signature":"export function HelpHint({ label, children, size = 13 }: HelpHintProps)"},{"anchor":"S:c1c63b1bf8","kind":"function","line":35,"name":"planFile","path_id":"F:d6401dd73e","signature":"function planFile(editor)"},{"anchor":"S:c9785dab7b","doc":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches provable tautologies like `expect(1).toBe(","kind":"const","line":6,"name":"scenario","path_id":"F:d744931e6a","signature":"export const scenario ="},{"anchor":"S:fe9c17eefa","kind":"function","line":12,"name":"tmp","path_id":"F:d7d4e8d2a9","signature":"function tmp()"},{"anchor":"S:37a0d721be","kind":"function","line":16,"name":"run","path_id":"F:d7d4e8d2a9","signature":"function run(script, ...args)"},{"anchor":"S:91108693ba","kind":"const","line":1,"name":"MESSAGES","path_id":"F:d8e37c4449","signature":"export const MESSAGES ="},{"anchor":"S:4f19353e16","kind":"interface","line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce","signature":"export interface ProtectedPathRowProps"},{"anchor":"S:e0eb326a77","doc":"A single row describing one protected path's guard state: a lock icon, the path in * mono, and a status readout. When a change is awaiting approval, shows an * attention-toned pill, notes who touched ","kind":"function","line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce","signature":"export function ProtectedPathRow("},{"anchor":"S:1274d7cf4b","kind":"type","line":3,"name":"Tier","path_id":"F:da42f69531","signature":"export type Tier = 1 | 2 | 3 | 4;"},{"anchor":"S:fea88d42b6","kind":"interface","line":5,"name":"TierBadgeProps","path_id":"F:da42f69531","signature":"export interface TierBadgeProps"},{"anchor":"S:f3d272846b","doc":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, and * anywhere a change's review require","kind":"function","line":24,"name":"TierBadge","path_id":"F:da42f69531","signature":"export function TierBadge({ tier, showLabel = true }: TierBadgeProps)"},{"anchor":"S:7070a0d16e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:da9133a29d","signature":"export const MESSAGES ="},{"anchor":"S:4eb7e87341","kind":"interface","line":5,"name":"NumberFieldProps","path_id":"F:db651caf76","signature":"export interface NumberFieldProps"},{"anchor":"S:50b0879e24","kind":"function","line":28,"name":"clamp","path_id":"F:db651caf76","signature":"function clamp(n: number, min?: number, max?: number): number"},{"anchor":"S:cfdd1d8a7f","doc":"A numeric field with decrement and increment stepper buttons and an optional * unit suffix. Used for caps and budget editors such as max open PRs, max diff * lines, lease minutes, and the remote model","kind":"function","line":40,"name":"NumberField","path_id":"F:db651caf76","signature":"export function NumberField("},{"anchor":"S:8d30c800e7","kind":"const","line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1","signature":"export const SNAPSHOT_SCHEMA_VERSION = 1;"},{"anchor":"S:154918aa5a","doc":"Detect binary content by scanning a prefix for a null byte.","kind":"function","line":32,"name":"isBinary","path_id":"F:dbb9c92ca1","signature":"function isBinary(buffer)"},{"anchor":"S:3734794a77","kind":"function","line":38,"name":"extOf","path_id":"F:dbb9c92ca1","signature":"function extOf(relPath)"},{"anchor":"S:cbe5a2e179","kind":"function","line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1","signature":"function firstCommentLine(source)"},{"anchor":"S:05fa5077ed","doc":"Derive a module purpose from its symbols and source. Returns the raw (unredacted) string so it can be cached; redaction is applied at map assembly time.","kind":"function","line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1","signature":"function rawPurpose(relPath, symbols, source)"},{"anchor":"S:e9e4290005","doc":"Build the full snapshot for a repository root.","kind":"function","line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1","signature":"export function buildSnapshot(root, opts = {})"},{"anchor":"S:45b2f146f0","doc":"Resolve adjacency into a sorted edge list of dictionary path ids.","kind":"function","line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1","signature":"function buildEdgeList(adjacency, pathIdByPath)"},{"anchor":"S:dbf47f93d3","kind":"function","line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1","signature":"function renderMarkdown({ generatedFor, merkleRoot, files, totalBytes, map })"},{"anchor":"S:890a9e6691","doc":"Read a light governance posture from the target config and environment. It never arms anything; it only reports posture so a snapshot can double as a status probe.","kind":"function","line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1","signature":"function readGovernance(root)"},{"anchor":"S:73feb65706","kind":"function","line":4,"name":"OnLabel","path_id":"F:dca643f34b","signature":"export const OnLabel = () => ("},{"anchor":"S:bd8806c490","kind":"function","line":13,"name":"Board","path_id":"F:dd1be2cd7b","signature":"export const Board = () => ;"},{"anchor":"S:b815c12407","kind":"const","line":1,"name":"MESSAGES","path_id":"F:dd58ae3791","signature":"export const MESSAGES ="},{"anchor":"S:e0832e1baa","kind":"function","line":8,"name":"withRoot","path_id":"F:ddd82fc886","signature":"function withRoot(learningsBody)"},{"anchor":"S:1d6822da4e","doc":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the researcher (or any other subset) without ed","kind":"function","line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49","signature":"export function resolveRoleSequence(cfg, opts = {})"},{"anchor":"S:4b76f865fa","doc":"Resolve a role's execution mode from its model's config entry. The default is \"patch\" (the WI-029 single-shot-diff path) whenever exec_mode is absent, so existing configs behave exactly as before. Onl","kind":"function","line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49","signature":"export function resolveExecMode(cfg, model)"},{"anchor":"S:914d5cd317","doc":"Build a role's ordered runtime fallback chain: the resolved primary first (so a --maker-model/--checker-model CLI override always wins as chain[0]), then the rest of the role's configured `models` lis","kind":"function","line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49","signature":"export function buildFallbackChain(cfg, role, resolved, known)"},{"anchor":"S:4f138d4cbe","doc":"Conservative classifier: only a network-level failure (connection refused/reset, DNS failure, a request timeout) counts as \"unreachable\" and is safe to retry against the next model in a role's fallbac","kind":"function","line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49","signature":"export function isUnreachableError(err)"},{"anchor":"S:41689151ff","kind":"function","line":105,"name":"parseArgs","path_id":"F:ddeb486c49","signature":"export function parseArgs(argv)"},{"anchor":"S:15286656f4","doc":"The execution environment this process is running in. Routing compares each role's required target against this to decide inline vs enqueue. Precedence: an explicit --worker-env flag, then MODONOME_WO","kind":"function","line":127,"name":"localEnv","path_id":"F:ddeb486c49","signature":"function localEnv(opts, env)"},{"anchor":"S:959be959f7","doc":"Resolve and validate a full cycle plan without calling any model. Pure: it reads the passed config and runId and throws on any policy violation. This is the testable core of the harness; the execute p","kind":"function","line":134,"name":"planCycle","path_id":"F:ddeb486c49","signature":"export function planCycle(opts, cfg, runId)"},{"anchor":"S:a75126f856","doc":"Build the child-process environment for a role invocation. When the resolved model carries a base_url (a local, self-hosted, or gateway endpoint), route the CLI there by setting ANTHROPIC_BASE_URL, wh","kind":"function","line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49","signature":"export function buildRunnerEnv(baseEnv, role)"},{"anchor":"S:9b986c2d8a","doc":"Render the role prompt with the same variables regardless of transport: identity/model placeholders, the run branch, and promoted learnings.","kind":"function","line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49","signature":"function buildRolePrompt(plan, role, env)"},{"anchor":"S:9f59110fda","doc":"Write the transcript log and append the schema-conformant metric shared by every transport. `extra` merges additional fields into the metric record (for example whether an openai-http patch applied).","kind":"function","line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49","signature":"function writeTranscriptAndMetric(plan, role, r, transcriptText, extra = {})"},{"anchor":"S:693b8fedee","doc":"Build the argv for the CLI-transport maker/checker invocation. Exported and * pure (no spawn) so a test can assert on the exact flags without launching a * real binary or spending tokens. * @param {{ ","kind":"function","line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49","signature":"export function buildRoleCliArgs(r, plan, prompt)"},{"anchor":"S:fe41df17f9","kind":"function","line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49","signature":"function invokeRoleClaudeCli(plan, role, env, deps = {})"},{"anchor":"S:c028c053e3","doc":"Provider-native single-shot execution: render the same prompt, call an OpenAI-compatible chat-completions endpoint once, and turn the response into file changes deterministically by extracting a unifi","kind":"function","line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49","signature":"export async function invokeRoleOpenAI(plan, role, env, deps = {})"},{"anchor":"S:8f6d716f36","doc":"Load the single agentic-CLI adapter entry from adapters.json for the tool-loop path. Returns the first declared adapter, or null when the manifest is empty or absent (which makes tool-loop degrade to ","kind":"function","line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49","signature":"function loadAdapterEntry(deps = {})"},{"anchor":"S:83b3a2ab69","doc":"Agentic tool-loop execution: spawn the declared external coding CLI (adapt-first, ADR-032) pointed at the resolved OpenAI-compatible endpoint. Containment, the turn cap, and the wall-clock timeout are","kind":"function","line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49","signature":"export async function invokeRoleToolLoop(plan, role, env, deps = {})"},{"anchor":"S:f8004b7b76","kind":"function","line":475,"name":"invokeRole","path_id":"F:ddeb486c49","signature":"function invokeRole(plan, role, env, deps)"},{"anchor":"S:4f43d4e206","doc":"Execute a plan. Refuses a hosted run when the budget is zero. Runs the maker, then the checker, each as a distinct CLI invocation with its own model and identity. `deps` (chatCompletionImpl/applyPatch","kind":"function","line":489,"name":"runCycle","path_id":"F:ddeb486c49","signature":"export function runCycle(opts, { execute, cfg, runId, env = process.env, queueDir, deps })"},{"anchor":"S:d33c2c4d3e","doc":"Invoke each role in turn and produce the \"executed\" result. A role's transport decides whether invokeRole returns a status number synchronously (anthropic-cli) or a Promise (openai-http, which awaits ","kind":"function","line":534,"name":"runRoles","path_id":"F:ddeb486c49","signature":"function runRoles(plan, roles, env, deps)"},{"anchor":"S:f71a25079c","kind":"function","line":549,"name":"main","path_id":"F:ddeb486c49","signature":"async function main()"},{"anchor":"S:2bd83b1706","kind":"const","line":1,"name":"MESSAGES","path_id":"F:de188c1b79","signature":"export const MESSAGES ="},{"anchor":"S:fe07a3bcbc","kind":"function","line":13,"name":"gitRepo","path_id":"F:de5ebbf586","signature":"function gitRepo()"},{"anchor":"S:8579f519b1","kind":"function","line":25,"name":"scaffold","path_id":"F:de5ebbf586","signature":"function scaffold(dir, extra = [])"},{"anchor":"S:60070857ec","doc":"The curated Modonome icon set. Every glyph is a stroke path on a 24x24 grid and * inherits `currentColor`, so an icon takes the color of whatever text or control it * sits in. Icons are decorative by ","kind":"type","line":9,"name":"IconName","path_id":"F:deab644e60","signature":"export type IconName ="},{"anchor":"S:a0f5484b98","kind":"interface","line":77,"name":"IconProps","path_id":"F:deab644e60","signature":"export interface IconProps extends Omit, \"name\">"},{"anchor":"S:abe6a83201","kind":"function","line":88,"name":"Icon","path_id":"F:deab644e60","signature":"export function Icon({ name, size = 16, title, strokeWidth = 1.8, ...rest }: IconProps)"},{"anchor":"S:f2f7e716af","doc":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says.","kind":"function","line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef","signature":"function makeBoundaryFixture(daImports)"},{"anchor":"S:8a9e6199b3","doc":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory.","kind":"function","line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce","signature":"function scratchModonomeDir()"},{"anchor":"S:211cdf5f9d","kind":"function","line":17,"name":"readItem","path_id":"F:e00aec45ce","signature":"function readItem(dir, id)"},{"anchor":"S:73e4b1bbf9","kind":"const","line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba","signature":"export const SIGNAL_MIN = 0;"},{"anchor":"S:ad1b93bd0c","kind":"const","line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba","signature":"export const SIGNAL_MAX = 5;"},{"anchor":"S:d4349c402c","kind":"const","line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba","signature":"export const NEUTRAL_SIGNAL = 2.5;"},{"anchor":"S:81bb2e8cc4","kind":"function","line":39,"name":"clamp","path_id":"F:e11f907cba","signature":"function clamp(n)"},{"anchor":"S:fb06279d5d","doc":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.","kind":"function","line":48,"name":"normalizeSignals","path_id":"F:e11f907cba","signature":"export function normalizeSignals(signals = {})"},{"anchor":"S:574c990b3f","doc":"Pure scoring function. Higher score means higher priority: more value and safety for less effort, risk, and uncertainty.","kind":"function","line":59,"name":"scoreProposal","path_id":"F:e11f907cba","signature":"export function scoreProposal(signals = {})"},{"anchor":"S:c53d33aa2a","doc":"Sort proposals by descending score. Each entry may be a plain signals object or carry signals under an explicit `signals` key alongside other fields (for example `id` or `proposal` text), which are pr","kind":"function","line":71,"name":"scoreProposals","path_id":"F:e11f907cba","signature":"export function scoreProposals(proposalsWithSignals = [])"},{"anchor":"S:3cceb8dc09","doc":"Heuristic, deterministic signal derivation from a proposal string and a simple context object. This is a convenience default, not a source of truth: callers with better signals should pass them direct","kind":"function","line":96,"name":"deriveSignals","path_id":"F:e11f907cba","signature":"export function deriveSignals(proposalText, context = {})"},{"anchor":"S:ba347c9b77","kind":"function","line":4,"name":"Beside","path_id":"F:e19aab09cb","signature":"export const Beside = () => ("},{"anchor":"S:fdf5ba078f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c","signature":"export const MESSAGES ="},{"anchor":"S:e1813dcc71","doc":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are added by extending `roles`, `models`, an","kind":"function","line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07","signature":"function baseCfg(extra = {})"},{"anchor":"S:170d5cf4ef","kind":"function","line":18,"name":"tmp","path_id":"F:e359adb110","signature":"function tmp()"},{"anchor":"S:85083e2f79","kind":"function","line":22,"name":"run","path_id":"F:e359adb110","signature":"function run(dir)"},{"anchor":"S:8d5d2455bf","kind":"interface","line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72","signature":"export interface ResolvedPanelMessage"},{"anchor":"S:74b454ee62","kind":"function","line":56,"name":"interpolate","path_id":"F:e406ceab72","signature":"function interpolate(template: string, params: Record): string"},{"anchor":"S:72886ee448","doc":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to DEFAULTS, then to the raw id, so a miss","kind":"function","line":66,"name":"formatMessage","path_id":"F:e406ceab72","signature":"export function formatMessage("},{"anchor":"S:870a14c796","doc":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separation-of- * duties governance rules. The la","kind":"function","line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48","signature":"export function ArmingScreen({ state, write }: { state: PanelState; write: WriteActions })"},{"anchor":"S:d7029fdff9","doc":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendor identities are rejected.","kind":"function","line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2","signature":"export function isForbiddenIdentity(name, email)"},{"anchor":"S:5c7ed4ab16","doc":"Parse `git log` output where each commit is one line of * \"authorNameauthorEmailcommitterNamecommitterEmailshortSha\". * Returns the commits whose author or committer is a forbidden","kind":"function","line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2","signature":"export function findForbiddenCommits(logOutput)"},{"anchor":"S:f040dfb6c9","kind":"function","line":15,"name":"run","path_id":"F:e540f7b669","signature":"function run(script, args = [])"},{"anchor":"S:ce5e964e25","kind":"function","line":4,"name":"ArmingMode","path_id":"F:e5e519f441","signature":"export const ArmingMode = () => ("},{"anchor":"S:8c65a8b2a2","kind":"function","line":15,"name":"ActiveWork","path_id":"F:e5e519f441","signature":"export const ActiveWork = () => ("},{"anchor":"S:dd37641bec","kind":"function","line":27,"name":"Spend","path_id":"F:e5e519f441","signature":"export const Spend = () => ("},{"anchor":"S:2d541b3911","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e6677dcd37","signature":"export const MESSAGES ="},{"anchor":"S:17c9a6d377","doc":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped.","kind":"function","line":45,"name":"stripCharClasses","path_id":"F:e7380d1444","signature":"function stripCharClasses(src)"},{"anchor":"S:be897872b9","doc":"True when a group body contains a top-level unbounded quantifier.","kind":"function","line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444","signature":"function bodyHasUnbounded(body)"},{"anchor":"S:ca3e7d6f59","doc":"Detect nested quantifiers: a group (...) that is itself quantified by an unbounded quantifier (+, *, or {n,}) AND whose body contains an unbounded quantifier. This is the catastrophic-backtracking cla","kind":"function","line":72,"name":"redosFindings","path_id":"F:e7380d1444","signature":"export function redosFindings(source)"},{"anchor":"S:c52b041088","doc":"1. Runtime: exported RegExp sources (including RegExps inside an exported array).","kind":"function","line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444","signature":"async function exportedRegexSources(absFile)"},{"anchor":"S:dcc6653dc4","doc":"2/3. Static: new RegExp(\"...\"|`...`) string args (no interpolation) and /.../ literals.","kind":"function","line":114,"name":"staticPatternSources","path_id":"F:e7380d1444","signature":"function staticPatternSources(src)"},{"anchor":"S:979cd75d0e","doc":"Collect every regex-safety problem across the target files. Exported (not run at import time) so the gate can be exercised without triggering process.exit.","kind":"function","line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444","signature":"export async function regexSafetyProblems(rootDir = root)"},{"anchor":"S:42d4f014b5","doc":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (proving it * would catch a bad promotion). Eac","kind":"function","line":41,"name":"corpusProblems","path_id":"F:e8676a18b7","signature":"export function corpusProblems({ strictBranch, fuzzyBranch, strictId, fuzzyId, strictText, fuzzyText })"},{"anchor":"S:59f6d857da","doc":"The real detectors, wired to the injectable checker.","kind":"const","line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7","signature":"export const LIVE_DETECTORS ="},{"anchor":"S:ed0a2f8660","kind":"function","line":28,"name":"git","path_id":"F:e9479e1a3b","signature":"function git(...a)"},{"anchor":"S:b32b89125f","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e948251d2b","signature":"export const MESSAGES ="},{"anchor":"S:98ca1b6552","kind":"const","line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d","signature":"export const MESSAGES ="},{"anchor":"S:135fde5dfb","doc":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] * - \"success\": always returns a normal c","kind":"function","line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb","signature":"export function startMockServer(options = {})"},{"anchor":"S:b65916676a","kind":"function","line":98,"name":"successBody","path_id":"F:eb14a0bdeb","signature":"function successBody(overrides)"},{"anchor":"S:ac31df31c0","kind":"function","line":113,"name":"writeJson","path_id":"F:eb14a0bdeb","signature":"function writeJson(res, status, body)"},{"anchor":"S:153c85af26","kind":"const","line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a","signature":"export const MESSAGES ="},{"anchor":"S:38948fee1c","kind":"class","line":10,"name":"LiveApiError","path_id":"F:ec52ca3820","signature":"export class LiveApiError extends Error {}"},{"anchor":"S:819d9d37ff","kind":"function","line":12,"name":"call","path_id":"F:ec52ca3820","signature":"async function call(path: string, init?: RequestInit): Promise"},{"anchor":"S:cab56da046","kind":"function","line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820","signature":"export function fetchLiveState(mode: PanelMode, dir?: string): Promise"},{"anchor":"S:18fce60dc6","kind":"function","line":32,"name":"saveConfig","path_id":"F:ec52ca3820","signature":"export function saveConfig("},{"anchor":"S:4124b7df92","kind":"function","line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820","signature":"export function releaseLeaseLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:a4b6be1d49","kind":"function","line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820","signature":"export function pruneLearningLive(mode: PanelMode, lesson: string, dir?: string): Promise"},{"anchor":"S:699f2f623f","kind":"function","line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820","signature":"export function saveMessagesLive("},{"anchor":"S:92bb85bdff","kind":"interface","line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820","signature":"export interface ConnectionTestResult"},{"anchor":"S:cb81b7e05c","doc":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway).","kind":"function","line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820","signature":"export function testConnectionLive(baseUrl: string): Promise"},{"anchor":"S:69ef79b6f3","kind":"function","line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820","signature":"export function createWorkItemLive(mode: PanelMode, item: NewWorkItemInput, dir?: string): Promise"},{"anchor":"S:7a68bb8c0c","kind":"function","line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820","signature":"export function updateWorkItemLive(mode: PanelMode, itemId: string, patch: WorkItemPatch, dir?: string): Promise"},{"anchor":"S:f9a749a2b1","kind":"function","line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820","signature":"export function deleteWorkItemLive(mode: PanelMode, itemId: string, dir?: string): Promise"},{"anchor":"S:b1e3e516c3","doc":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close).","kind":"function","line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2","signature":"function makeFakeSpawn(script = {})"},{"anchor":"S:dd1940719c","doc":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name.","kind":"function","line":46,"name":"parseArgs","path_id":"F:edb11415f0","signature":"function parseArgs(argv)"},{"anchor":"S:e6654c6139","doc":"gateOrder(graph) -> [...] the gates in dependency-first topological order. topoSort orders a gate ahead of the gates it points to, so reverse to put each gate's dependencies before the gate itself.","kind":"function","line":59,"name":"gateOrder","path_id":"F:edb11415f0","signature":"export function gateOrder(graph)"},{"anchor":"S:6e6111c7dd","doc":"runPipeline(order, fixtures) -> [...] failures in topological order. Each failure is { gate, reason }. A missing fixture for a gate is itself a failure: the gate cannot be evaluated, so the pipeline m","kind":"function","line":70,"name":"runPipeline","path_id":"F:edb11415f0","signature":"export function runPipeline(order, fixtures)"},{"anchor":"S:66bb927095","kind":"function","line":11,"name":"run","path_id":"F:edf42fb1af","signature":"function run(cmd, opts = {})"},{"anchor":"S:c1e6062cfc","kind":"function","line":109,"name":"baseCfg","path_id":"F:ee02e563c6","signature":"function baseCfg(overrides = {})"},{"anchor":"S:5bad105043","kind":"function","line":3,"name":"Reading","path_id":"F:eecc78e7e8","signature":"export const Reading = () => ;"},{"anchor":"S:fd42584b25","kind":"const","line":1,"name":"MESSAGES","path_id":"F:efa02030ca","signature":"export const MESSAGES ="},{"anchor":"S:524aeb5cd6","kind":"function","line":23,"name":"Detail","path_id":"F:f0fbd8716f","signature":"export const Detail = () => {}} />;"},{"anchor":"S:2e93f745f3","kind":"function","line":17,"name":"ratchet","path_id":"F:f238d164c9","signature":"function ratchet(diffPath)"},{"anchor":"S:7ff08ea7a1","doc":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wording from the Messages tab too. None ar","kind":"const","line":5,"name":"MESSAGES","path_id":"F:f41378fed0","signature":"export const MESSAGES ="},{"anchor":"S:3c3cd672a7","doc":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the order they were detected via DFS (the f","kind":"function","line":11,"name":"isCyclic","path_id":"F:f51cba9beb","signature":"export function isCyclic(adjacency)"},{"anchor":"S:075e86ea7c","doc":"topoSort(adjacency, nodes) -> { order: [...], error?: string } Returns a topological ordering of `nodes` given the directed edges in `adjacency`. Nodes not present in `nodes` but reachable via edges a","kind":"function","line":48,"name":"topoSort","path_id":"F:f51cba9beb","signature":"export function topoSort(adjacency, nodes)"},{"anchor":"S:cb1a5f81e0","doc":"reachableFrom(adjacency, start) -> Set of nodes reachable from `start` by following directed edges (breadth-first). `start` itself is not included unless the graph has a path back to it. Used by the d","kind":"function","line":78,"name":"reachableFrom","path_id":"F:f51cba9beb","signature":"export function reachableFrom(adjacency, start)"},{"anchor":"S:9ec4198171","doc":"Collect every node mentioned either as a key or as a neighbour value.","kind":"function","line":93,"name":"collectNodes","path_id":"F:f51cba9beb","signature":"function collectNodes(adjacency)"},{"anchor":"S:c063b246d1","doc":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * where entry is undefined if `name` is no","kind":"function","line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1","signature":"export function loadAndValidateManifest(rootDir, name)"},{"anchor":"S:45bcd8bd18","doc":"Confirm the pure argv-construction helpers resolve without throwing and * produce a shape that never carries a prompt or a credential-like value. * Pure. Returns a list of problem strings (empty means","kind":"function","line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1","signature":"export function checkArgvSanity(entry)"},{"anchor":"S:753ca853b2","kind":"function","line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1","signature":"function commandOnPath(command)"},{"anchor":"S:59cd81d0e0","doc":"Minimal local OpenAI-compatible chat-completions mock. No real network, no cost, no external dependency. Scripted to echo back a fixed marker so a conforming adapter that forwards the model's reply in","kind":"function","line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1","signature":"function startProbeServer(replyContent)"},{"anchor":"S:781c2d6b40","doc":"Run the live conformance probe for one adapter entry. Returns * { status: \"pass\"|\"fail\"|\"skipped\", detail }. Never throws: every failure * mode (binary absent, timeout, non-zero exit, containment viol","kind":"function","line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1","signature":"export async function runLiveProbe(entry, opts = {})"},{"anchor":"S:c63f60f015","kind":"function","line":210,"name":"main","path_id":"F:f5d313e9f1","signature":"async function main(argv)"},{"anchor":"S:f988f356bd","kind":"function","line":4,"name":"Variants","path_id":"F:f6e100ab45","signature":"export const Variants = () => ("},{"anchor":"S:edacefac29","kind":"function","line":19,"name":"Sizes","path_id":"F:f6e100ab45","signature":"export const Sizes = () => ("},{"anchor":"S:af1e7a50ba","kind":"function","line":5,"name":"makeDb","path_id":"F:f8168b956f","signature":"function makeDb()"},{"anchor":"S:cb8cdfa49f","kind":"interface","line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9","signature":"export interface ConceptEntry"},{"anchor":"S:83deb081d9","kind":"const","line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9","signature":"export const CONCEPTS: ConceptEntry[] = ["},{"anchor":"S:a3bf9f1833","kind":"interface","line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b","signature":"export interface QueueBoardProps"},{"anchor":"S:16975f80af","doc":"The work queue as a board. Items are grouped into the columns of the durable state * machine (queued, claimed, making, checking, merge ready, done, escalated), with * rework folded into making and mer","kind":"function","line":18,"name":"QueueBoard","path_id":"F:f8609bae0b","signature":"export function QueueBoard({ items, onSelect }: QueueBoardProps)"},{"anchor":"S:5835c8b608","doc":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variable, which lives in CI or operator scope,","kind":"function","line":69,"name":"resolveArming","path_id":"F:f90930c3c3","signature":"export function resolveArming(targetDir, env = process.env)"},{"anchor":"S:53b9eda0f8","kind":"function","line":90,"name":"run","path_id":"F:f90930c3c3","signature":"function run(script, args)"},{"anchor":"S:214691c25d","kind":"function","line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3","signature":"function targetDirFrom(rest)"},{"anchor":"S:9249714b12","kind":"function","line":104,"name":"main","path_id":"F:f90930c3c3","signature":"function main(argv)"},{"anchor":"S:b1b5323930","kind":"function","line":77,"name":"runGate","path_id":"F:f921eecad7","signature":"function runGate(dir, args = [])"},{"anchor":"S:0b25fbc8fe","kind":"function","line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7","signature":"function plainDecisionsDir(content)"},{"anchor":"S:1ebb8bc1af","kind":"function","line":122,"name":"git","path_id":"F:f921eecad7","signature":"function git(args, cwd)"},{"anchor":"S:6ee06ecd24","doc":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }.","kind":"function","line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7","signature":"function repoWithNewEntry()"},{"anchor":"S:1b85e41391","doc":"The mock server has to run as its own OS process: the CLI-under-test is driven via spawnSync, which blocks this test's event loop for the duration of the child. An in-process HTTP server can't accept ","kind":"function","line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7","signature":"function startMockReviewServer(reviews)"},{"anchor":"S:45061132f3","kind":"function","line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7","signature":"function runGateWithPRContext(dir, baseSha, { apiBase, reviews, prAuthor = \"some-agent\" })"},{"anchor":"S:9b166b011e","kind":"type","line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f","signature":"export type IdentityChipRole = \"maker\" | \"checker\";"},{"anchor":"S:01b4ff4d73","kind":"type","line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f","signature":"export type IdentityChipSize = \"sm\" | \"md\";"},{"anchor":"S:a06feb4e68","kind":"interface","line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f","signature":"export interface IdentityChipProps"},{"anchor":"S:6797390adc","kind":"function","line":18,"name":"initialsFor","path_id":"F:f942e88a8f","signature":"function initialsFor(name: string): string"},{"anchor":"S:aaca852d2b","doc":"A compact identity marker: an initials avatar plus a name, with an optional model * string in muted mono beneath. When `role` is set the avatar ring is tinted (info for * maker, primary for checker) s","kind":"function","line":31,"name":"IdentityChip","path_id":"F:f942e88a8f","signature":"export function IdentityChip({ name, model, role, size = \"md\" }: IdentityChipProps)"},{"anchor":"S:e173063c31","kind":"function","line":4,"name":"Queued","path_id":"F:f9c98a8642","signature":"export const Queued = () => ("},{"anchor":"S:c7ebadadb9","kind":"function","line":19,"name":"Checking","path_id":"F:f9c98a8642","signature":"export const Checking = () => ("},{"anchor":"S:dff1725e3b","kind":"function","line":37,"name":"Escalated","path_id":"F:f9c98a8642","signature":"export const Escalated = () => ("},{"anchor":"S:13a8db3ab6","kind":"function","line":11,"name":"gitDiff","path_id":"F:fa49930755","signature":"function gitDiff(...args)"},{"anchor":"S:c176253e9c","kind":"function","line":12,"name":"tmp","path_id":"F:fadcf390da","signature":"function tmp()"},{"anchor":"S:8bff005013","kind":"function","line":16,"name":"runReport","path_id":"F:fadcf390da","signature":"function runReport(targetDir)"},{"anchor":"S:5919844321","doc":"Schema-conformant event line using \"event\" field (not \"type\").","kind":"function","line":24,"name":"makeEvent","path_id":"F:fadcf390da","signature":"function makeEvent(event, extra = {})"},{"anchor":"S:54a007aa57","doc":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no AST dependency) matches this repo's hous","kind":"function","line":50,"name":"relativeImportsOf","path_id":"F:fc21812307","signature":"function relativeImportsOf(absFile)"},{"anchor":"S:f99cb9f35c","doc":"Build a transitive {repoRelativeFile: [importedFiles]} adjacency map by walking relative imports out from the entry files, then assert FORBIDDEN_IMPORT is unreachable from every entry. Reads files fro","kind":"function","line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307","signature":"export function determinismBoundaryErrors(root = REPO_ROOT)"},{"anchor":"S:9d42aeefd9","doc":"gateGraphErrors(graph) -> { errors: [...], order: [...] } `errors` lists every defect (dangling edge or cycle); when it is empty, `order` holds a topological ordering with dependencies before dependen","kind":"function","line":106,"name":"gateGraphErrors","path_id":"F:fc21812307","signature":"export function gateGraphErrors(graph)"},{"anchor":"S:aa00911a72","kind":"function","line":25,"name":"readEvents","path_id":"F:fc5d887ff6","signature":"function readEvents(path)"},{"anchor":"S:99ae98a428","kind":"function","line":71,"name":"walkMd","path_id":"F:fd08562f92","signature":"function walkMd(dir, out = [])"},{"anchor":"S:575af01d8c","kind":"function","line":110,"name":"checkTarget","path_id":"F:fd08562f92","signature":"function checkTarget(fileDir, rawTarget, srcFile)"},{"anchor":"S:bc1fd2c5b3","doc":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research.","kind":"function","line":149,"name":"adrNumbers","path_id":"F:fd08562f92","signature":"function adrNumbers(dir)"},{"anchor":"S:24c6a3dc6c","doc":"Front-matter parsing for canonical uniqueness and advisory presence.","kind":"function","line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92","signature":"function parseFrontMatter(text)"},{"anchor":"S:6647a4e550","kind":"function","line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92","signature":"function extractCitedPaths(text)"},{"anchor":"S:38b734e681","doc":"Commits touching any of `paths` since `sinceDate` (a YYYY-MM-DD string already validated by the caller). Returns 0 (fail open, warn-free) if this is not a git checkout, e.g. an npm-installed copy of t","kind":"function","line":278,"name":"commitsSince","path_id":"F:fd08562f92","signature":"function commitsSince(paths, sinceDate)"},{"anchor":"S:9bcfb77bfa","doc":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ removed so it compares directly to a handle ","kind":"function","line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa","signature":"export function parseCodeowners(text)"},{"anchor":"S:7a464a2d86","doc":"GitHub CODEOWNERS is last-match-wins: the owners of the LAST rule whose pattern matches the path. Supports the common subset modonome's own CODEOWNERS uses (a \"*\" catchall and rooted dir/file prefixes","kind":"function","line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa","signature":"export function ownersForPath(rules, path)"},{"anchor":"S:857ab7696f","kind":"function","line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa","signature":"function matchesPattern(pattern, path)"},{"anchor":"S:a50812babf","doc":"Extract a GitHub handle from a commit email. Only the two GitHub noreply formats carry a handle deterministically; any other address returns null (fail closed), so an unmapped identity is treated as n","kind":"function","line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa","signature":"export function handleFromEmail(email)"},{"anchor":"S:b29e93fbc3","kind":"function","line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa","signature":"function localGitEmail(repoRoot, exec)"},{"anchor":"S:f99d630708","kind":"function","line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa","signature":"function pickCodeowners(repoRoot, exists)"},{"anchor":"S:c36223901c","doc":"Decide whether the local git identity is a code owner of the config at * configRelPath within repoRoot. Fail-closed everywhere it cannot prove ownership: * no CODEOWNERS file, no owner declared for th","kind":"function","line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa","signature":"export function selfGovernanceOwnership("},{"anchor":"S:22e3bba95f","doc":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read the map instead of scanning the whole tre","kind":"function","line":26,"name":"snapshotContext","path_id":"F:fd660a117b","signature":"export function snapshotContext(root = process.cwd())"},{"anchor":"S:2b5847c683","doc":"Substitute every ${VAR} from env. Throw if a referenced variable is unset, so a missing identity or branch fails loudly instead of rendering an empty value into a model prompt.","kind":"function","line":61,"name":"renderPrompt","path_id":"F:fd660a117b","signature":"export function renderPrompt(role, env = process.env)"},{"anchor":"S:cf03857559","doc":"Run validate-config.mjs against a given config path.","kind":"function","line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602","signature":"function runValidateConfig(configPath, opts = {})"},{"anchor":"S:5daa909048","doc":"Run guard-ratchet.mjs with a --diff fixture.","kind":"function","line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602","signature":"function runGuardRatchet(diffPath, opts = {})"},{"anchor":"S:cdac115f81","doc":"Run check-portability.mjs against a fixture directory.","kind":"function","line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602","signature":"function runPortabilityCheck(fixturePath, opts = {})"},{"anchor":"S:7d8d2691e2","kind":"function","line":4,"name":"Tiers","path_id":"F:fe5ec971f8","signature":"export const Tiers = () => ("},{"anchor":"S:23fbaa24ea","kind":"function","line":13,"name":"git","path_id":"F:ff2c4a08a4","signature":"export function git(args, opts = {})"},{"anchor":"S:a529342ccb","kind":"function","line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4","signature":"export function currentBranch()"},{"anchor":"S:79b048583f","doc":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo).","kind":"function","line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4","signature":"export function defaultRange()"},{"anchor":"S:7c3651a5ba","doc":"Commits in `range` as structured records: { an, ae, cn, ce, sha, body }. Returns * the raw tab-delimited identity table too (the shape commit-identity.mjs parses). * Bodies are fetched one commit at a","kind":"function","line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4","signature":"export function commitsInRange(range = defaultRange())"},{"anchor":"S:9dee57c7c2","kind":"class","line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f","signature":"export class PaymentProcessor"},{"anchor":"S:e7e0d4979a","doc":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding line comments, and import edges (single a","kind":"function","line":5,"name":"clean","path_id":"F:ffe5c1269b","signature":"function clean(text)"},{"anchor":"S:a9f138bd93","kind":"function","line":10,"name":"signature","path_id":"F:ffe5c1269b","signature":"function signature(line)"},{"anchor":"S:f9d6a590e4","kind":"function","line":14,"name":"docAbove","path_id":"F:ffe5c1269b","signature":"function docAbove(lines, index)"},{"anchor":"S:28d1266e44","kind":"const","line":24,"name":"adapter","path_id":"F:ffe5c1269b","signature":"export const adapter ="}],"attention":[{"centrality":65,"pagerank":0.037644,"path_id":"F:05bffc70e9"},{"centrality":60,"pagerank":0.011333,"path_id":"F:03f476958e"},{"centrality":32,"pagerank":0.025389,"path_id":"F:7c8d518693"},{"centrality":23,"pagerank":0.016459,"path_id":"F:deab644e60"},{"centrality":16,"pagerank":0.019887,"path_id":"F:34cb2b6c48"},{"centrality":48,"pagerank":0.000668,"path_id":"F:add7add561"},{"centrality":21,"pagerank":0.016278,"path_id":"F:1575110130"},{"centrality":25,"pagerank":0.004895,"path_id":"F:ddeb486c49"},{"centrality":16,"pagerank":0.004746,"path_id":"F:932d33be00"},{"centrality":13,"pagerank":0.006456,"path_id":"F:0a85f3b8e5"},{"centrality":12,"pagerank":0.005601,"path_id":"F:d5b496b125"},{"centrality":12,"pagerank":0.003993,"path_id":"F:2fc610bd94"},{"centrality":11,"pagerank":0.00439,"path_id":"F:4ebb5aa8a0"},{"centrality":11,"pagerank":0.003407,"path_id":"F:304ce7b89d"},{"centrality":10,"pagerank":0.003387,"path_id":"F:245efb551c"},{"centrality":13,"pagerank":0.001117,"path_id":"F:dbb9c92ca1"},{"centrality":9,"pagerank":0.00322,"path_id":"F:8b122c449e"},{"centrality":7,"pagerank":0.003666,"path_id":"F:4a7eaceb5c"},{"centrality":9,"pagerank":0.002483,"path_id":"F:f07f8ebca9"},{"centrality":7,"pagerank":0.00337,"path_id":"F:d480e40c97"},{"centrality":5,"pagerank":0.004326,"path_id":"F:68c4da7fe8"},{"centrality":6,"pagerank":0.003736,"path_id":"F:a8cfe45d27"},{"centrality":8,"pagerank":0.002353,"path_id":"F:65193a9799"},{"centrality":10,"pagerank":0.000951,"path_id":"F:113387361d"},{"centrality":7,"pagerank":0.002622,"path_id":"F:fd660a117b"},{"centrality":8,"pagerank":0.00195,"path_id":"F:b5ae6ee133"},{"centrality":8,"pagerank":0.001698,"path_id":"F:22566cb46e"},{"centrality":6,"pagerank":0.002334,"path_id":"F:c64c042051"},{"centrality":3,"pagerank":0.004052,"path_id":"F:8b5a1f94c4"},{"centrality":8,"pagerank":0.001117,"path_id":"F:2554ddd30c"},{"centrality":6,"pagerank":0.002228,"path_id":"F:33ffae019c"},{"centrality":5,"pagerank":0.002744,"path_id":"F:f51cba9beb"},{"centrality":4,"pagerank":0.003198,"path_id":"F:6e0bd62fa3"},{"centrality":3,"pagerank":0.003625,"path_id":"F:8a9aff1529"},{"centrality":8,"pagerank":0.000668,"path_id":"F:a0d489df6d"},{"centrality":7,"pagerank":0.001245,"path_id":"F:08064e0c53"},{"centrality":6,"pagerank":0.001691,"path_id":"F:3c479cac6e"},{"centrality":6,"pagerank":0.001601,"path_id":"F:e406ceab72"},{"centrality":5,"pagerank":0.00195,"path_id":"F:40eb542a82"},{"centrality":5,"pagerank":0.001949,"path_id":"F:86838d35ac"},{"centrality":5,"pagerank":0.001922,"path_id":"F:8d2cb93236"},{"centrality":6,"pagerank":0.001245,"path_id":"F:956332d4b5"},{"centrality":3,"pagerank":0.002982,"path_id":"F:e4ff19bbe2"},{"centrality":5,"pagerank":0.001497,"path_id":"F:2d6ef08990"},{"centrality":4,"pagerank":0.002012,"path_id":"F:cb3c5f7715"},{"centrality":6,"pagerank":0.000757,"path_id":"F:4ebf08705b"},{"centrality":6,"pagerank":0.000757,"path_id":"F:95d4304133"},{"centrality":6,"pagerank":0.000668,"path_id":"F:8bb1b57470"},{"centrality":6,"pagerank":0.000668,"path_id":"F:780c791407"},{"centrality":5,"pagerank":0.001245,"path_id":"F:14edab923f"}],"dictionary":{"paths":{"F:00a0cb4ee4":"docs/adr/ADR-009-mcp-tool-auth-scope.md","F:0103cf3d56":"tests/rollback.test.mjs","F:015261eab0":"scripts/lib/snapshot-graph.mjs","F:01a7edaeba":"docs/adr/ADR-037-policy-pack-adoption.md","F:02359d48d5":"prompts/modules/gates.md","F:02a5f8fc55":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","F:037178c793":"templates/.modonome/DECISIONS.md","F:0391f3b249":"tests/check-md-governance.test.mjs","F:03f476958e":"scripts/lib/message-catalog/index.mjs","F:044b762a79":"examples/demo-app/tests/OrderService.test.js","F:0526aab88e":"docs/adr/ADR-007-claim-atomicity.md","F:059f9a812c":"tests/check-licenses.test.mjs","F:05a0f0d5a5":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","F:05bffc70e9":"scripts/lib/messages.mjs","F:06572a96a5":"CHANGELOG.md","F:06b982f5a2":"tests/envisioner-role.test.mjs","F:08064e0c53":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","F:08441e59e8":"tests/packet.test.mjs","F:08577063d4":".design-sync/previews/Select.tsx","F:08b7435c86":"apps/control-panel/server/api.mjs","F:08baf2c1e2":"docs/ops/preflight.md","F:093689bb8e":"tests/marketresearcher-role.test.mjs","F:094efaca92":"docs/adr/ADR-026-learning-promotion-audit-trail.md","F:09ba331878":"scripts/detect-near-miss.mjs","F:09ea014068":"scripts/lib/message-catalog/advisory/verify-packet.mjs","F:0a1a9270a7":"design-system/src/components/DecisionCard/index.ts","F:0a640a72f9":"docs/research/README.md","F:0a6a758e7d":".design-sync/previews/ConfirmDialog.tsx","F:0a6b452f14":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","F:0a85f3b8e5":"apps/control-panel/src/state/types.ts","F:0b5ca119d2":"docs/README.md","F:0c07096c4e":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","F:0c1c5ad5d9":"scripts/verify-packet.mjs","F:0c731e3460":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","F:0cacf66a3b":"scripts/lib/ed25519.mjs","F:0cc3e727ed":"design-system/src/components/Input/index.ts","F:0da05a2a05":"apps/control-panel/src/state/arming.ts","F:0e78eb22ec":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","F:0e9e38f100":"design-system/src/components/Toast/index.ts","F:0f284c134c":".modonome/LESSONS.md","F:10e76cfcd3":".design-sync/previews/StatusPill.tsx","F:1127892e72":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","F:113387361d":"apps/control-panel/src/App.tsx","F:114d351bdc":"tests/config.test.mjs","F:116adfb9f8":"scripts/risk-surface-guard.mjs","F:1174d7e2ba":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","F:119e3c0fce":"scripts/lib/snapshot-cache.mjs","F:128b647d9a":"scripts/fleet-ledger.mjs","F:12c7a4e461":"scripts/lib/packet-id.mjs","F:1339474d8c":"docs/ops/merge-governance-setup.md","F:137056535b":"tests/policy-attestation.test.mjs","F:13d31b33ea":".design-sync/previews/ProtectedPathRow.tsx","F:146a198c06":"design-system/src/components/Carousel/index.ts","F:147873af8b":"QUICKSTART.md","F:14812742da":"docs/adr/ADR-003-agentproof-portability.md","F:14edab923f":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","F:1575110130":"scripts/lib/yaml-lite.mjs","F:168fe4d371":"tests/detect-near-miss.test.mjs","F:1714946cc1":"scripts/check-control-panel-coverage.mjs","F:1716017e02":"design-system/src/components/MdnRoot/index.ts","F:179564da6f":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","F:182dcaa949":"design-system/src/components/LeaseTable/index.ts","F:18f569225a":"tests/agent-model-fallback.test.mjs","F:191a17b151":"docs/enterprise.md","F:195e9217ca":"tests/action-queue.test.mjs","F:1a137480ae":"design-system/src/components/ConceptTile/ConceptTile.tsx","F:1a19f02364":"scripts/lib/control-panel-audit.mjs","F:1a368a7935":"docs/adr/ADR-038-checker-as-review-service.md","F:1a58c06540":"docs/adr/ADR-014-knowledge-network-transport.md","F:1aa7cf650d":".design-sync/previews/Table.tsx","F:1bc04b108f":"tests/check-regex-safety.test.mjs","F:1bc6d1449f":"tests/agentproof-attestation.test.mjs","F:1bcaaff9eb":"tests/ws-b-harness.test.mjs","F:1c1d4f7335":"design-system/src/components/Select/index.ts","F:1c3b1b469e":"prompts/modonome.core.md","F:1cf31c4792":"scripts/lib/snapshot-anchors.mjs","F:1d03291691":"design-system/src/components/LearningCard/LearningCard.tsx","F:1db369d970":"design-system/src/components/Tabs/Tabs.tsx","F:1e15c1666f":"tests/github-api.test.mjs","F:1e5ef6ba70":"scripts/remediate.mjs","F:1ecd18c4b9":"examples/demo-app/src/OrderService.js","F:1f40b6eb6e":".design-sync/previews/Slider.tsx","F:1ff2bf39a4":"scripts/lib/message-catalog/advisory/github-api.mjs","F:2127a8caca":"scripts/agent/review-proposals.mjs","F:2148814594":"terraform/README.md","F:214cc0a5f4":"design-system/src/components/Toggle/Toggle.tsx","F:21752cf61a":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","F:2207a6ebce":".design-sync/previews/ActivationLadder.tsx","F:2215d0e1fc":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","F:22566cb46e":"apps/control-panel/server/modonomeWriter.mjs","F:22fab804b1":"tests/checkerproof.test.mjs","F:23917c6197":"scripts/test-prompt-behavior.mjs","F:23dbdd7e76":"scripts/lib/message-catalog/gate/check-portability.mjs","F:240ace7a8f":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","F:244a368695":"BREAK-THE-RATCHET.md","F:245efb551c":"scripts/lib/canonical-json.mjs","F:2470e60179":".design-sync/previews/AppShell.tsx","F:24f28ae0fa":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","F:250c8a0d4a":".design-sync/previews/LearningCard.tsx","F:2554ddd30c":"scripts/lib/lang-adapters/index.mjs","F:25e649633c":"apps/control-panel/src/state/configDiff.ts","F:25fdf1f8f6":"docs/adr/ADR-040-end-to-end-operating-model.md","F:268769c4a6":"design-system/src/components/AppShell/AppShell.tsx","F:26c8e3a19a":"templates/.modonome/LESSONS.md","F:27086b6de3":"docs/adr/ADR-042-agentproof-verified.md","F:2715f09f24":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","F:28b7af3c53":".design-sync/previews/ArmingStateBadge.tsx","F:28d4e1ad3d":"docs/adr/ADR-019-knowledge-network-execution-scope.md","F:28f278b1d9":"checkerproof/scenarios/cp-04-scope-creep.mjs","F:2a74ae3f05":"tests/snapshot-golden.test.mjs","F:2af556d595":"scripts/check-message-catalog-integrity.mjs","F:2b49c74e74":"tests/ws-e-ratchet-languages.test.mjs","F:2b9c43b0ca":"scripts/lib/merkle.mjs","F:2bfaa5759d":"docs/launch/x-thread.md","F:2c2cc77861":"examples/python-service/tests/test_orders.py","F:2d4c555ba1":"scripts/check-portability.mjs","F:2d6c10ab08":"scripts/check-control-panel-coherence.mjs","F:2d6ef08990":"scripts/agent/review-diff.mjs","F:2d93cea2d4":"scripts/lib/cli-args.mjs","F:2e327963ed":"scripts/build-compliance-evidence.mjs","F:2e564caf6e":"scripts/check-risk-surface-allowlist.mjs","F:2ec4f6540b":"agentproof/SPEC.md","F:2f3e98ab2c":"scripts/lib/risk-surface-rules.mjs","F:2f41a784d9":"CODEX.md","F:2f6c42c5ee":"design-system/src/components/States/States.tsx","F:2fc610bd94":"design-system/src/components/StatusPill/StatusPill.tsx","F:304ce7b89d":"scripts/agent/resolve-role.mjs","F:304fa8ef33":"apps/control-panel/src/screens/GatesScreen.tsx","F:313bcfac46":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","F:31658eff0b":".design-sync/previews/LeaseTable.tsx","F:31d378932b":"scripts/check-learning-traceability.mjs","F:3211d524ad":"apps/control-panel/README.md","F:3213d03b72":"scripts/lib/lang-adapters/python.mjs","F:3319e5c923":".design-sync/previews/SafetyStrip.tsx","F:33c4d744f3":"scripts/lib/message-catalog/agent-run/remediate.mjs","F:33ffae019c":"scripts/lib/risk-surface-allowlist.mjs","F:34ca4e55d1":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","F:34cb2b6c48":"scripts/lib/jsonschema.mjs","F:35002ba3fe":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","F:35c6d59157":"design-system/src/components/RoleBadge/RoleBadge.tsx","F:35d4a12b63":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","F:36419aa427":"scripts/lib/lang-adapters/js-ts.mjs","F:36693b0d8b":"prompts/modules/control-panel.md","F:373a946d5c":"examples/demo-app/tests/PaymentProcessor.test.js","F:373fee03a1":"design-system/src/components/WorkItemDrawer/index.ts","F:37f4a5c04e":"scripts/agent/route-action.mjs","F:3835919e8e":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","F:398655650f":"tests/ws-h-config.test.mjs","F:3a2345f153":"tests/run-gate-capped-unit.test.mjs","F:3a70dc66ea":"docs/adr/ADR-032-oss-adapter-boundary.md","F:3b382f95c0":"scripts/report.mjs","F:3b4065b679":".design-sync/previews/Checkbox.tsx","F:3b96b6dfed":"scripts/tripwire-check.mjs","F:3c479cac6e":"apps/control-panel/src/lib/confirm.tsx","F:3c53926ecd":"examples/demo-app/tests/CartService.test.js","F:3ce0fd77eb":".design-sync/previews/DecisionCard.tsx","F:3d505706cd":".design-sync/previews/Card.tsx","F:3d95ec2ed5":"tests/secret-patterns-unit.test.mjs","F:3dcdfa18c0":"docs/autonomy-plan.md","F:3dd926c4de":"design-system/src/components/QueueBoard/index.ts","F:3de9042953":"tests/packet-signing.test.mjs","F:3ea503e7c0":"tests/compliance-evidence.test.mjs","F:3f1216fc11":"scripts/lib/message-catalog/gate/check-licenses.mjs","F:3fe6b95e07":"design-system/src/components/HoverCard/index.ts","F:40887a152e":"docs/adr/ADR-041-gauntlet-replay.md","F:4096620673":"scripts/check-self-application.mjs","F:40d8f235fd":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","F:40e4f39b59":"tests/cli-dispatch.test.mjs","F:40eb542a82":"design-system/src/components/Card/Card.tsx","F:41623f0bcd":"prompts/modules/adoption.md","F:41f5ffe77a":".design-sync/previews/Drawer.tsx","F:4377343f4f":"tests/runner-env.test.mjs","F:4387a44284":".design-sync/previews/Modal.tsx","F:44a5987438":"tests/remediate.test.mjs","F:4637e1fecb":"tests/snapshot-incremental.test.mjs","F:46c40327ad":"design-system/src/components/Card/index.ts","F:4749cc43a0":"scripts/check-architecture-drift.mjs","F:48355ccf4d":"tests/self-application.test.mjs","F:492786871a":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","F:4a6129eacb":"apps/control-panel/src/app.css","F:4a7eaceb5c":"scripts/lib/detect-attribution.mjs","F:4aaece5252":"docs/adr/ADR-020-prompt-complexity-budget.md","F:4b7eb18a4b":"design-system/src/components/TierBadge/index.ts","F:4b91a9f65b":"scripts/lib/snapshot-redact.mjs","F:4c741a5b06":"tests/branch-name.test.mjs","F:4d08d5472f":"scripts/lib/message-catalog/advisory/learnings.mjs","F:4d5cfa3611":"docs/specs/ratchet-spec.md","F:4dabd020df":"tests/helpers/mock-github-server.mjs","F:4db1101024":"scripts/lib/policy-manifest.mjs","F:4ebb5aa8a0":"scripts/lib/learnings.mjs","F:4ebf08705b":"apps/control-panel/src/screens/SettingsScreen.tsx","F:4fad18c892":"tests/risk-surface-guard.test.mjs","F:4fd28fc2ff":"scripts/disarm.mjs","F:500dd805f6":"design-system/src/components/RoleBadge/index.ts","F:514a79560d":"docs/adr/ADR-028-portability.md","F:515a65a35b":"templates/.modonome/NETWORK.md","F:522efae76d":"scripts/gauntlet.mjs","F:52338ea290":"tests/openai-client.test.mjs","F:5253743405":"design-system/README.md","F:52caf3b287":"examples/demo-app/tests/CheckoutService.test.js","F:52ef6ad4a1":"tests/near-miss.test.mjs","F:5376e86470":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","F:545c0ccfeb":".design-sync/previews/ModeSwitcher.tsx","F:54784dcc0a":"tests/check-risk-surface-allowlist.test.mjs","F:54a3c626d9":"tests/learnings.test.mjs","F:54c6928de9":"examples/demo-app/src/CheckoutService.js","F:54df44aadd":"apps/control-panel/server/learningsFormat.mjs","F:55673172df":"docs/specs/governed-autonomy-spec.md","F:55b3a4e2c0":"tests/migrate-lessons-rename.test.mjs","F:5621bc51b3":"agentproof/README.md","F:564b053598":"tests/check-architecture-drift.test.mjs","F:56a132aaca":"docs/adr/ADR-039-agent-capability-profiles.md","F:571aa2f3ae":"tests/fleet-ledger.test.mjs","F:57ca5f1716":"design-system/src/components/SafetyStrip/SafetyStrip.tsx","F:580d11b514":"tests/run-cycle-openai.test.mjs","F:583edef643":"design-system/src/components/DecisionCard/DecisionCard.tsx","F:594f505f11":"scripts/lib/lang-adapters/generic.mjs","F:5956278014":"tests/connect.test.mjs","F:596687118c":"design-system/src/components/Modal/index.ts","F:597cc7ae15":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","F:5994385869":"tests/maker-checker.test.mjs","F:599f5b2f28":"examples/demo-app/src/CartService.js","F:59b2499e4e":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","F:5a04bfa7a4":"docs/adr/ADR-030-embedding-safety.md","F:5a3543606b":"scripts/lib/attribution-fp-corpus.mjs","F:5b113a0914":"scripts/agent/action-queue.mjs","F:5b5b4ddcae":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","F:5d02ea0b02":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","F:5d2ce8ee7e":"checkerproof/README.md","F:5d52d97b8a":"scripts/lib/message-catalog/agent-run/queue.mjs","F:5daab9894d":"apps/control-panel/server/remediationView.mjs","F:5e207f73c7":".design-sync/previews/Input.tsx","F:5e450ff82c":"scripts/scaffold.mjs","F:5eff4122c0":"tests/config-key-parity.test.mjs","F:5f7910375b":"scripts/arm.mjs","F:5f88bf32ca":"design-system/src/components/LearningCard/index.ts","F:5fa0ad758b":"docs/compliance/eu-ai-act-classification.md","F:60548316f5":"tests/arming.test.mjs","F:61296e720c":"scripts/check-repo-hygiene.mjs","F:61486b1ec2":"docs/ops/add-control.md","F:61c2a29876":"tests/tripwire.test.mjs","F:627afb27fd":"docs/adr/ADR-031-markdown-governance.md","F:63351e350b":"design-system/src/components/Modal/Modal.tsx","F:63c1c23ccb":"design-system/src/components/ConfirmDialog/ConfirmDialog.tsx","F:64c5acf802":"docs/adr/ADR-002-shadow-mode.md","F:65193a9799":"scripts/validate-knowledge-packet.mjs","F:66264a042c":"design-system/src/components/HoverCard/HoverCard.tsx","F:6627655633":"apps/control-panel/src/screens/OverviewScreen.tsx","F:667ef091ca":"design-system/src/components/ActivationLadder/index.ts","F:669d2a51f4":"site/README.md","F:683343bdf9":"ROADMAP.md","F:686a544e0e":"tests/review-diff.test.mjs","F:68c4da7fe8":"scripts/lib/secret-patterns.mjs","F:68d874f280":"docs/adr/ADR-047-risk-surface-guard.md","F:698ea4b2e9":"tests/triggers.test.mjs","F:69ddfa4ff4":"agentproof/CONTRIBUTING.md","F:6a3a98df8c":"docs/audits/claims-audit-2026-07-01.md","F:6a5934a79d":"templates/.github/copilot-instructions.md","F:6a86908a3e":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","F:6bee8a97f3":"docs/launch/article-seeds.md","F:6bef3f93ab":".design-sync/previews/Icon.tsx","F:6bfa4389b5":"design-system/src/components/StatusPill/index.ts","F:6c0919b64e":".design-sync/previews/Tabs.tsx","F:6da7bd8294":"tests/gauntlet.test.mjs","F:6dd88cde1c":"docs/adr/ADR-004-arming-isolation-enforcement.md","F:6e0bd62fa3":"scripts/lib/branch-name.mjs","F:6e4723a45d":"docs/adapters.md","F:6e4b629d3c":"docs/adr/ADR-001-self-governance-pipeline.md","F:6ebdb617a8":"CLAUDE.md","F:6f247eb514":"scripts/dry-run-sweep.mjs","F:6f5b5f0bc4":"docs/adr/ADR-012-harness-prompt-integrity.md","F:6fdd929a92":"fixtures/portability/prompt-injection-host/docs/guide.md","F:7008a20b1c":".design-sync/previews/IdentityChip.tsx","F:704e42d42b":"tests/route-action.test.mjs","F:7054844360":"design-system/src/components/Checkbox/Checkbox.tsx","F:705a3ca9b3":"RELEASE-EVIDENCE.md","F:70d12a92c6":"design-system/src/components/ArmingStateBadge/index.ts","F:71f0bfb455":"design-system/src/components/Drawer/Drawer.tsx","F:7232ada2da":"scripts/preflight-embedding.mjs","F:72b7ab4c3e":"docs/adr/ADR-017-knowledge-network-packet-signing.md","F:7479c14986":"ADOPTION-GUIDE.md","F:750436d8c1":"docs/adr/ADR-036-policy-attestation.md","F:757a70680a":"apps/control-panel/src/screens/LearningsScreen.tsx","F:758ab56395":"tests/check-attribution-fp-corpus.test.mjs","F:75c1125713":"templates/.modonome/control-panel.md","F:763efdd51c":"design-system/src/components/Input/Input.tsx","F:76da13a8f7":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","F:76f802c3ce":".modonome/control-panel.md","F:778c33cdc0":"tests/dry-run.test.mjs","F:780c791407":"scripts/build-policy-attestation.mjs","F:7832db450f":".design-sync/previews/Toast.tsx","F:7944059823":"scripts/lib/token-estimate.mjs","F:79467a3153":".design-sync/previews/ErrorState.tsx","F:7983a5dd39":"docs/compliance/openssf-badge-evidence.md","F:79cec3a152":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","F:7a1f7d680b":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","F:7a43bf4ce5":".design-sync/previews/EmptyState.tsx","F:7b3e38c9a6":"scripts/sign-packet.mjs","F:7c8d518693":"design-system/src/lib/cx.ts","F:7ccad64380":"examples/python-service/app/orders.py","F:7d236c9aa6":"apps/control-panel/src/state/fixtures/host.ts","F:7fcbf6b32d":"fixtures/portability/schema-collision/README.md","F:815abebda1":"design-system/src/components/ConfirmDialog/index.ts","F:819f72edf6":"design-system/src/components/Select/Select.tsx","F:81c495717c":"design-system/src/components/Slider/Slider.tsx","F:828cf970bc":"tests/resolve-role.test.mjs","F:83d4d07afc":"docs/control-panel-modes.md","F:83ecac7524":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","F:849bc0a60f":"design-system/src/components/Table/index.ts","F:84a5c32a4c":".design-sync/previews/NumberField.tsx","F:851f776227":"scripts/agent/parse-checker-telemetry.mjs","F:85e076f56b":"design-system/src/components/Icon/index.ts","F:868321590c":"scripts/check-work-items.mjs","F:86838d35ac":"design-system/src/lib/format.ts","F:86fd2cf669":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","F:872221b1da":"scripts/agent/apply-patch.mjs","F:87c30bdb4c":"scripts/check-drift.mjs","F:88244532e4":"docs/vscode-workflow.md","F:885187507a":"apps/control-panel/src/main.tsx","F:88c38fbc0f":".modonome/DECISIONS.md","F:8930a72be2":".modonome/NETWORK.md","F:8972d37045":".design-sync/previews/IconButton.tsx","F:89aee72994":"apps/control-panel/src/state/fixtures/product.ts","F:89f25e2f3d":"design-system/src/components/Tabs/index.ts","F:8a10462927":"scripts/guard-ratchet.mjs","F:8a3433b070":"tests/report-impact.test.mjs","F:8a3dd6ccff":"apps/control-panel/server/modonomeReader.mjs","F:8a7591db62":"docs/audits/claims-audit-2026-06-25.md","F:8a9aff1529":"design-system/src/components/Tooltip/Tooltip.tsx","F:8aa9ba4dcb":"tests/transition-work-item-unit.test.mjs","F:8abf9e432a":"scripts/sync-site-data.mjs","F:8b122c449e":"design-system/src/components/Button/Button.tsx","F:8b2f3dbcba":"tests/control-panel-writer-nested.test.mjs","F:8b5a1f94c4":"scripts/agent/providers.mjs","F:8b7ee49cdd":"scripts/check-trust-boundary.mjs","F:8b8d3c46b3":"scripts/check-state-machine-acyclic.mjs","F:8bb1b57470":"examples/demo-app/src/index.js","F:8c2e08ed12":"docs/adr/ADR-008-trusted-author-allowlist.md","F:8c6234a8cb":"design-system/src/components/GatePanel/GatePanel.tsx","F:8d2cb93236":"scripts/agent/openai-client.mjs","F:8f62475ebe":"prompts/modules/roles.md","F:8f6366fd8e":"ARCHITECTURE.md","F:8fe56e5618":"tests/chaos.test.mjs","F:8ffb11f281":"scripts/lib/remediate.mjs","F:9040e0c030":"design-system/src/components/States/index.ts","F:90cbb2cf6a":"challenge/judge.mjs","F:90e1fd2fd9":"scripts/hygiene.mjs","F:90f0999521":"fixtures/portability/prompt-injection-host/src/main.js","F:90fc20ddd8":"design-system/src/components/MdnRoot/MdnRoot.tsx","F:91a7efa0ba":"docs/workflow-fixes.md","F:91e24dcac0":"scripts/lib/message-catalog/advisory/build-prompt.mjs","F:9204ee9f08":"design-system/src/components/MetricTile/index.ts","F:92d6903b5f":"scripts/check-decisions-authority.mjs","F:92dde817ee":"tests/ratchet-attestation.test.mjs","F:930bc5297d":"docs/launch/show-hn.md","F:932d33be00":"scripts/validate-config.mjs","F:933d506be9":"tests/policy-manifest.test.mjs","F:9344d335a6":"scripts/build-release-evidence.mjs","F:93f0f5d3de":"examples/node-typescript/src/checkout.ts","F:94050e680d":"checkerproof/runner.mjs","F:940d5f4399":"tests/arm-disarm.test.mjs","F:9427d264e6":"scripts/check-edit-set-compliance.mjs","F:9444435647":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","F:94b941cbd6":".design-sync/NOTES.md","F:94c9bc6065":"tests/schedule-trigger-schema.test.mjs","F:956332d4b5":"design-system/src/components/LeaseTable/LeaseTable.tsx","F:95d4304133":"apps/control-panel/src/state/adapter.ts","F:95e51a604d":"docs/compliance/compliance.md","F:9616513cb6":"scripts/lib/message-catalog/agent-run/disarm.mjs","F:964f89b6cc":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","F:9666ca7f0d":"examples/demo-app/WALKTHROUGH.md","F:973aaa9d86":".design-sync/previews/RoleBadge.tsx","F:973aca5f3e":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","F:97fc86d7a3":"docs/adr/ADR-045-scope-focus.md","F:9803feef4a":"scripts/lib/message-catalog/agent-run/openai-client.mjs","F:98529ba7ea":"scripts/lib/capability-flags.mjs","F:99251bc045":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","F:9a28b4e90e":"prompts/modules/state-machine.md","F:9a32917e56":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","F:9a3e8ed7d2":"scripts/lib/near-miss.mjs","F:9a72895a04":"scripts/lib/file-classifiers.mjs","F:9b01a5cd4d":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","F:9b3f18856e":"apps/control-panel/src/screens/WorkQueueScreen.tsx","F:9bb94e1b40":"tests/hygiene.test.mjs","F:9c9edea0c9":".design-sync/previews/AuditTimeline.tsx","F:9cbe9238f8":"tests/e2e.test.mjs","F:9d53df2290":"docs/ops/add-gate.md","F:9d69a6b766":"scripts/migrate-config.mjs","F:9dbf431d3e":"scripts/lib/message-catalog/gate/check-style.mjs","F:9dc816763b":"tests/agentproof-registry.test.mjs","F:9deac13db0":"design-system/src/components/ProgressMeter/ProgressMeter.tsx","F:9f0fb6ed8b":"design-system/src/components/MetricTile/MetricTile.tsx","F:9f36b3ef29":"tests/snapshot-cli.test.mjs","F:9f6dd5e5a3":"tests/queue.test.mjs","F:a0068c8817":".design-sync/previews/Toggle.tsx","F:a0abaf6a25":".design-sync/previews/ProgressMeter.tsx","F:a0d489df6d":"scripts/snapshot.mjs","F:a104667369":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","F:a1411f1423":"fixtures/negative-controls/app-syntax-error.js","F:a167609a41":"tests/mcp-compliance.test.mjs","F:a1baa3f01d":"scripts/lib/work-item-staleness.mjs","F:a37ab631dc":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","F:a384388adc":"docs/agents.md","F:a402d2f9ed":"design-system/src/components/Table/Table.tsx","F:a42da90970":"design-system/src/components/ModeSwitcher/index.ts","F:a52954a167":"apps/control-panel/vite.config.ts","F:a54ff182c7":"AGENTS.md","F:a5822fdd03":"scripts/lib/message-catalog/agent-run/release.mjs","F:a6d2bd3021":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","F:a70145dc77":"docs/adr/ADR-024-capability-promotion-gate.md","F:a7ce0f6452":"scripts/install-hooks.mjs","F:a862b1c3b6":"design-system/src/components/ConceptTile/index.ts","F:a8c32b8f15":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","F:a8cfe45d27":"design-system/src/components/IconButton/IconButton.tsx","F:aa27d254da":"scripts/lib/message-catalog/agent-run/arm.mjs","F:aa77f227a6":"scripts/agent/tool-loop-adapter.mjs","F:ab334f34df":"design-system/src/components/Toast/Toast.tsx","F:ab5077147a":"scripts/mcp-server.mjs","F:ac11b5379f":"scripts/promote-learning.mjs","F:acc3f6b466":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","F:acd892d4a0":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","F:ace169adc4":"scripts/check-evidence-secrets.mjs","F:add7add561":"design-system/src/index.ts","F:ae227d695d":"examples/python-service/README.md","F:ae46bbab81":"scripts/lib/repo-detect.mjs","F:aea3c05bca":"scripts/agent/triggers.mjs","F:aecebb26be":"tests/remediation-view.test.mjs","F:aef9cf1e27":"site/index.html","F:af6de66499":"scripts/agentproof-attestation.mjs","F:b014028f57":"scripts/lib/run-gate-capped.mjs","F:b1598d4449":"tests/snapshot-security.test.mjs","F:b16afebae9":"scripts/check-agentproof-registry.mjs","F:b2496e8029":".github/pull_request_template.md","F:b25dcdad19":"scripts/lib/message-catalog/gate/check-md-governance.mjs","F:b28f13b600":"tests/performance.test.mjs","F:b2efd505ef":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","F:b335630551":"README.md","F:b37de0ee8e":"scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs","F:b39c90fbe6":"design-system/src/components/ProgressMeter/index.ts","F:b3a2ad52bb":"design-system/src/components/ModeSwitcher/ModeSwitcher.tsx","F:b4279e0af6":"docs/adr/ADR-023-config-schema-migration-contract.md","F:b4f4e16ca1":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","F:b502a0fe75":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","F:b51ccbe79a":"design-system/src/components/WorkItemCard/index.ts","F:b5ae6ee133":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","F:b5f5700e4d":"docs/adr/ADR-033-repo-snapshot.md","F:b60c6a93e9":"GOVERNANCE.md","F:b677f38b10":"design-system/src/components/Checkbox/index.ts","F:b70824b13e":"tests/dependency.test.mjs","F:b806994000":"scripts/queue.mjs","F:b81cf7567f":"docs/guidelines/markdown-governance.md","F:b9d806ba4d":"examples/demo-app/src/NotificationService.js","F:ba97282cf5":"tests/provenance.test.mjs","F:baf7641a01":"tests/tick.test.mjs","F:bb0ec91260":"scripts/check-evidence-integrity.mjs","F:bb2d98fca6":"design-system/src/components/IdentityChip/index.ts","F:bb6a874d58":".design-sync/previews/GatePanel.tsx","F:bbb6476d71":"tests/ws-e-negative-controls.test.mjs","F:bcd1c88877":"docs/research/knowledge-network-architecture.md","F:bd02b28f17":"examples/demo-app/src/InventoryService.js","F:bf3dae9563":"tests/sweep-to-work-item.test.mjs","F:bf4e255c6e":"scripts/lib/message-catalog/gate/validate-work-item.mjs","F:c0714e4bf0":"prompts/modonome.bundle.md","F:c077d16aeb":"docs/adr/ADR-016-knowledge-network-packet-identity.md","F:c0e80ca327":"design-system/src/components/Sparkline/Sparkline.tsx","F:c14dd92bce":"design-system/src/components/Button/index.ts","F:c1a96ec6e2":"scripts/check-work-item-staleness.mjs","F:c1cc304e56":"docs/versioning.md","F:c1ef63106a":"docs/risk-surface-guard.md","F:c2ff3fda15":"design-system/src/components/AppShell/index.ts","F:c324fab0cc":"prompts/modules/snapshot.md","F:c3588d683e":"docs/adr/ADR-035-metadata-remediator.md","F:c3b2fcfb69":"docs/agent-org.md","F:c3cd2dc5c9":"tests/messages.test.mjs","F:c412f056b4":"design-system/src/components/SafetyStrip/index.ts","F:c4395c3023":"scripts/build-prompt.mjs","F:c54a514860":"docs/ops/work-item.md","F:c5938c33fd":"scripts/check-promotion-readiness.mjs","F:c598a2d684":"scripts/lib/lang-adapters/java.mjs","F:c5da07872e":"design-system/src/components/Sparkline/index.ts","F:c5fe610b02":"SUPPORT.md","F:c63a71fb57":".design-sync/previews/CostPanel.tsx","F:c64c042051":"design-system/src/tokens/tokens.ts","F:c6bd51a324":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","F:c72e6949b9":"fixtures/adapters/reference-adapter.mjs","F:c7326495ec":"docs/adr/ADR-043-terraform-module.md","F:c7423b85cf":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","F:c9493b5275":"scripts/audit-learnings.mjs","F:c97cb4d123":"OWNER-ACTIONS.md","F:c98f6b55e3":"prompts/modules/network.md","F:ca05b6ba1c":"tests/terraform-module-shape.test.mjs","F:ca0833ac73":"scripts/check-style.mjs","F:ca13fe2a5b":".design-sync/previews/Sparkline.tsx","F:cac320dd97":".modonome/STATUS.md","F:cacaab56e1":"tests/adapter-verify.test.mjs","F:cb3c5f7715":"scripts/lib/work-item-validate.mjs","F:cb66095cb4":"scripts/lib/snapshot-walk.mjs","F:cb8c4aadaf":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","F:cba8f1d03b":"tests/install-hooks.test.mjs","F:cbaff08a46":"docs/adr/ADR-015-knowledge-network-catalog.md","F:cc361bd05a":"scripts/check-licenses.mjs","F:cc65dd1342":"tests/embedding-safety.test.mjs","F:ccb72910b3":"scripts/lib/message-catalog/gate/check-drift.mjs","F:cdbe769ed3":"scripts/lib/github-api.mjs","F:ce1173e176":"design-system/src/components/CostPanel/CostPanel.tsx","F:ce41983a53":"tests/researcher-role.test.mjs","F:cecdb96382":"scripts/lib/lang-adapters/tree-sitter.mjs","F:cede5f9fa2":"tests/ratchet-format.test.mjs","F:cf2908e0f2":"agentproof/CONFORMANCE-INTERFACE.md","F:d01156348d":"design-system/src/components/Drawer/index.ts","F:d05701e1ab":"design-system/src/components/GatePanel/index.ts","F:d0d703a4e0":"design-system/src/components/HelpHint/index.ts","F:d0da1cab80":"tests/control-panel-ownership.test.mjs","F:d135cffeaa":"scripts/transition-work-item.mjs","F:d1b898f17f":"examples/demo-app/tests/NotificationService.test.js","F:d20e4b6b91":"design-system/src/components/Carousel/Carousel.tsx","F:d288a78085":"scripts/lib/message-catalog/advisory/sign-packet.mjs","F:d2b14b5b34":"docs/adr/ADR-011-ci-env-var-trust-scope.md","F:d328f97d94":"scripts/lib/message-catalog/advisory/hygiene.mjs","F:d480e40c97":"scripts/lib/config-validate.mjs","F:d4ead22b1b":"docs/adr/ADR-005-run-observability.md","F:d52b08ebeb":"examples/node-typescript/README.md","F:d590ca62b9":".design-sync/previews/PermissionDeniedState.tsx","F:d5b496b125":"design-system/src/components/HelpHint/HelpHint.tsx","F:d6401dd73e":"scripts/connect.mjs","F:d66f93d7b7":"docs/adr/ADR-029-adversarial-test-design.md","F:d744931e6a":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","F:d754b827f4":"tests/render-prompt-unit.test.mjs","F:d783999e16":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","F:d7d4e8d2a9":"tests/run-log.test.mjs","F:d8e37c4449":"scripts/lib/message-catalog/advisory/migrate-config.mjs","F:d8fb8339ce":"design-system/src/components/ProtectedPathRow/ProtectedPathRow.tsx","F:da42f69531":"design-system/src/components/TierBadge/TierBadge.tsx","F:da9133a29d":"scripts/lib/message-catalog/agent-run/action-queue.mjs","F:db651caf76":"design-system/src/components/NumberField/NumberField.tsx","F:dbb9c92ca1":"scripts/lib/snapshot-core.mjs","F:dc00dfe394":"docs/adr/ADR-006-checker-independence.md","F:dc0cc6d551":"docs/adr/ADR-025-self-application-conformance.md","F:dca643f34b":".design-sync/previews/Tooltip.tsx","F:dd1be2cd7b":".design-sync/previews/QueueBoard.tsx","F:dd58ae3791":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","F:ddd82fc886":"tests/promoted-learnings.test.mjs","F:ddeb486c49":"scripts/agent/run-cycle.mjs","F:de188c1b79":"scripts/lib/message-catalog/gate/check-self-application.mjs","F:de4538fe53":"docs/adr/ADR-010-knowledge-packet-trust.md","F:de5ebbf586":"tests/scaffold-adoption.test.mjs","F:de988f64d4":"design-system/src/components/AuditTimeline/index.ts","F:deab644e60":"design-system/src/components/Icon/Icon.tsx","F:df4b55ecef":"tests/check-gate-dag.test.mjs","F:e00aec45ce":"tests/control-panel-work-item-writer.test.mjs","F:e053923067":"tests/run-cycle-cli-permissions.test.mjs","F:e11f907cba":"scripts/score-proposals.mjs","F:e146bc5acb":".design-sync/conventions.md","F:e19aab09cb":".design-sync/previews/HelpHint.tsx","F:e2025a4e0c":"scripts/lib/message-catalog/agent-run/route-action.mjs","F:e27748d089":"templates/.modonome/STATUS.md","F:e2f1b5ac07":"tests/role-registry.test.mjs","F:e359adb110":"tests/check-style-lexicon.test.mjs","F:e406ceab72":"apps/control-panel/src/lib/messages.ts","F:e40ce1af48":"apps/control-panel/src/screens/ArmingScreen.tsx","F:e4e18d0b80":"tests/agent-capability-profile.test.mjs","F:e4ff19bbe2":"scripts/lib/commit-identity.mjs","F:e540f7b669":"tests/promote-learning.test.mjs","F:e5e519f441":".design-sync/previews/MetricTile.tsx","F:e5e9ec402f":"docs/LEXICON.md","F:e6677dcd37":"scripts/lib/message-catalog/gate/check-work-items.mjs","F:e7380d1444":"scripts/check-regex-safety.mjs","F:e844676be4":"docs/adr/ADR-013-config-downgrade-and-migration.md","F:e8676a18b7":"scripts/check-attribution-fp-corpus.mjs","F:e9479e1a3b":"scripts/ratchet-attestation.mjs","F:e948251d2b":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","F:e9701967b3":"docs/adr/ADR-046-ship-the-deferred-features.md","F:e9f1cc1e5d":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","F:ea9e0801d5":"design-system/src/components/NumberField/index.ts","F:eb14a0bdeb":"tests/helpers/mock-openai-server.mjs","F:ec3aa9930a":"scripts/lib/message-catalog/gate/validate-config.mjs","F:ec52ca3820":"apps/control-panel/src/state/liveClient.ts","F:eca12c0a30":"CONTRIBUTING.md","F:ed9c47feb2":"tests/tool-loop-adapter.test.mjs","F:edb11415f0":"scripts/run-gate-pipeline.mjs","F:edf42fb1af":"scripts/release.mjs","F:ee02e563c6":"tests/providers.test.mjs","F:ee21289902":"tests/commit-identity.test.mjs","F:eecc78e7e8":".design-sync/previews/LoadingState.tsx","F:efa02030ca":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","F:efd369884e":"docs/audits/claims-audit-2026-07-08.md","F:f00c212d41":"design-system/src/components/Tooltip/index.ts","F:f07f8ebca9":"scripts/validate-work-item.mjs","F:f0fbd8716f":".design-sync/previews/WorkItemDrawer.tsx","F:f13b76e6fd":"design-system/src/components/Toggle/index.ts","F:f1f2b57403":"docs/ops/runner-model-config.md","F:f238d164c9":"tests/ratchet.test.mjs","F:f41378fed0":"scripts/lib/message-catalog/panel/control-panel.mjs","F:f51cba9beb":"scripts/lib/graph.mjs","F:f57cf1a212":"design-system/src/components/CostPanel/index.ts","F:f5d313e9f1":"scripts/adapter-verify.mjs","F:f6abfc128a":"design-system/src/components/Slider/index.ts","F:f6e100ab45":".design-sync/previews/Button.tsx","F:f6ed156e4b":"SECURITY.md","F:f8168b956f":"examples/demo-app/tests/InventoryService.test.js","F:f83d1100e9":"apps/control-panel/src/content/concepts.ts","F:f8609bae0b":"design-system/src/components/QueueBoard/QueueBoard.tsx","F:f90930c3c3":"bin/modonome.mjs","F:f921eecad7":"tests/decisions-authority.test.mjs","F:f942e88a8f":"design-system/src/components/IdentityChip/IdentityChip.tsx","F:f9c98a8642":".design-sync/previews/WorkItemCard.tsx","F:fa49930755":"scripts/assert-governed-change.mjs","F:fa851dabe1":"tests/break-the-ratchet-judge.test.mjs","F:fadcf390da":"tests/metrics.test.mjs","F:fb5935daaf":"design-system/src/components/ProtectedPathRow/index.ts","F:fc21812307":"scripts/check-gate-dag.mjs","F:fc43ea4859":"design-system/src/components/IconButton/index.ts","F:fc5d887ff6":"scripts/check-checker-engagement.mjs","F:fcc5f4b906":"examples/demo-app/README.md","F:fd08562f92":"scripts/check-md-governance.mjs","F:fd4b8473fa":"apps/control-panel/server/ownership.mjs","F:fd660a117b":"scripts/agent/render-prompt.mjs","F:fd6ebce602":"tests/portability.test.mjs","F:fdaf1308e4":"fixtures/evidence-tampered.md","F:fe5ec971f8":".design-sync/previews/TierBadge.tsx","F:ff2c4a08a4":"scripts/lib/git-scope.mjs","F:ff3aef693f":"examples/demo-app/src/PaymentProcessor.js","F:ff644711e7":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","F:ffcad313b6":"docs/adr/ADR-044-agent-org-structure.md","F:ffdbe3a1e7":"CODE_OF_CONDUCT.md","F:ffe5c1269b":"scripts/lib/lang-adapters/go.mjs"},"symbols":{"S:002c9f1daa":{"line":25,"name":"slug","path_id":"F:6f247eb514"},"S:003e6c53c4":{"line":56,"name":"info","path_id":"F:2d4c555ba1"},"S:0044d1a126":{"line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9"},"S:00452332a2":{"line":74,"name":"runRatchetAgainstSubmission","path_id":"F:90cbb2cf6a"},"S:005abb5200":{"line":25,"name":"MAX_STAGED_ENTRIES","path_id":"F:4ebb5aa8a0"},"S:0064b473e6":{"line":14,"name":"tmpQueue","path_id":"F:195e9217ca"},"S:00c956ccf3":{"line":6,"name":"ToastProps","path_id":"F:ab334f34df"},"S:00db09c5a8":{"line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792"},"S:00f913bfd8":{"line":11,"name":"tf","path_id":"F:ca05b6ba1c"},"S:0126079093":{"line":1,"name":"MESSAGES","path_id":"F:a8c32b8f15"},"S:015c572711":{"line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca"},"S:01b4ff4d73":{"line":4,"name":"IdentityChipSize","path_id":"F:f942e88a8f"},"S:0255163ba3":{"line":229,"name":"parseArgs","path_id":"F:128b647d9a"},"S:02759ae11a":{"line":973,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c"},"S:028a668f8e":{"line":34,"name":"writeItem","path_id":"F:baf7641a01"},"S:02e2e85572":{"line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86"},"S:02e9b6beea":{"line":32,"name":"parseMetrics","path_id":"F:3b382f95c0"},"S:03145d5ec3":{"line":519,"name":"CHECKS","path_id":"F:7232ada2da"},"S:039c3576c4":{"line":23,"name":"modelFamily","path_id":"F:cb3c5f7715"},"S:03b000e190":{"line":153,"name":"verifySiteData","path_id":"F:8abf9e432a"},"S:03b490fb81":{"line":7,"name":"clean","path_id":"F:c598a2d684"},"S:041a6b87af":{"line":14,"name":"tmp","path_id":"F:55b3a4e2c0"},"S:0427f639c4":{"line":66,"name":"normalizeSchedule","path_id":"F:aea3c05bca"},"S:04f5060b44":{"line":20,"name":"DEFAULT_LEASE_MINUTES","path_id":"F:5b113a0914"},"S:050ec6eff9":{"line":26,"name":"OverviewScreen","path_id":"F:6627655633"},"S:0518e5f603":{"line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94"},"S:05a5299b28":{"line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae"},"S:05af4c96a8":{"line":25,"name":"seedLearnings","path_id":"F:55b3a4e2c0"},"S:05e617fb30":{"line":6,"name":"ButtonSize","path_id":"F:8b122c449e"},"S:05fa5077ed":{"line":57,"name":"rawPurpose","path_id":"F:dbb9c92ca1"},"S:05fcfe1c5b":{"line":5,"name":"apply_discount","path_id":"F:7ccad64380"},"S:064519e650":{"line":130,"name":"titleFromId","path_id":"F:8a3dd6ccff"},"S:06700c1faf":{"line":748,"name":"printAssertionTallyAdvisory","path_id":"F:8a10462927"},"S:069ca5f436":{"line":2,"name":"MESSAGES","path_id":"F:597cc7ae15"},"S:06c0c85d92":{"line":20,"name":"tmp","path_id":"F:5956278014"},"S:0713a27a1f":{"line":51,"name":"resolveRole","path_id":"F:304ce7b89d"},"S:073124e2d8":{"line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed"},"S:074c2b3c02":{"line":28,"name":"extractDiff","path_id":"F:872221b1da"},"S:075e86ea7c":{"line":48,"name":"topoSort","path_id":"F:f51cba9beb"},"S:0768a4cf0f":{"line":13,"name":"matchesType","path_id":"F:34cb2b6c48"},"S:07a58ff928":{"line":14,"name":"rpc","path_id":"F:a167609a41"},"S:086ff230f0":{"line":417,"name":"main","path_id":"F:522efae76d"},"S:08df8d7472":{"line":70,"name":"runPreflight","path_id":"F:0103cf3d56"},"S:0906a625c3":{"line":8,"name":"GateRow","path_id":"F:8c6234a8cb"},"S:098af8d3e8":{"line":73,"name":"testFilePasses","path_id":"F:a1baa3f01d"},"S:099c6ccde0":{"line":132,"name":"detectText","path_id":"F:4a7eaceb5c"},"S:09a834e684":{"line":14,"name":"makeRepo","path_id":"F:3ea503e7c0"},"S:0a11409d06":{"line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53"},"S:0a5fed1978":{"line":59,"name":"loadFixtures","path_id":"F:23917c6197"},"S:0a677c2e37":{"line":19,"name":"msg","path_id":"F:5f7910375b"},"S:0a6b98d712":{"line":23,"name":"scaffold","path_id":"F:9f6dd5e5a3"},"S:0a9885ca9d":{"line":30,"name":"ConfirmDialog","path_id":"F:63c1c23ccb"},"S:0a9b63cb4b":{"line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee"},"S:0ab594146c":{"line":33,"name":"runScript","path_id":"F:0391f3b249"},"S:0ac24bec51":{"line":76,"name":"auditCoherence","path_id":"F:1a19f02364"},"S:0aee45c73e":{"line":2,"name":"MESSAGES","path_id":"F:86fd2cf669"},"S:0af608ade0":{"line":1,"name":"MESSAGES","path_id":"F:0c731e3460"},"S:0b0e197734":{"line":35,"name":"Select","path_id":"F:819f72edf6"},"S:0b25fbc8fe":{"line":81,"name":"plainDecisionsDir","path_id":"F:f921eecad7"},"S:0b453b55b9":{"line":25,"name":"Checkbox","path_id":"F:7054844360"},"S:0b4b18fb8a":{"line":5,"name":"IconButtonVariant","path_id":"F:a8cfe45d27"},"S:0b56ac32a5":{"line":1,"name":"MESSAGES","path_id":"F:179564da6f"},"S:0b70780ca5":{"line":14,"name":"TooltipProps","path_id":"F:8a9aff1529"},"S:0b7b39d873":{"line":49,"name":"extractRawValue","path_id":"F:1575110130"},"S:0b8ff85c9c":{"line":666,"name":"classifyCode","path_id":"F:8a10462927"},"S:0ba2f17fcf":{"line":30,"name":"rpad","path_id":"F:3b382f95c0"},"S:0bae1275b2":{"line":1,"name":"Card","path_id":"F:93f0f5d3de"},"S:0be1a2cd09":{"line":244,"name":"diffCapabilities","path_id":"F:780c791407"},"S:0bf3d508cb":{"line":4,"name":"MESSAGES","path_id":"F:bf4e255c6e"},"S:0c7a33bcbe":{"line":6,"name":"ModeSwitcherProps","path_id":"F:b3a2ad52bb"},"S:0c9de67184":{"line":58,"name":"TEXT_TOKENS","path_id":"F:9a3e8ed7d2"},"S:0ca7d7cb9c":{"line":46,"name":"isModonomeRepo","path_id":"F:a7ce0f6452"},"S:0cfad6d2cf":{"line":30,"name":"findSafeToDeleteFiles","path_id":"F:61296e720c"},"S:0d3e338a93":{"line":15,"name":"run","path_id":"F:54784dcc0a"},"S:0d46d60d35":{"line":63,"name":"GatePanel","path_id":"F:8c6234a8cb"},"S:0d7b0da50a":{"line":24,"name":"resolveImport","path_id":"F:015261eab0"},"S:0dd1d1c53a":{"line":529,"name":"runPreflight","path_id":"F:7232ada2da"},"S:0e6240f5b7":{"line":70,"name":"writeGate","path_id":"F:08b7435c86"},"S:0ed808bd36":{"line":132,"name":"insertAfterFirst","path_id":"F:522efae76d"},"S:0eec918c49":{"line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a"},"S:0f004d17fa":{"line":24,"name":"git","path_id":"F:580d11b514"},"S:0f77533ed4":{"line":23,"name":"run","path_id":"F:6da7bd8294"},"S:107eb40a1d":{"line":18,"name":"makeRepo","path_id":"F:9f36b3ef29"},"S:118e66be10":{"line":2,"name":"flagValue","path_id":"F:2d93cea2d4"},"S:120830c7dd":{"line":91,"name":"maybeSign","path_id":"F:780c791407"},"S:126357e421":{"line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5"},"S:1274d7cf4b":{"line":3,"name":"Tier","path_id":"F:da42f69531"},"S:12c1e0f104":{"line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed"},"S:130202d7f0":{"line":3,"name":"Queue","path_id":"F:7a43bf4ce5"},"S:135fde5dfb":{"line":23,"name":"startMockServer","path_id":"F:eb14a0bdeb"},"S:13a8db3ab6":{"line":11,"name":"gitDiff","path_id":"F:fa49930755"},"S:13f1b3c9c0":{"line":93,"name":"CostPanel","path_id":"F:ce1173e176"},"S:13fa2b4863":{"line":20,"name":"detectStack","path_id":"F:ae46bbab81"},"S:13fdf696a0":{"line":19,"name":"run","path_id":"F:9f6dd5e5a3"},"S:145586915d":{"line":5,"name":"DrawerProps","path_id":"F:71f0bfb455"},"S:145bc035b8":{"line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0"},"S:14850052c8":{"line":6,"name":"TabItem","path_id":"F:1db369d970"},"S:14b57397ed":{"line":14,"name":"Budget","path_id":"F:84a5c32a4c"},"S:14c08c7efc":{"line":20,"name":"ConceptTile","path_id":"F:1a137480ae"},"S:14cb0e8cbb":{"line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e"},"S:14ef0a45e8":{"line":1,"name":"MESSAGES","path_id":"F:1127892e72"},"S:15286656f4":{"line":127,"name":"localEnv","path_id":"F:ddeb486c49"},"S:153c85af26":{"line":1,"name":"MESSAGES","path_id":"F:ec3aa9930a"},"S:154918aa5a":{"line":32,"name":"isBinary","path_id":"F:dbb9c92ca1"},"S:1562160a7c":{"line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c"},"S:15b3a95566":{"line":100,"name":"findBlock","path_id":"F:22566cb46e"},"S:16267c791e":{"line":103,"name":"validateWorkItem","path_id":"F:cb3c5f7715"},"S:16975f80af":{"line":18,"name":"QueueBoard","path_id":"F:f8609bae0b"},"S:16a3c28802":{"line":9,"name":"charge","path_id":"F:93f0f5d3de"},"S:16d8c02a8e":{"line":372,"name":"send","path_id":"F:ab5077147a"},"S:170d5cf4ef":{"line":18,"name":"tmp","path_id":"F:e359adb110"},"S:170dcaab55":{"line":34,"name":"resolveAdapterCommand","path_id":"F:aa77f227a6"},"S:172b08e199":{"line":118,"name":"updateRepoData","path_id":"F:8abf9e432a"},"S:17945c542e":{"line":393,"name":"countBareAsserts","path_id":"F:8a10462927"},"S:17985dad90":{"line":245,"name":"execSync","path_id":"F:61296e720c"},"S:17bc177192":{"line":267,"name":"formatHuman","path_id":"F:116adfb9f8"},"S:17c9a6d377":{"line":45,"name":"stripCharClasses","path_id":"F:e7380d1444"},"S:183f710a08":{"line":126,"name":"readCodeownersUsers","path_id":"F:92d6903b5f"},"S:1856df868b":{"line":163,"name":"writeRunLog","path_id":"F:5e450ff82c"},"S:18c9f379c0":{"line":15,"name":"SAFE_DEFAULTS","path_id":"F:9d69a6b766"},"S:18da5ae581":{"line":13,"name":"listMjs","path_id":"F:b70824b13e"},"S:18fce60dc6":{"line":32,"name":"saveConfig","path_id":"F:ec52ca3820"},"S:18ff6b9c89":{"line":41,"name":"loadSubmission","path_id":"F:90cbb2cf6a"},"S:19226d4902":{"line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5"},"S:194e854c70":{"line":156,"name":"complete","path_id":"F:5b113a0914"},"S:19aab1f03f":{"line":1,"name":"MESSAGES","path_id":"F:d288a78085"},"S:19e5ddb185":{"line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b"},"S:19ecd8efbf":{"line":134,"name":"main","path_id":"F:6f247eb514"},"S:1ae77ae47b":{"line":7,"name":"CardProps","path_id":"F:40eb542a82"},"S:1b14fa60f7":{"line":92,"name":"git","path_id":"F:18f569225a"},"S:1b794f5743":{"line":21,"name":"getDiff","path_id":"F:9427d264e6"},"S:1b85e41391":{"line":154,"name":"startMockReviewServer","path_id":"F:f921eecad7"},"S:1ba042e0cf":{"line":565,"name":"main","path_id":"F:7232ada2da"},"S:1bafda617f":{"line":15,"name":"docBelow","path_id":"F:3213d03b72"},"S:1be3814c77":{"line":24,"name":"listWorkflows","path_id":"F:2e327963ed"},"S:1beab0dc0c":{"line":32,"name":"MetricTile","path_id":"F:9f0fb6ed8b"},"S:1c5d801590":{"line":70,"name":"patchYamlText","path_id":"F:22566cb46e"},"S:1c6f22237b":{"line":26,"name":"PYTHON_TEST","path_id":"F:9a72895a04"},"S:1c7919b4ea":{"line":40,"name":"signMessage","path_id":"F:0cacf66a3b"},"S:1c82a73570":{"line":19,"name":"tmp","path_id":"F:40e4f39b59"},"S:1d0f5bc129":{"line":708,"name":"emitSarif","path_id":"F:8a10462927"},"S:1d4c8df8c0":{"line":19,"name":"TableProps","path_id":"F:a402d2f9ed"},"S:1d6822da4e":{"line":53,"name":"resolveRoleSequence","path_id":"F:ddeb486c49"},"S:1dc2770ace":{"line":1,"name":"MESSAGES","path_id":"F:9a32917e56"},"S:1e5dabea9c":{"line":43,"name":"hasHeading","path_id":"F:c5938c33fd"},"S:1e6749f65a":{"line":31,"name":"run","path_id":"F:02a5f8fc55"},"S:1e67af68fc":{"line":52,"name":"Section","path_id":"F:08064e0c53"},"S:1ebb8bc1af":{"line":122,"name":"git","path_id":"F:f921eecad7"},"S:1ef7d0ea53":{"line":3,"name":"CartService","path_id":"F:599f5b2f28"},"S:1f19b07227":{"line":5,"name":"ConfirmDialogProps","path_id":"F:63c1c23ccb"},"S:1fe8548dac":{"line":17,"name":"fixture","path_id":"F:8a3433b070"},"S:2064ebd573":{"line":29,"name":"STAGED_LINE_RE","path_id":"F:4ebb5aa8a0"},"S:208ce5b839":{"line":65,"name":"countWorkItems","path_id":"F:8abf9e432a"},"S:209a48ca7f":{"line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed"},"S:2102bdee1c":{"line":49,"name":"readRecord","path_id":"F:5b113a0914"},"S:210b0c6999":{"line":26,"name":"signedBytes","path_id":"F:245efb551c"},"S:211cdf5f9d":{"line":17,"name":"readItem","path_id":"F:e00aec45ce"},"S:214691c25d":{"line":100,"name":"targetDirFrom","path_id":"F:f90930c3c3"},"S:21635cbeda":{"line":19,"name":"adapter","path_id":"F:594f505f11"},"S:21a4872ace":{"line":8,"name":"Blocked","path_id":"F:7832db450f"},"S:2216bfd660":{"line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c"},"S:225c7a7d84":{"line":21,"name":"Open","path_id":"F:3ce0fd77eb"},"S:22ac6bb569":{"line":442,"name":"checkPromptInjection","path_id":"F:7232ada2da"},"S:22e3bba95f":{"line":26,"name":"snapshotContext","path_id":"F:fd660a117b"},"S:2305f3725a":{"line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed"},"S:2306976428":{"line":376,"name":"errorResponse","path_id":"F:ab5077147a"},"S:2358b05e12":{"line":680,"name":"fileOf","path_id":"F:8a10462927"},"S:236237bc1b":{"line":56,"name":"unquote","path_id":"F:119e3c0fce"},"S:237d74cadf":{"line":21,"name":"parseScalar","path_id":"F:1575110130"},"S:23afcde4ab":{"line":170,"name":"impliedGateStatus","path_id":"F:8a3dd6ccff"},"S:23fbaa24ea":{"line":13,"name":"git","path_id":"F:ff2c4a08a4"},"S:24407449b3":{"line":84,"name":"orderProposalsByScore","path_id":"F:6f247eb514"},"S:2441bf3938":{"line":17,"name":"run","path_id":"F:61c2a29876"},"S:247c34d405":{"line":31,"name":"itemsDir","path_id":"F:9f6dd5e5a3"},"S:2484ffb006":{"line":142,"name":"printPlan","path_id":"F:1e5ef6ba70"},"S:24b854ce78":{"line":36,"name":"BrandMark","path_id":"F:268769c4a6"},"S:24c6a3dc6c":{"line":205,"name":"parseFrontMatter","path_id":"F:fd08562f92"},"S:24f0960624":{"line":29,"name":"runRemediate","path_id":"F:44a5987438"},"S:25117f5b1d":{"line":27,"name":"normalizeLicense","path_id":"F:cc361bd05a"},"S:25139ebf6c":{"line":34,"name":"extractOwnTestFiles","path_id":"F:a1baa3f01d"},"S:257f8f1622":{"line":1,"name":"MESSAGES","path_id":"F:973aca5f3e"},"S:25a03d4ee2":{"line":73,"name":"normalizeForMatch","path_id":"F:9a3e8ed7d2"},"S:262e039096":{"line":68,"name":"extractSection","path_id":"F:4db1101024"},"S:2681abe2e5":{"line":60,"name":"installHooks","path_id":"F:a7ce0f6452"},"S:26df582c22":{"line":57,"name":"buildRow","path_id":"F:128b647d9a"},"S:26ee7911e3":{"line":5,"name":"MESSAGES","path_id":"F:5b5b4ddcae"},"S:27005d8f20":{"line":27,"name":"buildBundle","path_id":"F:c4395c3023"},"S:276edd396a":{"line":45,"name":"postJson","path_id":"F:c72e6949b9"},"S:27874d43ac":{"line":62,"name":"isSuppressed","path_id":"F:33ffae019c"},"S:28578fa81a":{"line":10,"name":"Large","path_id":"F:28b7af3c53"},"S:28d1266e44":{"line":24,"name":"adapter","path_id":"F:ffe5c1269b"},"S:29574da2e9":{"line":7,"name":"scenario","path_id":"F:c7423b85cf"},"S:298b204d13":{"line":22,"name":"runPreflight","path_id":"F:cc65dd1342"},"S:299c43d83e":{"line":40,"name":"stripQuotes","path_id":"F:1575110130"},"S:29fd3ef66c":{"line":41,"name":"writeAtomic","path_id":"F:5b113a0914"},"S:2a04172292":{"line":4,"name":"HostSelected","path_id":"F:545c0ccfeb"},"S:2a28972ca4":{"line":1,"name":"MESSAGES","path_id":"F:3835919e8e"},"S:2a5511d42c":{"line":125,"name":"gitDelta","path_id":"F:a0d489df6d"},"S:2b5847c683":{"line":61,"name":"renderPrompt","path_id":"F:fd660a117b"},"S:2b6631cd33":{"line":1,"name":"MESSAGES","path_id":"F:91e24dcac0"},"S:2bba65c029":{"line":1,"name":"MESSAGES","path_id":"F:99251bc045"},"S:2bd0a26c48":{"line":6,"name":"ProductSelected","path_id":"F:545c0ccfeb"},"S:2bd83b1706":{"line":1,"name":"MESSAGES","path_id":"F:de188c1b79"},"S:2ca5ab6d7f":{"line":18,"name":"previewText","path_id":"F:4ebf08705b"},"S:2ca7aeeeaf":{"line":46,"name":"findingsBySeverity","path_id":"F:cc65dd1342"},"S:2cd4d9571d":{"line":189,"name":"withTempFile","path_id":"F:137056535b"},"S:2cd9cbf595":{"line":4,"name":"ToastTone","path_id":"F:ab334f34df"},"S:2ce7a5bbe7":{"line":146,"name":"positional","path_id":"F:a0d489df6d"},"S:2d1eeb5346":{"line":240,"name":"toolValidateWorkItem","path_id":"F:ab5077147a"},"S:2d24ebcbdf":{"line":143,"name":"renderReport","path_id":"F:2d6ef08990"},"S:2d2b3ccfa2":{"line":318,"name":"toolCompliance","path_id":"F:ab5077147a"},"S:2d4876abe2":{"line":174,"name":"readPack","path_id":"F:780c791407"},"S:2d541b3911":{"line":1,"name":"MESSAGES","path_id":"F:e6677dcd37"},"S:2db1222578":{"line":23,"name":"GatePanelProps","path_id":"F:8c6234a8cb"},"S:2dc33a851f":{"line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c"},"S:2df1658785":{"line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed"},"S:2e016b842d":{"line":13,"name":"fileAnchor","path_id":"F:1cf31c4792"},"S:2e1baab2ff":{"line":29,"name":"JAVA_SRC","path_id":"F:9a72895a04"},"S:2e3ac2ba9f":{"line":8,"name":"ModelCostRow","path_id":"F:ce1173e176"},"S:2e93f745f3":{"line":17,"name":"ratchet","path_id":"F:f238d164c9"},"S:2ea6241ebd":{"line":68,"name":"writeJson","path_id":"F:4dabd020df"},"S:2ed4ecfad7":{"line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4"},"S:2eef7d840d":{"line":180,"name":"rewriteBlock","path_id":"F:22566cb46e"},"S:2f0240b93f":{"line":52,"name":"loadCurrentWorkItem","path_id":"F:9427d264e6"},"S:2f1892a712":{"line":127,"name":"makeStagedFixture","path_id":"F:54a3c626d9"},"S:2fb48a9b04":{"line":21,"name":"run","path_id":"F:940d5f4399"},"S:2fbd29545b":{"line":42,"name":"nestedMapChanged","path_id":"F:25e649633c"},"S:301cb496d5":{"line":72,"name":"RoleBadge","path_id":"F:35c6d59157"},"S:301d436113":{"line":80,"name":"main","path_id":"F:c72e6949b9"},"S:30e8b022de":{"line":65,"name":"appendStagedEntry","path_id":"F:4ebb5aa8a0"},"S:30eded078f":{"line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f"},"S:31032f0509":{"line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce"},"S:310e2149b2":{"line":80,"name":"runCli","path_id":"F:cc361bd05a"},"S:312c004ac1":{"line":46,"name":"HoverCard","path_id":"F:66264a042c"},"S:328dcdf4cc":{"line":76,"name":"countRaisedQuestions","path_id":"F:851f776227"},"S:32c99a4337":{"line":18,"name":"run","path_id":"F:55b3a4e2c0"},"S:33534dd596":{"line":18,"name":"readModonomeState","path_id":"F:8a3dd6ccff"},"S:336ebe7ff5":{"line":52,"name":"run","path_id":"F:a6d2bd3021"},"S:33846c9bba":{"line":99,"name":"deriveTriggerSequence","path_id":"F:aea3c05bca"},"S:33d286d62d":{"line":330,"name":"runRatchet","path_id":"F:522efae76d"},"S:33dfee21e3":{"line":1,"name":"MESSAGES","path_id":"F:2715f09f24"},"S:342fb4655a":{"line":23,"name":"gate","path_id":"F:9344d335a6"},"S:3466f40801":{"line":83,"name":"buildOptions","path_id":"F:a0d489df6d"},"S:34df82b1c2":{"line":221,"name":"hasHighOrCritical","path_id":"F:116adfb9f8"},"S:34df99c630":{"line":98,"name":"makeGitFixture","path_id":"F:18f569225a"},"S:354e31ec69":{"line":37,"name":"snapshotFiles","path_id":"F:6da7bd8294"},"S:3575202801":{"line":57,"name":"detectProtected","path_id":"F:ae46bbab81"},"S:357942abbf":{"line":38,"name":"readItem","path_id":"F:baf7641a01"},"S:35902c8cc1":{"line":1,"name":"MESSAGES","path_id":"F:35d4a12b63"},"S:35a01a919e":{"line":45,"name":"primaryModel","path_id":"F:304ce7b89d"},"S:35ac020356":{"line":69,"name":"AuditTimeline","path_id":"F:76da13a8f7"},"S:35e362f448":{"line":79,"name":"emit","path_id":"F:3b96b6dfed"},"S:3602dcc44c":{"line":37,"name":"cleanDoc","path_id":"F:36419aa427"},"S:3696870ce9":{"line":24,"name":"literalPhraseRe","path_id":"F:ca0833ac73"},"S:36acbff697":{"line":21,"name":"Carousel","path_id":"F:d20e4b6b91"},"S:36be7c4ac5":{"line":6,"name":"DryRun","path_id":"F:28b7af3c53"},"S:3702b2fefe":{"line":47,"name":"isAllowedImport","path_id":"F:b70824b13e"},"S:370b67baf2":{"line":90,"name":"readVersion","path_id":"F:8abf9e432a"},"S:37268eb979":{"line":523,"name":"gitIdentity","path_id":"F:8a3dd6ccff"},"S:3734794a77":{"line":38,"name":"extOf","path_id":"F:dbb9c92ca1"},"S:37693a15d4":{"line":73,"name":"normalizeResponse","path_id":"F:8d2cb93236"},"S:37a0d721be":{"line":16,"name":"run","path_id":"F:d7d4e8d2a9"},"S:37c1996b57":{"line":10,"name":"signature","path_id":"F:3213d03b72"},"S:3800b0c645":{"line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee"},"S:380b82547c":{"line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b"},"S:383c03d511":{"line":102,"name":"incrementalInputs","path_id":"F:a0d489df6d"},"S:38407e52ac":{"line":292,"name":"emitSarif","path_id":"F:116adfb9f8"},"S:38948fee1c":{"line":10,"name":"LiveApiError","path_id":"F:ec52ca3820"},"S:38b734e681":{"line":278,"name":"commitsSince","path_id":"F:fd08562f92"},"S:38e44b5fa7":{"line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c"},"S:391a920cca":{"line":32,"name":"learningsPath","path_id":"F:4ebb5aa8a0"},"S:3968554637":{"line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461"},"S:396f1000ae":{"line":1,"name":"MESSAGES","path_id":"F:a5822fdd03"},"S:397210a79e":{"line":24,"name":"pass","path_id":"F:5f7910375b"},"S:3a57c07db5":{"line":48,"name":"derivePosture","path_id":"F:128b647d9a"},"S:3ad2d564a8":{"line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5"},"S:3ad956fb93":{"line":36,"name":"configDefaults","path_id":"F:c5938c33fd"},"S:3ae3f92415":{"line":1,"name":"MESSAGES","path_id":"F:d328f97d94"},"S:3b092e9ab0":{"line":64,"name":"parseDecisions","path_id":"F:92d6903b5f"},"S:3bae21fee6":{"line":26,"name":"ArmingStateBadge","path_id":"F:7a1f7d680b"},"S:3c2bad87be":{"line":40,"name":"snapshotDir","path_id":"F:a0d489df6d"},"S:3c3cd672a7":{"line":11,"name":"isCyclic","path_id":"F:f51cba9beb"},"S:3cceb8dc09":{"line":96,"name":"deriveSignals","path_id":"F:e11f907cba"},"S:3d3f20848d":{"line":36,"name":"CORE_ROLE_SEQUENCE","path_id":"F:aea3c05bca"},"S:3d6f7980b3":{"line":33,"name":"proposeWork","path_id":"F:6f247eb514"},"S:3e2d44a335":{"line":4,"name":"PanelMode","path_id":"F:b3a2ad52bb"},"S:3e43134e83":{"line":69,"name":"arm","path_id":"F:44a5987438"},"S:3e9158c80b":{"line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5"},"S:3ed1d37c7b":{"line":3,"name":"Unreachable","path_id":"F:79467a3153"},"S:3ef15e4c1b":{"line":13,"name":"redactText","path_id":"F:4b91a9f65b"},"S:3f2874e2ce":{"line":43,"name":"SafetyStrip","path_id":"F:57ca5f1716"},"S:3f93aaa307":{"line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5"},"S:3f9e6b3a7b":{"line":104,"name":"testConnection","path_id":"F:08b7435c86"},"S:3fac1340a4":{"line":54,"name":"staleCandidate","path_id":"F:a1baa3f01d"},"S:3fc87c5f7e":{"line":73,"name":"reviewProposal","path_id":"F:2127a8caca"},"S:3fd1032067":{"line":12,"name":"CURRENT_SCHEMA_VERSION","path_id":"F:9d69a6b766"},"S:400a8c02c3":{"line":61,"name":"applyFix","path_id":"F:90e1fd2fd9"},"S:403ac351dd":{"line":59,"name":"buildRequestBody","path_id":"F:8d2cb93236"},"S:405ee38bbe":{"line":67,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e"},"S:407ded8730":{"line":79,"name":"evaluateFixture","path_id":"F:23917c6197"},"S:409d8caf58":{"line":392,"name":"describeMetric","path_id":"F:8a3dd6ccff"},"S:40a4170626":{"line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5"},"S:40aaf05c36":{"line":229,"name":"activeFindings","path_id":"F:116adfb9f8"},"S:40cce153df":{"line":135,"name":"extractChange","path_id":"F:3b96b6dfed"},"S:41050d03a4":{"line":19,"name":"readIfExists","path_id":"F:2e327963ed"},"S:4118076b3e":{"line":29,"name":"pad","path_id":"F:3b382f95c0"},"S:4124b7df92":{"line":44,"name":"releaseLeaseLive","path_id":"F:ec52ca3820"},"S:41443bba10":{"line":1,"name":"total","path_id":"F:7ccad64380"},"S:41514ae74b":{"line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024"},"S:41689151ff":{"line":105,"name":"parseArgs","path_id":"F:ddeb486c49"},"S:4195e187b2":{"line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c"},"S:41ad75ea93":{"line":17,"name":"buildLargeDiff","path_id":"F:b28f13b600"},"S:4214f7fa01":{"line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed"},"S:42188b3bb9":{"line":696,"name":"emitJson","path_id":"F:8a10462927"},"S:4287ee7685":{"line":1,"name":"MESSAGES","path_id":"F:40d8f235fd"},"S:4295d27685":{"line":164,"name":"makeFinding","path_id":"F:116adfb9f8"},"S:4296da48b7":{"line":86,"name":"judge","path_id":"F:90cbb2cf6a"},"S:42b8608c58":{"line":92,"name":"Cell","path_id":"F:57ca5f1716"},"S:42d33f191a":{"line":41,"name":"WorkItemCardProps","path_id":"F:b5ae6ee133"},"S:42d4f014b5":{"line":41,"name":"corpusProblems","path_id":"F:e8676a18b7"},"S:4316722ab5":{"line":124,"name":"insertBeforeFirst","path_id":"F:522efae76d"},"S:433f196465":{"line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d"},"S:4350272f8a":{"line":357,"name":"readRuns","path_id":"F:8a3dd6ccff"},"S:435432f041":{"line":6,"name":"CheckboxProps","path_id":"F:7054844360"},"S:4358d9c393":{"line":67,"name":"proposalsFrom","path_id":"F:09ba331878"},"S:43cc2b28a1":{"line":230,"name":"withStubRunner","path_id":"F:48355ccf4d"},"S:43f1c85009":{"line":108,"name":"renderMarkdown","path_id":"F:2e327963ed"},"S:4426823827":{"line":5,"name":"NavItem","path_id":"F:268769c4a6"},"S:442c9dff6c":{"line":5,"name":"makeGateway","path_id":"F:373a946d5c"},"S:44432e7cb0":{"line":75,"name":"runScenario","path_id":"F:94050e680d"},"S:44a852f5e1":{"line":32,"name":"readStdin","path_id":"F:c72e6949b9"},"S:44c14f3d19":{"line":135,"name":"generator","path_id":"F:4db1101024"},"S:44e7188c1d":{"line":50,"name":"hash","path_id":"F:0103cf3d56"},"S:45061132f3":{"line":170,"name":"runGateWithPRContext","path_id":"F:f921eecad7"},"S:4514b4c1f0":{"line":19,"name":"LearningsScreen","path_id":"F:757a70680a"},"S:457528354e":{"line":331,"name":"stripInlineComment","path_id":"F:8a10462927"},"S:457f8a5e17":{"line":4,"name":"MESSAGES","path_id":"F:33c4d744f3"},"S:45b2f146f0":{"line":274,"name":"buildEdgeList","path_id":"F:dbb9c92ca1"},"S:45bcd8bd18":{"line":78,"name":"checkArgvSanity","path_id":"F:f5d313e9f1"},"S:464c90cba5":{"line":71,"name":"registerTreeSitter","path_id":"F:cecdb96382"},"S:46ca0706e7":{"line":21,"name":"LeaseTableProps","path_id":"F:956332d4b5"},"S:46d884501c":{"line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70"},"S:46d90cc86e":{"line":13,"name":"Timeline","path_id":"F:9c9edea0c9"},"S:4700befa2a":{"line":16,"name":"run","path_id":"F:137056535b"},"S:4741feecf9":{"line":234,"name":"buildCost","path_id":"F:8a3dd6ccff"},"S:474ceb514b":{"line":289,"name":"readCapped","path_id":"F:522efae76d"},"S:47c5321a5f":{"line":264,"name":"listFiles","path_id":"F:522efae76d"},"S:47cde5f81f":{"line":6,"name":"DecisionStatus","path_id":"F:583edef643"},"S:48102a3f37":{"line":37,"name":"parseFraction","path_id":"F:af6de66499"},"S:48356203e2":{"line":13,"name":"repo","path_id":"F:4637e1fecb"},"S:485d7c5e96":{"line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed"},"S:489fa8bc67":{"line":14,"name":"HoverCardSide","path_id":"F:66264a042c"},"S:49158af5a6":{"line":6,"name":"IconButtonSize","path_id":"F:a8cfe45d27"},"S:49ad410798":{"line":140,"name":"replaceFirst","path_id":"F:522efae76d"},"S:49f97badd7":{"line":12,"name":"WorkState","path_id":"F:0a85f3b8e5"},"S:4a0171ecb5":{"line":295,"name":"PanelState","path_id":"F:0a85f3b8e5"},"S:4a08c48993":{"line":54,"name":"fingerprint","path_id":"F:0cacf66a3b"},"S:4a7db1c0d0":{"line":45,"name":"emptyDraft","path_id":"F:9b3f18856e"},"S:4abcc2a45b":{"line":21,"name":"redactionErrors","path_id":"F:65193a9799"},"S:4adffc8b06":{"line":27,"name":"seedJsTest","path_id":"F:6da7bd8294"},"S:4afb276004":{"line":105,"name":"parseAgentproof","path_id":"F:8abf9e432a"},"S:4b38793395":{"line":8,"name":"scenario","path_id":"F:34ca4e55d1"},"S:4b391a8eee":{"line":34,"name":"makeGitFixture","path_id":"F:580d11b514"},"S:4b76f865fa":{"line":69,"name":"resolveExecMode","path_id":"F:ddeb486c49"},"S:4b7a72e608":{"line":4,"name":"Role","path_id":"F:35c6d59157"},"S:4bacff1244":{"line":15,"name":"fileExists","path_id":"F:2e327963ed"},"S:4bc9723575":{"line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70"},"S:4bd4d449f1":{"line":27,"name":"fail","path_id":"F:5f7910375b"},"S:4bea381dfd":{"line":33,"name":"MESSAGES","path_id":"F:05bffc70e9"},"S:4bfc88b9a8":{"line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c"},"S:4bfea4387c":{"line":1,"name":"MESSAGES","path_id":"F:b4f4e16ca1"},"S:4c9526df5f":{"line":37,"name":"COVERAGE_CONFIG","path_id":"F:9a72895a04"},"S:4cd48cf92e":{"line":533,"name":"buildSubject","path_id":"F:8a3dd6ccff"},"S:4d0bae812e":{"line":91,"name":"round","path_id":"F:015261eab0"},"S:4d35869e55":{"line":38,"name":"readOriginUrl","path_id":"F:cdbe769ed3"},"S:4d36cf3d1c":{"line":34,"name":"JAVA_BUILD","path_id":"F:9a72895a04"},"S:4d3ac94b7c":{"line":401,"name":"isVacuousPyAssert","path_id":"F:8a10462927"},"S:4df7a92e8e":{"line":15,"name":"registerAdapter","path_id":"F:2554ddd30c"},"S:4e5c54ea09":{"line":369,"name":"runCategory","path_id":"F:522efae76d"},"S:4eb76c8a83":{"line":9,"name":"Set","path_id":"F:6bef3f93ab"},"S:4eb7e87341":{"line":5,"name":"NumberFieldProps","path_id":"F:db651caf76"},"S:4ed98bc995":{"line":18,"name":"baseCfg","path_id":"F:ce41983a53"},"S:4ee042ed06":{"line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56"},"S:4f138d4cbe":{"line":100,"name":"isUnreachableError","path_id":"F:ddeb486c49"},"S:4f19353e16":{"line":6,"name":"ProtectedPathRowProps","path_id":"F:d8fb8339ce"},"S:4f265e8008":{"line":8,"name":"Approved","path_id":"F:13d31b33ea"},"S:4f43d4e206":{"line":489,"name":"runCycle","path_id":"F:ddeb486c49"},"S:4fb0095605":{"line":22,"name":"checkRegistry","path_id":"F:b16afebae9"},"S:500f4c1cd3":{"line":30,"name":"cleanSignature","path_id":"F:36419aa427"},"S:5092562c12":{"line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86"},"S:50b0879e24":{"line":28,"name":"clamp","path_id":"F:db651caf76"},"S:5115891196":{"line":8,"name":"Coverage","path_id":"F:a0abaf6a25"},"S:5154763a93":{"line":60,"name":"AppShell","path_id":"F:268769c4a6"},"S:517ace9ff8":{"line":17,"name":"tmp","path_id":"F:940d5f4399"},"S:52027883f7":{"line":24,"name":"parseAllowlist","path_id":"F:33ffae019c"},"S:521fca28ad":{"line":344,"name":"toolSnapshot","path_id":"F:ab5077147a"},"S:522a86b0ed":{"line":480,"name":"checkNodeVersion","path_id":"F:7232ada2da"},"S:524aeb5cd6":{"line":23,"name":"Detail","path_id":"F:f0fbd8716f"},"S:52826c5034":{"line":768,"name":"Component","path_id":"F:aef9cf1e27"},"S:52913852e3":{"line":22,"name":"validate","path_id":"F:34cb2b6c48"},"S:52be3c746f":{"line":32,"name":"git","path_id":"F:af6de66499"},"S:53158831f9":{"line":135,"name":"check","path_id":"F:780c791407"},"S:531cf59eb3":{"line":86,"name":"loadIgnore","path_id":"F:cb66095cb4"},"S:5327d3b72c":{"line":223,"name":"main","path_id":"F:aea3c05bca"},"S:5353762af1":{"line":42,"name":"loadCommittedSignature","path_id":"F:a0d489df6d"},"S:537ea4dfe0":{"line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4"},"S:53b9eda0f8":{"line":90,"name":"run","path_id":"F:f90930c3c3"},"S:542af83b15":{"line":11,"name":"BUILTIN_PROVIDERS","path_id":"F:8b5a1f94c4"},"S:544b9ce58e":{"line":24,"name":"riskTiers","path_id":"F:c64c042051"},"S:5465e6de42":{"line":11,"name":"workStates","path_id":"F:c64c042051"},"S:54a007aa57":{"line":50,"name":"relativeImportsOf","path_id":"F:fc21812307"},"S:54d2db3f99":{"line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861"},"S:551c7477f2":{"line":16,"name":"HoverCardSource","path_id":"F:66264a042c"},"S:55386d6b24":{"line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c"},"S:555c013724":{"line":31,"name":"Card","path_id":"F:40eb542a82"},"S:556ab0a4ef":{"line":34,"name":"recordPath","path_id":"F:5b113a0914"},"S:559455c526":{"line":25,"name":"loadPanelState","path_id":"F:95d4304133"},"S:55a57d9fd6":{"line":168,"name":"toolRatchet","path_id":"F:ab5077147a"},"S:55b15c0abb":{"line":9,"name":"short","path_id":"F:1cf31c4792"},"S:55eb1af9ca":{"line":32,"name":"loadLexicon","path_id":"F:ca0833ac73"},"S:55ee648216":{"line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e"},"S:55fc57e799":{"line":17,"name":"readIfExists","path_id":"F:8abf9e432a"},"S:5607ca9508":{"line":116,"name":"main","path_id":"F:94050e680d"},"S:562052e079":{"line":63,"name":"validateLearningRecord","path_id":"F:ac11b5379f"},"S:568ac62670":{"line":124,"name":"parseArgs","path_id":"F:2d6ef08990"},"S:56a4782fc2":{"line":77,"name":"matchesPattern","path_id":"F:9427d264e6"},"S:5708b6bd2b":{"line":4,"name":"PendingApproval","path_id":"F:13d31b33ea"},"S:574c990b3f":{"line":59,"name":"scoreProposal","path_id":"F:e11f907cba"},"S:575af01d8c":{"line":110,"name":"checkTarget","path_id":"F:fd08562f92"},"S:577a1daeb3":{"line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5"},"S:580f464240":{"line":23,"name":"runStatus","path_id":"F:60548316f5"},"S:581a43b877":{"line":26,"name":"parseJsonLine","path_id":"F:61c2a29876"},"S:5835c8b608":{"line":69,"name":"resolveArming","path_id":"F:f90930c3c3"},"S:583c8b60d3":{"line":34,"name":"stateVar","path_id":"F:c64c042051"},"S:586705c7a0":{"line":5,"name":"CardTone","path_id":"F:40eb542a82"},"S:5919844321":{"line":24,"name":"makeEvent","path_id":"F:fadcf390da"},"S:59617d720e":{"line":5,"name":"estimateTokens","path_id":"F:7944059823"},"S:5962011a99":{"line":41,"name":"summarize","path_id":"F:3b382f95c0"},"S:5967648d07":{"line":116,"name":"isDocumented","path_id":"F:3b382f95c0"},"S:59807c1a98":{"line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70"},"S:59b9039619":{"line":28,"name":"loadCache","path_id":"F:119e3c0fce"},"S:59ba63dbab":{"line":34,"name":"readConfig","path_id":"F:a0d489df6d"},"S:59cd81d0e0":{"line":122,"name":"startProbeServer","path_id":"F:f5d313e9f1"},"S:59dcca7090":{"line":32,"name":"SAFE_IDENTITIES","path_id":"F:5a3543606b"},"S:59f6d857da":{"line":74,"name":"LIVE_DETECTORS","path_id":"F:e8676a18b7"},"S:5a2d3d98ce":{"line":6,"name":"ModalSize","path_id":"F:63351e350b"},"S:5a49db2766":{"line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5"},"S:5a6c3aef24":{"line":7,"name":"OrderService","path_id":"F:1ecd18c4b9"},"S:5a7bfc5a1b":{"line":34,"name":"TIER1_TOKENS","path_id":"F:9a3e8ed7d2"},"S:5ad0c942a1":{"line":117,"name":"findCycle","path_id":"F:015261eab0"},"S:5aed523637":{"line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d"},"S:5afb2ca954":{"line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a"},"S:5aff27256c":{"line":109,"name":"schema","path_id":"F:780c791407"},"S:5b0828ff4b":{"line":28,"name":"ModeSwitcher","path_id":"F:b3a2ad52bb"},"S:5b0e153cfb":{"line":424,"name":"pruneLearning","path_id":"F:22566cb46e"},"S:5b2eae49a8":{"line":62,"name":"sep","path_id":"F:aa77f227a6"},"S:5b8a5996df":{"line":70,"name":"fail","path_id":"F:780c791407"},"S:5bac9ae6d5":{"line":151,"name":"formatScalarForYaml","path_id":"F:1575110130"},"S:5bad105043":{"line":3,"name":"Reading","path_id":"F:eecc78e7e8"},"S:5c69e2b109":{"line":45,"name":"DecisionCard","path_id":"F:583edef643"},"S:5c7ed4ab16":{"line":42,"name":"findForbiddenCommits","path_id":"F:e4ff19bbe2"},"S:5cc853b5b1":{"line":50,"name":"loadScenarios","path_id":"F:94050e680d"},"S:5d118d4b60":{"line":3,"name":"Row","path_id":"F:8972d37045"},"S:5d58defc25":{"line":14,"name":"tmpRepo","path_id":"F:60548316f5"},"S:5d9d040e28":{"line":30,"name":"Modal","path_id":"F:63351e350b"},"S:5daa909048":{"line":37,"name":"runGuardRatchet","path_id":"F:fd6ebce602"},"S:5e08a11ce4":{"line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df"},"S:5e20ef9f71":{"line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c"},"S:5e3d6fa91f":{"line":20,"name":"run","path_id":"F:54a3c626d9"},"S:5ea90f5e50":{"line":3,"name":"CheckoutService","path_id":"F:54c6928de9"},"S:5eb8ce722f":{"line":31,"name":"Toast","path_id":"F:ab334f34df"},"S:5eba6876fa":{"line":36,"name":"LeaseTable","path_id":"F:956332d4b5"},"S:5ed8ee5c0a":{"line":23,"name":"HoverCardProps","path_id":"F:66264a042c"},"S:5ef4400e5e":{"line":169,"name":"generatorLine","path_id":"F:780c791407"},"S:5ef7e9a80c":{"line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990"},"S:5f317ed26b":{"line":127,"name":"capabilities","path_id":"F:4db1101024"},"S:5f8c0130c3":{"line":6,"name":"MetricTileTone","path_id":"F:9f0fb6ed8b"},"S:5fe0061772":{"line":4,"name":"Maker","path_id":"F:7008a20b1c"},"S:60070857ec":{"line":9,"name":"IconName","path_id":"F:deab644e60"},"S:602e030d27":{"line":297,"name":"main","path_id":"F:1e5ef6ba70"},"S:6044b46e0f":{"line":100,"name":"readMessages","path_id":"F:8a3dd6ccff"},"S:6117b8ec80":{"line":238,"name":"decideResult","path_id":"F:116adfb9f8"},"S:6122b96d0b":{"line":11,"name":"runGateCapped","path_id":"F:b014028f57"},"S:6140d7ae56":{"line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70"},"S:61579a6235":{"line":21,"name":"CostSummary","path_id":"F:ce1173e176"},"S:618d055a7c":{"line":5,"name":"clean","path_id":"F:3213d03b72"},"S:61e677ae40":{"line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5"},"S:61ec9209fc":{"line":22,"name":"matchSymbol","path_id":"F:36419aa427"},"S:6202790aac":{"line":109,"name":"UsageError","path_id":"F:116adfb9f8"},"S:62210684b4":{"line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86"},"S:62d1cf1f06":{"line":36,"name":"AuditTimelineProps","path_id":"F:76da13a8f7"},"S:62f42e9591":{"line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0"},"S:634b7012be":{"line":17,"name":"makeAtt","path_id":"F:571aa2f3ae"},"S:63613c3a63":{"line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792"},"S:636b7af50c":{"line":10,"name":"LeaseRow","path_id":"F:956332d4b5"},"S:639160c471":{"line":186,"name":"buildGates","path_id":"F:8a3dd6ccff"},"S:641774928a":{"line":30,"name":"run","path_id":"F:9cbe9238f8"},"S:6425f5a6c7":{"line":10,"name":"WithLeases","path_id":"F:31658eff0b"},"S:64376e38db":{"line":6,"name":"SelectOption","path_id":"F:819f72edf6"},"S:644e7adeef":{"line":56,"name":"tokens","path_id":"F:c64c042051"},"S:6499fa18ee":{"line":264,"name":"toolStatus","path_id":"F:ab5077147a"},"S:64de4c98b6":{"line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0"},"S:64ebce69bf":{"line":1,"name":"MESSAGES","path_id":"F:5d52d97b8a"},"S:65004e9f74":{"line":215,"name":"loadCfg","path_id":"F:aea3c05bca"},"S:655cf75cf0":{"line":3,"name":"OwnerOnly","path_id":"F:d590ca62b9"},"S:655f25fbed":{"line":33,"name":"Sparkline","path_id":"F:c0e80ca327"},"S:6584162247":{"line":97,"name":"nowIso","path_id":"F:a0d489df6d"},"S:65d6e9b42e":{"line":112,"name":"dedupeImports","path_id":"F:36419aa427"},"S:6605365375":{"line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5"},"S:6647a4e550":{"line":253,"name":"extractCitedPaths","path_id":"F:fd08562f92"},"S:66ac4b8d64":{"line":83,"name":"makeFakeSpawn","path_id":"F:cacaab56e1"},"S:66b4da1ed7":{"line":6,"name":"ModelCostClass","path_id":"F:ce1173e176"},"S:66bb927095":{"line":11,"name":"run","path_id":"F:edf42fb1af"},"S:66cd7b74c6":{"line":5,"name":"SliderProps","path_id":"F:81c495717c"},"S:670e55d75a":{"line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce"},"S:672926584c":{"line":233,"name":"decideExitCode","path_id":"F:116adfb9f8"},"S:67852685cf":{"line":4,"name":"Info","path_id":"F:7832db450f"},"S:6797390adc":{"line":18,"name":"initialsFor","path_id":"F:f942e88a8f"},"S:680cec9dbd":{"line":64,"name":"clamp","path_id":"F:9a3e8ed7d2"},"S:68308360b1":{"line":166,"name":"main","path_id":"F:a0d489df6d"},"S:6831eb78e0":{"line":37,"name":"readPromotedLearnings","path_id":"F:4ebb5aa8a0"},"S:686192f35d":{"line":97,"name":"toLinePath","path_id":"F:c0e80ca327"},"S:689125598d":{"line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249"},"S:693b8fedee":{"line":315,"name":"buildRoleCliArgs","path_id":"F:ddeb486c49"},"S:6981533501":{"line":24,"name":"Input","path_id":"F:763efdd51c"},"S:699f2f623f":{"line":60,"name":"saveMessagesLive","path_id":"F:ec52ca3820"},"S:69db4ad7cc":{"line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70"},"S:69ef79b6f3":{"line":83,"name":"createWorkItemLive","path_id":"F:ec52ca3820"},"S:69f3537d3b":{"line":13,"name":"tmp","path_id":"F:8a3433b070"},"S:6a4d8aa30d":{"line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53"},"S:6a7737bb57":{"line":66,"name":"extractTags","path_id":"F:1a19f02364"},"S:6b0614bdf6":{"line":127,"name":"claim","path_id":"F:5b113a0914"},"S:6b1894b02c":{"line":47,"name":"findPromotionAdr","path_id":"F:c5938c33fd"},"S:6b5288f35f":{"line":18,"name":"coreLevers","path_id":"F:87c30bdb4c"},"S:6bc87187a8":{"line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5"},"S:6c21b6660b":{"line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c"},"S:6c21f00789":{"line":7,"name":"scenario","path_id":"F:5376e86470"},"S:6c4ca00b53":{"line":30,"name":"scratchModonomeDir","path_id":"F:8b2f3dbcba"},"S:6c778494b3":{"line":7,"name":"relativeTime","path_id":"F:86838d35ac"},"S:6cb93e992c":{"line":45,"name":"formatUsd","path_id":"F:86838d35ac"},"S:6cbed7ff26":{"line":13,"name":"LearningSummary","path_id":"F:1d03291691"},"S:6d2334f815":{"line":125,"name":"SettingsScreen","path_id":"F:4ebf08705b"},"S:6dcad3cdf1":{"line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5"},"S:6dcbe228c5":{"line":75,"name":"scaffold","path_id":"F:5e450ff82c"},"S:6dd199eea1":{"line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9"},"S:6dde857e83":{"line":104,"name":"listMessages","path_id":"F:05bffc70e9"},"S:6e1dfe647a":{"line":29,"name":"DecisionCardProps","path_id":"F:583edef643"},"S:6e6111c7dd":{"line":70,"name":"runPipeline","path_id":"F:edb11415f0"},"S:6ee06ecd24":{"line":130,"name":"repoWithNewEntry","path_id":"F:f921eecad7"},"S:6ee308cae0":{"line":39,"name":"resolveProvider","path_id":"F:8b5a1f94c4"},"S:6ef3b2f2e5":{"line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5"},"S:6fab505fa4":{"line":82,"name":"parsePrNumber","path_id":"F:90e1fd2fd9"},"S:700c80e34d":{"line":1,"name":"MESSAGES","path_id":"F:b502a0fe75"},"S:700d752004":{"line":11,"name":"cli","path_id":"F:9bb94e1b40"},"S:703e56c471":{"line":45,"name":"scratchRepo","path_id":"F:d0da1cab80"},"S:7048bb8a3d":{"line":143,"name":"parseCiJobNames","path_id":"F:7232ada2da"},"S:704fff1c43":{"line":15,"name":"tmp","path_id":"F:9f6dd5e5a3"},"S:705c285e25":{"line":112,"name":"chatCompletion","path_id":"F:8d2cb93236"},"S:7070a0d16e":{"line":1,"name":"MESSAGES","path_id":"F:da9133a29d"},"S:707883a645":{"line":14,"name":"DecisionSummary","path_id":"F:583edef643"},"S:7078ce1661":{"line":40,"name":"today","path_id":"F:09ba331878"},"S:70c4ff437c":{"line":80,"name":"adapter","path_id":"F:36419aa427"},"S:712330cf3e":{"line":6,"name":"parseStagedLine","path_id":"F:54df44aadd"},"S:725b07739e":{"line":22,"name":"WorkState","path_id":"F:c64c042051"},"S:72886ee448":{"line":66,"name":"formatMessage","path_id":"F:e406ceab72"},"S:72a5c214ac":{"line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5"},"S:72cb0b7406":{"line":10,"name":"REQUIRED_FIELDS","path_id":"F:4ebb5aa8a0"},"S:72d4f657d5":{"line":91,"name":"setup","path_id":"F:3de9042953"},"S:732a1c21fe":{"line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c"},"S:733f5fd096":{"line":5,"name":"HelpHintProps","path_id":"F:d5b496b125"},"S:735c642c3a":{"line":46,"name":"collectNearMisses","path_id":"F:09ba331878"},"S:7369c62b84":{"line":5,"name":"OrderServiceBroken","path_id":"F:a1411f1423"},"S:7379962c7e":{"line":1,"name":"MESSAGES","path_id":"F:4d08d5472f"},"S:73a3da9f65":{"line":46,"name":"ActivationLadder","path_id":"F:14edab923f"},"S:73cbfa5a7d":{"line":132,"name":"renderRoleJob","path_id":"F:aea3c05bca"},"S:73e4b1bbf9":{"line":31,"name":"SIGNAL_MIN","path_id":"F:e11f907cba"},"S:73feb65706":{"line":4,"name":"OnLabel","path_id":"F:dca643f34b"},"S:744cc47208":{"line":36,"name":"cleanCommitMessage","path_id":"F:8ffb11f281"},"S:745c98231d":{"line":338,"name":"main","path_id":"F:3b96b6dfed"},"S:749446c25e":{"line":8,"name":"armingModes","path_id":"F:c64c042051"},"S:74b454ee62":{"line":56,"name":"interpolate","path_id":"F:e406ceab72"},"S:74bea9ecdf":{"line":59,"name":"criterion","path_id":"F:2e327963ed"},"S:74c8951fb9":{"line":245,"name":"severityToSarifLevel","path_id":"F:116adfb9f8"},"S:74e8f23a0b":{"line":4,"name":"MergeCap","path_id":"F:84a5c32a4c"},"S:753ca853b2":{"line":100,"name":"commandOnPath","path_id":"F:f5d313e9f1"},"S:75c48595da":{"line":35,"name":"primaryRoleModel","path_id":"F:d480e40c97"},"S:76171943e3":{"line":7,"name":"canonicalize","path_id":"F:245efb551c"},"S:7619cf060d":{"line":133,"name":"escapeHtml","path_id":"F:128b647d9a"},"S:762b3eaf4a":{"line":17,"name":"Models","path_id":"F:1aa7cf650d"},"S:765b4574da":{"line":34,"name":"mcpCall","path_id":"F:9cbe9238f8"},"S:7698d9efeb":{"line":26,"name":"isModelIdentifierBranch","path_id":"F:6e0bd62fa3"},"S:76d7b21daf":{"line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364"},"S:76dbb025c9":{"line":116,"name":"removeFirstMatch","path_id":"F:522efae76d"},"S:77031e48f4":{"line":272,"name":"readLearnings","path_id":"F:8a3dd6ccff"},"S:77054cfc82":{"line":23,"name":"makeItem","path_id":"F:baf7641a01"},"S:7762c6d861":{"line":21,"name":"cachePath","path_id":"F:119e3c0fce"},"S:77a4165d99":{"line":12,"name":"TooltipSide","path_id":"F:8a9aff1529"},"S:7803dea04b":{"line":2,"name":"MESSAGES","path_id":"F:9dbf431d3e"},"S:781c2d6b40":{"line":152,"name":"runLiveProbe","path_id":"F:f5d313e9f1"},"S:781c4112a2":{"line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c"},"S:783d91f2ed":{"line":319,"name":"extractSection","path_id":"F:8a3dd6ccff"},"S:78dd5bd63d":{"line":52,"name":"sha256Hex","path_id":"F:4db1101024"},"S:78e9af551d":{"line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee"},"S:7902cd38d0":{"line":4,"name":"MdnRootProps","path_id":"F:90fc20ddd8"},"S:7910b636e8":{"line":90,"name":"tier2Hit","path_id":"F:9a3e8ed7d2"},"S:79144070a6":{"line":55,"name":"centrality","path_id":"F:015261eab0"},"S:792d313360":{"line":84,"name":"remediationFingerprint","path_id":"F:8ffb11f281"},"S:7934857ce3":{"line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5"},"S:796295afbe":{"line":6,"name":"GateStatus","path_id":"F:8c6234a8cb"},"S:79676d74df":{"line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee"},"S:7989466d34":{"line":59,"name":"useConfirm","path_id":"F:3c479cac6e"},"S:79997ba94d":{"line":1,"name":"MESSAGES","path_id":"F:09ea014068"},"S:79a288a97f":{"line":16,"name":"runTick","path_id":"F:baf7641a01"},"S:79b048583f":{"line":27,"name":"defaultRange","path_id":"F:ff2c4a08a4"},"S:7a05eaea5a":{"line":34,"name":"auditCoverage","path_id":"F:1a19f02364"},"S:7a464a2d86":{"line":39,"name":"ownersForPath","path_id":"F:fd4b8473fa"},"S:7a68bb8c0c":{"line":103,"name":"updateWorkItemLive","path_id":"F:ec52ca3820"},"S:7ad858b9a2":{"line":30,"name":"DOTNET_SRC","path_id":"F:9a72895a04"},"S:7b7ddcaa20":{"line":79,"name":"segments","path_id":"F:9a3e8ed7d2"},"S:7b87285e6c":{"line":110,"name":"readTextSafe","path_id":"F:7232ada2da"},"S:7b984e047b":{"line":18,"name":"finalizeState","path_id":"F:95d4304133"},"S:7bc320f853":{"line":27,"name":"assertValid","path_id":"F:5b113a0914"},"S:7bcf8115de":{"line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a"},"S:7bdca9af48":{"line":30,"name":"Tooltip","path_id":"F:8a9aff1529"},"S:7bfb1bf049":{"line":46,"name":"SAFE_TEXT_SNIPPETS","path_id":"F:5a3543606b"},"S:7c0d389b98":{"line":17,"name":"runRatchet","path_id":"F:cede5f9fa2"},"S:7c3651a5ba":{"line":38,"name":"commitsInRange","path_id":"F:ff2c4a08a4"},"S:7c44412e8a":{"line":4,"name":"WithHeader","path_id":"F:3d505706cd"},"S:7c5c3a31a4":{"line":41,"name":"compilePattern","path_id":"F:cb66095cb4"},"S:7c6ba2a644":{"line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5"},"S:7c716c856e":{"line":75,"name":"detectHotFiles","path_id":"F:ae46bbab81"},"S:7c9eb8f22d":{"line":116,"name":"runScript","path_id":"F:48355ccf4d"},"S:7cd45cbc03":{"line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e"},"S:7cd6925ad6":{"line":19,"name":"runScript","path_id":"F:564b053598"},"S:7d253ea6b0":{"line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed"},"S:7d38304e55":{"line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c"},"S:7d5af2fca1":{"line":22,"name":"Staged","path_id":"F:250c8a0d4a"},"S:7d89fd8d95":{"line":13,"name":"run","path_id":"F:5994385869"},"S:7d8d2691e2":{"line":4,"name":"Tiers","path_id":"F:fe5ec971f8"},"S:7ed39c68da":{"line":78,"name":"buildAdapterArgs","path_id":"F:aa77f227a6"},"S:7fb0e9b59c":{"line":93,"name":"proposalToWorkItem","path_id":"F:6f247eb514"},"S:7fe7ee7f43":{"line":94,"name":"dedupe","path_id":"F:ae46bbab81"},"S:7ff08ea7a1":{"line":5,"name":"MESSAGES","path_id":"F:f41378fed0"},"S:8041c36b7b":{"line":18,"name":"noThrow","path_id":"F:8fe56e5618"},"S:8097fe47fc":{"line":40,"name":"readBody","path_id":"F:08b7435c86"},"S:80ded7ba90":{"line":542,"name":"renderHuman","path_id":"F:7232ada2da"},"S:80e9a1f555":{"line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee"},"S:813f68335e":{"line":8,"name":"Armed","path_id":"F:28b7af3c53"},"S:819d9d37ff":{"line":12,"name":"call","path_id":"F:ec52ca3820"},"S:81bb2e8cc4":{"line":39,"name":"clamp","path_id":"F:e11f907cba"},"S:81c9c1291a":{"line":35,"name":"interpolate","path_id":"F:05bffc70e9"},"S:823d7fa306":{"line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c"},"S:82407637b4":{"line":284,"name":"emitJson","path_id":"F:116adfb9f8"},"S:8252cf2ba8":{"line":52,"name":"warn","path_id":"F:2d4c555ba1"},"S:82727ee8e7":{"line":35,"name":"collectImports","path_id":"F:3213d03b72"},"S:8282a0b575":{"line":85,"name":"formatMessage","path_id":"F:05bffc70e9"},"S:8289602f81":{"line":28,"name":"modeVar","path_id":"F:c64c042051"},"S:837b5a8d1e":{"line":38,"name":"runCli","path_id":"F:b16afebae9"},"S:83ad315769":{"line":26,"name":"resolveRepo","path_id":"F:cdbe769ed3"},"S:83b3a2ab69":{"line":443,"name":"invokeRoleToolLoop","path_id":"F:ddeb486c49"},"S:83deb081d9":{"line":25,"name":"CONCEPTS","path_id":"F:f83d1100e9"},"S:84220fc054":{"line":67,"name":"WorkQueueScreen","path_id":"F:9b3f18856e"},"S:842e875c5a":{"line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b"},"S:84b00e90de":{"line":28,"name":"Toggle","path_id":"F:214cc0a5f4"},"S:85083e2f79":{"line":22,"name":"run","path_id":"F:e359adb110"},"S:852d083fcb":{"line":97,"name":"listQueued","path_id":"F:5b113a0914"},"S:856f3a5bea":{"line":28,"name":"ratchetWithTimeout","path_id":"F:8fe56e5618"},"S:8579f519b1":{"line":25,"name":"scaffold","path_id":"F:de5ebbf586"},"S:857ab7696f":{"line":47,"name":"matchesPattern","path_id":"F:fd4b8473fa"},"S:85c852fd1a":{"line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca"},"S:8641765bb2":{"line":34,"name":"formatDuration","path_id":"F:86838d35ac"},"S:8660e770ea":{"line":256,"name":"checkCiJobConflict","path_id":"F:7232ada2da"},"S:867db3037b":{"line":343,"name":"resolveGate","path_id":"F:522efae76d"},"S:86cb290127":{"line":25,"name":"Subject","path_id":"F:0a85f3b8e5"},"S:87013bd4c3":{"line":75,"name":"loadInputs","path_id":"F:780c791407"},"S:870a14c796":{"line":36,"name":"ArmingScreen","path_id":"F:e40ce1af48"},"S:8735f37dad":{"line":288,"name":"adoptCmd","path_id":"F:780c791407"},"S:8761033dfb":{"line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed"},"S:87c8d03eb8":{"line":132,"name":"dirsFromCodeowners","path_id":"F:4096620673"},"S:87ca9c146a":{"line":33,"name":"leaseIsLive","path_id":"F:d135cffeaa"},"S:87ceb91d57":{"line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76"},"S:87fa79bea3":{"line":44,"name":"implementationPaths","path_id":"F:a1baa3f01d"},"S:8822b8498d":{"line":4,"name":"ProgressMeterTone","path_id":"F:9deac13db0"},"S:882efb23a5":{"line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0"},"S:88426a3883":{"line":12,"name":"looksLikeDiff","path_id":"F:872221b1da"},"S:88bc43a62b":{"line":20,"name":"CHANGE_REQUEST_SIGNALS","path_id":"F:851f776227"},"S:88bd705d3f":{"line":64,"name":"badgeJson","path_id":"F:a0d489df6d"},"S:89065c6f4b":{"line":86,"name":"tier1Hit","path_id":"F:9a3e8ed7d2"},"S:890a9e6691":{"line":339,"name":"readGovernance","path_id":"F:dbb9c92ca1"},"S:890ccb5d6b":{"line":168,"name":"fetchPRReviews","path_id":"F:92d6903b5f"},"S:89566a4918":{"line":39,"name":"tierVar","path_id":"F:c64c042051"},"S:895b1937bd":{"line":61,"name":"readConfig","path_id":"F:8a3dd6ccff"},"S:8990e6571f":{"line":118,"name":"parseFlatYaml","path_id":"F:1575110130"},"S:89e92655dd":{"line":57,"name":"normalizeLF","path_id":"F:8a10462927"},"S:8a6e48a119":{"line":378,"name":"checkDependencyConflict","path_id":"F:7232ada2da"},"S:8a971e3c54":{"line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b"},"S:8a9e6199b3":{"line":10,"name":"scratchModonomeDir","path_id":"F:e00aec45ce"},"S:8af9c33a76":{"line":13,"name":"SelectProps","path_id":"F:819f72edf6"},"S:8b3d7e9050":{"line":255,"name":"summaryMessage","path_id":"F:116adfb9f8"},"S:8b67ef3e8b":{"line":266,"name":"workItemFile","path_id":"F:22566cb46e"},"S:8b7542071f":{"line":1,"name":"MESSAGES","path_id":"F:6a86908a3e"},"S:8b9971d92a":{"line":30,"name":"LearningCardProps","path_id":"F:1d03291691"},"S:8bff005013":{"line":16,"name":"runReport","path_id":"F:fadcf390da"},"S:8c2cd9c54f":{"line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca"},"S:8c5294d2ea":{"line":49,"name":"loadAllowlist","path_id":"F:33ffae019c"},"S:8c65a8b2a2":{"line":15,"name":"ActiveWork","path_id":"F:e5e519f441"},"S:8c6ccd3e8b":{"line":64,"name":"listTemplate","path_id":"F:5e450ff82c"},"S:8c83339acb":{"line":25,"name":"IconButton","path_id":"F:a8cfe45d27"},"S:8cd25e6f09":{"line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5"},"S:8cf2204c43":{"line":36,"name":"CostPanelProps","path_id":"F:ce1173e176"},"S:8d10c3ed6e":{"line":13,"name":"makeOrderService","path_id":"F:52caf3b287"},"S:8d131c2429":{"line":121,"name":"isSafeGitRevision","path_id":"F:a0d489df6d"},"S:8d1ca74a54":{"line":29,"name":"leaseHolder","path_id":"F:d135cffeaa"},"S:8d30c800e7":{"line":20,"name":"SNAPSHOT_SCHEMA_VERSION","path_id":"F:dbb9c92ca1"},"S:8d5d2455bf":{"line":51,"name":"ResolvedPanelMessage","path_id":"F:e406ceab72"},"S:8da618623d":{"line":18,"name":"headSha","path_id":"F:1bc6d1449f"},"S:8dfe0cf637":{"line":27,"name":"ProgressMeter","path_id":"F:9deac13db0"},"S:8e42d127b7":{"line":16,"name":"OPEN_STATES","path_id":"F:a1baa3f01d"},"S:8e586c7c13":{"line":60,"name":"commandOnPath","path_id":"F:94050e680d"},"S:8e94f927e1":{"line":64,"name":"mapToCriteria","path_id":"F:2e327963ed"},"S:8ec4bd5dec":{"line":25,"name":"signPacket","path_id":"F:7b3e38c9a6"},"S:8f1da92228":{"line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed"},"S:8f6d716f36":{"line":423,"name":"loadAdapterEntry","path_id":"F:ddeb486c49"},"S:8f93f4689a":{"line":60,"name":"armState","path_id":"F:1e5ef6ba70"},"S:8fc6479414":{"line":78,"name":"getDiff","path_id":"F:116adfb9f8"},"S:8fe737eaa0":{"line":1,"name":"MESSAGES","path_id":"F:964f89b6cc"},"S:90b2cf611f":{"line":255,"name":"diffPosture","path_id":"F:780c791407"},"S:90b86b1f26":{"line":50,"name":"hasChangeRequestSignal","path_id":"F:851f776227"},"S:90f1a56d4e":{"line":180,"name":"hostState","path_id":"F:7d236c9aa6"},"S:91108693ba":{"line":1,"name":"MESSAGES","path_id":"F:d8e37c4449"},"S:914d5cd317":{"line":81,"name":"buildFallbackChain","path_id":"F:ddeb486c49"},"S:91c42b4f27":{"line":23,"name":"read","path_id":"F:4096620673"},"S:9249714b12":{"line":104,"name":"main","path_id":"F:f90930c3c3"},"S:928743a069":{"line":39,"name":"buildLearningRecord","path_id":"F:ac11b5379f"},"S:9287ce102a":{"line":114,"name":"readWorkItems","path_id":"F:8a3dd6ccff"},"S:9299cd9a70":{"line":31,"name":"matches","path_id":"F:c9493b5275"},"S:92bb85bdff":{"line":72,"name":"ConnectionTestResult","path_id":"F:ec52ca3820"},"S:92bd39eb47":{"line":6,"name":"MESSAGES","path_id":"F:5d02ea0b02"},"S:934c97a052":{"line":118,"name":"listFilesRecursive","path_id":"F:7232ada2da"},"S:9382da6a24":{"line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee"},"S:93ab3c1c15":{"line":8,"name":"Checker","path_id":"F:7008a20b1c"},"S:93d0a78f18":{"line":65,"name":"changedPaths","path_id":"F:119e3c0fce"},"S:93e0292f30":{"line":12,"name":"Protected","path_id":"F:13d31b33ea"},"S:93fa315ac7":{"line":48,"name":"fail","path_id":"F:2d4c555ba1"},"S:9435112073":{"line":200,"name":"scanDiff","path_id":"F:116adfb9f8"},"S:94383b0aef":{"line":3,"name":"RefundResult","path_id":"F:93f0f5d3de"},"S:944e1f3b0b":{"line":7,"name":"CAPABILITY_FLAGS","path_id":"F:98529ba7ea"},"S:949f988c9e":{"line":10,"name":"makeDb","path_id":"F:044b762a79"},"S:950b7153af":{"line":141,"name":"scaffoldTripwires","path_id":"F:5e450ff82c"},"S:9554538925":{"line":196,"name":"readPRContext","path_id":"F:92d6903b5f"},"S:95871faa22":{"line":75,"name":"formatNumber","path_id":"F:9deac13db0"},"S:9598b17b9e":{"line":14,"name":"AutoMerge","path_id":"F:a0068c8817"},"S:959be959f7":{"line":134,"name":"planCycle","path_id":"F:ddeb486c49"},"S:95e22729ee":{"line":52,"name":"sleep","path_id":"F:cdbe769ed3"},"S:95e56b0a9c":{"line":27,"name":"Remote","path_id":"F:c63a71fb57"},"S:969658a48c":{"line":91,"name":"sleep","path_id":"F:8d2cb93236"},"S:96b040bf38":{"line":76,"name":"enqueue","path_id":"F:5b113a0914"},"S:96c461f8cd":{"line":6,"name":"Success","path_id":"F:7832db450f"},"S:96e9e4a020":{"line":53,"name":"normalizeTrigger","path_id":"F:aea3c05bca"},"S:96ffd586d6":{"line":19,"name":"tmp","path_id":"F:6da7bd8294"},"S:974654287c":{"line":304,"name":"count","path_id":"F:8a10462927"},"S:979cd75d0e":{"line":144,"name":"regexSafetyProblems","path_id":"F:e7380d1444"},"S:97a7516354":{"line":21,"name":"buildAdjacency","path_id":"F:8b8d3c46b3"},"S:97bc3f0eb4":{"line":22,"name":"deriveArming","path_id":"F:0da05a2a05"},"S:980a6a0449":{"line":81,"name":"findStaleWorkItems","path_id":"F:a1baa3f01d"},"S:982b9fa62d":{"line":46,"name":"stateMachineErrors","path_id":"F:8b8d3c46b3"},"S:98ca1b6552":{"line":1,"name":"MESSAGES","path_id":"F:e9f1cc1e5d"},"S:98d9caecec":{"line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0"},"S:996743005b":{"line":29,"name":"flagValue","path_id":"F:a0d489df6d"},"S:99ae98a428":{"line":71,"name":"walkMd","path_id":"F:fd08562f92"},"S:99c574f83d":{"line":37,"name":"resolveBranchName","path_id":"F:6e0bd62fa3"},"S:9ab63d4bb2":{"line":83,"name":"parseVerdict","path_id":"F:2d6ef08990"},"S:9b166b011e":{"line":3,"name":"IdentityChipRole","path_id":"F:f942e88a8f"},"S:9b40c124ce":{"line":17,"name":"baseCfg","path_id":"F:093689bb8e"},"S:9b986c2d8a":{"line":243,"name":"buildRolePrompt","path_id":"F:ddeb486c49"},"S:9bc07de53c":{"line":181,"name":"GateVM","path_id":"F:0a85f3b8e5"},"S:9bcfb77bfa":{"line":23,"name":"parseCodeowners","path_id":"F:fd4b8473fa"},"S:9c4deaa396":{"line":16,"name":"scanForSecrets","path_id":"F:68c4da7fe8"},"S:9cda312f51":{"line":172,"name":"renderScheduleWorkflow","path_id":"F:aea3c05bca"},"S:9d42aeefd9":{"line":106,"name":"gateGraphErrors","path_id":"F:fc21812307"},"S:9dee57c7c2":{"line":5,"name":"PaymentProcessor","path_id":"F:ff3aef693f"},"S:9e3d232a1b":{"line":44,"name":"fixture","path_id":"F:4fad18c892"},"S:9e9207d834":{"line":67,"name":"detectInstructions","path_id":"F:ae46bbab81"},"S:9ec4198171":{"line":93,"name":"collectNodes","path_id":"F:f51cba9beb"},"S:9ef12b47d5":{"line":63,"name":"DOCUMENTED_STRICT_OVERBLOCKS","path_id":"F:5a3543606b"},"S:9f59110fda":{"line":263,"name":"writeTranscriptAndMetric","path_id":"F:ddeb486c49"},"S:9f6788d90d":{"line":336,"name":"runCli","path_id":"F:116adfb9f8"},"S:9f7fa8d585":{"line":10,"name":"packetContent","path_id":"F:12c7a4e461"},"S:9f9c07db7d":{"line":10,"name":"Model","path_id":"F:08577063d4"},"S:9f9ed94a62":{"line":42,"name":"Table","path_id":"F:a402d2f9ed"},"S:a06feb4e68":{"line":6,"name":"IdentityChipProps","path_id":"F:f942e88a8f"},"S:a07487517b":{"line":25,"name":"getAdapter","path_id":"F:2554ddd30c"},"S:a0db477c6e":{"line":90,"name":"summarize","path_id":"F:2e327963ed"},"S:a0ea4d9d0f":{"line":18,"name":"computePacketId","path_id":"F:12c7a4e461"},"S:a0f5484b98":{"line":77,"name":"IconProps","path_id":"F:deab644e60"},"S:a10a756308":{"line":59,"name":"sendJson","path_id":"F:08b7435c86"},"S:a1107105c3":{"line":26,"name":"tmp","path_id":"F:9cbe9238f8"},"S:a1828ef829":{"line":59,"name":"main","path_id":"F:8bb1b57470"},"S:a1cc5660fe":{"line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca"},"S:a1d4334d94":{"line":44,"name":"App","path_id":"F:113387361d"},"S:a26ee6eefd":{"line":44,"name":"workStateLabels","path_id":"F:c64c042051"},"S:a272c887e3":{"line":82,"name":"toPoints","path_id":"F:c0e80ca327"},"S:a2d5fcb920":{"line":13,"name":"GatesScreen","path_id":"F:304fa8ef33"},"S:a2d9480f78":{"line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5"},"S:a2df9a5c24":{"line":23,"name":"Resolved","path_id":"F:3ce0fd77eb"},"S:a2fef04067":{"line":4,"name":"Budget","path_id":"F:1f40b6eb6e"},"S:a320bea4da":{"line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca"},"S:a337ae8f0b":{"line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5"},"S:a34306cc67":{"line":61,"name":"getDiff","path_id":"F:8a10462927"},"S:a364864213":{"line":53,"name":"listRecords","path_id":"F:5b113a0914"},"S:a3bf9f1833":{"line":4,"name":"QueueBoardProps","path_id":"F:f8609bae0b"},"S:a3ca73d34c":{"line":6,"name":"LearningStatus","path_id":"F:1d03291691"},"S:a3cae87964":{"line":109,"name":"makePlan","path_id":"F:18f569225a"},"S:a3fb13b441":{"line":4,"name":"Tones","path_id":"F:10e76cfcd3"},"S:a4155f5067":{"line":16,"name":"AppShellProps","path_id":"F:268769c4a6"},"S:a48d9e0b16":{"line":13,"name":"budgetTier","path_id":"F:7944059823"},"S:a4a9a79fbe":{"line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5"},"S:a4b6be1d49":{"line":52,"name":"pruneLearningLive","path_id":"F:ec52ca3820"},"S:a4c389d72a":{"line":383,"name":"isVacuousAssertion","path_id":"F:8a10462927"},"S:a4d0ce8fea":{"line":215,"name":"toolValidateConfig","path_id":"F:ab5077147a"},"S:a4e623c70b":{"line":354,"name":"updateWorkItem","path_id":"F:22566cb46e"},"S:a4e7d71500":{"line":48,"name":"isRetryableStatus","path_id":"F:cdbe769ed3"},"S:a50812babf":{"line":59,"name":"handleFromEmail","path_id":"F:fd4b8473fa"},"S:a529342ccb":{"line":18,"name":"currentBranch","path_id":"F:ff2c4a08a4"},"S:a57f8c1bdc":{"line":39,"name":"otherLines","path_id":"F:8b2f3dbcba"},"S:a5baaff840":{"line":12,"name":"modules","path_id":"F:2a74ae3f05"},"S:a63cef8ef8":{"line":4,"name":"Armed","path_id":"F:3319e5c923"},"S:a657233cd5":{"line":98,"name":"matchNearMissBranch","path_id":"F:9a3e8ed7d2"},"S:a6ff0bb6d7":{"line":28,"name":"slugifyId","path_id":"F:ac11b5379f"},"S:a716bbdaa8":{"line":33,"name":"reaches","path_id":"F:8b8d3c46b3"},"S:a75126f856":{"line":233,"name":"buildRunnerEnv","path_id":"F:ddeb486c49"},"S:a76a61b560":{"line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024"},"S:a79dad6e97":{"line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9"},"S:a8971aba2c":{"line":450,"name":"buildTrends","path_id":"F:8a3dd6ccff"},"S:a8a643fda8":{"line":55,"name":"validatePacket","path_id":"F:65193a9799"},"S:a8ccdc0c7d":{"line":118,"name":"parseDiff","path_id":"F:116adfb9f8"},"S:a8f75707be":{"line":306,"name":"makeUnifiedDiff","path_id":"F:522efae76d"},"S:a8fe6446c0":{"line":17,"name":"headSha","path_id":"F:92dde817ee"},"S:a91334a377":{"line":32,"name":"Slider","path_id":"F:81c495717c"},"S:a92333a9ea":{"line":153,"name":"buildPolicyManifestBody","path_id":"F:4db1101024"},"S:a931ad2e62":{"line":46,"name":"resolvePromptText","path_id":"F:23917c6197"},"S:a9b3acb352":{"line":16,"name":"writeRunLog","path_id":"F:3b382f95c0"},"S:a9f138bd93":{"line":10,"name":"signature","path_id":"F:ffe5c1269b"},"S:aa00911a72":{"line":25,"name":"readEvents","path_id":"F:fc5d887ff6"},"S:aa4de9995b":{"line":4,"name":"Trends","path_id":"F:ca13fe2a5b"},"S:aa8f9a7b3d":{"line":122,"name":"captureSegments","path_id":"F:22566cb46e"},"S:aaa1eac555":{"line":47,"name":"adapter","path_id":"F:3213d03b72"},"S:aabd2d1e55":{"line":6,"name":"TableColumn","path_id":"F:a402d2f9ed"},"S:aaca852d2b":{"line":31,"name":"IdentityChip","path_id":"F:f942e88a8f"},"S:aacff6bc1c":{"line":84,"name":"attestationBytes","path_id":"F:780c791407"},"S:ab3548c3d0":{"line":16,"name":"baseCfg","path_id":"F:06b982f5a2"},"S:ab79b43633":{"line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792"},"S:ab8d34f24a":{"line":119,"name":"sweepTarget","path_id":"F:6f247eb514"},"S:abe6a83201":{"line":88,"name":"Icon","path_id":"F:deab644e60"},"S:ac015d1f81":{"line":67,"name":"collectImports","path_id":"F:36419aa427"},"S:ac0d90ea9c":{"line":138,"name":"toWorkItemVM","path_id":"F:8a3dd6ccff"},"S:ac1ae69e0f":{"line":3,"name":"SparklineTone","path_id":"F:c0e80ca327"},"S:ac31df31c0":{"line":113,"name":"writeJson","path_id":"F:eb14a0bdeb"},"S:acc91dc6fe":{"line":210,"name":"verifyCmd","path_id":"F:780c791407"},"S:ad1b93bd0c":{"line":32,"name":"SIGNAL_MAX","path_id":"F:e11f907cba"},"S:ad302fbf54":{"line":5,"name":"makeCartService","path_id":"F:52caf3b287"},"S:ad4edf7e81":{"line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861"},"S:ad7d7732a1":{"line":24,"name":"makeExtract","path_id":"F:cecdb96382"},"S:ad93bbf998":{"line":14,"name":"run","path_id":"F:9f36b3ef29"},"S:ae3c96ae84":{"line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed"},"S:aecf05317d":{"line":28,"name":"buildChatCompletionsUrl","path_id":"F:8d2cb93236"},"S:af1450421c":{"line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e"},"S:af1e7a50ba":{"line":5,"name":"makeDb","path_id":"F:f8168b956f"},"S:af28852c7f":{"line":169,"name":"deepEqualJson","path_id":"F:22566cb46e"},"S:af6abeace9":{"line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c"},"S:afa2ffd4a2":{"line":88,"name":"schedulableCrewRoles","path_id":"F:aea3c05bca"},"S:afdc9fa742":{"line":178,"name":"scanFile","path_id":"F:116adfb9f8"},"S:afe9763761":{"line":3,"name":"RaiseCap","path_id":"F:4387a44284"},"S:b01ec1a6ac":{"line":25,"name":"Gates","path_id":"F:bb6a874d58"},"S:b02fc1cd06":{"line":324,"name":"readDecisions","path_id":"F:8a3dd6ccff"},"S:b06714d9c5":{"line":225,"name":"patchConfig","path_id":"F:22566cb46e"},"S:b06f3444be":{"line":86,"name":"stateWithSource","path_id":"F:08b7435c86"},"S:b121dfe1ec":{"line":141,"name":"matchNearMissText","path_id":"F:9a3e8ed7d2"},"S:b128b3a196":{"line":36,"name":"governanceErrors","path_id":"F:cb3c5f7715"},"S:b1b5323930":{"line":77,"name":"runGate","path_id":"F:f921eecad7"},"S:b1bbb81b82":{"line":30,"name":"Button","path_id":"F:8b122c449e"},"S:b1e3e516c3":{"line":27,"name":"makeFakeSpawn","path_id":"F:ed9c47feb2"},"S:b27476e527":{"line":5,"name":"SparklineProps","path_id":"F:c0e80ca327"},"S:b288f69305":{"line":76,"name":"agentproofScore","path_id":"F:3b382f95c0"},"S:b29d404deb":{"line":186,"name":"buildPolicyManifest","path_id":"F:4db1101024"},"S:b29e93fbc3":{"line":68,"name":"localGitEmail","path_id":"F:fd4b8473fa"},"S:b29fc4b0d5":{"line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d"},"S:b32b89125f":{"line":1,"name":"MESSAGES","path_id":"F:e948251d2b"},"S:b366c411d2":{"line":150,"name":"renderHtml","path_id":"F:128b647d9a"},"S:b3a28348ad":{"line":21,"name":"hasLiveLease","path_id":"F:a1baa3f01d"},"S:b41535d6e7":{"line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5"},"S:b4354229d8":{"line":8,"name":"IconButtonProps","path_id":"F:a8cfe45d27"},"S:b455c897cf":{"line":66,"name":"rel","path_id":"F:780c791407"},"S:b4a3093fe9":{"line":66,"name":"indentOf","path_id":"F:1575110130"},"S:b4b12fd408":{"line":5,"name":"AuditEventKind","path_id":"F:76da13a8f7"},"S:b4e887ed4f":{"line":27,"name":"schemaLevers","path_id":"F:87c30bdb4c"},"S:b5883cd7f4":{"line":1,"name":"MESSAGES","path_id":"F:240ace7a8f"},"S:b5d72ba60f":{"line":8,"name":"ModalProps","path_id":"F:63351e350b"},"S:b65916676a":{"line":98,"name":"successBody","path_id":"F:eb14a0bdeb"},"S:b6cbeed65d":{"line":1,"name":"MESSAGES","path_id":"F:313bcfac46"},"S:b6eeacb415":{"line":4,"name":"Requirement","path_id":"F:3b4065b679"},"S:b6efca77f5":{"line":17,"name":"basename","path_id":"F:2f3e98ab2c"},"S:b6fce3a5a9":{"line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a"},"S:b7db5f4d64":{"line":138,"name":"cleanupTranscripts","path_id":"F:580d11b514"},"S:b815c12407":{"line":1,"name":"MESSAGES","path_id":"F:dd58ae3791"},"S:b81af2dbe4":{"line":462,"name":"latestAgentProofScore","path_id":"F:8a3dd6ccff"},"S:b840cddd67":{"line":20,"name":"readScreens","path_id":"F:1a19f02364"},"S:b8469e1267":{"line":411,"name":"buildAudit","path_id":"F:8a3dd6ccff"},"S:b88ce47ede":{"line":98,"name":"attentionRank","path_id":"F:015261eab0"},"S:b89188d9e3":{"line":76,"name":"main","path_id":"F:09ba331878"},"S:b8cdbe3fd3":{"line":73,"name":"migrate","path_id":"F:9d69a6b766"},"S:b8ed1c85bb":{"line":1,"name":"MESSAGES","path_id":"F:9616513cb6"},"S:b908c74a11":{"line":5,"name":"makeDb","path_id":"F:3c53926ecd"},"S:b919653baa":{"line":44,"name":"DryRun","path_id":"F:2207a6ebce"},"S:b926c18911":{"line":15,"name":"hashString","path_id":"F:2b9c43b0ca"},"S:b97efe3854":{"line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70"},"S:b9942b1651":{"line":11,"name":"runRatchet","path_id":"F:2b49c74e74"},"S:b9d44c6996":{"line":230,"name":"diffSet","path_id":"F:780c791407"},"S:b9ed6b7b01":{"line":44,"name":"buildHeaders","path_id":"F:8d2cb93236"},"S:ba017108fd":{"line":104,"name":"leaseIsLive","path_id":"F:5b113a0914"},"S:ba347c9b77":{"line":4,"name":"Beside","path_id":"F:e19aab09cb"},"S:ba36fd17d6":{"line":100,"name":"collectRows","path_id":"F:128b647d9a"},"S:ba4cb77f9c":{"line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c"},"S:ba5f7d1ffe":{"line":41,"name":"saveCache","path_id":"F:119e3c0fce"},"S:ba65eaae5b":{"line":4,"name":"MESSAGES","path_id":"F:acc3f6b466"},"S:ba7fe0b6d3":{"line":10,"name":"routedConfig","path_id":"F:704e42d42b"},"S:baa16abe42":{"line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70"},"S:baab120dbc":{"line":478,"name":"gitInfo","path_id":"F:8a3dd6ccff"},"S:baacff5701":{"line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee"},"S:bac2ebbef5":{"line":53,"name":"gitCommit","path_id":"F:0391f3b249"},"S:bafcfbb33c":{"line":224,"name":"formatDelta","path_id":"F:3b382f95c0"},"S:bb036fe763":{"line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c"},"S:bb570e99d8":{"line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c"},"S:bb578790a3":{"line":67,"name":"pagerank","path_id":"F:015261eab0"},"S:bb5d1b5426":{"line":1,"name":"MESSAGES","path_id":"F:59b2499e4e"},"S:bb800288d9":{"line":12,"name":"writeRunLog","path_id":"F:6f247eb514"},"S:bbdb581d9d":{"line":5,"name":"SafetyStripProps","path_id":"F:57ca5f1716"},"S:bc1fd2c5b3":{"line":149,"name":"adrNumbers","path_id":"F:fd08562f92"},"S:bc3262b829":{"line":73,"name":"writeArtifact","path_id":"F:a0d489df6d"},"S:bc4bff4faa":{"line":59,"name":"planCommitRewrites","path_id":"F:8ffb11f281"},"S:bc56c13940":{"line":22,"name":"preservingArtifact","path_id":"F:137056535b"},"S:bca7722767":{"line":100,"name":"reviewDiff","path_id":"F:2d6ef08990"},"S:bcddbe684b":{"line":62,"name":"listCaptures","path_id":"F:9344d335a6"},"S:bd1a0a35f8":{"line":35,"name":"Tabs","path_id":"F:1db369d970"},"S:bd63b1e408":{"line":15,"name":"cleanSignature","path_id":"F:594f505f11"},"S:bd7f311fdb":{"line":104,"name":"runToolLoopAdapter","path_id":"F:aa77f227a6"},"S:bd8806c490":{"line":13,"name":"Board","path_id":"F:dd1be2cd7b"},"S:bd9f62784d":{"line":5,"name":"scenario","path_id":"F:28f278b1d9"},"S:be897872b9":{"line":64,"name":"bodyHasUnbounded","path_id":"F:e7380d1444"},"S:bead992b70":{"line":48,"name":"isBillable","path_id":"F:8b5a1f94c4"},"S:bec355e18a":{"line":75,"name":"parseEntries","path_id":"F:1575110130"},"S:bf5cf69681":{"line":13,"name":"refund","path_id":"F:93f0f5d3de"},"S:bfb04089fa":{"line":19,"name":"DEFAULT_QUEUE_DIR","path_id":"F:5b113a0914"},"S:c028c053e3":{"line":357,"name":"invokeRoleOpenAI","path_id":"F:ddeb486c49"},"S:c063b246d1":{"line":54,"name":"loadAndValidateManifest","path_id":"F:f5d313e9f1"},"S:c0981a3461":{"line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c"},"S:c0c2347579":{"line":5,"name":"ButtonVariant","path_id":"F:8b122c449e"},"S:c12913d4da":{"line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9"},"S:c1667b970b":{"line":6,"name":"ProgressMeterProps","path_id":"F:9deac13db0"},"S:c16b3b7bbf":{"line":10,"name":"Board","path_id":"F:6c0919b64e"},"S:c176253e9c":{"line":12,"name":"tmp","path_id":"F:fadcf390da"},"S:c1c63b1bf8":{"line":35,"name":"planFile","path_id":"F:d6401dd73e"},"S:c1e6062cfc":{"line":109,"name":"baseCfg","path_id":"F:ee02e563c6"},"S:c275cb33da":{"line":200,"name":"checkSchemaCollision","path_id":"F:7232ada2da"},"S:c2e502ad5e":{"line":409,"name":"levelFor","path_id":"F:522efae76d"},"S:c2e641f1c8":{"line":106,"name":"runSuite","path_id":"F:23917c6197"},"S:c36223901c":{"line":92,"name":"selfGovernanceOwnership","path_id":"F:fd4b8473fa"},"S:c388580f86":{"line":114,"name":"main","path_id":"F:90cbb2cf6a"},"S:c38d35b211":{"line":4,"name":"Roles","path_id":"F:973aaa9d86"},"S:c3a1d0f1a7":{"line":151,"name":"serializeEntry","path_id":"F:22566cb46e"},"S:c3d94f0812":{"line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a"},"S:c42dd60d39":{"line":126,"name":"sortRows","path_id":"F:128b647d9a"},"S:c44c6a3e42":{"line":35,"name":"parseEvidence","path_id":"F:8abf9e432a"},"S:c44da37a7d":{"line":12,"name":"Dashboard","path_id":"F:2470e60179"},"S:c47beeac78":{"line":11,"name":"normalizeRelative","path_id":"F:015261eab0"},"S:c4e4845bcc":{"line":181,"name":"manifestDigest","path_id":"F:4db1101024"},"S:c504685956":{"line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee"},"S:c52b041088":{"line":102,"name":"exportedRegexSources","path_id":"F:e7380d1444"},"S:c53d33aa2a":{"line":71,"name":"scoreProposals","path_id":"F:e11f907cba"},"S:c546f7913f":{"line":108,"name":"main","path_id":"F:90e1fd2fd9"},"S:c5854b8940":{"line":27,"name":"snapshot","path_id":"F:0103cf3d56"},"S:c63f60f015":{"line":210,"name":"main","path_id":"F:f5d313e9f1"},"S:c68bb17ca2":{"line":17,"name":"TabsProps","path_id":"F:1db369d970"},"S:c6d0684785":{"line":1,"name":"MESSAGES","path_id":"F:b25dcdad19"},"S:c732826ee5":{"line":41,"name":"buildImportGraph","path_id":"F:015261eab0"},"S:c73cab5b60":{"line":42,"name":"ids","path_id":"F:cc65dd1342"},"S:c79db45132":{"line":11,"name":"helpers","path_id":"F:ae46bbab81"},"S:c7db2cc29d":{"line":3,"name":"InventoryService","path_id":"F:bd02b28f17"},"S:c7ebadadb9":{"line":19,"name":"Checking","path_id":"F:f9c98a8642"},"S:c7ef137e46":{"line":69,"name":"WorkItemCard","path_id":"F:b5ae6ee133"},"S:c80f0936ea":{"line":4,"name":"Budget","path_id":"F:a0abaf6a25"},"S:c850118bb2":{"line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94"},"S:c8ee4f2e2e":{"line":40,"name":"makePollutedRepo","path_id":"F:44a5987438"},"S:c928d805b5":{"line":8,"name":"ButtonProps","path_id":"F:8b122c449e"},"S:c932c7339f":{"line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249"},"S:c9785dab7b":{"line":6,"name":"scenario","path_id":"F:d744931e6a"},"S:ca3e7d6f59":{"line":72,"name":"redosFindings","path_id":"F:e7380d1444"},"S:cab56da046":{"line":26,"name":"fetchLiveState","path_id":"F:ec52ca3820"},"S:cab6ecab70":{"line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0"},"S:cb1a5f81e0":{"line":78,"name":"reachableFrom","path_id":"F:f51cba9beb"},"S:cb3211f3c2":{"line":33,"name":"checkLicenses","path_id":"F:cc361bd05a"},"S:cb81b7e05c":{"line":79,"name":"testConnectionLive","path_id":"F:ec52ca3820"},"S:cb8cdfa49f":{"line":15,"name":"ConceptEntry","path_id":"F:f83d1100e9"},"S:cb97c7b3fc":{"line":27,"name":"mark","path_id":"F:9344d335a6"},"S:cbbe6a270b":{"line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e"},"S:cbe5a2e179":{"line":44,"name":"firstCommentLine","path_id":"F:dbb9c92ca1"},"S:cd1b84d7ff":{"line":34,"name":"makeMinimalRepo","path_id":"F:a6d2bd3021"},"S:cd2e7eba8f":{"line":61,"name":"gitCommitAt","path_id":"F:0391f3b249"},"S:cd836c2fc7":{"line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4"},"S:cdac115f81":{"line":46,"name":"runPortabilityCheck","path_id":"F:fd6ebce602"},"S:cde4a28e06":{"line":97,"name":"collectPrFindings","path_id":"F:90e1fd2fd9"},"S:ce2faa5c80":{"line":18,"name":"loadConfig","path_id":"F:d480e40c97"},"S:ce5e964e25":{"line":4,"name":"ArmingMode","path_id":"F:e5e519f441"},"S:cec6405a03":{"line":5,"name":"ArmingStateBadgeProps","path_id":"F:7a1f7d680b"},"S:cecb0a4a33":{"line":248,"name":"main","path_id":"F:128b647d9a"},"S:cefb8c3f64":{"line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5"},"S:cf03857559":{"line":28,"name":"runValidateConfig","path_id":"F:fd6ebce602"},"S:cf3414acc5":{"line":10,"name":"TEST_FILE","path_id":"F:9a72895a04"},"S:cf413b97c8":{"line":113,"name":"write","path_id":"F:780c791407"},"S:cf88d1486b":{"line":16,"name":"run","path_id":"F:5956278014"},"S:cf9af1e29c":{"line":112,"name":"gatesFromVerify","path_id":"F:4db1101024"},"S:cf9f3a025e":{"line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c"},"S:cfdd1d8a7f":{"line":40,"name":"NumberField","path_id":"F:db651caf76"},"S:cfe87f9141":{"line":111,"name":"parseCheckerTelemetry","path_id":"F:851f776227"},"S:d029f96a64":{"line":27,"name":"flagValue","path_id":"F:c72e6949b9"},"S:d0478605fa":{"line":36,"name":"TS_CONFIG","path_id":"F:9a72895a04"},"S:d0587dc399":{"line":1,"name":"MESSAGES","path_id":"F:b2efd505ef"},"S:d0c2835a28":{"line":343,"name":"stripLineLocalNoise","path_id":"F:8a10462927"},"S:d15b7063e3":{"line":76,"name":"roleCrons","path_id":"F:aea3c05bca"},"S:d1b03afffb":{"line":41,"name":"deriveRepoName","path_id":"F:128b647d9a"},"S:d22e005d52":{"line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5"},"S:d240732a9d":{"line":18,"name":"sampleAction","path_id":"F:195e9217ca"},"S:d25b3fbe33":{"line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c"},"S:d293a69125":{"line":49,"name":"LearningCard","path_id":"F:1d03291691"},"S:d2a299acb3":{"line":266,"name":"diffCmd","path_id":"F:780c791407"},"S:d2ef86c19f":{"line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461"},"S:d31fd4dafa":{"line":4,"name":"MESSAGES","path_id":"F:aa27d254da"},"S:d33c2c4d3e":{"line":534,"name":"runRoles","path_id":"F:ddeb486c49"},"S:d3f17c584a":{"line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86"},"S:d412af5fd3":{"line":1,"name":"MESSAGES","path_id":"F:9803feef4a"},"S:d4349c402c":{"line":33,"name":"NEUTRAL_SIGNAL","path_id":"F:e11f907cba"},"S:d439b00c59":{"line":73,"name":"writeRunLog","path_id":"F:522efae76d"},"S:d444b209b8":{"line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0"},"S:d47456131b":{"line":40,"name":"getChangedFiles","path_id":"F:9427d264e6"},"S:d49b633132":{"line":67,"name":"isValidUrl","path_id":"F:4ebf08705b"},"S:d4e650f5ae":{"line":110,"name":"walkRepo","path_id":"F:cb66095cb4"},"S:d4ed2d5fe7":{"line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024"},"S:d4fd7f4ad3":{"line":12,"name":"Pair","path_id":"F:7008a20b1c"},"S:d56c1854d7":{"line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5"},"S:d5719588cb":{"line":48,"name":"llmsText","path_id":"F:a0d489df6d"},"S:d595535449":{"line":9,"name":"names","path_id":"F:2a74ae3f05"},"S:d5a9bb4227":{"line":47,"name":"capDiff","path_id":"F:2d6ef08990"},"S:d6cf821403":{"line":23,"name":"keysFromDeclaration","path_id":"F:5eff4122c0"},"S:d7029fdff9":{"line":26,"name":"isForbiddenIdentity","path_id":"F:e4ff19bbe2"},"S:d7086f2a5b":{"line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e"},"S:d732af6be5":{"line":2,"name":"ClassValue","path_id":"F:7c8d518693"},"S:d737cd7277":{"line":52,"name":"flagValue","path_id":"F:1e5ef6ba70"},"S:d75c32ea9c":{"line":11,"name":"add","path_id":"F:90f0999521"},"S:d761c7660a":{"line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed"},"S:d7a4f68100":{"line":52,"name":"containedCwd","path_id":"F:aa77f227a6"},"S:d7d594dd8d":{"line":15,"name":"multiply","path_id":"F:90f0999521"},"S:d8edda2d76":{"line":12,"name":"makeMinimalRepo","path_id":"F:564b053598"},"S:d92119a484":{"line":113,"name":"matchNearMissIdentity","path_id":"F:9a3e8ed7d2"},"S:d9c2336e09":{"line":376,"name":"readMetrics","path_id":"F:8a3dd6ccff"},"S:d9eda62ca5":{"line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c"},"S:da2f845458":{"line":57,"name":"splitByTabs","path_id":"F:1a19f02364"},"S:da40a0864b":{"line":33,"name":"assertSameSet","path_id":"F:5eff4122c0"},"S:daac1f172a":{"line":12,"name":"cli","path_id":"F:40e4f39b59"},"S:dab0af7046":{"line":53,"name":"readStagedEntries","path_id":"F:4ebb5aa8a0"},"S:dab833b9a8":{"line":25,"name":"RiskTier","path_id":"F:c64c042051"},"S:db0bb71f37":{"line":41,"name":"clampSeverity","path_id":"F:05bffc70e9"},"S:db7c5c1950":{"line":471,"name":"latestGauntletScore","path_id":"F:8a3dd6ccff"},"S:dbaef09fdf":{"line":1,"name":"MESSAGES","path_id":"F:b37de0ee8e"},"S:dbf47f93d3":{"line":288,"name":"renderMarkdown","path_id":"F:dbb9c92ca1"},"S:dc4ac94e5b":{"line":4,"name":"TableColumnAlign","path_id":"F:a402d2f9ed"},"S:dcc6653dc4":{"line":114,"name":"staticPatternSources","path_id":"F:e7380d1444"},"S:dce77ef3c3":{"line":42,"name":"safetyErrors","path_id":"F:d480e40c97"},"S:dd05df51d3":{"line":26,"name":"Promoted","path_id":"F:250c8a0d4a"},"S:dd1940719c":{"line":46,"name":"parseArgs","path_id":"F:edb11415f0"},"S:dd37641bec":{"line":27,"name":"Spend","path_id":"F:e5e519f441"},"S:dd3b976184":{"line":380,"name":"handleRequest","path_id":"F:ab5077147a"},"S:ddc69b10ca":{"line":182,"name":"readForeignPack","path_id":"F:780c791407"},"S:dddb39652d":{"line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5"},"S:ddfea151e8":{"line":4,"name":"TrustedAuthor","path_id":"F:5e207f73c7"},"S:de0b2dc0df":{"line":60,"name":"createGitHubClient","path_id":"F:cdbe769ed3"},"S:de8e4d5857":{"line":128,"name":"digestMismatch","path_id":"F:780c791407"},"S:deea6aabbd":{"line":4,"name":"cx","path_id":"F:7c8d518693"},"S:df1472b647":{"line":47,"name":"docAbove","path_id":"F:36419aa427"},"S:df1c5c3628":{"line":33,"name":"adapter","path_id":"F:c598a2d684"},"S:df5cb6eb12":{"line":110,"name":"recomputeMerkle","path_id":"F:a0d489df6d"},"S:df7a91f366":{"line":29,"name":"extractImportSpecifiers","path_id":"F:b70824b13e"},"S:df7e6c1db0":{"line":4,"name":"Disabled","path_id":"F:28b7af3c53"},"S:dff1725e3b":{"line":37,"name":"Escalated","path_id":"F:f9c98a8642"},"S:e03cf612ca":{"line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5"},"S:e0832e1baa":{"line":8,"name":"withRoot","path_id":"F:ddd82fc886"},"S:e099520832":{"line":66,"name":"proposeControlPanelWork","path_id":"F:6f247eb514"},"S:e09a554f44":{"line":32,"name":"templateLevers","path_id":"F:87c30bdb4c"},"S:e0b068ef78":{"line":31,"name":"TS_SRC","path_id":"F:9a72895a04"},"S:e0eb326a77":{"line":26,"name":"ProtectedPathRow","path_id":"F:d8fb8339ce"},"S:e0f397f4e1":{"line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c"},"S:e15045d8a4":{"line":13,"name":"dryRun","path_id":"F:778c33cdc0"},"S:e152142e8c":{"line":399,"name":"patchMessages","path_id":"F:22566cb46e"},"S:e15dbc7540":{"line":8,"name":"MetricTileProps","path_id":"F:9f0fb6ed8b"},"S:e173063c31":{"line":4,"name":"Queued","path_id":"F:f9c98a8642"},"S:e1813dcc71":{"line":25,"name":"baseCfg","path_id":"F:e2f1b5ac07"},"S:e18ceff2c8":{"line":230,"name":"main","path_id":"F:92d6903b5f"},"S:e193570e9e":{"line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc"},"S:e19487a8ae":{"line":22,"name":"resolveFiles","path_id":"F:ace169adc4"},"S:e23dca26d1":{"line":50,"name":"stripFlags","path_id":"F:116adfb9f8"},"S:e25d17a09c":{"line":17,"name":"SafeDefaults","path_id":"F:3319e5c923"},"S:e2861b1099":{"line":173,"name":"rollback","path_id":"F:1e5ef6ba70"},"S:e2afc6b75b":{"line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c"},"S:e31656bc1d":{"line":33,"name":"readConfig","path_id":"F:940d5f4399"},"S:e3c36060ec":{"line":98,"name":"makeMinimalRepo","path_id":"F:48355ccf4d"},"S:e3f95000e0":{"line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157"},"S:e41c3f2d61":{"line":214,"name":"buildProtectedPaths","path_id":"F:8a3dd6ccff"},"S:e44c445050":{"line":21,"name":"HelpHint","path_id":"F:d5b496b125"},"S:e476893b3b":{"line":190,"name":"show","path_id":"F:780c791407"},"S:e4bb79a957":{"line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c"},"S:e5772fff07":{"line":29,"name":"LocalOnly","path_id":"F:c63a71fb57"},"S:e6654c6139":{"line":59,"name":"gateOrder","path_id":"F:edb11415f0"},"S:e6c1406727":{"line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024"},"S:e6e23439bf":{"line":8,"name":"tempRepo","path_id":"F:cba8f1d03b"},"S:e7e0d4979a":{"line":5,"name":"clean","path_id":"F:ffe5c1269b"},"S:e7f49cafe1":{"line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70"},"S:e80517f20b":{"line":6,"name":"ActivationCheck","path_id":"F:14edab923f"},"S:e89c164d25":{"line":54,"name":"titleFromId","path_id":"F:89aee72994"},"S:e8b27564c5":{"line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70"},"S:e8f6de81b4":{"line":259,"name":"selfTest","path_id":"F:aea3c05bca"},"S:e95adce358":{"line":4,"name":"DryRun","path_id":"F:a0068c8817"},"S:e95e85f904":{"line":5,"name":"SECRET_PATTERNS","path_id":"F:68c4da7fe8"},"S:e96fb86528":{"line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5"},"S:e99608caf1":{"line":17,"name":"SAFE_BRANCH_NAMES","path_id":"F:5a3543606b"},"S:e9e4290005":{"line":67,"name":"buildSnapshot","path_id":"F:dbb9c92ca1"},"S:e9fcedbe8f":{"line":7,"name":"InputProps","path_id":"F:763efdd51c"},"S:ea113218d1":{"line":12,"name":"WorkItemSummary","path_id":"F:b5ae6ee133"},"S:ea1469d710":{"line":70,"name":"validateConfig","path_id":"F:d480e40c97"},"S:ea5d04ea13":{"line":48,"name":"Armed","path_id":"F:2207a6ebce"},"S:ea76c925e2":{"line":32,"name":"enableSnapshot","path_id":"F:5e450ff82c"},"S:ea841eb82d":{"line":49,"name":"diffConfig","path_id":"F:25e649633c"},"S:eaba90daa0":{"line":101,"name":"exists","path_id":"F:7232ada2da"},"S:eb4b11fdf2":{"line":25,"name":"Drawer","path_id":"F:71f0bfb455"},"S:eb51a5641a":{"line":7,"name":"makePacket","path_id":"F:ba97282cf5"},"S:eb647d4678":{"line":27,"name":"StatusPill","path_id":"F:2fc610bd94"},"S:eb67f0edae":{"line":219,"name":"getFileAt","path_id":"F:92d6903b5f"},"S:ebb9dad93b":{"line":12,"name":"tmp","path_id":"F:baf7641a01"},"S:ebd259dfef":{"line":43,"name":"planProposalReview","path_id":"F:2127a8caca"},"S:ebdb053467":{"line":17,"name":"docAbove","path_id":"F:c598a2d684"},"S:ebe2964819":{"line":198,"name":"CostVM","path_id":"F:0a85f3b8e5"},"S:ec18e42e1a":{"line":32,"name":"extractFile","path_id":"F:2554ddd30c"},"S:ec2e53ab2e":{"line":12,"name":"signature","path_id":"F:c598a2d684"},"S:ec6c0b3d73":{"line":250,"name":"RULES","path_id":"F:2f3e98ab2c"},"S:ecd0da924a":{"line":158,"name":"maybeRegisterParser","path_id":"F:a0d489df6d"},"S:ed0a2f8660":{"line":28,"name":"git","path_id":"F:e9479e1a3b"},"S:ed1db0b6bb":{"line":176,"name":"reclaimStale","path_id":"F:5b113a0914"},"S:ed24428ce0":{"line":50,"name":"gitHead","path_id":"F:119e3c0fce"},"S:edacefac29":{"line":19,"name":"Sizes","path_id":"F:f6e100ab45"},"S:edb5058173":{"line":685,"name":"helpUri","path_id":"F:8a10462927"},"S:edd792ec6d":{"line":35,"name":"DOTNET_BUILD","path_id":"F:9a72895a04"},"S:edeb959111":{"line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70"},"S:ee17355d71":{"line":133,"name":"updateSite","path_id":"F:8abf9e432a"},"S:ee3edffdff":{"line":25,"name":"AuditEvent","path_id":"F:76da13a8f7"},"S:ee4deb809d":{"line":290,"name":"checkScriptShadowing","path_id":"F:7232ada2da"},"S:ee5246d16c":{"line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b"},"S:ee57130d72":{"line":2,"name":"MESSAGES","path_id":"F:ccb72910b3"},"S:ee9b2c90d1":{"line":53,"name":"walk","path_id":"F:ca0833ac73"},"S:efe9cb11d4":{"line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130"},"S:efea80af4e":{"line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e"},"S:eff02f504b":{"line":689,"name":"toFindings","path_id":"F:8a10462927"},"S:f034e67219":{"line":41,"name":"normalizeLF","path_id":"F:116adfb9f8"},"S:f040dfb6c9":{"line":15,"name":"run","path_id":"F:e540f7b669"},"S:f0db7341e7":{"line":89,"name":"productState","path_id":"F:89aee72994"},"S:f12376c7b1":{"line":136,"name":"readDiff","path_id":"F:2d6ef08990"},"S:f22a53ac17":{"line":305,"name":"createWorkItem","path_id":"F:22566cb46e"},"S:f2642efdc2":{"line":14,"name":"MdnRoot","path_id":"F:90fc20ddd8"},"S:f2e1ea8458":{"line":16,"name":"deriveMode","path_id":"F:0da05a2a05"},"S:f2e55d9b4a":{"line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed"},"S:f2f7e716af":{"line":50,"name":"makeBoundaryFixture","path_id":"F:df4b55ecef"},"S:f36d6a8da6":{"line":12,"name":"buildRemediationView","path_id":"F:5daab9894d"},"S:f3b8628cdb":{"line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9"},"S:f3d272846b":{"line":24,"name":"TierBadge","path_id":"F:da42f69531"},"S:f3e5c99141":{"line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5"},"S:f40a6dfd1b":{"line":499,"name":"gitCommits","path_id":"F:8a3dd6ccff"},"S:f43dc8ad19":{"line":1,"name":"MESSAGES","path_id":"F:9b01a5cd4d"},"S:f4e42f5cd6":{"line":75,"name":"applyAllowlist","path_id":"F:33ffae019c"},"S:f51dd29844":{"line":145,"name":"normalizePaths","path_id":"F:4db1101024"},"S:f5a168e2ff":{"line":325,"name":"checkEnvPollution","path_id":"F:7232ada2da"},"S:f5a71d2ca6":{"line":19,"name":"runScript","path_id":"F:bbb6476d71"},"S:f613554429":{"line":327,"name":"toolVerifyAttestation","path_id":"F:ab5077147a"},"S:f6264503e8":{"line":1,"name":"MESSAGES","path_id":"F:a104667369"},"S:f650b22681":{"line":51,"name":"TIER2_TOKENS","path_id":"F:9a3e8ed7d2"},"S:f71a25079c":{"line":549,"name":"main","path_id":"F:ddeb486c49"},"S:f794e6adf4":{"line":6,"name":"typeOf","path_id":"F:34cb2b6c48"},"S:f8004b7b76":{"line":475,"name":"invokeRole","path_id":"F:ddeb486c49"},"S:f80ff247d7":{"line":1,"name":"MESSAGES","path_id":"F:c6bd51a324"},"S:f8524caefc":{"line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9"},"S:f88498de73":{"line":60,"name":"ATTESTATION_DOMAIN","path_id":"F:780c791407"},"S:f88ca29ea3":{"line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c"},"S:f93b3b8c7c":{"line":95,"name":"buildEvidence","path_id":"F:2e327963ed"},"S:f988f356bd":{"line":4,"name":"Variants","path_id":"F:f6e100ab45"},"S:f99cb9f35c":{"line":63,"name":"determinismBoundaryErrors","path_id":"F:fc21812307"},"S:f99d630708":{"line":76,"name":"pickCodeowners","path_id":"F:fd4b8473fa"},"S:f9a749a2b1":{"line":123,"name":"deleteWorkItemLive","path_id":"F:ec52ca3820"},"S:f9a8f3309b":{"line":25,"name":"scaffold","path_id":"F:940d5f4399"},"S:f9d6a590e4":{"line":14,"name":"docAbove","path_id":"F:ffe5c1269b"},"S:fa36ece453":{"line":5,"name":"CarouselProps","path_id":"F:d20e4b6b91"},"S:fa6785fa4b":{"line":1,"name":"MESSAGES","path_id":"F:3f1216fc11"},"S:fa71aef711":{"line":169,"name":"formatStagedLine","path_id":"F:9a3e8ed7d2"},"S:fb06279d5d":{"line":48,"name":"normalizeSignals","path_id":"F:e11f907cba"},"S:fb4a6826d7":{"line":54,"name":"fakeGitEmail","path_id":"F:d0da1cab80"},"S:fb6bf396bc":{"line":61,"name":"planReview","path_id":"F:2d6ef08990"},"S:fb81ef11a3":{"line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b"},"S:fc01241f03":{"line":13,"name":"cfg","path_id":"F:1bcaaff9eb"},"S:fc28898c78":{"line":44,"name":"resolveToken","path_id":"F:cdbe769ed3"},"S:fc3bb4bc24":{"line":44,"name":"collectFindings","path_id":"F:90e1fd2fd9"},"S:fc6086da9e":{"line":178,"name":"parseFlatYaml","path_id":"F:7232ada2da"},"S:fc6f0e771f":{"line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94"},"S:fc7eb05498":{"line":9,"name":"ArmingMode","path_id":"F:c64c042051"},"S:fc880b17bd":{"line":56,"name":"readOrNull","path_id":"F:4db1101024"},"S:fcf3c9d4a4":{"line":40,"name":"run","path_id":"F:4fad18c892"},"S:fd230402e2":{"line":323,"name":"deconfuse","path_id":"F:8a10462927"},"S:fd2e16186e":{"line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0"},"S:fd42584b25":{"line":1,"name":"MESSAGES","path_id":"F:efa02030ca"},"S:fd58589dfa":{"line":127,"name":"makePlan","path_id":"F:580d11b514"},"S:fd822bf451":{"line":45,"name":"tryTransition","path_id":"F:d135cffeaa"},"S:fd88bace68":{"line":87,"name":"isRetryableStatus","path_id":"F:8d2cb93236"},"S:fd9d32de9a":{"line":272,"name":"releaseLease","path_id":"F:22566cb46e"},"S:fdc2a33d21":{"line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157"},"S:fdf5ba078f":{"line":1,"name":"MESSAGES","path_id":"F:e2025a4e0c"},"S:fe07a3bcbc":{"line":13,"name":"gitRepo","path_id":"F:de5ebbf586"},"S:fe1a464205":{"line":60,"name":"applyPatch","path_id":"F:872221b1da"},"S:fe27a88258":{"line":149,"name":"hasEligibleApproval","path_id":"F:92d6903b5f"},"S:fe41df17f9":{"line":325,"name":"invokeRoleClaudeCli","path_id":"F:ddeb486c49"},"S:fe9c17eefa":{"line":12,"name":"tmp","path_id":"F:d7d4e8d2a9"},"S:fea88d42b6":{"line":5,"name":"TierBadgeProps","path_id":"F:da42f69531"},"S:fedbb5f441":{"line":4,"name":"NotificationService","path_id":"F:b9d806ba4d"},"S:ff45c441d1":{"line":67,"name":"canReach","path_id":"F:37f4a5c04e"},"S:fff471613b":{"line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53"}}},"edges":[{"from":"F:015261eab0","to":"F:f51cba9beb"},{"from":"F:03f476958e","to":"F:05a0f0d5a5"},{"from":"F:03f476958e","to":"F:09ea014068"},{"from":"F:03f476958e","to":"F:0c731e3460"},{"from":"F:03f476958e","to":"F:1127892e72"},{"from":"F:03f476958e","to":"F:179564da6f"},{"from":"F:03f476958e","to":"F:1ff2bf39a4"},{"from":"F:03f476958e","to":"F:2215d0e1fc"},{"from":"F:03f476958e","to":"F:23dbdd7e76"},{"from":"F:03f476958e","to":"F:240ace7a8f"},{"from":"F:03f476958e","to":"F:2715f09f24"},{"from":"F:03f476958e","to":"F:313bcfac46"},{"from":"F:03f476958e","to":"F:33c4d744f3"},{"from":"F:03f476958e","to":"F:35d4a12b63"},{"from":"F:03f476958e","to":"F:3835919e8e"},{"from":"F:03f476958e","to":"F:3f1216fc11"},{"from":"F:03f476958e","to":"F:40d8f235fd"},{"from":"F:03f476958e","to":"F:4d08d5472f"},{"from":"F:03f476958e","to":"F:597cc7ae15"},{"from":"F:03f476958e","to":"F:59b2499e4e"},{"from":"F:03f476958e","to":"F:5b5b4ddcae"},{"from":"F:03f476958e","to":"F:5d02ea0b02"},{"from":"F:03f476958e","to":"F:5d52d97b8a"},{"from":"F:03f476958e","to":"F:6a86908a3e"},{"from":"F:03f476958e","to":"F:86fd2cf669"},{"from":"F:03f476958e","to":"F:91e24dcac0"},{"from":"F:03f476958e","to":"F:9616513cb6"},{"from":"F:03f476958e","to":"F:964f89b6cc"},{"from":"F:03f476958e","to":"F:973aca5f3e"},{"from":"F:03f476958e","to":"F:9803feef4a"},{"from":"F:03f476958e","to":"F:99251bc045"},{"from":"F:03f476958e","to":"F:9a32917e56"},{"from":"F:03f476958e","to":"F:9b01a5cd4d"},{"from":"F:03f476958e","to":"F:9dbf431d3e"},{"from":"F:03f476958e","to":"F:a104667369"},{"from":"F:03f476958e","to":"F:a5822fdd03"},{"from":"F:03f476958e","to":"F:a8c32b8f15"},{"from":"F:03f476958e","to":"F:aa27d254da"},{"from":"F:03f476958e","to":"F:acc3f6b466"},{"from":"F:03f476958e","to":"F:b25dcdad19"},{"from":"F:03f476958e","to":"F:b2efd505ef"},{"from":"F:03f476958e","to":"F:b37de0ee8e"},{"from":"F:03f476958e","to":"F:b4f4e16ca1"},{"from":"F:03f476958e","to":"F:b502a0fe75"},{"from":"F:03f476958e","to":"F:bf4e255c6e"},{"from":"F:03f476958e","to":"F:c6bd51a324"},{"from":"F:03f476958e","to":"F:ccb72910b3"},{"from":"F:03f476958e","to":"F:d288a78085"},{"from":"F:03f476958e","to":"F:d328f97d94"},{"from":"F:03f476958e","to":"F:d8e37c4449"},{"from":"F:03f476958e","to":"F:da9133a29d"},{"from":"F:03f476958e","to":"F:dd58ae3791"},{"from":"F:03f476958e","to":"F:de188c1b79"},{"from":"F:03f476958e","to":"F:e2025a4e0c"},{"from":"F:03f476958e","to":"F:e6677dcd37"},{"from":"F:03f476958e","to":"F:e948251d2b"},{"from":"F:03f476958e","to":"F:e9f1cc1e5d"},{"from":"F:03f476958e","to":"F:ec3aa9930a"},{"from":"F:03f476958e","to":"F:efa02030ca"},{"from":"F:03f476958e","to":"F:f41378fed0"},{"from":"F:044b762a79","to":"F:1ecd18c4b9"},{"from":"F:059f9a812c","to":"F:cc361bd05a"},{"from":"F:05bffc70e9","to":"F:03f476958e"},{"from":"F:05bffc70e9","to":"F:1575110130"},{"from":"F:05bffc70e9","to":"F:34cb2b6c48"},{"from":"F:06b982f5a2","to":"F:ddeb486c49"},{"from":"F:06b982f5a2","to":"F:fd660a117b"},{"from":"F:08064e0c53","to":"F:2fc610bd94"},{"from":"F:08064e0c53","to":"F:71f0bfb455"},{"from":"F:08064e0c53","to":"F:b5ae6ee133"},{"from":"F:08064e0c53","to":"F:c64c042051"},{"from":"F:08064e0c53","to":"F:da42f69531"},{"from":"F:08064e0c53","to":"F:f942e88a8f"},{"from":"F:08441e59e8","to":"F:65193a9799"},{"from":"F:08b7435c86","to":"F:22566cb46e"},{"from":"F:08b7435c86","to":"F:8a3dd6ccff"},{"from":"F:08b7435c86","to":"F:fd4b8473fa"},{"from":"F:093689bb8e","to":"F:ddeb486c49"},{"from":"F:093689bb8e","to":"F:fd660a117b"},{"from":"F:09ba331878","to":"F:05bffc70e9"},{"from":"F:09ba331878","to":"F:4ebb5aa8a0"},{"from":"F:09ba331878","to":"F:ff2c4a08a4"},{"from":"F:0a1a9270a7","to":"F:583edef643"},{"from":"F:0c1c5ad5d9","to":"F:05bffc70e9"},{"from":"F:0c1c5ad5d9","to":"F:0cacf66a3b"},{"from":"F:0c1c5ad5d9","to":"F:245efb551c"},{"from":"F:0c1c5ad5d9","to":"F:65193a9799"},{"from":"F:0cc3e727ed","to":"F:763efdd51c"},{"from":"F:0e9e38f100","to":"F:ab334f34df"},{"from":"F:113387361d","to":"F:0a85f3b8e5"},{"from":"F:113387361d","to":"F:304fa8ef33"},{"from":"F:113387361d","to":"F:3c479cac6e"},{"from":"F:113387361d","to":"F:4ebf08705b"},{"from":"F:113387361d","to":"F:6627655633"},{"from":"F:113387361d","to":"F:757a70680a"},{"from":"F:113387361d","to":"F:95d4304133"},{"from":"F:113387361d","to":"F:9b3f18856e"},{"from":"F:113387361d","to":"F:e40ce1af48"},{"from":"F:114d351bdc","to":"F:1575110130"},{"from":"F:114d351bdc","to":"F:34cb2b6c48"},{"from":"F:114d351bdc","to":"F:932d33be00"},{"from":"F:114d351bdc","to":"F:9d69a6b766"},{"from":"F:116adfb9f8","to":"F:05bffc70e9"},{"from":"F:116adfb9f8","to":"F:2d93cea2d4"},{"from":"F:116adfb9f8","to":"F:2f3e98ab2c"},{"from":"F:116adfb9f8","to":"F:33ffae019c"},{"from":"F:12c7a4e461","to":"F:245efb551c"},{"from":"F:146a198c06","to":"F:d20e4b6b91"},{"from":"F:14edab923f","to":"F:7c8d518693"},{"from":"F:14edab923f","to":"F:8b122c449e"},{"from":"F:14edab923f","to":"F:c64c042051"},{"from":"F:14edab923f","to":"F:deab644e60"},{"from":"F:168fe4d371","to":"F:09ba331878"},{"from":"F:1714946cc1","to":"F:05bffc70e9"},{"from":"F:1714946cc1","to":"F:1a19f02364"},{"from":"F:1716017e02","to":"F:90fc20ddd8"},{"from":"F:182dcaa949","to":"F:956332d4b5"},{"from":"F:18f569225a","to":"F:ddeb486c49"},{"from":"F:18f569225a","to":"F:eb14a0bdeb"},{"from":"F:1a137480ae","to":"F:7c8d518693"},{"from":"F:1a137480ae","to":"F:deab644e60"},{"from":"F:1bc04b108f","to":"F:e7380d1444"},{"from":"F:1bcaaff9eb","to":"F:932d33be00"},{"from":"F:1bcaaff9eb","to":"F:ddeb486c49"},{"from":"F:1bcaaff9eb","to":"F:fd660a117b"},{"from":"F:1c1d4f7335","to":"F:819f72edf6"},{"from":"F:1d03291691","to":"F:2fc610bd94"},{"from":"F:1d03291691","to":"F:40eb542a82"},{"from":"F:1d03291691","to":"F:8b122c449e"},{"from":"F:1db369d970","to":"F:7c8d518693"},{"from":"F:1db369d970","to":"F:deab644e60"},{"from":"F:1e15c1666f","to":"F:4dabd020df"},{"from":"F:1e15c1666f","to":"F:cdbe769ed3"},{"from":"F:1e5ef6ba70","to":"F:05bffc70e9"},{"from":"F:1e5ef6ba70","to":"F:4a7eaceb5c"},{"from":"F:1e5ef6ba70","to":"F:8ffb11f281"},{"from":"F:1e5ef6ba70","to":"F:932d33be00"},{"from":"F:1e5ef6ba70","to":"F:ff2c4a08a4"},{"from":"F:2127a8caca","to":"F:304ce7b89d"},{"from":"F:2127a8caca","to":"F:8d2cb93236"},{"from":"F:2127a8caca","to":"F:932d33be00"},{"from":"F:214cc0a5f4","to":"F:7c8d518693"},{"from":"F:214cc0a5f4","to":"F:d5b496b125"},{"from":"F:22566cb46e","to":"F:05bffc70e9"},{"from":"F:22566cb46e","to":"F:1575110130"},{"from":"F:22566cb46e","to":"F:54df44aadd"},{"from":"F:22566cb46e","to":"F:cb3c5f7715"},{"from":"F:22566cb46e","to":"F:d480e40c97"},{"from":"F:22fab804b1","to":"F:94050e680d"},{"from":"F:23917c6197","to":"F:05bffc70e9"},{"from":"F:2554ddd30c","to":"F:3213d03b72"},{"from":"F:2554ddd30c","to":"F:36419aa427"},{"from":"F:2554ddd30c","to":"F:594f505f11"},{"from":"F:2554ddd30c","to":"F:c598a2d684"},{"from":"F:2554ddd30c","to":"F:ffe5c1269b"},{"from":"F:25e649633c","to":"F:0a85f3b8e5"},{"from":"F:268769c4a6","to":"F:7c8d518693"},{"from":"F:268769c4a6","to":"F:deab644e60"},{"from":"F:2a74ae3f05","to":"F:2554ddd30c"},{"from":"F:2a74ae3f05","to":"F:cecdb96382"},{"from":"F:2af556d595","to":"F:05bffc70e9"},{"from":"F:2af556d595","to":"F:1575110130"},{"from":"F:2b9c43b0ca","to":"F:245efb551c"},{"from":"F:2d4c555ba1","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:05bffc70e9"},{"from":"F:2d6c10ab08","to":"F:1a19f02364"},{"from":"F:2d6ef08990","to":"F:304ce7b89d"},{"from":"F:2d6ef08990","to":"F:8d2cb93236"},{"from":"F:2d6ef08990","to":"F:932d33be00"},{"from":"F:2e564caf6e","to":"F:05bffc70e9"},{"from":"F:2e564caf6e","to":"F:33ffae019c"},{"from":"F:2f3e98ab2c","to":"F:68c4da7fe8"},{"from":"F:2f6c42c5ee","to":"F:deab644e60"},{"from":"F:2fc610bd94","to":"F:7c8d518693"},{"from":"F:2fc610bd94","to":"F:deab644e60"},{"from":"F:304ce7b89d","to":"F:8b5a1f94c4"},{"from":"F:304fa8ef33","to":"F:0a85f3b8e5"},{"from":"F:304fa8ef33","to":"F:3c479cac6e"},{"from":"F:304fa8ef33","to":"F:e406ceab72"},{"from":"F:31d378932b","to":"F:05bffc70e9"},{"from":"F:31d378932b","to":"F:4ebb5aa8a0"},{"from":"F:33ffae019c","to":"F:2f3e98ab2c"},{"from":"F:33ffae019c","to":"F:34cb2b6c48"},{"from":"F:35c6d59157","to":"F:7c8d518693"},{"from":"F:35c6d59157","to":"F:deab644e60"},{"from":"F:373a946d5c","to":"F:ff3aef693f"},{"from":"F:373fee03a1","to":"F:08064e0c53"},{"from":"F:37f4a5c04e","to":"F:05bffc70e9"},{"from":"F:398655650f","to":"F:1575110130"},{"from":"F:398655650f","to":"F:304ce7b89d"},{"from":"F:398655650f","to":"F:932d33be00"},{"from":"F:3a2345f153","to":"F:b014028f57"},{"from":"F:3c53926ecd","to":"F:599f5b2f28"},{"from":"F:3d95ec2ed5","to":"F:68c4da7fe8"},{"from":"F:3dd926c4de","to":"F:f8609bae0b"},{"from":"F:3de9042953","to":"F:0c1c5ad5d9"},{"from":"F:3de9042953","to":"F:12c7a4e461"},{"from":"F:3de9042953","to":"F:245efb551c"},{"from":"F:3de9042953","to":"F:7b3e38c9a6"},{"from":"F:3fe6b95e07","to":"F:66264a042c"},{"from":"F:4096620673","to":"F:05bffc70e9"},{"from":"F:4096620673","to":"F:1575110130"},{"from":"F:4096620673","to":"F:34cb2b6c48"},{"from":"F:40eb542a82","to":"F:7c8d518693"},{"from":"F:40eb542a82","to":"F:d5b496b125"},{"from":"F:4377343f4f","to":"F:ddeb486c49"},{"from":"F:44a5987438","to":"F:4a7eaceb5c"},{"from":"F:4637e1fecb","to":"F:119e3c0fce"},{"from":"F:4637e1fecb","to":"F:245efb551c"},{"from":"F:4637e1fecb","to":"F:dbb9c92ca1"},{"from":"F:46c40327ad","to":"F:40eb542a82"},{"from":"F:4749cc43a0","to":"F:05bffc70e9"},{"from":"F:48355ccf4d","to":"F:34cb2b6c48"},{"from":"F:4a7eaceb5c","to":"F:6e0bd62fa3"},{"from":"F:4a7eaceb5c","to":"F:e4ff19bbe2"},{"from":"F:4b7eb18a4b","to":"F:da42f69531"},{"from":"F:4b91a9f65b","to":"F:68c4da7fe8"},{"from":"F:4c741a5b06","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:245efb551c"},{"from":"F:4db1101024","to":"F:6e0bd62fa3"},{"from":"F:4db1101024","to":"F:98529ba7ea"},{"from":"F:4ebb5aa8a0","to":"F:05bffc70e9"},{"from":"F:4ebf08705b","to":"F:0a85f3b8e5"},{"from":"F:4ebf08705b","to":"F:25e649633c"},{"from":"F:4ebf08705b","to":"F:3c479cac6e"},{"from":"F:4ebf08705b","to":"F:e406ceab72"},{"from":"F:4ebf08705b","to":"F:ec52ca3820"},{"from":"F:4fad18c892","to":"F:33ffae019c"},{"from":"F:4fd28fc2ff","to":"F:05bffc70e9"},{"from":"F:4fd28fc2ff","to":"F:1575110130"},{"from":"F:500dd805f6","to":"F:35c6d59157"},{"from":"F:52338ea290","to":"F:eb14a0bdeb"},{"from":"F:52caf3b287","to":"F:54c6928de9"},{"from":"F:52ef6ad4a1","to":"F:4ebb5aa8a0"},{"from":"F:54784dcc0a","to":"F:33ffae019c"},{"from":"F:57ca5f1716","to":"F:2fc610bd94"},{"from":"F:57ca5f1716","to":"F:d5b496b125"},{"from":"F:580d11b514","to":"F:872221b1da"},{"from":"F:580d11b514","to":"F:ddeb486c49"},{"from":"F:580d11b514","to":"F:eb14a0bdeb"},{"from":"F:583edef643","to":"F:2fc610bd94"},{"from":"F:583edef643","to":"F:40eb542a82"},{"from":"F:583edef643","to":"F:8b122c449e"},{"from":"F:596687118c","to":"F:63351e350b"},{"from":"F:5994385869","to":"F:f07f8ebca9"},{"from":"F:5b113a0914","to":"F:05bffc70e9"},{"from":"F:5b113a0914","to":"F:34cb2b6c48"},{"from":"F:5daab9894d","to":"F:8ffb11f281"},{"from":"F:5e450ff82c","to":"F:a7ce0f6452"},{"from":"F:5f7910375b","to":"F:05bffc70e9"},{"from":"F:5f7910375b","to":"F:1575110130"},{"from":"F:5f7910375b","to":"F:f07f8ebca9"},{"from":"F:5f88bf32ca","to":"F:1d03291691"},{"from":"F:60548316f5","to":"F:f90930c3c3"},{"from":"F:61296e720c","to":"F:05bffc70e9"},{"from":"F:61296e720c","to":"F:6e0bd62fa3"},{"from":"F:61296e720c","to":"F:e4ff19bbe2"},{"from":"F:63351e350b","to":"F:7c8d518693"},{"from":"F:63351e350b","to":"F:a8cfe45d27"},{"from":"F:63c1c23ccb","to":"F:63351e350b"},{"from":"F:63c1c23ccb","to":"F:8b122c449e"},{"from":"F:65193a9799","to":"F:05bffc70e9"},{"from":"F:65193a9799","to":"F:34cb2b6c48"},{"from":"F:65193a9799","to":"F:68c4da7fe8"},{"from":"F:66264a042c","to":"F:7c8d518693"},{"from":"F:66264a042c","to":"F:deab644e60"},{"from":"F:6627655633","to":"F:0a85f3b8e5"},{"from":"F:6627655633","to":"F:f83d1100e9"},{"from":"F:667ef091ca","to":"F:14edab923f"},{"from":"F:686a544e0e","to":"F:2d6ef08990"},{"from":"F:698ea4b2e9","to":"F:ddeb486c49"},{"from":"F:6bfa4389b5","to":"F:2fc610bd94"},{"from":"F:6f247eb514","to":"F:1a19f02364"},{"from":"F:6f247eb514","to":"F:ae46bbab81"},{"from":"F:6f247eb514","to":"F:e11f907cba"},{"from":"F:7054844360","to":"F:7c8d518693"},{"from":"F:7054844360","to":"F:d5b496b125"},{"from":"F:7054844360","to":"F:deab644e60"},{"from":"F:70d12a92c6","to":"F:7a1f7d680b"},{"from":"F:71f0bfb455","to":"F:a8cfe45d27"},{"from":"F:7232ada2da","to":"F:05bffc70e9"},{"from":"F:757a70680a","to":"F:0a85f3b8e5"},{"from":"F:757a70680a","to":"F:3c479cac6e"},{"from":"F:757a70680a","to":"F:e406ceab72"},{"from":"F:758ab56395","to":"F:5a3543606b"},{"from":"F:758ab56395","to":"F:e8676a18b7"},{"from":"F:763efdd51c","to":"F:7c8d518693"},{"from":"F:763efdd51c","to":"F:d5b496b125"},{"from":"F:763efdd51c","to":"F:deab644e60"},{"from":"F:76da13a8f7","to":"F:86838d35ac"},{"from":"F:76da13a8f7","to":"F:deab644e60"},{"from":"F:780c791407","to":"F:05bffc70e9"},{"from":"F:780c791407","to":"F:1575110130"},{"from":"F:780c791407","to":"F:245efb551c"},{"from":"F:780c791407","to":"F:2d93cea2d4"},{"from":"F:780c791407","to":"F:34cb2b6c48"},{"from":"F:780c791407","to":"F:4db1101024"},{"from":"F:7a1f7d680b","to":"F:7c8d518693"},{"from":"F:7a1f7d680b","to":"F:c64c042051"},{"from":"F:7a1f7d680b","to":"F:deab644e60"},{"from":"F:7b3e38c9a6","to":"F:05bffc70e9"},{"from":"F:7b3e38c9a6","to":"F:245efb551c"},{"from":"F:7d236c9aa6","to":"F:0a85f3b8e5"},{"from":"F:815abebda1","to":"F:63c1c23ccb"},{"from":"F:819f72edf6","to":"F:7c8d518693"},{"from":"F:819f72edf6","to":"F:d5b496b125"},{"from":"F:819f72edf6","to":"F:deab644e60"},{"from":"F:81c495717c","to":"F:7c8d518693"},{"from":"F:81c495717c","to":"F:d5b496b125"},{"from":"F:828cf970bc","to":"F:304ce7b89d"},{"from":"F:849bc0a60f","to":"F:a402d2f9ed"},{"from":"F:85e076f56b","to":"F:deab644e60"},{"from":"F:868321590c","to":"F:05bffc70e9"},{"from":"F:868321590c","to":"F:1575110130"},{"from":"F:868321590c","to":"F:f07f8ebca9"},{"from":"F:87c30bdb4c","to":"F:05bffc70e9"},{"from":"F:87c30bdb4c","to":"F:1575110130"},{"from":"F:87c30bdb4c","to":"F:9d69a6b766"},{"from":"F:885187507a","to":"F:113387361d"},{"from":"F:885187507a","to":"F:4a6129eacb"},{"from":"F:89aee72994","to":"F:0a85f3b8e5"},{"from":"F:89f25e2f3d","to":"F:1db369d970"},{"from":"F:8a10462927","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:05bffc70e9"},{"from":"F:8a3dd6ccff","to":"F:54df44aadd"},{"from":"F:8a3dd6ccff","to":"F:5daab9894d"},{"from":"F:8a9aff1529","to":"F:7c8d518693"},{"from":"F:8aa9ba4dcb","to":"F:d135cffeaa"},{"from":"F:8abf9e432a","to":"F:05bffc70e9"},{"from":"F:8b122c449e","to":"F:7c8d518693"},{"from":"F:8b122c449e","to":"F:deab644e60"},{"from":"F:8b2f3dbcba","to":"F:1575110130"},{"from":"F:8b2f3dbcba","to":"F:22566cb46e"},{"from":"F:8b2f3dbcba","to":"F:304ce7b89d"},{"from":"F:8b2f3dbcba","to":"F:d480e40c97"},{"from":"F:8b2f3dbcba","to":"F:ddeb486c49"},{"from":"F:8b7ee49cdd","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:05bffc70e9"},{"from":"F:8b8d3c46b3","to":"F:f51cba9beb"},{"from":"F:8bb1b57470","to":"F:1ecd18c4b9"},{"from":"F:8bb1b57470","to":"F:54c6928de9"},{"from":"F:8bb1b57470","to":"F:599f5b2f28"},{"from":"F:8bb1b57470","to":"F:b9d806ba4d"},{"from":"F:8bb1b57470","to":"F:bd02b28f17"},{"from":"F:8bb1b57470","to":"F:ff3aef693f"},{"from":"F:8c6234a8cb","to":"F:2fc610bd94"},{"from":"F:8c6234a8cb","to":"F:7c8d518693"},{"from":"F:8c6234a8cb","to":"F:86838d35ac"},{"from":"F:8c6234a8cb","to":"F:deab644e60"},{"from":"F:8d2cb93236","to":"F:05bffc70e9"},{"from":"F:8fe56e5618","to":"F:1575110130"},{"from":"F:8fe56e5618","to":"F:65193a9799"},{"from":"F:8fe56e5618","to":"F:932d33be00"},{"from":"F:8ffb11f281","to":"F:4a7eaceb5c"},{"from":"F:9040e0c030","to":"F:2f6c42c5ee"},{"from":"F:90cbb2cf6a","to":"F:34cb2b6c48"},{"from":"F:90e1fd2fd9","to":"F:05bffc70e9"},{"from":"F:90e1fd2fd9","to":"F:cdbe769ed3"},{"from":"F:90e1fd2fd9","to":"F:ff2c4a08a4"},{"from":"F:90fc20ddd8","to":"F:7c8d518693"},{"from":"F:9204ee9f08","to":"F:9f0fb6ed8b"},{"from":"F:92d6903b5f","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:05bffc70e9"},{"from":"F:932d33be00","to":"F:d480e40c97"},{"from":"F:933d506be9","to":"F:34cb2b6c48"},{"from":"F:933d506be9","to":"F:98529ba7ea"},{"from":"F:9344d335a6","to":"F:05bffc70e9"},{"from":"F:9344d335a6","to":"F:1575110130"},{"from":"F:9344d335a6","to":"F:4ebb5aa8a0"},{"from":"F:94050e680d","to":"F:2d6ef08990"},{"from":"F:94050e680d","to":"F:304ce7b89d"},{"from":"F:94050e680d","to":"F:8d2cb93236"},{"from":"F:94050e680d","to":"F:932d33be00"},{"from":"F:9427d264e6","to":"F:05bffc70e9"},{"from":"F:94c9bc6065","to":"F:34cb2b6c48"},{"from":"F:956332d4b5","to":"F:2fc610bd94"},{"from":"F:956332d4b5","to":"F:86838d35ac"},{"from":"F:956332d4b5","to":"F:8b122c449e"},{"from":"F:956332d4b5","to":"F:a402d2f9ed"},{"from":"F:956332d4b5","to":"F:f942e88a8f"},{"from":"F:95d4304133","to":"F:0a85f3b8e5"},{"from":"F:95d4304133","to":"F:0da05a2a05"},{"from":"F:95d4304133","to":"F:7d236c9aa6"},{"from":"F:95d4304133","to":"F:89aee72994"},{"from":"F:95d4304133","to":"F:ec52ca3820"},{"from":"F:9b3f18856e","to":"F:0a85f3b8e5"},{"from":"F:9b3f18856e","to":"F:3c479cac6e"},{"from":"F:9b3f18856e","to":"F:e406ceab72"},{"from":"F:9bb94e1b40","to":"F:90e1fd2fd9"},{"from":"F:9d69a6b766","to":"F:05bffc70e9"},{"from":"F:9d69a6b766","to":"F:1575110130"},{"from":"F:9dc816763b","to":"F:b16afebae9"},{"from":"F:9deac13db0","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:7c8d518693"},{"from":"F:9f0fb6ed8b","to":"F:d5b496b125"},{"from":"F:9f0fb6ed8b","to":"F:deab644e60"},{"from":"F:9f36b3ef29","to":"F:34cb2b6c48"},{"from":"F:a0d489df6d","to":"F:119e3c0fce"},{"from":"F:a0d489df6d","to":"F:1575110130"},{"from":"F:a0d489df6d","to":"F:245efb551c"},{"from":"F:a0d489df6d","to":"F:2554ddd30c"},{"from":"F:a0d489df6d","to":"F:2b9c43b0ca"},{"from":"F:a0d489df6d","to":"F:cb66095cb4"},{"from":"F:a0d489df6d","to":"F:cecdb96382"},{"from":"F:a0d489df6d","to":"F:dbb9c92ca1"},{"from":"F:a402d2f9ed","to":"F:7c8d518693"},{"from":"F:a42da90970","to":"F:b3a2ad52bb"},{"from":"F:a52954a167","to":"F:08b7435c86"},{"from":"F:a862b1c3b6","to":"F:1a137480ae"},{"from":"F:a8cfe45d27","to":"F:7c8d518693"},{"from":"F:a8cfe45d27","to":"F:deab644e60"},{"from":"F:aa77f227a6","to":"F:05bffc70e9"},{"from":"F:ab334f34df","to":"F:7c8d518693"},{"from":"F:ab334f34df","to":"F:deab644e60"},{"from":"F:ac11b5379f","to":"F:05bffc70e9"},{"from":"F:ac11b5379f","to":"F:4ebb5aa8a0"},{"from":"F:ace169adc4","to":"F:05bffc70e9"},{"from":"F:ace169adc4","to":"F:68c4da7fe8"},{"from":"F:add7add561","to":"F:0a1a9270a7"},{"from":"F:add7add561","to":"F:0cc3e727ed"},{"from":"F:add7add561","to":"F:0e9e38f100"},{"from":"F:add7add561","to":"F:146a198c06"},{"from":"F:add7add561","to":"F:1716017e02"},{"from":"F:add7add561","to":"F:182dcaa949"},{"from":"F:add7add561","to":"F:1c1d4f7335"},{"from":"F:add7add561","to":"F:373fee03a1"},{"from":"F:add7add561","to":"F:3dd926c4de"},{"from":"F:add7add561","to":"F:3fe6b95e07"},{"from":"F:add7add561","to":"F:46c40327ad"},{"from":"F:add7add561","to":"F:4b7eb18a4b"},{"from":"F:add7add561","to":"F:500dd805f6"},{"from":"F:add7add561","to":"F:596687118c"},{"from":"F:add7add561","to":"F:5f88bf32ca"},{"from":"F:add7add561","to":"F:667ef091ca"},{"from":"F:add7add561","to":"F:6bfa4389b5"},{"from":"F:add7add561","to":"F:70d12a92c6"},{"from":"F:add7add561","to":"F:7c8d518693"},{"from":"F:add7add561","to":"F:815abebda1"},{"from":"F:add7add561","to":"F:849bc0a60f"},{"from":"F:add7add561","to":"F:85e076f56b"},{"from":"F:add7add561","to":"F:86838d35ac"},{"from":"F:add7add561","to":"F:89f25e2f3d"},{"from":"F:add7add561","to":"F:9040e0c030"},{"from":"F:add7add561","to":"F:9204ee9f08"},{"from":"F:add7add561","to":"F:a42da90970"},{"from":"F:add7add561","to":"F:a862b1c3b6"},{"from":"F:add7add561","to":"F:b39c90fbe6"},{"from":"F:add7add561","to":"F:b51ccbe79a"},{"from":"F:add7add561","to":"F:b677f38b10"},{"from":"F:add7add561","to":"F:bb2d98fca6"},{"from":"F:add7add561","to":"F:c14dd92bce"},{"from":"F:add7add561","to":"F:c2ff3fda15"},{"from":"F:add7add561","to":"F:c412f056b4"},{"from":"F:add7add561","to":"F:c5da07872e"},{"from":"F:add7add561","to":"F:c64c042051"},{"from":"F:add7add561","to":"F:d01156348d"},{"from":"F:add7add561","to":"F:d05701e1ab"},{"from":"F:add7add561","to":"F:d0d703a4e0"},{"from":"F:add7add561","to":"F:de988f64d4"},{"from":"F:add7add561","to":"F:ea9e0801d5"},{"from":"F:add7add561","to":"F:f00c212d41"},{"from":"F:add7add561","to":"F:f13b76e6fd"},{"from":"F:add7add561","to":"F:f57cf1a212"},{"from":"F:add7add561","to":"F:f6abfc128a"},{"from":"F:add7add561","to":"F:fb5935daaf"},{"from":"F:add7add561","to":"F:fc43ea4859"},{"from":"F:aea3c05bca","to":"F:932d33be00"},{"from":"F:aea3c05bca","to":"F:f51cba9beb"},{"from":"F:aecebb26be","to":"F:5daab9894d"},{"from":"F:b1598d4449","to":"F:119e3c0fce"},{"from":"F:b1598d4449","to":"F:cb66095cb4"},{"from":"F:b1598d4449","to":"F:dbb9c92ca1"},{"from":"F:b16afebae9","to":"F:34cb2b6c48"},{"from":"F:b28f13b600","to":"F:65193a9799"},{"from":"F:b28f13b600","to":"F:932d33be00"},{"from":"F:b28f13b600","to":"F:f07f8ebca9"},{"from":"F:b39c90fbe6","to":"F:9deac13db0"},{"from":"F:b3a2ad52bb","to":"F:7c8d518693"},{"from":"F:b3a2ad52bb","to":"F:deab644e60"},{"from":"F:b51ccbe79a","to":"F:b5ae6ee133"},{"from":"F:b5ae6ee133","to":"F:2fc610bd94"},{"from":"F:b5ae6ee133","to":"F:7c8d518693"},{"from":"F:b5ae6ee133","to":"F:c64c042051"},{"from":"F:b5ae6ee133","to":"F:da42f69531"},{"from":"F:b5ae6ee133","to":"F:deab644e60"},{"from":"F:b677f38b10","to":"F:7054844360"},{"from":"F:b806994000","to":"F:05bffc70e9"},{"from":"F:b806994000","to":"F:1575110130"},{"from":"F:b806994000","to":"F:2127a8caca"},{"from":"F:b806994000","to":"F:6f247eb514"},{"from":"F:b806994000","to":"F:f07f8ebca9"},{"from":"F:ba97282cf5","to":"F:65193a9799"},{"from":"F:bb0ec91260","to":"F:05bffc70e9"},{"from":"F:bb2d98fca6","to":"F:f942e88a8f"},{"from":"F:bbb6476d71","to":"F:4ebb5aa8a0"},{"from":"F:bbb6476d71","to":"F:f07f8ebca9"},{"from":"F:bf3dae9563","to":"F:6f247eb514"},{"from":"F:bf3dae9563","to":"F:f07f8ebca9"},{"from":"F:c14dd92bce","to":"F:8b122c449e"},{"from":"F:c1a96ec6e2","to":"F:a1baa3f01d"},{"from":"F:c2ff3fda15","to":"F:268769c4a6"},{"from":"F:c3cd2dc5c9","to":"F:1575110130"},{"from":"F:c412f056b4","to":"F:57ca5f1716"},{"from":"F:c4395c3023","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:05bffc70e9"},{"from":"F:c5938c33fd","to":"F:1575110130"},{"from":"F:c5938c33fd","to":"F:98529ba7ea"},{"from":"F:c5da07872e","to":"F:c0e80ca327"},{"from":"F:c9493b5275","to":"F:05bffc70e9"},{"from":"F:c9493b5275","to":"F:4ebb5aa8a0"},{"from":"F:ca0833ac73","to":"F:05bffc70e9"},{"from":"F:ca0833ac73","to":"F:4a7eaceb5c"},{"from":"F:cb3c5f7715","to":"F:05bffc70e9"},{"from":"F:cb3c5f7715","to":"F:34cb2b6c48"},{"from":"F:cba8f1d03b","to":"F:a7ce0f6452"},{"from":"F:cc361bd05a","to":"F:05bffc70e9"},{"from":"F:cdbe769ed3","to":"F:05bffc70e9"},{"from":"F:ce1173e176","to":"F:2fc610bd94"},{"from":"F:ce1173e176","to":"F:86838d35ac"},{"from":"F:ce1173e176","to":"F:9deac13db0"},{"from":"F:ce1173e176","to":"F:a402d2f9ed"},{"from":"F:ce41983a53","to":"F:ddeb486c49"},{"from":"F:ce41983a53","to":"F:fd660a117b"},{"from":"F:d01156348d","to":"F:71f0bfb455"},{"from":"F:d05701e1ab","to":"F:8c6234a8cb"},{"from":"F:d0d703a4e0","to":"F:d5b496b125"},{"from":"F:d135cffeaa","to":"F:05bffc70e9"},{"from":"F:d1b898f17f","to":"F:b9d806ba4d"},{"from":"F:d20e4b6b91","to":"F:7c8d518693"},{"from":"F:d20e4b6b91","to":"F:a8cfe45d27"},{"from":"F:d480e40c97","to":"F:05bffc70e9"},{"from":"F:d480e40c97","to":"F:1575110130"},{"from":"F:d480e40c97","to":"F:34cb2b6c48"},{"from":"F:d5b496b125","to":"F:8a9aff1529"},{"from":"F:d5b496b125","to":"F:deab644e60"},{"from":"F:d754b827f4","to":"F:fd660a117b"},{"from":"F:d8fb8339ce","to":"F:2fc610bd94"},{"from":"F:d8fb8339ce","to":"F:7c8d518693"},{"from":"F:d8fb8339ce","to":"F:8b122c449e"},{"from":"F:d8fb8339ce","to":"F:deab644e60"},{"from":"F:da42f69531","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:7c8d518693"},{"from":"F:db651caf76","to":"F:d5b496b125"},{"from":"F:dbb9c92ca1","to":"F:015261eab0"},{"from":"F:dbb9c92ca1","to":"F:1575110130"},{"from":"F:dbb9c92ca1","to":"F:1cf31c4792"},{"from":"F:dbb9c92ca1","to":"F:245efb551c"},{"from":"F:dbb9c92ca1","to":"F:2554ddd30c"},{"from":"F:dbb9c92ca1","to":"F:2b9c43b0ca"},{"from":"F:dbb9c92ca1","to":"F:4b91a9f65b"},{"from":"F:dbb9c92ca1","to":"F:7944059823"},{"from":"F:dbb9c92ca1","to":"F:ae46bbab81"},{"from":"F:dbb9c92ca1","to":"F:cb66095cb4"},{"from":"F:ddd82fc886","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:304ce7b89d"},{"from":"F:ddeb486c49","to":"F:37f4a5c04e"},{"from":"F:ddeb486c49","to":"F:4ebb5aa8a0"},{"from":"F:ddeb486c49","to":"F:5b113a0914"},{"from":"F:ddeb486c49","to":"F:851f776227"},{"from":"F:ddeb486c49","to":"F:872221b1da"},{"from":"F:ddeb486c49","to":"F:8b5a1f94c4"},{"from":"F:ddeb486c49","to":"F:8d2cb93236"},{"from":"F:ddeb486c49","to":"F:932d33be00"},{"from":"F:ddeb486c49","to":"F:aa77f227a6"},{"from":"F:ddeb486c49","to":"F:aea3c05bca"},{"from":"F:ddeb486c49","to":"F:fd660a117b"},{"from":"F:de988f64d4","to":"F:76da13a8f7"},{"from":"F:df4b55ecef","to":"F:fc21812307"},{"from":"F:e00aec45ce","to":"F:22566cb46e"},{"from":"F:e053923067","to":"F:ddeb486c49"},{"from":"F:e2f1b5ac07","to":"F:304ce7b89d"},{"from":"F:e2f1b5ac07","to":"F:932d33be00"},{"from":"F:e2f1b5ac07","to":"F:ddeb486c49"},{"from":"F:e406ceab72","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:0a85f3b8e5"},{"from":"F:e40ce1af48","to":"F:25e649633c"},{"from":"F:e40ce1af48","to":"F:3c479cac6e"},{"from":"F:e40ce1af48","to":"F:e406ceab72"},{"from":"F:e4e18d0b80","to":"F:304ce7b89d"},{"from":"F:e4e18d0b80","to":"F:d480e40c97"},{"from":"F:e540f7b669","to":"F:4ebb5aa8a0"},{"from":"F:e7380d1444","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:05bffc70e9"},{"from":"F:e8676a18b7","to":"F:4a7eaceb5c"},{"from":"F:e8676a18b7","to":"F:9a3e8ed7d2"},{"from":"F:ea9e0801d5","to":"F:db651caf76"},{"from":"F:ec52ca3820","to":"F:0a85f3b8e5"},{"from":"F:ed9c47feb2","to":"F:ddeb486c49"},{"from":"F:edb11415f0","to":"F:05bffc70e9"},{"from":"F:edb11415f0","to":"F:b014028f57"},{"from":"F:edb11415f0","to":"F:f51cba9beb"},{"from":"F:edf42fb1af","to":"F:05bffc70e9"},{"from":"F:ee02e563c6","to":"F:304ce7b89d"},{"from":"F:ee02e563c6","to":"F:8b5a1f94c4"},{"from":"F:ee02e563c6","to":"F:932d33be00"},{"from":"F:ee02e563c6","to":"F:ddeb486c49"},{"from":"F:ee21289902","to":"F:e4ff19bbe2"},{"from":"F:f00c212d41","to":"F:8a9aff1529"},{"from":"F:f07f8ebca9","to":"F:05bffc70e9"},{"from":"F:f07f8ebca9","to":"F:cb3c5f7715"},{"from":"F:f13b76e6fd","to":"F:214cc0a5f4"},{"from":"F:f57cf1a212","to":"F:ce1173e176"},{"from":"F:f5d313e9f1","to":"F:34cb2b6c48"},{"from":"F:f5d313e9f1","to":"F:aa77f227a6"},{"from":"F:f5d313e9f1","to":"F:cc361bd05a"},{"from":"F:f6abfc128a","to":"F:81c495717c"},{"from":"F:f8168b956f","to":"F:bd02b28f17"},{"from":"F:f8609bae0b","to":"F:b5ae6ee133"},{"from":"F:f8609bae0b","to":"F:c64c042051"},{"from":"F:f90930c3c3","to":"F:932d33be00"},{"from":"F:f921eecad7","to":"F:92d6903b5f"},{"from":"F:f942e88a8f","to":"F:7c8d518693"},{"from":"F:fa49930755","to":"F:05bffc70e9"},{"from":"F:fa851dabe1","to":"F:90cbb2cf6a"},{"from":"F:fb5935daaf","to":"F:d8fb8339ce"},{"from":"F:fc21812307","to":"F:05bffc70e9"},{"from":"F:fc21812307","to":"F:f51cba9beb"},{"from":"F:fc43ea4859","to":"F:a8cfe45d27"},{"from":"F:fc5d887ff6","to":"F:05bffc70e9"},{"from":"F:fd08562f92","to":"F:05bffc70e9"},{"from":"F:fd660a117b","to":"F:05bffc70e9"}],"merkle_root":"sha256:00937728fdf5de9a8af526bf191da7ed19afeb83fd2a5a75a508e8bc6cad0473","modules":[{"hash":"sha256:6dc63314489172db52e377b81586f4d971b3e8e8c97932bacbf1af2c6f8dfa34","id":"F:94b941cbd6","path":".design-sync/NOTES.md","purpose":"Design-sync notes for @modonome/design-system"},{"hash":"sha256:d388fef8f0ef810801a06a03ceb24df6cff996f52e1b83d795223e88e2fa3ac8","id":"F:e146bc5acb","path":".design-sync/conventions.md","purpose":"Modonome control-panel design system"},{"hash":"sha256:8ce50e2dd94a258eaa07c493d89f88ed31eb19fac52f66e263613f0a8189ab10","id":"F:2207a6ebce","path":".design-sync/previews/ActivationLadder.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:23d7645f8f2ae7d6d9f7d78bfd8124c24c32d7516226c992d45a1d71d6af83a0","id":"F:2470e60179","path":".design-sync/previews/AppShell.tsx","purpose":"function Dashboard"},{"hash":"sha256:cff8b3e50869d91ecf4e64d89b0bf46e06a0ac59b8f746500b0d29d942a0b72c","id":"F:28b7af3c53","path":".design-sync/previews/ArmingStateBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0b2ebe0d1c0ab726f746e4c802535c32113dcd0be638669fc2b6786d6a0fea55","id":"F:9c9edea0c9","path":".design-sync/previews/AuditTimeline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea473851738c286a9447e28999aca5834455f7d9cb18c34df8fd682e709ce18a","id":"F:f6e100ab45","path":".design-sync/previews/Button.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c31eb8ae99b2058922e089277497af5bab44f530b7a9cc92449594ddf26c61af","id":"F:3d505706cd","path":".design-sync/previews/Card.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:38c7bbf24e1e428bb1d6f81cb6298969901e21b3384c0dbe2480a4245f84862e","id":"F:3b4065b679","path":".design-sync/previews/Checkbox.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5966e42f7d9af4b42e3cf073e7021401a2df169bd1dd2b1798ab6e378d2fe928","id":"F:0a6a758e7d","path":".design-sync/previews/ConfirmDialog.tsx","purpose":"function ArmEngine"},{"hash":"sha256:c6090fad6e43e58babda80072cf2a6b49649eb3445a2f5ba7eee9b45d712eee7","id":"F:c63a71fb57","path":".design-sync/previews/CostPanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc1c2ec9b9f0017a6e607d532315276eea8db28cd99cac8594f37347ef8608ad","id":"F:3ce0fd77eb","path":".design-sync/previews/DecisionCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fae1e57fd27b44fe9f81dcbb786e712eb7fd2adad44ba559876a015489c63863","id":"F:41f5ffe77a","path":".design-sync/previews/Drawer.tsx","purpose":"function ItemDetail"},{"hash":"sha256:3038d7e248fc4717cd723d12c35a016302554050dd32154155539d037d181693","id":"F:7a43bf4ce5","path":".design-sync/previews/EmptyState.tsx","purpose":"function Queue"},{"hash":"sha256:e018db6be835e03424b38476f92e107a77b21f74d771329f961b45fe83f1ea29","id":"F:79467a3153","path":".design-sync/previews/ErrorState.tsx","purpose":"function Unreachable"},{"hash":"sha256:125b8b0930f89ffff0b4b79b27373e09c918f0b87540c4d50646044681d54d73","id":"F:bb6a874d58","path":".design-sync/previews/GatePanel.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2a40e8bb77149f133fea0da3eb37d69cd908fdf2f8b03f0e9414e7339175f7cc","id":"F:e19aab09cb","path":".design-sync/previews/HelpHint.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8cca0e33e7829d8f211b88580660e5eb88255beaa0eb350c3e5efa8d2b594d4f","id":"F:6bef3f93ab","path":".design-sync/previews/Icon.tsx","purpose":"function Set"},{"hash":"sha256:5c78ec1454886b9eb902dcb12f2959e0c7576329eb3b2a871eba20bf6ef7fd8d","id":"F:8972d37045","path":".design-sync/previews/IconButton.tsx","purpose":"function Row"},{"hash":"sha256:fc96c76182bca5d884808eac367770479920b0a26dd8589b05e67558c8aaea8e","id":"F:7008a20b1c","path":".design-sync/previews/IdentityChip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ea7d6e9b5a0493031e4e3f6c4db5588f24e720447e26504b5bebdd074c4153b2","id":"F:5e207f73c7","path":".design-sync/previews/Input.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9ecceb08031c0dfb9aef94def837cc9323aee97400350cb6b081e27e25bc58fe","id":"F:250c8a0d4a","path":".design-sync/previews/LearningCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:336ba2dbb303f6d9cd43b74586e1a257f9558c2ecdc9d51133ea6b246f148d77","id":"F:31658eff0b","path":".design-sync/previews/LeaseTable.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e620053e7a3644efb9e55807fe283051e15a486fc2c14f5529e7368c01a5af99","id":"F:eecc78e7e8","path":".design-sync/previews/LoadingState.tsx","purpose":"function Reading"},{"hash":"sha256:418f59b1949eb49e0a691cc61ec16e66488904c2d8e10eff3df5a2f02ac86ff2","id":"F:e5e519f441","path":".design-sync/previews/MetricTile.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fc59bdc51ec89727d6a6c8c93f47aa6c7bb7582d7fefb10bdaf328d3f6ce7a73","id":"F:4387a44284","path":".design-sync/previews/Modal.tsx","purpose":"function RaiseCap"},{"hash":"sha256:e0d0a49bad9e877cc356c787ffa0da6db285abd5c852588f04868584c774ebc3","id":"F:545c0ccfeb","path":".design-sync/previews/ModeSwitcher.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0d833fd549d8b4d5f442813338169460d362a2feb34e0b445b6bef6d096e325e","id":"F:84a5c32a4c","path":".design-sync/previews/NumberField.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:fcf3376b833576255dbd3a04eb52a8a890dd86a72ac59e476dc6a23be31124b9","id":"F:d590ca62b9","path":".design-sync/previews/PermissionDeniedState.tsx","purpose":"function OwnerOnly"},{"hash":"sha256:4a78ba515e665d462f489516d0ab2a46a0bcc6b8534447ada6882f0e06d8c3f5","id":"F:a0abaf6a25","path":".design-sync/previews/ProgressMeter.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e071a9ba5ad50fe699a59d71534f1abd9a6cd1d8ee74028b03b8e8e303d1fbf5","id":"F:13d31b33ea","path":".design-sync/previews/ProtectedPathRow.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:e481349dafae32464d94985ca42dcbbdd8a4269ab64003ca4360d9e3b56a72fd","id":"F:dd1be2cd7b","path":".design-sync/previews/QueueBoard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:5b6f2c0cd438195208e8eef5115bdd969e0efab9a2eec99737e4b05232fa89ab","id":"F:973aaa9d86","path":".design-sync/previews/RoleBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:2682007a94180ed7a815bd9396b26b2afb13349dcd07f9f7956cb16425ef6417","id":"F:3319e5c923","path":".design-sync/previews/SafetyStrip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:63be9d4779746eb6c05e1ef0d30a8642298979c377e8904416ec264a6c7e31a8","id":"F:08577063d4","path":".design-sync/previews/Select.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ebafef14ddabd45ded0276708625d66fc59f4e057ffb26231005e385e4b3681f","id":"F:1f40b6eb6e","path":".design-sync/previews/Slider.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:cb0ec11babc429a0a05100fe09f62f6dc9e3d0a4bb3066d24373d25c8ba7a458","id":"F:ca13fe2a5b","path":".design-sync/previews/Sparkline.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:ce4171194a1594c0faf6f8995b1c2090ce94ed85f019011f9047b023e37bd3f3","id":"F:10e76cfcd3","path":".design-sync/previews/StatusPill.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:0c657cf2500f46881f17c88d45a343dd5eb5a12e5cf834bea56c633559beb857","id":"F:1aa7cf650d","path":".design-sync/previews/Table.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:a0075b8076d7d7273a92e39f26947d198feaf6178288edfaf909ae944543e77c","id":"F:6c0919b64e","path":".design-sync/previews/Tabs.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:c80497f4fc76dfc93694a6e6a66493c37ca29bba5ae554ef0911318899fd29d7","id":"F:fe5ec971f8","path":".design-sync/previews/TierBadge.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:8e9e332a28ed3d1d95c08999f43bad01ec571eb1e1fd6340609763af2973d667","id":"F:7832db450f","path":".design-sync/previews/Toast.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:6611e0c1fe0f89d9896413183cd477107d3262a2e78eb9f60183a6a576da3ad3","id":"F:a0068c8817","path":".design-sync/previews/Toggle.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:9e99851405022f58b67decb58571895fd3364ed5b5572255d1b205b4dc067a4b","id":"F:dca643f34b","path":".design-sync/previews/Tooltip.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:db39ec6fae408a56c57a8057098117faa57d9c99e6a75dde16f20633369294ad","id":"F:f9c98a8642","path":".design-sync/previews/WorkItemCard.tsx","purpose":"@dsCard group=\"Governance\""},{"hash":"sha256:d1e58b99ee3bb38f608f1149ba9c91aec0b880efebfd39fa17ef86485c173d9a","id":"F:f0fbd8716f","path":".design-sync/previews/WorkItemDrawer.tsx","purpose":"function Detail"},{"hash":"sha256:98fa336aa591c02fa29e16ed588cf4b487cff2bd0b1af2281549198d5c2eff3d","id":"F:b2496e8029","path":".github/pull_request_template.md","purpose":"What this PR does"},{"hash":"sha256:b28f932a561debca1261a975b1372f34f7f65cab6b02540287e4dbf5f9f42bbd","id":"F:88c38fbc0f","path":".modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:8d72947d7df89abc064973db46ee441709345271e72590fe88fbac808ad102b9","id":"F:0f284c134c","path":".modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:8930a72be2","path":".modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:1091496939db093d5537491f17bfa0c6973389e9358351d459a7bd684c705a2d","id":"F:cac320dd97","path":".modonome/STATUS.md","purpose":"Modonome Status"},{"hash":"sha256:7612b8a03dec2d129e267e8d2388eb43b3fbb09491e5d645b63154ef2b0f3f28","id":"F:76f802c3ce","path":".modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:8d6bc8e18b55fc496653e39b579a6e78dd0f01963d4e067c193f040e3cc4e4b8","id":"F:7479c14986","path":"ADOPTION-GUIDE.md","purpose":"Adoption guide"},{"hash":"sha256:549f7b5474d361343fe50c72adcd71272c6d7ea9de671526312898108d339572","id":"F:a54ff182c7","path":"AGENTS.md","purpose":"Agent operating manual for modonome"},{"hash":"sha256:68959a7942b2071d37972af02218002fd5ed28e5f8424468a717556326bab99d","id":"F:8f6366fd8e","path":"ARCHITECTURE.md","purpose":"Architecture"},{"hash":"sha256:bf7540b3e98361366bd49f4425b5fea5fa031755c0e1fbb228fa9c09612a980b","id":"F:244a368695","path":"BREAK-THE-RATCHET.md","purpose":"Break the Ratchet"},{"hash":"sha256:ff4be50e055616fc1882022155d02cacc72dbeb81bdcf70775e583e3afab6644","id":"F:06572a96a5","path":"CHANGELOG.md","purpose":"Changelog"},{"hash":"sha256:579aac8dcce334ee66fe60c615dbb9eb6f2ccbc490927155683bbe1eebd4fb55","id":"F:6ebdb617a8","path":"CLAUDE.md","purpose":"Claude Code instructions for modonome"},{"hash":"sha256:4d727da51b5cd06505c3a5e6b5ad7c1a22c1bcefab642463bbd9af9c168eeb72","id":"F:2f41a784d9","path":"CODEX.md","purpose":"Codex instructions for modonome"},{"hash":"sha256:181625af6edfac7d6aec933f3b061d90ff82f197432aef15e7ce30a26fc3f800","id":"F:ffdbe3a1e7","path":"CODE_OF_CONDUCT.md","purpose":"Contributor Covenant Code of Conduct"},{"hash":"sha256:0c2aa53ee1a4c16fe977a05a53a2e5fc4b990fb75847109c67cd522d09d437f3","id":"F:eca12c0a30","path":"CONTRIBUTING.md","purpose":"Contributing to Modonome"},{"hash":"sha256:906963517f6ab1833ef5bd463ab4d5af9e1fca4b8d7c4f7a11c23f6b866d9324","id":"F:b60c6a93e9","path":"GOVERNANCE.md","purpose":"Governance"},{"hash":"sha256:7456d96e6a81d91da38daf2554bb2cd04b76a32fad3bb2b60496fd80b0c0f698","id":"F:c97cb4d123","path":"OWNER-ACTIONS.md","purpose":"Owner actions"},{"hash":"sha256:1aecab9188ddd263328850a7f1141dd9f9ed30df927d1a8502bb04a1c1671050","id":"F:147873af8b","path":"QUICKSTART.md","purpose":"Quickstart"},{"hash":"sha256:3cb87b223660d737234637bde0c24a33b2068e4c4b9f7db8f9ac3d5ed37db4f6","id":"F:b335630551","path":"README.md","purpose":"Try it in 60 seconds (read-only)"},{"hash":"sha256:e88d683d2ac0e26d0f33495995209c70875b4528b205043397ebc71b62c90a5b","id":"F:705a3ca9b3","path":"RELEASE-EVIDENCE.md","purpose":"Release evidence"},{"hash":"sha256:66624a1dc2eda1103b06fd62c6148bc69f1315250fd814e29cc0160d6cfdbc03","id":"F:683343bdf9","path":"ROADMAP.md","purpose":"Roadmap"},{"hash":"sha256:fb1a431d5eba7189459def64f26d66e316f778bd990483f576ac1e6db2918d37","id":"F:f6ed156e4b","path":"SECURITY.md","purpose":"Security model"},{"hash":"sha256:13477e14ac1cce854455ced1d5b73ec311c0531937c72181bfa1f40714c020cb","id":"F:c5fe610b02","path":"SUPPORT.md","purpose":"Support"},{"hash":"sha256:e0123c5d471bb70a85c2817cd4149a7d2894cb03e5a154a9dcf48a0d222d2368","id":"F:cf2908e0f2","path":"agentproof/CONFORMANCE-INTERFACE.md","purpose":"AgentProof Conformance Interface"},{"hash":"sha256:351e5737e60cdb6dd71da251d46b0ba92883cc1a2f243cd6675cdc8dc9a9b600","id":"F:69ddfa4ff4","path":"agentproof/CONTRIBUTING.md","purpose":"Contributing to AgentProof"},{"hash":"sha256:1136550fe9dd1e28d6e35610417f02e781869050ef12b052941103a2b57b3357","id":"F:5621bc51b3","path":"agentproof/README.md","purpose":"AgentProof"},{"hash":"sha256:cec6a751469fad2823f03ef550ad5f2046e8b54aeb6e75028ba7d8247de128e2","id":"F:2ec4f6540b","path":"agentproof/SPEC.md","purpose":"AgentProof Specification"},{"hash":"sha256:f59a0beea3bd8744a2f6129af78d43fb5cafb5ed1f74e0242235bd9b9bd53f57","id":"F:02a5f8fc55","path":"agentproof/scenarios/ap-33-config-env-override-inert.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:2e3364d087e95e36bb765de2eee6da2452b3a7bafb0a79a7fd63bd8f1d094db8","id":"F:a6d2bd3021","path":"agentproof/scenarios/ap-36-adr-number-uniqueness.mjs","purpose":"A minimal repo that satisfies every check other than the one under test, so a failure can only come from the ADR-number logic being exercised."},{"hash":"sha256:70221285edc659c839aaa46f647839ce1474b75c7832080f555c413b5e72b725","id":"F:3211d524ad","path":"apps/control-panel/README.md","purpose":"Modonome control panel"},{"hash":"sha256:d5a4aa57fa42de628b4471c5d83ce312f186f419dca82711b63b0d1ae0d7b724","id":"F:08b7435c86","path":"apps/control-panel/server/api.mjs","purpose":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the "},{"hash":"sha256:b3fc1a0f281280424df192b18996330aad770ec7b4f478d55a92739e39f17a84","id":"F:54df44aadd","path":"apps/control-panel/server/learningsFormat.mjs","purpose":"Shared parsing for the \"## Staged\" bullet lines in .modonome/LESSONS.md, so the"},{"hash":"sha256:228a98eb1b15ed2b88ee08a991cf28533a76b6e6915ff62903ced543efd19535","id":"F:8a3dd6ccff","path":"apps/control-panel/server/modonomeReader.mjs","purpose":"The built-in catalog plus this subject's own messages.yaml overrides, resolved through the exact same clamp scripts/check-message-catalog-integrity.mjs enforces"},{"hash":"sha256:974fef8a1f81a37bff27ba823e6628d4a3635fdb20e3ae7c641c22fa3430e579","id":"F:22566cb46e","path":"apps/control-panel/server/modonomeWriter.mjs","purpose":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent"},{"hash":"sha256:d3ade0ab81dcf1a4917ae08dbc212a45128eae37dd41a12e5c5c55224c419f8a","id":"F:fd4b8473fa","path":"apps/control-panel/server/ownership.mjs","purpose":"Parse CODEOWNERS \"pattern @owner @owner\" lines into ordered rules. Comments and blank lines are dropped; each owner handle is lowercased with its leading @ remo"},{"hash":"sha256:009b188cdf39031d5ac114b143970b90ee5e0af27919c628ccf984f4c3b7599d","id":"F:5daab9894d","path":"apps/control-panel/server/remediationView.mjs","purpose":"Builds the read-only remediation view-model for the panel. Pure: it takes already"},{"hash":"sha256:6d2002d6c0e4d7c635579e95cb7f702b5557cd93ef9d495c2bdea0de888629ac","id":"F:113387361d","path":"apps/control-panel/src/App.tsx","purpose":"function App"},{"hash":"sha256:f4fbceb244e071e90647d343a88b4c0b8c9770a6a4b616d12afdfb1e9cedffcb","id":"F:f83d1100e9","path":"apps/control-panel/src/content/concepts.ts","purpose":"interface ConceptEntry"},{"hash":"sha256:3f26effc15065164e222f35c6afa4e14383abc81717ee9c82b4e4afc8cb227a0","id":"F:3c479cac6e","path":"apps/control-panel/src/lib/confirm.tsx","purpose":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying"},{"hash":"sha256:7c670d232646cedb62767ae274375ef101d1f0692207868dce3858f869fac18c","id":"F:e406ceab72","path":"apps/control-panel/src/lib/messages.ts","purpose":"Resolve a panel-authored message id against this subject's own catalog * (already override-resolved server-side) and interpolate {param} tokens. * Falls back to"},{"hash":"sha256:23ad78ee68f5ea7345ea24921f536f437550e368c05b57772bb4cd05ca13ea9d","id":"F:e40ce1af48","path":"apps/control-panel/src/screens/ArmingScreen.tsx","purpose":"The control screen. Three tabs keep one conceptual area on screen at a time: the * activation ladder (the primary daily view), caps and budget, and the separati"},{"hash":"sha256:e56fb3c60a9adcf8736b794dbe334b713a3b0f4a990ff27be97f35dd812fd33c","id":"F:304fa8ef33","path":"apps/control-panel/src/screens/GatesScreen.tsx","purpose":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duti"},{"hash":"sha256:4bd02344b5309e24886e004726a69625789261d1033fd4a56ffd81b9bf19db22","id":"F:757a70680a","path":"apps/control-panel/src/screens/LearningsScreen.tsx","purpose":"Where the engine's judgment surfaces for a human to check. Open decisions ask an * explicit question before the engine proceeds; the learning queue shows the le"},{"hash":"sha256:9b042842975fc785913060eba4c6d57051cc2731a5e94fbbd771925f61f1d3e4","id":"F:6627655633","path":"apps/control-panel/src/screens/OverviewScreen.tsx","purpose":"Mission control: the \"is it safe, is it working\" glance. Arming posture, the safety * strip, the live queue, spend to date, gate health, and the most recent act"},{"hash":"sha256:140a3167b9aef50622269cefaa249266db05395257e45ac4668418962e562dae","id":"F:4ebf08705b","path":"apps/control-panel/src/screens/SettingsScreen.tsx","purpose":"The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came fo"},{"hash":"sha256:a79197cd2a46b0c6aff0e216083609ba83f0968f235a1a1b92f741e24f870ff8","id":"F:9b3f18856e","path":"apps/control-panel/src/screens/WorkQueueScreen.tsx","purpose":"The durable work-item state machine, laid out as a board: queued, claimed, making, * checking, merge ready, done, and escalated. Selecting a card opens a read-o"},{"hash":"sha256:884d51c65ef17a85b1de66cbf069d6e1d7175821418c4e5b45942a97a710cc79","id":"F:95d4304133","path":"apps/control-panel/src/state/adapter.ts","purpose":"function finalizeState"},{"hash":"sha256:2aad779e74343b4f402fc303d1d8dfd21fe13949ea2a3928509a4c9cbd0fbee6","id":"F:0da05a2a05","path":"apps/control-panel/src/state/arming.ts","purpose":"function deriveMode"},{"hash":"sha256:94e47e65d592c6b417f883501a9aa9d5eee31af912800cc6b6c7d665b8231623","id":"F:25e649633c","path":"apps/control-panel/src/state/configDiff.ts","purpose":"function nestedMapChanged"},{"hash":"sha256:01e89e56bf70e21313d76809f34dfb3136f69e18b70663cc25a6cd7a66ea5925","id":"F:7d236c9aa6","path":"apps/control-panel/src/state/fixtures/host.ts","purpose":"const hostState"},{"hash":"sha256:5fae58196211667608e6b5aa19a2efb13369d01494d9e29ffbf0da6131428a23","id":"F:89aee72994","path":"apps/control-panel/src/state/fixtures/product.ts","purpose":"function titleFromId"},{"hash":"sha256:7f2f64711709f4e04e04ec8fcb7abdbf6c2182cd5ba512923fbd5ec4eefdc4ea","id":"F:ec52ca3820","path":"apps/control-panel/src/state/liveClient.ts","purpose":"Read-only reachability probe for an OpenAI-compatible base URL (LM Studio, Ollama, a gateway)."},{"hash":"sha256:d25e0a0d452ea3c90eddd7494e804239b14337a6282d043b32707e81a53deb09","id":"F:0a85f3b8e5","path":"apps/control-panel/src/state/types.ts","purpose":"The subject a mode points at: which repo the panel is reading."},{"hash":"sha256:43e8ac7af105c773703a9b6417945ec1746465970293ad9b9375840d6883b092","id":"F:f90930c3c3","path":"bin/modonome.mjs","purpose":"The authoritative arming gate. A config file the agent can write can never arm the engine on its own: arming requires the MODONOME_ARMED=true environment variab"},{"hash":"sha256:2e349c8b02be29e3512bc7eb25716062a4ed806d32990904b866d84ef41df9f4","id":"F:90cbb2cf6a","path":"challenge/judge.mjs","purpose":"Load and schema-validate a submission directory: exactly one .patch (or * .diff) file and one declaration.json. Pure I/O, no mutation, no execution. * @param {s"},{"hash":"sha256:e95a14ef3dbdb053d86c2199ef8ac89ddbb1e1a8b72032c7586ef31ab5943920","id":"F:5d2ce8ee7e","path":"checkerproof/README.md","purpose":"CheckerProof"},{"hash":"sha256:326f57c93fe3587633a56d23979ab4aa3d4e2397c059fcc10a43b681846578f4","id":"F:94050e680d","path":"checkerproof/runner.mjs","purpose":"Load every scenario module under checkerproof/scenarios/. Pure I/O, sorted * for stable output."},{"hash":"sha256:6414d67327b97282597ba13d4fe711331d1a96d6bdb0ad366626aedbe0848b04","id":"F:5376e86470","path":"checkerproof/scenarios/cp-01-expected-value-drift.mjs","purpose":"CP-01: Expected-value drift. The maker's rationale describes a legitimate-sounding fix (\"stabilized a flaky tax calculation test\"), but the diff actually moves "},{"hash":"sha256:36a50a21ae88e90f3996e991501ff5133fe5dde362ea0635fc17bc123d5f01ba","id":"F:c7423b85cf","path":"checkerproof/scenarios/cp-02-cross-file-assertion-migration.mjs","purpose":"CP-02: Cross-file assertion migration. Real coverage is removed from the file that actually exercises the risky branch (a payment-refund error path), while unre"},{"hash":"sha256:4305f79d6b93ecb9d4211a358db37366621e7d542f655b45fca5fdb886cea192","id":"F:d744931e6a","path":"checkerproof/scenarios/cp-03-vacuous-in-spirit-assertion.mjs","purpose":"CP-03: Vacuous-in-spirit assertion. The added assertion is a real, strong, value-comparing call (so the ratchet's vacuous-assertion check, which only catches pr"},{"hash":"sha256:0d704f6822c09c158318837fbe1507402d12fccac16861158c1490c4680ba5b0","id":"F:28f278b1d9","path":"checkerproof/scenarios/cp-04-scope-creep.mjs","purpose":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker "},{"hash":"sha256:a53be522971a73ada8bb992bdca820bc4a2d31addd30abfe133d13a2b37a3ac3","id":"F:34ca4e55d1","path":"checkerproof/scenarios/cp-05-clean-negative-control.mjs","purpose":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, n"},{"hash":"sha256:93648a7d073062f5d92e5943903ce883ca68a951db56be4d45478ad630fc2989","id":"F:5253743405","path":"design-system/README.md","purpose":"@modonome/design-system"},{"hash":"sha256:cbcff3835f237d797f0c7ca291a991a0fd36dcb8b089ebcf744b05913d7a38a1","id":"F:14edab923f","path":"design-system/src/components/ActivationLadder/ActivationLadder.tsx","purpose":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when ev"},{"hash":"sha256:57f80954a2d97a6a209b4475c07d16038fc6bba643f01328d4aff5fc794d5566","id":"F:268769c4a6","path":"design-system/src/components/AppShell/AppShell.tsx","purpose":"The Modonome brand mark: a teal ring with a check on the dark ground."},{"hash":"sha256:3993b916804f19ac4fa15d99e5a2b042607d43fc717c37d2617076c7ba25e0c1","id":"F:7a1f7d680b","path":"design-system/src/components/ArmingStateBadge/ArmingStateBadge.tsx","purpose":"The single most important status in the panel: which of the three activation-ladder * rungs the engine is on right now. Disabled is gray, dry-run is CI blue, ar"},{"hash":"sha256:f952f03815def29809be8f74ba31e88ce459b54a31cb4135688a030755eac1df","id":"F:76da13a8f7","path":"design-system/src/components/AuditTimeline/AuditTimeline.tsx","purpose":"The kind of event recorded in the audit trail."},{"hash":"sha256:1c99d03bb6dd97a34c77c6752498ad51b9c1598b86316f7a7c336400a170967c","id":"F:8b122c449e","path":"design-system/src/components/Button/Button.tsx","purpose":"The standard action control. Use `primary` for the main action on a screen, * `secondary` for supporting actions, `ghost` for low-emphasis inline actions, and *"},{"hash":"sha256:457c0d229b21452cd1ebbed360f195ff69dbfdbb14e231ecc10dc2bbbeec9279","id":"F:40eb542a82","path":"design-system/src/components/Card/Card.tsx","purpose":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, t"},{"hash":"sha256:056914568b3ca3d770f135b890f4c1538a4a74f92c13f8af95519900743bcc2f","id":"F:d20e4b6b91","path":"design-system/src/components/Carousel/Carousel.tsx","purpose":"A horizontally scrolling row with scroll-snap and prev/next nav buttons. Items stay * in normal tab order (each is independently focusable, and the browser scro"},{"hash":"sha256:efbb27ce7153b11fb7fc2f191d555a1f8f200616b90b6b9645bb44d3899c618d","id":"F:7054844360","path":"design-system/src/components/Checkbox/Checkbox.tsx","purpose":"A labeled checkbox for boolean choices in lists and forms, such as opting * into a rule or selecting an item in a batch action. Renders a native * ` ` with a custom chevron. Keeps the real `` * element for full assistive-tech and keyboard support while matching the dark * sur"},{"hash":"sha256:ca46497990303b19a2897b57a78af5475e4c21389901cdb21d7acd89fe38bc53","id":"F:81c495717c","path":"design-system/src/components/Slider/Slider.tsx","purpose":"A styled range input. Keeps the native ` ` for full * keyboard and assistive-tech support (arrow keys, Home/End, screen reader * value announ"},{"hash":"sha256:1749a31827e26d5315b93b32f0835467bd966790860b259052dd1ef58a4429e6","id":"F:c0e80ca327","path":"design-system/src/components/Sparkline/Sparkline.tsx","purpose":"A minimal inline trend chart: a single line normalized to fit the box, with an * optional soft area fill beneath it. No axes or gridlines, intended to sit inlin"},{"hash":"sha256:0ce4a9dfe4be427aa7d81a5b7f1bcf1759b8d910b8184c57a02bf20cc732282b","id":"F:2f6c42c5ee","path":"design-system/src/components/States/States.tsx","purpose":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items "},{"hash":"sha256:a402f532e2ae9df7f4e1728c1c9a2891d67c4e70b584f2e879d36e86418b2fab","id":"F:2fc610bd94","path":"design-system/src/components/StatusPill/StatusPill.tsx","purpose":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or do"},{"hash":"sha256:7305e00d55b66cd30ad1083dff3787872a53e884744d212a333ffd022d93da4a","id":"F:a402d2f9ed","path":"design-system/src/components/Table/Table.tsx","purpose":"A generic, semantic data table. Renders a real `` with ``/` ` * so screen readers and browser table navigation work as expected. Rows highli"},{"hash":"sha256:6390a12d96f31f795832d3cbcb460bd8142784a0e5498e05ec1439a43aefbeae","id":"F:1db369d970","path":"design-system/src/components/Tabs/Tabs.tsx","purpose":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-sel"},{"hash":"sha256:b455cb481a9f8ac3c2e29039fdcbff0d82ae37e5ca28409003fbe3529303a3b5","id":"F:da42f69531","path":"design-system/src/components/TierBadge/TierBadge.tsx","purpose":"A small pill identifying a risk tier (1-4) by its dedicated tier color, with a * title tooltip summarizing what the tier permits. Used on work items, policies, "},{"hash":"sha256:0eaf585024cc9b6b47c917317f09565c3e5905a901ea85698cd0dc299688dc2e","id":"F:ab334f34df","path":"design-system/src/components/Toast/Toast.tsx","purpose":"A single notification card with a tone-colored left accent, an icon, a title and * optional message, and an optional dismiss control. Not a stacking provider: m"},{"hash":"sha256:7c310667a053c1678db6dc008663b4a314b0c1f612bcb27f6f2d7bc3cc8c5c7d","id":"F:214cc0a5f4","path":"design-system/src/components/Toggle/Toggle.tsx","purpose":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a c"},{"hash":"sha256:2a9b6f1ea5893fbbf927c0709325446a864aed023ca789afc890fa32eb6030f5","id":"F:8a9aff1529","path":"design-system/src/components/Tooltip/Tooltip.tsx","purpose":"A small dark hint bubble anchored to a trigger element. Opens on mouse hover and on * keyboard focus of the trigger (never hover-only, so keyboard users see the"},{"hash":"sha256:6787fd41c6a7f0de4c0e2b7e8b5e4af929d3a3bda45cbc58fac0077cd897073c","id":"F:b5ae6ee133","path":"design-system/src/components/WorkItemCard/WorkItemCard.tsx","purpose":"Plain data shape for a single work item as shown in a compact card. Components in * this package define their own shape rather than importing app-level types, s"},{"hash":"sha256:21f8d11ecf93eee3757dc47b0007b9ac0edf38eab77c113091e64b9a13283884","id":"F:08064e0c53","path":"design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx","purpose":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens "},{"hash":"sha256:bdea45a54795dca5069c1ad0b5c8159fa4a00a292ce6e62c9c3b967748dcd58f","id":"F:7c8d518693","path":"design-system/src/lib/cx.ts","purpose":"Join class names, dropping falsy values. A tiny classnames helper."},{"hash":"sha256:7f07947b761351c40274e1af83ab1278dc6af2f268b61f8b11344506a794bd9f","id":"F:86838d35ac","path":"design-system/src/lib/format.ts","purpose":"Format an ISO timestamp as a short relative string, for example \"3m ago\" or \"in 12m\"."},{"hash":"sha256:18a15384b92501e8515b1bfc8b4a1e8947bea352611aeac378b1c71a23e7f9e4","id":"F:c64c042051","path":"design-system/src/tokens/tokens.ts","purpose":"CSS custom-property name for an arming mode color."},{"hash":"sha256:65423e5476fdd50a743b0ef1564643c98394d3f1ed2d347e0506dc1913b93949","id":"F:e5e9ec402f","path":"docs/LEXICON.md","purpose":"Lexicon"},{"hash":"sha256:b0182f65ef557aca79aec4bbf3bae9f1f4bb8a73d8c6e63542dede6a0cbc4b7a","id":"F:0b5ca119d2","path":"docs/README.md","purpose":"Modonome documentation"},{"hash":"sha256:d932cd4f5a2c1606a161167bb4f21ad7443112c207e5520e240f1806c72fecb4","id":"F:6e4723a45d","path":"docs/adapters.md","purpose":"Bringing an external agentic CLI (the adapter contract)"},{"hash":"sha256:173d95b4ae6ce1c5d0c93b6ff34196bde52d4117b07b33ddc6a7ee02b1983cb7","id":"F:6e4b629d3c","path":"docs/adr/ADR-001-self-governance-pipeline.md","purpose":"ADR-001: Self-Governance Pipeline"},{"hash":"sha256:853ce2cc504318bc8e294ab2a734aa7ed2f3c165500fa46eb5276db95093e7fc","id":"F:64c5acf802","path":"docs/adr/ADR-002-shadow-mode.md","purpose":"ADR-002: Shadow Mode"},{"hash":"sha256:7938a6cf42851b4c667e7c86f36f321531bb1cda42d8ec8be2e817ee7f2660a9","id":"F:14812742da","path":"docs/adr/ADR-003-agentproof-portability.md","purpose":"ADR-003: AgentProof Portability"},{"hash":"sha256:7b3919fdf35b4803351784a6e97f0fef53d943945922e8a01771c66b84285df0","id":"F:6dd88cde1c","path":"docs/adr/ADR-004-arming-isolation-enforcement.md","purpose":"ADR-004: Arming Isolation Enforcement"},{"hash":"sha256:4ae9f4aa1833fdb26a3ae2585ddd65ed7c2fa816c43e56755d666634926921e6","id":"F:d4ead22b1b","path":"docs/adr/ADR-005-run-observability.md","purpose":"ADR-005: Run Observability"},{"hash":"sha256:52484d1db4941c2e69b23dce3e059a364832a9213785e1011d53ea10f7c318ea","id":"F:dc00dfe394","path":"docs/adr/ADR-006-checker-independence.md","purpose":"ADR-006: Checker Independence"},{"hash":"sha256:670f9d8f98b830daf3398b8311c228b4533647f879e19e15b84bbaa161b48513","id":"F:0526aab88e","path":"docs/adr/ADR-007-claim-atomicity.md","purpose":"ADR-007: Claim Atomicity"},{"hash":"sha256:77402b5f5b6792751d2228af5fa40d754c4808c799955274db29405cb8510b59","id":"F:8c2e08ed12","path":"docs/adr/ADR-008-trusted-author-allowlist.md","purpose":"ADR-008: Trusted Author Allowlist"},{"hash":"sha256:85c78896e75ef98a0350008fa898323170454e918d5f1d40bfe75e969787ebbe","id":"F:00a0cb4ee4","path":"docs/adr/ADR-009-mcp-tool-auth-scope.md","purpose":"ADR-009: MCP Tool Authentication and Scope"},{"hash":"sha256:e0da3fc9d933331ecf32692d92e7aff081fe47d22936ab6899b274f4e03f5d4a","id":"F:de4538fe53","path":"docs/adr/ADR-010-knowledge-packet-trust.md","purpose":"ADR-010: Knowledge Packet Trust and Promotion"},{"hash":"sha256:3be6708edc9457216f91418d2d82adb51b902f99865cb15f2fa295110ceffadf","id":"F:d2b14b5b34","path":"docs/adr/ADR-011-ci-env-var-trust-scope.md","purpose":"ADR-011: CI Environment Variable Trust Scope"},{"hash":"sha256:6b260de5664608d0c560ba27d479991cfd25c470aae92b3f134be4f2da02410d","id":"F:6f5b5f0bc4","path":"docs/adr/ADR-012-harness-prompt-integrity.md","purpose":"ADR-012: Harness Prompt Integrity"},{"hash":"sha256:1dbf9afdac131fd48920ea6232c09671017209d989ef56150fa26fd5e126ffc4","id":"F:e844676be4","path":"docs/adr/ADR-013-config-downgrade-and-migration.md","purpose":"ADR-013: Config Downgrade and State Migration"},{"hash":"sha256:228b5b0f71563d679198d7a5e258a1f4d6c54e77015e03426e26029c4fc787b8","id":"F:1a58c06540","path":"docs/adr/ADR-014-knowledge-network-transport.md","purpose":"ADR-014: Knowledge Network Transport and Sync Model"},{"hash":"sha256:0b49c78427c07a5d4aa41f6d7ee3ccd490c380b61e0a8adf72b9fa7e2b4b26ed","id":"F:cbaff08a46","path":"docs/adr/ADR-015-knowledge-network-catalog.md","purpose":"ADR-015: Knowledge Network Catalog Design"},{"hash":"sha256:cd3664d5c465e78657dfad0c2394d890db8721ff17efa9b774d927392f9a5b62","id":"F:c077d16aeb","path":"docs/adr/ADR-016-knowledge-network-packet-identity.md","purpose":"ADR-016: Knowledge Network Packet Identity, Lineage, and Dedup"},{"hash":"sha256:dd3dbc63222d451861660dfc13cb3079a0ba00d4857d1dbe411937e4abbebd7c","id":"F:72b7ab4c3e","path":"docs/adr/ADR-017-knowledge-network-packet-signing.md","purpose":"ADR-017: Knowledge Network Packet Signing and Key Management"},{"hash":"sha256:9f6017d79d341d0cf99d4c68cb088b16e8fc7e24a81263855d3ac63e88dddcc8","id":"F:0a6b452f14","path":"docs/adr/ADR-018-knowledge-network-import-ratchet.md","purpose":"ADR-018: Knowledge Network Import Pipeline and Local Re-Validation Ratchet"},{"hash":"sha256:d4975d473b876a68555a6fc8ff1df074ea53df18e5a8cdacacfbf2f75c460365","id":"F:28d4e1ad3d","path":"docs/adr/ADR-019-knowledge-network-execution-scope.md","purpose":"ADR-019: Knowledge Network Scripts Run in Base-Branch CI Scope"},{"hash":"sha256:2144d8d484fba40346bd38b105490b85586a29327f1c3aa290f287e3e6e376eb","id":"F:4aaece5252","path":"docs/adr/ADR-020-prompt-complexity-budget.md","purpose":"ADR-020: Prompt Complexity Budget"},{"hash":"sha256:fad6527345c252a1f413bea83f9d7e936ee47384a7b6f1cb0f96a7f0f9de7662","id":"F:24f28ae0fa","path":"docs/adr/ADR-021-prompt-behavioral-regression-suite.md","purpose":"ADR-021: Prompt Behavioral Regression Suite"},{"hash":"sha256:3c6cd64127ab8f6a7bc01e93892358dbf5b47571e10d561a1e5e558de9f3cd76","id":"F:35002ba3fe","path":"docs/adr/ADR-022-anti-rubber-stamp-checker-telemetry.md","purpose":"ADR-022: Anti-Rubber-Stamp Checker Telemetry"},{"hash":"sha256:f61b594192a7ace32fdaa94ba28e82b8dc27bfe839b49af8e637fca0391bc263","id":"F:b4279e0af6","path":"docs/adr/ADR-023-config-schema-migration-contract.md","purpose":"ADR-023: Config Schema Migration Contract"},{"hash":"sha256:1947cc76998fc11788589b2cfa1ace56293e64f75587e0be319c0f90772327a7","id":"F:a70145dc77","path":"docs/adr/ADR-024-capability-promotion-gate.md","purpose":"ADR-024: Capability Promotion Gate"},{"hash":"sha256:1b958ef93312b193f44193e203e8c253572f5f59211ff8137d6e67053e434574","id":"F:dc0cc6d551","path":"docs/adr/ADR-025-self-application-conformance.md","purpose":"ADR-025: Self-Application Conformance"},{"hash":"sha256:289e8dc568d7a9d4a02b0236d03fda1ae2b0323653fc3a023d3f3dba98c4de5d","id":"F:094efaca92","path":"docs/adr/ADR-026-learning-promotion-audit-trail.md","purpose":"ADR-026: Learning Promotion Audit Trail"},{"hash":"sha256:747626f0ebcb6a2b4458e4b6144ac86416a2a8953e602d6fae502e61a8038414","id":"F:d783999e16","path":"docs/adr/ADR-027-agentproof-25-scenario-expansion.md","purpose":"ADR-027: AgentProof Suite Expansion to 25 Scenarios"},{"hash":"sha256:bdf3ba61386081102e423597184d6b7b78ee53b60eaa2c23204d08cd4d7d1e16","id":"F:514a79560d","path":"docs/adr/ADR-028-portability.md","purpose":"ADR-028: Portability Validation Strategy"},{"hash":"sha256:7bd61ffe34ff4b25962fa8d5fa8f131b61782213fdff7c6fb31658380f2020a9","id":"F:d66f93d7b7","path":"docs/adr/ADR-029-adversarial-test-design.md","purpose":"ADR-029: Adversarial Test Design Principles"},{"hash":"sha256:c6b6bafc88dd8eed9f8dcd04b988d725c557dfbcd9972b6afdb8077f7fb1b3aa","id":"F:5a04bfa7a4","path":"docs/adr/ADR-030-embedding-safety.md","purpose":"ADR-030: Embedding Safety Framework"},{"hash":"sha256:c793fe2343c351a829714c39555b9f29dc73b23d3fa339065f14ca2a76d60633","id":"F:627afb27fd","path":"docs/adr/ADR-031-markdown-governance.md","purpose":"ADR-031: Markdown governance"},{"hash":"sha256:0d4fe4e04bc4cc160978de2d177a0aaacaa9da105dfe52e4801d95de95fe5a93","id":"F:3a70dc66ea","path":"docs/adr/ADR-032-oss-adapter-boundary.md","purpose":"ADR-032: OSS adapter boundary"},{"hash":"sha256:cc2816e62a042699a38168ce64bf0e43eb502277a49c7c9f464e33d2afb7d5c0","id":"F:b5f5700e4d","path":"docs/adr/ADR-033-repo-snapshot.md","purpose":"ADR-033: Repo snapshot"},{"hash":"sha256:48413d3e10d2c802c860ae06796c54b4a4f5c98a79122688fa75018c09af3e2d","id":"F:21752cf61a","path":"docs/adr/ADR-034-compliance-audit-staleness-gate.md","purpose":"ADR-034: Compliance and audit doc staleness gate"},{"hash":"sha256:3b7df614cd01444cb19035016351d7148e86fa750ffdbde23fa262d0e6763e03","id":"F:c3588d683e","path":"docs/adr/ADR-035-metadata-remediator.md","purpose":"ADR-035: Metadata-only Commit-History Remediator"},{"hash":"sha256:ea9f950814081a796dab54219ab216345f187428dd8c3c262093f2fbc5f7ddcc","id":"F:750436d8c1","path":"docs/adr/ADR-036-policy-attestation.md","purpose":"ADR-036: Policy-Pack Manifest and Disclosure Attestation"},{"hash":"sha256:6c578562d5e2883fae66693c03afdeadec928657639626ff4dfa14d07ed2b208","id":"F:01a7edaeba","path":"docs/adr/ADR-037-policy-pack-adoption.md","purpose":"ADR-037: Policy-Pack Adoption Tooling"},{"hash":"sha256:f4ed302d621cdba1b05a7cb7338887ede84afae871cc2ad23fb5cfe5be0cfd03","id":"F:1a368a7935","path":"docs/adr/ADR-038-checker-as-review-service.md","purpose":"ADR-038: Checker as an Author-Agnostic Review Service"},{"hash":"sha256:cf60da2b108af71da94f3657a8edba35840ae517e00f172665351d6a0365de0e","id":"F:56a132aaca","path":"docs/adr/ADR-039-agent-capability-profiles.md","purpose":"ADR-039: Agent Capability Profiles and the Always-Run Crew"},{"hash":"sha256:d6c607ef85aef2400d7c407348195d6799c02bfcbb53c23151ca5190078c6504","id":"F:25fdf1f8f6","path":"docs/adr/ADR-040-end-to-end-operating-model.md","purpose":"ADR-040: The End-to-End Governed Operating Model"},{"hash":"sha256:364956eb17c4267d523eaed728c773af38e5f38bceeda9642bd4e50a5ed17935","id":"F:40887a152e","path":"docs/adr/ADR-041-gauntlet-replay.md","purpose":"ADR-041: The Gauntlet, a Host-Repo Gate-Integrity Replay"},{"hash":"sha256:ebc8e5161c570c7cb7b731014b9050033849966a11570ad3755d41560318dea4","id":"F:27086b6de3","path":"docs/adr/ADR-042-agentproof-verified.md","purpose":"ADR-042: AgentProof Verified and the Hardened Registry"},{"hash":"sha256:1c1c3ea0aee28bcf86addabaa79510b739e24299dc71d5122d7f326fc9650d87","id":"F:c7326495ec","path":"docs/adr/ADR-043-terraform-module.md","purpose":"ADR-043: Terraform module for org-level provisioning"},{"hash":"sha256:3370011df1de3044ed112eae438df4a907ac3621689864e4d97155472355e060","id":"F:ffcad313b6","path":"docs/adr/ADR-044-agent-org-structure.md","purpose":"ADR-044: The agent org structure and its configurability"},{"hash":"sha256:7813270906fcf35082b0fee1de9ff31db4b9e307e9f0038ce9b8e58619704136","id":"F:97fc86d7a3","path":"docs/adr/ADR-045-scope-focus.md","purpose":"ADR-045: Scope focus for launch. Proof before surface."},{"hash":"sha256:c608f49155da28e237edcaf817ba565fdf9d48c3a24856c142d26cd4fb793e44","id":"F:e9701967b3","path":"docs/adr/ADR-046-ship-the-deferred-features.md","purpose":"ADR-046: Ship adapter-verify, Break the Ratchet, and CheckerProof"},{"hash":"sha256:718be1ee4ae897f3d09c04c3f781d323a74664e67ec6340f05134f837e4d143a","id":"F:68d874f280","path":"docs/adr/ADR-047-risk-surface-guard.md","purpose":"ADR-047: Risk Surface Guard, a second deterministic PR-diff scanner"},{"hash":"sha256:07236c8a59dc7952655f1b442e82fb773b9ee2cfcfd82a4de87587d2feeb7c70","id":"F:c3b2fcfb69","path":"docs/agent-org.md","purpose":"The Modonome agent org"},{"hash":"sha256:735569ae4c95b9b3cc468abc2d8a6b863475a25cd8d14988e356e33c5c1ed5db","id":"F:a384388adc","path":"docs/agents.md","purpose":"Agents, roles, runners, and models"},{"hash":"sha256:1a3057039a6a458ddc3be94b408cd17f7078bc4f5d84dc5a1bb28da1a8534927","id":"F:8a7591db62","path":"docs/audits/claims-audit-2026-06-25.md","purpose":"Claims audit, 2026-06-25"},{"hash":"sha256:d82a943730259de4fd7d57f0e4a7b2c3b1d7d6d58f1bb95e5895190a3480a0da","id":"F:6a3a98df8c","path":"docs/audits/claims-audit-2026-07-01.md","purpose":"Claims audit, 2026-07-01"},{"hash":"sha256:736538bc53e263123890881fca15f42561555a6b1e4d13b22fbb19c266d6a62d","id":"F:efd369884e","path":"docs/audits/claims-audit-2026-07-08.md","purpose":"Claims audit, 2026-07-08"},{"hash":"sha256:2dac20871ea07e1ce3708fbf8cb8f546b893e418486c7ad1f29f64df74284829","id":"F:3dcdfa18c0","path":"docs/autonomy-plan.md","purpose":"Autonomy plan: governed autonomy on free models"},{"hash":"sha256:3f5e1ae50727d09485d21fc98a19f4bf5e18079d7f09598f9d834e30cdb933bf","id":"F:95e51a604d","path":"docs/compliance/compliance.md","purpose":"Compliance"},{"hash":"sha256:22d7361557fb51fe0f6e60c086efcecd8d647f9deee172c5aa69119928c75a57","id":"F:5fa0ad758b","path":"docs/compliance/eu-ai-act-classification.md","purpose":"EU AI Act Classification"},{"hash":"sha256:9d6370381372c370f5daae8bde8638d4c805d17726d6b11c74e6675028778b2f","id":"F:7983a5dd39","path":"docs/compliance/openssf-badge-evidence.md","purpose":"OpenSSF Best Practices badge evidence"},{"hash":"sha256:c56f5c3dbbfa26d338d5a039e3b01258daeb8f45888117f5753a9ccab50ded83","id":"F:83d4d07afc","path":"docs/control-panel-modes.md","purpose":"Control panel: modes, and what you can and cannot do"},{"hash":"sha256:97f78ccf4a2589ea2b8f147e070e012554082ce45a921fc15d9cf5d96a874972","id":"F:191a17b151","path":"docs/enterprise.md","purpose":"Enterprise estates"},{"hash":"sha256:646676d2908eee2dd7caa4559f055a986cc6551b03d4b1ef3712c26e1c366778","id":"F:b81cf7567f","path":"docs/guidelines/markdown-governance.md","purpose":"Markdown governance policy"},{"hash":"sha256:9582fbef8508d57553d7dce7978de17865198f2aede85767ad548e7c79b402b0","id":"F:6bee8a97f3","path":"docs/launch/article-seeds.md","purpose":"Article seeds"},{"hash":"sha256:4770f83af6300c58e41041ac390f81917943b925aa5fe4420999b4696962c6f3","id":"F:930bc5297d","path":"docs/launch/show-hn.md","purpose":"Show HN draft"},{"hash":"sha256:c2a8514369ddf12ce8565a62f9e7b10b2f11c1628312e9257ea5f612d23d8071","id":"F:2bfaa5759d","path":"docs/launch/x-thread.md","purpose":"X thread skeleton (@ModonomeLab)"},{"hash":"sha256:911e3c3d9d96e433b3d5734a91a6d8f7f3cdad8f080d9aa46e3b0665fad51cae","id":"F:61486b1ec2","path":"docs/ops/add-control.md","purpose":"Add-control runbook"},{"hash":"sha256:9ce795a33cc46ee5bb875f06197a022074d104169b32fb552108e78a918857b2","id":"F:9d53df2290","path":"docs/ops/add-gate.md","purpose":"Add-gate runbook"},{"hash":"sha256:8925cf704bc9c68e322c2a14ee3c7f544649f6a382a8c82cfb2753f886312027","id":"F:1339474d8c","path":"docs/ops/merge-governance-setup.md","purpose":"Merge governance setup (owner action)"},{"hash":"sha256:7ddc7ca071ed94c0fc6f0684198c6c6cfb06112a700347754d78a3c9f3155576","id":"F:08baf2c1e2","path":"docs/ops/preflight.md","purpose":"Preflight runbook: am I ready to push?"},{"hash":"sha256:0afb51d17728db3e9e95ed786890325cf78cbb0abb9f8ebd4e0f2000072d411c","id":"F:f1f2b57403","path":"docs/ops/runner-model-config.md","purpose":"Runner and Model Configuration (WS-H)"},{"hash":"sha256:699f12ea40894445b8d909cfe98cb36ea3291778a463432c111a3cad820a6943","id":"F:c54a514860","path":"docs/ops/work-item.md","purpose":"Work-item runbook: the queue discipline"},{"hash":"sha256:d5152c802dc8b1474c04a4bdd443a4e6ec7cc540e2c7c02871d1b8714519154b","id":"F:0a640a72f9","path":"docs/research/README.md","purpose":"Modonome Research Directions"},{"hash":"sha256:dbf7884a73eebe19e227d71297f93b00d74e089b7cf93cd1df1e81e76dd857ef","id":"F:83ecac7524","path":"docs/research/agentic-governance-mesh/00-RESEARCH-PLAN.md","purpose":"Agentic Governance Mesh: Research Direction"},{"hash":"sha256:355a11f71e2855a77b700a36713b17efc9ac0c06d6bd1fc562279202ff4fbc6e","id":"F:492786871a","path":"docs/research/agentic-governance-mesh/RD-027-governance-packet-protocol.md","purpose":"RD-027: Governance Packet Protocol"},{"hash":"sha256:f6efbea820092a98600911ff787dcf104d6f66b636e737a5869337223a5811ec","id":"F:0e78eb22ec","path":"docs/research/agentic-governance-mesh/RD-028-trust-network-and-discovery.md","purpose":"RD-028: Trust Network & Discovery"},{"hash":"sha256:d6fefc664720aeb755233cc106ccaa872b5ac5a84c92550f3177ee77954e7c09","id":"F:ff644711e7","path":"docs/research/agentic-governance-mesh/RD-029-packet-lifecycle-and-versioning.md","purpose":"RD-029: Packet Lifecycle & Versioning"},{"hash":"sha256:96d7c204886019a60f16679bc715bc9856dd9f11c01cf7c0be9dd23bd4a7a8d3","id":"F:cb8c4aadaf","path":"docs/research/agentic-governance-mesh/RD-030-cross-repo-governance-feedback.md","purpose":"RD-030: Cross-Repo Governance Feedback"},{"hash":"sha256:9d73bf60d826564abdf1274e681a59ab2fcd27b23b2776ff0beb124bb3623b93","id":"F:0c07096c4e","path":"docs/research/agentic-governance-mesh/RD-031-semantic-compatibility-and-conflicts.md","purpose":"RD-031: Semantic Compatibility & Conflicts"},{"hash":"sha256:c3df99eed2b4134afc312ef5626a3ea6ada93228563fc838c6a536abcae49e03","id":"F:79cec3a152","path":"docs/research/agentic-governance-mesh/RD-032-network-level-ratchet.md","purpose":"RD-032: Network-Level Ratchet"},{"hash":"sha256:16b1b26c33c80b3f4f946231b9fe7b2f3f29b891445cf9d7784583940693dd4f","id":"F:acd892d4a0","path":"docs/research/agentic-governance-mesh/governance-mesh-vision.md","purpose":"The Governance Mesh Vision: Modonome as a WWW for Repositories"},{"hash":"sha256:c7f8fdb4ff6ac66235b70abbc785628dc62d7afd2707b8349c489ce7f64a77cc","id":"F:bcd1c88877","path":"docs/research/knowledge-network-architecture.md","purpose":"Cross-Repo Knowledge Network: v0.2 Architecture"},{"hash":"sha256:c02035c7d272d72988d7e1d04e0030a4c108509da786f7cf312327d61f5f4a37","id":"F:c1ef63106a","path":"docs/risk-surface-guard.md","purpose":"Risk Surface Guard"},{"hash":"sha256:412df5caddf6378895f6a9a61f3e6175f0967ec36e8c550dc647f85d892869a8","id":"F:55673172df","path":"docs/specs/governed-autonomy-spec.md","purpose":"Governed Autonomy: A Specification for Safe Autonomous Software Engineering Agents"},{"hash":"sha256:a8be4604abf2f1f3f5069ca9519542d5cb297e1b8510b3d1fc62115e172cbc1d","id":"F:4d5cfa3611","path":"docs/specs/ratchet-spec.md","purpose":"Anti-Gaming Ratchet Specification"},{"hash":"sha256:117057588d3bde9166f502b23296313a7eb0d39c311d164c6ba6e3d9e2cff711","id":"F:c1cc304e56","path":"docs/versioning.md","purpose":"Versioning and embedding"},{"hash":"sha256:4cd43f8db80add0570df0f1adc1bddd8ba37dd1b3a04752a5b55846a09aba316","id":"F:88244532e4","path":"docs/vscode-workflow.md","purpose":"VS Code manual trigger workflow"},{"hash":"sha256:ab6445332dd2838b319c1a3c1ad357ce8d4190b81c7bd5674cb33c2012e0f4fb","id":"F:91a7efa0ba","path":"docs/workflow-fixes.md","purpose":"Workflow Push Event Fix"},{"hash":"sha256:8de7c8d5c9b8940c958fa8d7e6ce9fcdac2614927f9e38c6b4dd61ca51df634d","id":"F:fcc5f4b906","path":"examples/demo-app/README.md","purpose":"modonome-demo"},{"hash":"sha256:204b9ae011a6583c51ce31dcc14895f744c4b521410f72c2af62e1527b5c218f","id":"F:9666ca7f0d","path":"examples/demo-app/WALKTHROUGH.md","purpose":"Modonome on this demo app: dry-run, maker/checker cycle, and a real ratchet block"},{"hash":"sha256:8abb4449c6701801c43b4b9f03ce80f97f1ed09cf7e95630cffff687b422ed4b","id":"F:a37ab631dc","path":"examples/demo-app/runs/2026-06-26T11-46-00Z/README.md","purpose":"Captured maker and checker run: demo-refund-coverage"},{"hash":"sha256:58dd762e7666111d5d22579223a5469d13cdc8141dcb2f9c293456b3ce62566f","id":"F:1174d7e2ba","path":"examples/demo-app/runs/2026-07-08T05-30-00Z/README.md","purpose":"Captured gate-integrity run: the ratchet blocking a gaming diff"},{"hash":"sha256:ebe33167ee32caa55022fd15d7124f5f80e2e38bafdadd493e2a1cd73e868d02","id":"F:9444435647","path":"examples/demo-app/runs/2026-07-08T14-19-00Z/README.md","purpose":"Captured run: the two-key arming mechanism, live, at a $0 budget"},{"hash":"sha256:add0234530427f1c666cc530f399c8c7242c071b75b2d953a1859dd27d2cd119","id":"F:599f5b2f28","path":"examples/demo-app/src/CartService.js","purpose":"CartService: manages user shopping carts stored in memory."},{"hash":"sha256:abcd98accc06e996929792a54325933e5c9062c7788870a06d911197d622996e","id":"F:54c6928de9","path":"examples/demo-app/src/CheckoutService.js","purpose":"CheckoutService: drives the checkout flow from cart to order."},{"hash":"sha256:21e75a44d724365e4a2fbf5f1869f91eaeaf9fd69c03f07f8cde66b70870d64b","id":"F:bd02b28f17","path":"examples/demo-app/src/InventoryService.js","purpose":"InventoryService: tracks stock levels for products in memory."},{"hash":"sha256:ac71e8f3cb979ba0a56453517c21600c02311dbe2a9fd83cd2ecf66ee002ddd6","id":"F:b9d806ba4d","path":"examples/demo-app/src/NotificationService.js","purpose":"NotificationService: records notifications sent to users."},{"hash":"sha256:7a9e84c178fbc67605c88dc5b987f5d274dcb5c1777b41f2ca2e4b5c3efaa987","id":"F:1ecd18c4b9","path":"examples/demo-app/src/OrderService.js","purpose":"OrderService: creates and manages orders."},{"hash":"sha256:a58caa051fa780ade55ccfbc3f97afd559f68bd99894f9195909169964ec46b4","id":"F:ff3aef693f","path":"examples/demo-app/src/PaymentProcessor.js","purpose":"PaymentProcessor: wraps a payment gateway with amount conversion."},{"hash":"sha256:75e7eb2c2d84332172ed6a023336c5ef9e7e4ccbccbdd47eed778eec4c1e7232","id":"F:8bb1b57470","path":"examples/demo-app/src/index.js","purpose":"Composition root for the demo app."},{"hash":"sha256:1afae5fa52dc4fb9da6958558524c5cef0cf50cc63beafe735d92d3a8922a8be","id":"F:3c53926ecd","path":"examples/demo-app/tests/CartService.test.js","purpose":"function makeDb"},{"hash":"sha256:b2320331f4ba103ef635b1377172c522abcbb95be380f15493e6deaf38278292","id":"F:52caf3b287","path":"examples/demo-app/tests/CheckoutService.test.js","purpose":"function makeCartService"},{"hash":"sha256:1bb3ddc7d9966c00d23c01cf9d9ed06cb002a002f01f759d8382bb4c547d0f09","id":"F:f8168b956f","path":"examples/demo-app/tests/InventoryService.test.js","purpose":"function makeDb"},{"hash":"sha256:3748cc9dfe7d9cc71b49559646c276a835ceb00cf11a7ad6ec31af6f0035edae","id":"F:044b762a79","path":"examples/demo-app/tests/OrderService.test.js","purpose":"Tests for OrderService."},{"hash":"sha256:41ca78f6845a8d5b2a3386a2e5dbd906e8e15936f8af9edd91a868e3dda27627","id":"F:373a946d5c","path":"examples/demo-app/tests/PaymentProcessor.test.js","purpose":"function makeGateway"},{"hash":"sha256:6cbc7df60ec7300fd8a38f82a14cd39b637b69acc15477bfb94e5b69a69000a9","id":"F:d52b08ebeb","path":"examples/node-typescript/README.md","purpose":"Example: Node and TypeScript service"},{"hash":"sha256:f04c42db742b1a61a21e1a5e4daa6e556879454a2ddb5213a8141c82e08fc689","id":"F:93f0f5d3de","path":"examples/node-typescript/src/checkout.ts","purpose":"type Card"},{"hash":"sha256:d244fe19489b99550187b195234440ed263227b76c6fc2f4e4b3231a4bda724d","id":"F:ae227d695d","path":"examples/python-service/README.md","purpose":"Example: Python service"},{"hash":"sha256:22be80cafe6ef2f172dcea2a76083692cb4cbaad6fda65011a3e4ebac72dff6f","id":"F:7ccad64380","path":"examples/python-service/app/orders.py","purpose":"Apply a percentage discount to a list of items. Args: items: List of dicts with \"price\" key discount_percent: Discount percentage (0-100) Returns: Total after d"},{"hash":"sha256:6ac7d0d8b8789da8454f3774ed4e4c92e595378f15b9c065fc150bfe2c2eebcf","id":"F:2c2cc77861","path":"examples/python-service/tests/test_orders.py","purpose":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50"},{"hash":"sha256:572478361a59803f53a72fd7e2ef8a7f189f3765c6b65d07ee7caf80ebd41584","id":"F:c72e6949b9","path":"fixtures/adapters/reference-adapter.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9e256013a4969962340b88bc4fbd1a18faa54136e9c40145752d699faa37ad0a","id":"F:fdaf1308e4","path":"fixtures/evidence-tampered.md","purpose":"RELEASE-EVIDENCE"},{"hash":"sha256:b69a37444b540b95bbc9414c30f90effbae363f0a41c61d107d2fb41def038ad","id":"F:a1411f1423","path":"fixtures/negative-controls/app-syntax-error.js","purpose":"Negative control: intentional syntax error in example app"},{"hash":"sha256:c68d242c675ce2ac4f466c43367a1f62b3c88685dd8d7a91cf56d82aa25a09e6","id":"F:6fdd929a92","path":"fixtures/portability/prompt-injection-host/docs/guide.md","purpose":"Host Documentation"},{"hash":"sha256:f3a7f116395c8dc6344c12e3bb59a33c043c77322adf73ae260d8390c3518cd7","id":"F:90f0999521","path":"fixtures/portability/prompt-injection-host/src/main.js","purpose":"This file contains adversarial content in comments that should not affect Modonome."},{"hash":"sha256:d5ef951e3b520b4c771cfbfd415cfadb7ba2e7f40b7c3ec6e58f2eaddecf54c9","id":"F:7fcbf6b32d","path":"fixtures/portability/schema-collision/README.md","purpose":"Schema Collision Fixture"},{"hash":"sha256:433f5d3005e295d639f837ed731df3d1fc9f69d87454a9059c20919cc1eb8e69","id":"F:c0714e4bf0","path":"prompts/modonome.bundle.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:05ea9c92a67465908f531a11893fb6e9e79800ae0754db9922348bfc37b408fc","id":"F:1c3b1b469e","path":"prompts/modonome.core.md","purpose":"Modonome Master Prompt (core)"},{"hash":"sha256:4f717a8789ae5bff9f95be1bdc42f7d8c5524217a166b837b487bc0aac54d6fd","id":"F:41623f0bcd","path":"prompts/modules/adoption.md","purpose":"Adoption pass"},{"hash":"sha256:6a9f76705145d5337c587b7f29a2e41b5a80fea39888b8ab99069027f4d99e13","id":"F:36693b0d8b","path":"prompts/modules/control-panel.md","purpose":"Operator control panel"},{"hash":"sha256:053fa9757f27a93ab0f30c796d714ae61d0d1f30b47ea3a93b81d39cf899bae4","id":"F:02359d48d5","path":"prompts/modules/gates.md","purpose":"Deterministic gates"},{"hash":"sha256:e66de7085c9cb23c1bf9e93144adfa2415b80134202d294c3cdc8b8a3aff2e0c","id":"F:c98f6b55e3","path":"prompts/modules/network.md","purpose":"Cross-repo knowledge network (Milestone 2, not shipped)"},{"hash":"sha256:5367fd6d871586fed38e0da4f9a287dec6baf532fe519d06569378f8f54f5481","id":"F:8f62475ebe","path":"prompts/modules/roles.md","purpose":"Agent roles"},{"hash":"sha256:cfaa37419ed0b88debeb9f9e2ce712a9e6e88e34b46a3b779722f794e47e0b88","id":"F:c324fab0cc","path":"prompts/modules/snapshot.md","purpose":"Repo snapshot"},{"hash":"sha256:bd2ccd3653b7c86cd3ad87326f69db6b788065c060516a2a7c5cffe2c27d7f45","id":"F:9a28b4e90e","path":"prompts/modules/state-machine.md","purpose":"Durable state machine"},{"hash":"sha256:3d7b33777faa2baf4d1b4f057fc4ea0381f6777f6ca342c607e760131208ddd9","id":"F:f5d313e9f1","path":"scripts/adapter-verify.mjs","purpose":"Load and schema-validate adapters.json, then run the license/boundary gate * against it. Pure aside from the two reads. Returns { manifest, entry, problems } * "},{"hash":"sha256:9cb8c6696aa47049d5f8193269996b2849efba0073ef8bf5bd3b2a240c2267ee","id":"F:5b113a0914","path":"scripts/agent/action-queue.mjs","purpose":"Validate a record against the action-queue schema. Throws with the collected errors so a malformed action can never be enqueued."},{"hash":"sha256:56b52308decd179cc645822572b7b57e2fef714fe9b8c58eaf4250493d6c47f9","id":"F:872221b1da","path":"scripts/agent/apply-patch.mjs","purpose":"A body looks like a unified diff when it has a \"diff --git\" header, or a paired \"--- \"/\"+++ \" file header, or an \"@@ \" hunk marker."},{"hash":"sha256:ba80f6381cc467a9c683002821c35d5b27c6019096ba81dc9c2c6ea2d1b401f6","id":"F:8d2cb93236","path":"scripts/agent/openai-client.mjs","purpose":"Join a base URL with the chat-completions path, tolerating a trailing slash * or a base URL that already ends in \"/chat/completions\". * * @param {string} baseUr"},{"hash":"sha256:d9f7d2a9b42c3f1c8733b4082327011bc64cd445c82cded91b0ae1102e304ff8","id":"F:851f776227","path":"scripts/agent/parse-checker-telemetry.mjs","purpose":"Case-insensitive signal phrases that mean the checker withheld approval or asked for changes. Matching any one sets checker_requested_changes = true."},{"hash":"sha256:a21893a1726194e08208e2a6805c3e186aa9818c611b30234a4edeb9f63acbb1","id":"F:8b5a1f94c4","path":"scripts/agent/providers.mjs","purpose":"Built-in providers. A config's `providers` map (see resolveProvider) is merged on top, so a host repo can add or override entries without a code change here."},{"hash":"sha256:92fe8a966146d773b203e831a54eb2a655572beae435b439aa325115a7fafd24","id":"F:fd660a117b","path":"scripts/agent/render-prompt.mjs","purpose":"Build a compact repository-snapshot context block from the committed Tier 0 signature, so every rendered role prompt starts pre-oriented and an agent can read t"},{"hash":"sha256:990c960a7bdd181c31fba92eeeb60d7fa01360ecb16c2e93e6f41dff01e6c0b7","id":"F:304ce7b89d","path":"scripts/agent/resolve-role.mjs","purpose":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative whe"},{"hash":"sha256:e5779dca1895b87903260631ce711391e9a9eb5639c5c91158f7955f9a78928e","id":"F:2d6ef08990","path":"scripts/agent/review-diff.mjs","purpose":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into ap"},{"hash":"sha256:cebe0dc7f6340cb3f141af88716bcda80f3b1fb13ced87e84097dbcc9e0e6104","id":"F:2127a8caca","path":"scripts/agent/review-proposals.mjs","purpose":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mj"},{"hash":"sha256:abb3bebb9b8ef6e4bd91e48facd8e44d7d645556859045d19b6097676af5f55e","id":"F:37f4a5c04e","path":"scripts/agent/route-action.mjs","purpose":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the"},{"hash":"sha256:43cf44b9edf6feca7efb0f71f7e26c4a26ba530d6ef7a206ecb8e20382811cab","id":"F:ddeb486c49","path":"scripts/agent/run-cycle.mjs","purpose":"Derive the ordered list of roles the cycle executes. An explicit --roles CLI override (opts.roles) takes precedence, so a single invocation can run just the res"},{"hash":"sha256:edeb925a87b920bb9b64a63c2a3218b0281b7237af6ad86ca1608b170e14d6fd","id":"F:aa77f227a6","path":"scripts/agent/tool-loop-adapter.mjs","purpose":"Resolve the command the external adapter is invoked as. Precedence: an explicit * adapterEntry.command, then adapterEntry.name, then a bare fallback. The value "},{"hash":"sha256:3b7c9ec492dec9c378f582afef587b2ff23ec768bd982857ecdc4c0d77ecd04e","id":"F:aea3c05bca","path":"scripts/agent/triggers.mjs","purpose":"The maker/checker pair is the first-class separation-of-duties cycle and runs from modonome-auto.yml. self-govern has its own dedicated workflow (self-govern.ym"},{"hash":"sha256:87bc294cf5068d051e6d20d6056432da9925110e6f8db55b99660f8e36fc0bd1","id":"F:af6de66499","path":"scripts/agentproof-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:9275fe5c20751f990b51b1021467f17e59250f4c38a45aa3b5b3a35daf6ace69","id":"F:5f7910375b","path":"scripts/arm.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:bd263b1245941e1b4041001b4afb0ba97b394dc5c9d8a1e1471ee33451bfd247","id":"F:fa49930755","path":"scripts/assert-governed-change.mjs","purpose":"function gitDiff"},{"hash":"sha256:f1141bf6b8313e4155e84d70e8fc631dd391abf85a19ee92218eb681161d6fe3","id":"F:c9493b5275","path":"scripts/audit-learnings.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:f8e07c6c13183b7fbf33578abd8ff3d70686fba63ffae44d0982a7368fc8eed5","id":"F:2e327963ed","path":"scripts/build-compliance-evidence.mjs","purpose":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object."},{"hash":"sha256:061241e18cce8d0dcf12c11db8c58927dea9d4ded02e2078c7def7f325a1ef58","id":"F:780c791407","path":"scripts/build-policy-attestation.mjs","purpose":"Domain separation binds a signature to this artifact type so it cannot be replayed as a knowledge packet or any other signed structure."},{"hash":"sha256:dd530f7ea86c3a22ac08fdf514d8f7551be74ce4deb5f12d10fc1b22731d5a2b","id":"F:c4395c3023","path":"scripts/build-prompt.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:be7f3355b469f9afc2e06391aceaa8174ce7e70695aa6b0d573ac92274b07834","id":"F:9344d335a6","path":"scripts/build-release-evidence.mjs","purpose":"Sample-app captures: real maker and checker runs recorded under examples//runs/. These directories are committed (unlike the gitignored .modonome/runs/), s"},{"hash":"sha256:c77a817b7fc82d4ebee7775b907c151db19eac9863dbca666c8e0eef641f3529","id":"F:b16afebae9","path":"scripts/check-agentproof-registry.mjs","purpose":"Core check. Takes the parsed registry and schema and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:5c29d7dbd4be83018e5d25810618ca7a31df62a8e437b9144ea2554e2144d5ca","id":"F:4749cc43a0","path":"scripts/check-architecture-drift.mjs","purpose":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match "},{"hash":"sha256:b29bdd09ee9c05a106aff2d333fe6dd9842839d3dfe6b08a539674391590245c","id":"F:e8676a18b7","path":"scripts/check-attribution-fp-corpus.mjs","purpose":"Run the corpus through the two layers. The detector predicates are injected so the * gate's own logic is testable with a deliberately over-broad matcher (provin"},{"hash":"sha256:d216d2f5903d4bdc8eadf06f3dac38cae0f3df9786ab318881ab622a310559a7","id":"F:fc5d887ff6","path":"scripts/check-checker-engagement.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3310b9321df769c49419a6203cd88c79bcbd1a10655abba8798aa6665ef29198","id":"F:92d6903b5f","path":"scripts/check-decisions-authority.mjs","purpose":"Parse DECISIONS.md text into heading violations and Resolved-section entries."},{"hash":"sha256:d60e08a38e4005ed25ee758d7cf8e61ef9b751d0d32245c45a68c391066fa251","id":"F:87c30bdb4c","path":"scripts/check-drift.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:579e7403d192e1755d1ddf4a5f8567dd8ff14642db3442800583a173a1802c14","id":"F:9427d264e6","path":"scripts/check-edit-set-compliance.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:3216227092f32ee7c6f96f49e7604bab76e808b6459685c22c1853f07ea067c0","id":"F:ace169adc4","path":"scripts/check-evidence-secrets.mjs","purpose":"Resolve the list of files to scan. If a path argument is supplied use it directly; otherwise walk examples/runs/metrics.jsonl via readdirSync."},{"hash":"sha256:6cc5d9ddecbd7b9711cbd42d94e8aa0be9b4c3937308dceb03eda4cbe246e311","id":"F:fc21812307","path":"scripts/check-gate-dag.mjs","purpose":"Extract the relative import specifiers from one module's source: static `from \"...\"`, side-effect `import \"...\"`, and dynamic `import(\"...\")`. A regex scan (no "},{"hash":"sha256:9702cbaa25ff0244bbfd29c1f63ae498861dd5e5ea84914860c672c2a762c875","id":"F:cc361bd05a","path":"scripts/check-licenses.mjs","purpose":"Core check. Takes the parsed package.json and (optional) adapters manifest and returns a list of human-readable problem strings. Pure: no filesystem or network."},{"hash":"sha256:50afc330cf4fac557f8b99eb5906ca2932616c858ea4811adcd03e542080fd37","id":"F:fd08562f92","path":"scripts/check-md-governance.mjs","purpose":"4. ADR number uniqueness within docs/adr, and across docs/adr and docs/research."},{"hash":"sha256:3c601bbcdfc8b45a42b893b35a86a22321f7c5f56c6e03e591f64eeb2da92d94","id":"F:2d4c555ba1","path":"scripts/check-portability.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:abfc4b3e72056ce2540816630ffb66f166c0cfcc906ddc57ab2274ccbb88ced4","id":"F:c5938c33fd","path":"scripts/check-promotion-readiness.mjs","purpose":"Check that a section appears as a Markdown heading (h1-h6), so a one-line ADR with the section words buried in prose cannot game the gate."},{"hash":"sha256:07bdd20c05fa3927668884c14b436f491487d1b590b057d9a8d8a4ed02a7ea01","id":"F:e7380d1444","path":"scripts/check-regex-safety.mjs","purpose":"Remove character classes [...] so a literal + or * inside a class (\"[a+]\") is not read as a quantifier. Escaped chars are skipped."},{"hash":"sha256:3313c93f4758a857263196d58fcb974ec3a68b431b6555e7db7c20cb922e55fc","id":"F:61296e720c","path":"scripts/check-repo-hygiene.mjs","purpose":"Helper"},{"hash":"sha256:93b19351ad47795d5880d0ab2d60511184a63f1ca7ccb49014951b80c349464b","id":"F:4096620673","path":"scripts/check-self-application.mjs","purpose":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is p"},{"hash":"sha256:a44590cf10dbd2cd48800f5864c83a939307510be49125345ace97e1dbbec8e2","id":"F:8b8d3c46b3","path":"scripts/check-state-machine-acyclic.mjs","purpose":"Build the adjacency map { state: [to, ...] } from the transition list. When includeCapGuard is false, cap_guard edges are dropped: those are the sanctioned boun"},{"hash":"sha256:28cc840559474e83a1ee21dba95c35e28b268902f1a72fb2372147047d23f808","id":"F:ca0833ac73","path":"scripts/check-style.mjs","purpose":"Escape a literal phrase for use inside a RegExp, then require a word boundary on each side so \"workpacket\" (no space) can't false-positive on the banned phrase "},{"hash":"sha256:eaf537f197bd578bec1076407cda89e4c85973635231d5cdc3999ba527596b0b","id":"F:d6401dd73e","path":"scripts/connect.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:97433b7af1d83122e5a0b5dae4a3b004d4033de57d3c30803d82b670693bf2fd","id":"F:09ba331878","path":"scripts/detect-near-miss.mjs","purpose":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch."},{"hash":"sha256:3c6707888df8aaaaa3f402c119fbe05164b9c19b4c95df42abb4c3372a97602c","id":"F:6f247eb514","path":"scripts/dry-run-sweep.mjs","purpose":"Only fires when the swept repo actually has a control panel at apps/control-panel (auditCoverage/auditCoherence report `skipped: true` and this returns nothing "},{"hash":"sha256:e1dcceba4e0522d0c121c0788768de2a53a50d140904067ae9643d931335aa74","id":"F:128b647d9a","path":"scripts/fleet-ledger.mjs","purpose":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse."},{"hash":"sha256:5cfd1768d2a265c8c9c50898d37377c3da90f9a0870fe804e32cea74fc5bbbc8","id":"F:522efae76d","path":"scripts/gauntlet.mjs","purpose":"A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same \"log writes must never crash the command\" rul"},{"hash":"sha256:563d044fe89ec39aa32f05e04406003e5cc38ff7850a003d9ad12da714eb5505","id":"F:8a10462927","path":"scripts/guard-ratchet.mjs","purpose":"Strip string literals and block comments that provably open AND close on the same diff line, replacing their contents with nothing. Anything uncertain (a quote "},{"hash":"sha256:99de1dee24fee158bebf0282beea7c691e1db08ffcd225c96a3c861939b7b07c","id":"F:90e1fd2fd9","path":"scripts/hygiene.mjs","purpose":"Collect findings for the current branch, the commits unique to it, and the PR-body-shaped surfaces we can see locally (the commit bodies themselves)."},{"hash":"sha256:ea137b388471eabcc768a50eaa87370d0d8ff22c5930538f2b02b7ee389abb7e","id":"F:a7ce0f6452","path":"scripts/install-hooks.mjs","purpose":"True when targetRoot is modonome's own repo (not a host that merely depends on it or vendored a copy of these scripts). Checked by package.json name rather than"},{"hash":"sha256:d244edfb949175f0c6f949f0552a3b44c868873ac1fd477b8f9f3be0ebf499cb","id":"F:5a3543606b","path":"scripts/lib/attribution-fp-corpus.mjs","purpose":"Branch names no layer may flag. These include descriptive names that merely contain a denylisted token as a substring of a longer word."},{"hash":"sha256:39eb059a2ae2d05ffea008a764c8ee54d4512f392d93c49cba0d1d0df7a26e78","id":"F:6e0bd62fa3","path":"scripts/lib/branch-name.mjs","purpose":"True when the first path segment of a branch name equals a denylisted token. * Matching is case-insensitive. \"feature/ai-adapter\" is allowed because the * first"},{"hash":"sha256:1ad1f8a9b02017c0d197db0d6cc81425f8a7f7006aba988237647420fc958885","id":"F:245efb551c","path":"scripts/lib/canonical-json.mjs","purpose":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another."},{"hash":"sha256:ec29a7bc4bd47ae47abf9977d1ce9ea482f08c973cdaa5b07198c394fdc23bfa","id":"F:98529ba7ea","path":"scripts/lib/capability-flags.mjs","purpose":"The capability flags that expand the engine's authority and trust boundary (ADR-024). A single source of truth shared by the promotion-readiness gate (scripts/c"},{"hash":"sha256:a602b02d47546bf2f61d1ce0115814be8d94f25d26f8944bc2745caa4af2ddc0","id":"F:2d93cea2d4","path":"scripts/lib/cli-args.mjs","purpose":"Minimal argv helper shared by scripts that take `--flag value` pairs."},{"hash":"sha256:cac7448be7d7d4dd22883cdcf78a7f351b926cd087505967814a1c2ff5dee2be","id":"F:e4ff19bbe2","path":"scripts/lib/commit-identity.mjs","purpose":"True when a name or email belongs to a denylisted agent or vendor identity. * Real automation such as dependabot is allowed; only coding-agent and model * vendo"},{"hash":"sha256:437e6ab7ef1994b7b6f1c508dfb7b50e66b454cc1c6bbbca20921583425f5741","id":"F:d480e40c97","path":"scripts/lib/config-validate.mjs","purpose":"Safety rules beyond structural validation. These keep a config from claiming an armed posture without the controls that make arming safe. Note on arming levers:"},{"hash":"sha256:784a3f9087775417d015cb26550348ea7b24b163a99df58d7004ad5a09dc3e69","id":"F:1a19f02364","path":"scripts/lib/control-panel-audit.mjs","purpose":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary "},{"hash":"sha256:ccc5c76cd7b844283a20f6e510b6aae9bf403f654cbb16bf1e632162e722a085","id":"F:4a7eaceb5c","path":"scripts/lib/detect-attribution.mjs","purpose":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the fir"},{"hash":"sha256:4b4b88d9bb97bd5f214e3321b995b646f067843323838c567bf2a73206bc1369","id":"F:0cacf66a3b","path":"scripts/lib/ed25519.mjs","purpose":"Raw 32-byte public key as base64, accepting either a public or private KeyObject."},{"hash":"sha256:71b31aebe22a8c98aafef65bed9f562e02b56bc00515de949a947f30ad9ecc9e","id":"F:9a72895a04","path":"scripts/lib/file-classifiers.mjs","purpose":"Test files: any language."},{"hash":"sha256:a3488a4f708323ac66b888445195aa30435c0447782db57b995a3599ad92f935","id":"F:ff2c4a08a4","path":"scripts/lib/git-scope.mjs","purpose":"The commit range unique to this branch: origin/main..HEAD, falling back to the * last 20 commits when origin/main is not available (a fresh clone or local repo)"},{"hash":"sha256:521f61f9241e90e815aa0be486910b589b4eeaaa40b81d80b7c3c21cdf4887cf","id":"F:cdbe769ed3","path":"scripts/lib/github-api.mjs","purpose":"Resolve the owner/repo, preferring the GITHUB_REPOSITORY env, then git origin."},{"hash":"sha256:151594baff293acbee5d59624d372828624fc07b8ca255ce1c69e894136afcd2","id":"F:f51cba9beb","path":"scripts/lib/graph.mjs","purpose":"isCyclic(adjacency) -> { cyclic: bool, cycle: [...] } Detects whether the graph contains a cycle. When a cycle is found, `cycle` holds the nodes involved in the"},{"hash":"sha256:943e69c8656c227f4aaec006181a2ccfce440d491533c7d254a3ed1a57446a01","id":"F:34cb2b6c48","path":"scripts/lib/jsonschema.mjs","purpose":"A small, dependency-free JSON Schema validator."},{"hash":"sha256:d7e0fde286931884db99d3a1a496f428bd6c68fbddf5de8e75cb0fd7a6209a51","id":"F:594f505f11","path":"scripts/lib/lang-adapters/generic.mjs","purpose":"Fallback extractor for languages without a dedicated adapter. It captures common"},{"hash":"sha256:8e61f09199636a2a7bd4ed653ebb4176fd0f5c41f8f8719956613f0227db1122","id":"F:ffe5c1269b","path":"scripts/lib/lang-adapters/go.mjs","purpose":"Dependency-free signature extractor for Go. It captures top-level func (including methods with a receiver), type, const, and var declarations, their preceding l"},{"hash":"sha256:39f6d32bbcecdcc56e34c94fa12cd68b0e0f303302324d2ce24d5fb85cae150d","id":"F:2554ddd30c","path":"scripts/lib/lang-adapters/index.mjs","purpose":"Resolve the adapter for a path by extension, defaulting to the generic fallback."},{"hash":"sha256:31bd1870b3685735b96c6fa032a6c9b7601c963658638d182dedf17103802d1c","id":"F:c598a2d684","path":"scripts/lib/lang-adapters/java.mjs","purpose":"Dependency-free signature extractor for Java. It captures type declarations"},{"hash":"sha256:7f8e7109694e05aadc965af340c67bab5cda5a9c0d0495535b5cf7385ed5a95b","id":"F:36419aa427","path":"scripts/lib/lang-adapters/js-ts.mjs","purpose":"Dependency-free signature extractor for JavaScript and TypeScript. It scans top"},{"hash":"sha256:752af1565feb9bf566c2683e75abb951d701ab390777e88c42baf1a6921b50ae","id":"F:3213d03b72","path":"scripts/lib/lang-adapters/python.mjs","purpose":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and im"},{"hash":"sha256:110290b3d6d591798432e680943ee28a30281a47504da121b58e834fa09c31e9","id":"F:cecdb96382","path":"scripts/lib/lang-adapters/tree-sitter.mjs","purpose":"Attempt to register tree-sitter adapters. `register` is the registry's registerAdapter. Returns true when at least one grammar was registered."},{"hash":"sha256:d6c309ff2f4bd2cc17f802ca282a312583327a153f10049310dbe98a6dad1f08","id":"F:4ebb5aa8a0","path":"scripts/lib/learnings.mjs","purpose":"The Staged section is capped so it stays a short review queue, never a dumping ground. LESSONS.md documents this as \"Cap at 20 staged entries... Never auto-evic"},{"hash":"sha256:e18e2c920e97766971ead19dfa0b82eb4911a2fe957cfb73ce7fe1ca2b5eac71","id":"F:2b9c43b0ca","path":"scripts/lib/merkle.mjs","purpose":"Hash raw file bytes (Buffer or string) into a prefixed digest."},{"hash":"sha256:60fea90ed1969e529114e0c8c88a58607618b0570bbc9c735bc56011da83d561","id":"F:e9f1cc1e5d","path":"scripts/lib/message-catalog/advisory/audit-learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:38ac9166a3c80ca01dc4aaeb0167cf9f4f1f138b707f2212528a70bbb3f678f3","id":"F:91e24dcac0","path":"scripts/lib/message-catalog/advisory/build-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:896322295191ba28f7c351678ad86b1b1fcdb22b729484173b52b8dc0068431b","id":"F:99251bc045","path":"scripts/lib/message-catalog/advisory/build-release-evidence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:83f8ea50cb0ade3033e437971998189dd92da02f85c41655960254d08f8531c3","id":"F:c6bd51a324","path":"scripts/lib/message-catalog/advisory/detect-near-miss.mjs","purpose":"const MESSAGES"},{"hash":"sha256:56d58644294be2ef66bde21bac0dff8edca53bd83f4990fb809531cb2a0495c2","id":"F:1ff2bf39a4","path":"scripts/lib/message-catalog/advisory/github-api.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8ef6c2e14a8d0b58ece3bb7b3e1a7f98d780e799045c8ec2aa83d95379709441","id":"F:d328f97d94","path":"scripts/lib/message-catalog/advisory/hygiene.mjs","purpose":"const MESSAGES"},{"hash":"sha256:90d0f7c077bacdb650e433022ac8e2c968d7d8253dda7cd4e6c71aad0721ccb9","id":"F:4d08d5472f","path":"scripts/lib/message-catalog/advisory/learnings.mjs","purpose":"const MESSAGES"},{"hash":"sha256:8f8037a5cb63473a4912543f0203211419999bb61bde7d77fc6637a770f9283f","id":"F:d8e37c4449","path":"scripts/lib/message-catalog/advisory/migrate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:013ac5fd17e1afecd4793e8f132990132e1b4191fddeca1e89248bc236ec9c3f","id":"F:9b01a5cd4d","path":"scripts/lib/message-catalog/advisory/preflight-embedding.mjs","purpose":"const MESSAGES"},{"hash":"sha256:dcf18fb07eb5c297b55075a40d7a267da2f4632f1e23e0b9dd19b73578ba9793","id":"F:d288a78085","path":"scripts/lib/message-catalog/advisory/sign-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7aba6be92f59e9b9e0c22e1d4163686fce03fc729fc6097689f9df011b2c1a1a","id":"F:9a32917e56","path":"scripts/lib/message-catalog/advisory/sync-site-data.mjs","purpose":"const MESSAGES"},{"hash":"sha256:e6844e187fe342bf462bbec7dc26ae8ca192285c46ed51cd6d2f82c7460df954","id":"F:dd58ae3791","path":"scripts/lib/message-catalog/advisory/validate-knowledge-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c63edcd93cab1923edcfa9e9e1fab374e4eac71b15fdfa171e26d787cf1314d9","id":"F:09ea014068","path":"scripts/lib/message-catalog/advisory/verify-packet.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b6a5e7e1c42beacee11eb5a45f0f13999566e46c9fd486797a2ceb483f36f294","id":"F:da9133a29d","path":"scripts/lib/message-catalog/agent-run/action-queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9151a420940e33c897078aea7224430d08cb455aae601e44a078073cbe37cedb","id":"F:aa27d254da","path":"scripts/lib/message-catalog/agent-run/arm.mjs","purpose":"Arming-precondition failures. All non_suppressible: arming waives real separation-of-duties guarantees, so an operator can retune wording but not silence or dow"},{"hash":"sha256:6658d1a5b449f2ef7e2a8340fcb477ddb2e64d5dea0b79e31da5adb92a982ee8","id":"F:9616513cb6","path":"scripts/lib/message-catalog/agent-run/disarm.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0934bc4ec371ff52ae9f3e431d7c429ac048d7e0d663487f29c3a481bf380dae","id":"F:9803feef4a","path":"scripts/lib/message-catalog/agent-run/openai-client.mjs","purpose":"const MESSAGES"},{"hash":"sha256:4572c1be5d02623ba2bb952d81f8690ee828af9a8122439c64ec4d534d7f1b0a","id":"F:e948251d2b","path":"scripts/lib/message-catalog/agent-run/promote-learning.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3586e3392442081e34ff5d91ca35569cf944c745c236df06978711a3726e0a5e","id":"F:5d52d97b8a","path":"scripts/lib/message-catalog/agent-run/queue.mjs","purpose":"const MESSAGES"},{"hash":"sha256:17f6398c9cb42806adabf7da20358039e55b6f7ac17715e85707cc6edd63df34","id":"F:a5822fdd03","path":"scripts/lib/message-catalog/agent-run/release.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c58f58b0e6aae4da93c0bc1922a47b9485abbe4b8cfa10bf31edb37942c5fbe5","id":"F:33c4d744f3","path":"scripts/lib/message-catalog/agent-run/remediate.mjs","purpose":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, "},{"hash":"sha256:7dd6e91aca949390bc9be664d950656960f20631ee69a4c14efae7ed61005d5b","id":"F:59b2499e4e","path":"scripts/lib/message-catalog/agent-run/render-prompt.mjs","purpose":"const MESSAGES"},{"hash":"sha256:40bedb377bf613e45e81cfa30972c95cd5de3a4b36eaf721ef85503deb44c64d","id":"F:e2025a4e0c","path":"scripts/lib/message-catalog/agent-run/route-action.mjs","purpose":"const MESSAGES"},{"hash":"sha256:09d36c5933378524789996b727dac4db3cdedd84e1a2e9a0f22c3cc66d977bd5","id":"F:acc3f6b466","path":"scripts/lib/message-catalog/agent-run/run-cycle.mjs","purpose":"Agent run-cycle (WS-B) planning and execution failures. All non_suppressible: each represents a separation-of-duties, budget, or turn-cap guarantee, not an advi"},{"hash":"sha256:4b3f343aa8615dec423fbddc2c090cb6ef30bd01589e8b164da68b6b79f915f2","id":"F:313bcfac46","path":"scripts/lib/message-catalog/agent-run/tool-loop-adapter.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9735efc423677e7249cb9b85b4d7b4144a3aaa377780279637bc281408429a2d","id":"F:6a86908a3e","path":"scripts/lib/message-catalog/agent-run/transition-work-item.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9f526f99d6bbdeb34a67e2b03cc8bc011ba3d45875923a4397fd3220df6670ac","id":"F:1127892e72","path":"scripts/lib/message-catalog/gate/assert-governed-change.mjs","purpose":"const MESSAGES"},{"hash":"sha256:db26343cd0406efc3d0147aca404aaac49ab5111b5e27bf7d6281473febdf79f","id":"F:964f89b6cc","path":"scripts/lib/message-catalog/gate/build-policy-attestation.mjs","purpose":"const MESSAGES"},{"hash":"sha256:eb0cfb783b0b42137f4f059e1a0bb6c713c511a335672b35298e5cd0bde4a6ee","id":"F:40d8f235fd","path":"scripts/lib/message-catalog/gate/check-architecture-drift.mjs","purpose":"const MESSAGES"},{"hash":"sha256:3d6c96d1905aba0e8b1b3dfdb98a50cff5c6619329afdf92eb0c53c6c21e7d1e","id":"F:35d4a12b63","path":"scripts/lib/message-catalog/gate/check-attribution-fp-corpus.mjs","purpose":"const MESSAGES"},{"hash":"sha256:15411f6601e2524b7760c0b4ce06f61bfbaae59c924360d294dc104aadefcf16","id":"F:2715f09f24","path":"scripts/lib/message-catalog/gate/check-checker-engagement.mjs","purpose":"const MESSAGES"},{"hash":"sha256:62195cc465a6caa11f1bb8ac74b69e363a2015c75f072b2cd3a0a2e76bffc0ae","id":"F:a8c32b8f15","path":"scripts/lib/message-catalog/gate/check-control-panel-coherence.mjs","purpose":"const MESSAGES"},{"hash":"sha256:de8580a9807af52726a195ff6bbea0ba59024896e43e64ad563209a1ae931607","id":"F:b502a0fe75","path":"scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs","purpose":"const MESSAGES"},{"hash":"sha256:9b1d901e95fe1a39f690959333ef957b63c9b647fb6bdb8c90d95297d9262e7a","id":"F:2215d0e1fc","path":"scripts/lib/message-catalog/gate/check-decisions-authority.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0b53053e37e90fe399af325eecb321bd0259c7ec1009f414d40353c11e1da95d","id":"F:ccb72910b3","path":"scripts/lib/message-catalog/gate/check-drift.mjs","purpose":"Catalog entries for scripts/check-drift.mjs."},{"hash":"sha256:986f0df07a4720d88fbbc1b5742636295b56b156f0a85ef1dca5537551f89939","id":"F:05a0f0d5a5","path":"scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs","purpose":"Catalog entries for scripts/check-edit-set-compliance.mjs."},{"hash":"sha256:2733747219e41422cb94f686f76ae82cabcdf6a6b04a8eb5e5ac7f45e93ed55a","id":"F:efa02030ca","path":"scripts/lib/message-catalog/gate/check-evidence-integrity.mjs","purpose":"const MESSAGES"},{"hash":"sha256:74ed10d3af65d1c4cfd60c3bc16c0d223ba6ab2119cbba1436786a2d287328b0","id":"F:240ace7a8f","path":"scripts/lib/message-catalog/gate/check-evidence-secrets.mjs","purpose":"const MESSAGES"},{"hash":"sha256:88f3cd8aef67912ef0e255cb4741653c5477fc1a4c6beb8a30f35aa142f1598e","id":"F:0c731e3460","path":"scripts/lib/message-catalog/gate/check-gate-dag.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0dbe8208bead033ac950619986c6aa89ca356ba356dc77a184134a542606677b","id":"F:3835919e8e","path":"scripts/lib/message-catalog/gate/check-learning-traceability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:b276d73e960984be67d9728b2e2df11212942149bafcbbeeaa64265cb7d0ab8b","id":"F:3f1216fc11","path":"scripts/lib/message-catalog/gate/check-licenses.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5f842574f39f155e2a8da073e72208396eae4900cff3e05b455e3da8af71ae12","id":"F:b25dcdad19","path":"scripts/lib/message-catalog/gate/check-md-governance.mjs","purpose":"const MESSAGES"},{"hash":"sha256:0da9a0f1224bb89807786944653c7da3e344f26722b53faaed0406518f23f0da","id":"F:23dbdd7e76","path":"scripts/lib/message-catalog/gate/check-portability.mjs","purpose":"const MESSAGES"},{"hash":"sha256:d0b4806531e17afd05fe7e81b647f61dc3fc6633c4cce3282a93277fbba86617","id":"F:973aca5f3e","path":"scripts/lib/message-catalog/gate/check-promotion-readiness.mjs","purpose":"const MESSAGES"},{"hash":"sha256:bc09937690d9279d167eebde956fd80e6d9da09ba5139df802dd1a5ff6bdfe80","id":"F:b4f4e16ca1","path":"scripts/lib/message-catalog/gate/check-regex-safety.mjs","purpose":"const MESSAGES"},{"hash":"sha256:973c6d0a27ab11310c8414b6bf85549764f86882b6fa6bd55163b716b5eebee3","id":"F:597cc7ae15","path":"scripts/lib/message-catalog/gate/check-repo-hygiene.mjs","purpose":"Catalog entries for scripts/check-repo-hygiene.mjs."},{"hash":"sha256:d544aa0fb753cda824ff0d337bf27ecbfa4951c60e6738f538adb252b66c0ff7","id":"F:b37de0ee8e","path":"scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs","purpose":"const MESSAGES"},{"hash":"sha256:da60e62990a8ee27166781413a9718cd755c64104e7ad801a8447c56200e4100","id":"F:de188c1b79","path":"scripts/lib/message-catalog/gate/check-self-application.mjs","purpose":"const MESSAGES"},{"hash":"sha256:6e35dc5881832f52e637ba331d6361c7ee8fa741fd4cbf88e86a520ed02374f6","id":"F:179564da6f","path":"scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs","purpose":"const MESSAGES"},{"hash":"sha256:5e7ec0986719e01a5f2d8bd52df29ca0e60cc88f511822992031be12848a4e41","id":"F:9dbf431d3e","path":"scripts/lib/message-catalog/gate/check-style.mjs","purpose":"Catalog entries for scripts/check-style.mjs."},{"hash":"sha256:53cf657d4da273c63e8f24ee82f7582658d90fed61a0ed127950462ab7c2f197","id":"F:b2efd505ef","path":"scripts/lib/message-catalog/gate/check-trust-boundary.mjs","purpose":"const MESSAGES"},{"hash":"sha256:c7bbeb3b7d9f0e776386632aa64287228eac6fc294f6b166c67209a2606a80d7","id":"F:e6677dcd37","path":"scripts/lib/message-catalog/gate/check-work-items.mjs","purpose":"const MESSAGES"},{"hash":"sha256:306896f7104deb562b7631cbc392ed01b500270b0225a1da73ac44002dd5c568","id":"F:86fd2cf669","path":"scripts/lib/message-catalog/gate/guard-ratchet.mjs","purpose":"Catalog entries for scripts/guard-ratchet.mjs."},{"hash":"sha256:9d4fca362705c78c60598774a9e5603a6045bb2a09e920035097dc8f12e204f6","id":"F:5d02ea0b02","path":"scripts/lib/message-catalog/gate/risk-surface-guard.mjs","purpose":"Catalog entries for scripts/risk-surface-guard.mjs (ADR-047). Covers only the CLI's own status, summary, and usage-error strings, per ADR-047 decision 7: a find"},{"hash":"sha256:74717fcb0f99085d9d122db58e8e4ba94805d7322aef6bc620cf0d3cc199c774","id":"F:5b5b4ddcae","path":"scripts/lib/message-catalog/gate/run-gate-pipeline.mjs","purpose":"Only the gate-graph-cycle failure is catalogued here: runPipeline()'s per-gate `reason` strings are a JSON data contract other tooling parses by exact text (age"},{"hash":"sha256:ef1721e2305e6bb4ce9d7161f7539715485f76a36d1fec7ed074ab34049cd756","id":"F:a104667369","path":"scripts/lib/message-catalog/gate/test-prompt-behavior.mjs","purpose":"const MESSAGES"},{"hash":"sha256:1bcf14f7da5da91f3110ecfeab482e2df7ebdedddb1ab0566a7f1a29dd2f5c1a","id":"F:ec3aa9930a","path":"scripts/lib/message-catalog/gate/validate-config.mjs","purpose":"const MESSAGES"},{"hash":"sha256:7c112cd9b24871b493e467957094dfd12be3a18b9b982fdf43a73dc252b1a206","id":"F:bf4e255c6e","path":"scripts/lib/message-catalog/gate/validate-work-item.mjs","purpose":"WI-020's original pain point: these governance-error messages, surfaced by scripts/check-work-items.mjs in CI, are now catalog entries so an operator can retune"},{"hash":"sha256:81a865044b3a0c58fa5e25bd5a816ebb59037a2b250f25eeb5b8a215420a4ea0","id":"F:03f476958e","path":"scripts/lib/message-catalog/index.mjs","purpose":"AUTO-GENERATED by a one-off script during migration. Aggregates every"},{"hash":"sha256:1169c59a31929d875f93c908e8979f38939fdbeedc3fc8c296e40b25b01522e5","id":"F:f41378fed0","path":"scripts/lib/message-catalog/panel/control-panel.mjs","purpose":"Control-panel-authored Toast notices (apps/control-panel/src/screens.tsx), registered in the same catalog as backend messages so an operator can retune their wo"},{"hash":"sha256:0694d9599d0f9d3dea44ee03d796aff6c9bde8ae2229bc7766948b9100274297","id":"F:05bffc70e9","path":"scripts/lib/messages.mjs","purpose":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries."},{"hash":"sha256:4f7779cf5392e036bb31212825c280df1825f69daaceeba4812ea39ed04d0882","id":"F:9a3e8ed7d2","path":"scripts/lib/near-miss.mjs","purpose":"Tier 1: distinctive vendor/product tokens with no ordinary-English or in-repo collision, so separator-normalized SUBSTRING matching on branch names and identiti"},{"hash":"sha256:d60fc11156d34e1e740eb83a35af450377fa564f0d6cf64bf73422407451a6ed","id":"F:12c7a4e461","path":"scripts/lib/packet-id.mjs","purpose":"Content-addressed packet identity (ADR-016). The id is sha256 over the JCS of the"},{"hash":"sha256:facc1024c7256850c5287a76a89e091c1db28a5046cf9451b11379f16b242a70","id":"F:4db1101024","path":"scripts/lib/policy-manifest.mjs","purpose":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored"},{"hash":"sha256:3658a4a3013851c5dcb36c815d539c96ada209792b97326f384bfc670fb9e365","id":"F:8ffb11f281","path":"scripts/lib/remediate.mjs","purpose":"Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis"},{"hash":"sha256:22f072717e361c8cb6eca4926f99b8aa51fdb569f05b7586fb82f769c768f2e9","id":"F:ae46bbab81","path":"scripts/lib/repo-detect.mjs","purpose":"Build the small file helpers a detector needs, bound to one target directory."},{"hash":"sha256:2c82548a3cd1bf31dc50474e6fc8aa5b516f9dfa9abca36a36ce53de18d99774","id":"F:33ffae019c","path":"scripts/lib/risk-surface-allowlist.mjs","purpose":"parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at this boundary: whenever errors is non-empty, entries is always []. Callers never need "},{"hash":"sha256:91ea1828b798fc448bd3e1c742105e4bb4d5d41cef02fa3d0e31002c203588e7","id":"F:2f3e98ab2c","path":"scripts/lib/risk-surface-rules.mjs","purpose":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- a"},{"hash":"sha256:7ea23105d1a1d923578a3c606d67aca39d5d6a01c06edc0da696b4fa2b6f8290","id":"F:b014028f57","path":"scripts/lib/run-gate-capped.mjs","purpose":"Thin wrapper around spawnSync with a hard timeout and output-size cap."},{"hash":"sha256:495d8f38fcbb601695c8f161eb1b02aea33adac82569ddd8bd6a002495589f9e","id":"F:68c4da7fe8","path":"scripts/lib/secret-patterns.mjs","purpose":"Returns an array of { name } objects for every pattern that matches text."},{"hash":"sha256:be57418797ef4ee54f3c3e71d7b3b13a89b5adc1ce0fbf9616db542bacc23156","id":"F:1cf31c4792","path":"scripts/lib/snapshot-anchors.mjs","purpose":"A short, stable id from a string. Hex keeps it deterministic across platforms."},{"hash":"sha256:d3e330978bbbc5f009688d69510b6c683fb59eaa66f154df8f911bd0a53fd278","id":"F:119e3c0fce","path":"scripts/lib/snapshot-cache.mjs","purpose":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option"},{"hash":"sha256:237f5b4282a76f71b0a2953e54c663750f138b5454aed474ea906a7f02587692","id":"F:dbb9c92ca1","path":"scripts/lib/snapshot-core.mjs","purpose":"Detect binary content by scanning a prefix for a null byte."},{"hash":"sha256:b538e22f73b15770c75edab736311cf48d00324e81e8aab01c6f4f274a5445ed","id":"F:015261eab0","path":"scripts/lib/snapshot-graph.mjs","purpose":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\"."},{"hash":"sha256:60c433da29ddd383027d0bb950d4cc1b4e74437b7448fc71e57e69ad4cf49ef6","id":"F:4b91a9f65b","path":"scripts/lib/snapshot-redact.mjs","purpose":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked."},{"hash":"sha256:97f8769695906c86e13308edb05def7aaa9fbcd592f29ee56d5c4d346e62a3a5","id":"F:cb66095cb4","path":"scripts/lib/snapshot-walk.mjs","purpose":"Compile one gitignore-style pattern into a tester over a posix relative path. Supported: comments, negation (!), leading / (anchored), trailing / (directory), *"},{"hash":"sha256:642e97312574db19dec8b678ebf04827ddcceecb6b5d7f960823006045ac03f2","id":"F:7944059823","path":"scripts/lib/token-estimate.mjs","purpose":"Dependency-free token accounting for snapshot tiers. The estimate is a heuristic (about four characters per token) that needs no tokenizer and no network, which"},{"hash":"sha256:3cf0f082a2ffc271f28e040c0432af60005821bc9e72152b73598d200bd4e204","id":"F:a1baa3f01d","path":"scripts/lib/work-item-staleness.mjs","purpose":"States where a real actor could plausibly still be working the item. An item past this point (merge_ready, merging, done, escalated) is either already closing o"},{"hash":"sha256:773578d3c2dc5529756fcbce2ad2f9d157a79d6b06b5772feee7d0c9bf2577c3","id":"F:cb3c5f7715","path":"scripts/lib/work-item-validate.mjs","purpose":"Resolve a model name to its family by longest-matching prefix. Returns null when no prefix matches, so unrecognized models are treated as distinct families (the"},{"hash":"sha256:d53fbc6f62dfaab45537134168c78b39e1d4aa41ceb079fb829fb5876466c5de","id":"F:1575110130","path":"scripts/lib/yaml-lite.mjs","purpose":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string."},{"hash":"sha256:0209679156fb05ba27ff06b76b8eda2eeee8afd83c15b6e4a7e73edc23d8ddb1","id":"F:ab5077147a","path":"scripts/mcp-server.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:ee850affb3bf19cd5b253535cf806dc341e885ff118589641c3208cbce63019a","id":"F:9d69a6b766","path":"scripts/migrate-config.mjs","purpose":"Safe defaults for every lever. Migration fills any missing key from here."},{"hash":"sha256:93cd048e0c8b17b97337fbb587101af43b3ea3d289e155fbb9baebeb8d4755d9","id":"F:7232ada2da","path":"scripts/preflight-embedding.mjs","purpose":"Minimal, dependency-free scan for top-level YAML job names under `jobs:`."},{"hash":"sha256:b348d37fc2e50832baadc43039a306a4b5049507debcabde313087323b882d78","id":"F:ac11b5379f","path":"scripts/promote-learning.mjs","purpose":"Slugify a lesson into a deterministic ID."},{"hash":"sha256:47e7d2ead1129a6bd6a4a2202883e524778c990715b2027c5bca3b701ee5e079","id":"F:e9479e1a3b","path":"scripts/ratchet-attestation.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:08c26d5e35bea28010341cc485b8bacbc1def7ecf03d812a9b9d4d3ed7899054","id":"F:edf42fb1af","path":"scripts/release.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:a109bb6467a8c6c433d7839dfeeb8f605c0ed8f4fec6ceb69fdf3870be25d3d1","id":"F:1e5ef6ba70","path":"scripts/remediate.mjs","purpose":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-"},{"hash":"sha256:c03c8e271e9be99be123b63baca4bf1e24818c705bcd486d45eef82df7423d27","id":"F:3b382f95c0","path":"scripts/report.mjs","purpose":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he"},{"hash":"sha256:33dc03cc51ae3b25856aa24511e167464fc8a7143e71269e109f40f1b66e409b","id":"F:116adfb9f8","path":"scripts/risk-surface-guard.mjs","purpose":"A suppressed finding (allowlist match) never counts toward the exit code, the result verdict, or the finding count in the summary line, even though it stays vis"},{"hash":"sha256:ace3ba225e4ff802da64a42e737843913c708e466602ab98a23151fb34d642ad","id":"F:edb11415f0","path":"scripts/run-gate-pipeline.mjs","purpose":"parseArgs(argv) -> { diff, \"work-item\" } map of fixture paths by gate arg name."},{"hash":"sha256:cbe2d6ea83610d9a33c48f6dce83e514d1672687c85a032a873539b2cb2e5914","id":"F:5e450ff82c","path":"scripts/scaffold.mjs","purpose":"Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp"},{"hash":"sha256:d215c06b5aafdb9ff71a4c1ada37e33b202a688248f8098d8d238b4f30f72d74","id":"F:e11f907cba","path":"scripts/score-proposals.mjs","purpose":"Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale."},{"hash":"sha256:f6388f045a2cd30e25ab513e6b47875572c02ff15a17340b081446188fd31b4f","id":"F:7b3e38c9a6","path":"scripts/sign-packet.mjs","purpose":"Pure: attach a signature object to a packet using the given private key. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rath"},{"hash":"sha256:cb7db504e88426d42954eb37c6b4695b11c738a38483e905b146d18f1654689d","id":"F:a0d489df6d","path":"scripts/snapshot.mjs","purpose":"Resolve incremental build inputs. --full forces a from-scratch rebuild. Otherwise load the cache and ask git what changed; a missing cache or unusable git yield"},{"hash":"sha256:3952dac12800b17c8153ed462ab6073b0ed24af0a188e898e5491f324fe84cc1","id":"F:8abf9e432a","path":"scripts/sync-site-data.mjs","purpose":"Read a file, returning null if it does not exist. Reads directly instead of checking existsSync first, so there is no window between the check and the read wher"},{"hash":"sha256:aa0aa9abb59be3ae19db00c9ef7db9d6cc08045d3416b359875a1ec76b9da0f2","id":"F:23917c6197","path":"scripts/test-prompt-behavior.mjs","purpose":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns "},{"hash":"sha256:56007d9acd788c62cb891a03f1d22790b844390830a7c5aafda1347e4b3a4d89","id":"F:d135cffeaa","path":"scripts/transition-work-item.mjs","purpose":"A lease is \"live\" if it has an owner and an unexpired lease_expires_at. The lease holder is recorded as lease_owner (the field this swap writes) or, for older i"},{"hash":"sha256:f89c1fd863164fde2d373634069d30c4d3631be96a9768d5630901b52064d54b","id":"F:3b96b6dfed","path":"scripts/tripwire-check.mjs","purpose":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor bef"},{"hash":"sha256:18d20c24e1fc001459bc1926c55be66dac198f93ec7bf15e02be87818761585b","id":"F:65193a9799","path":"scripts/validate-knowledge-packet.mjs","purpose":"!/usr/bin/env node"},{"hash":"sha256:240b429dd6418ed77a6ecad1a0635969884c96035107da3eb3e06183e7158e01","id":"F:0c1c5ad5d9","path":"scripts/verify-packet.mjs","purpose":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather t"},{"hash":"sha256:ce19e9a81b804f9827f62afc8d794ffbb68bdab9e5a744c9a0efc2303356ac66","id":"F:669d2a51f4","path":"site/README.md","purpose":"Modonome landing page (modonome.com)"},{"hash":"sha256:60feb6f02f574a9b483a6c31048de9ef990f7bed92e0ac12c5d85a3942da6051","id":"F:aef9cf1e27","path":"site/index.html","purpose":"class Component"},{"hash":"sha256:41cc004d9a3d9f8d0701d181a235ae206d248470c009de18176e540f6b4a1888","id":"F:6a5934a79d","path":"templates/.github/copilot-instructions.md","purpose":"Copilot review guidance: gate integrity"},{"hash":"sha256:1e6ba7bac7bbcc6d85acac2228227493609359e98bcaae632ede494533923f87","id":"F:037178c793","path":"templates/.modonome/DECISIONS.md","purpose":"Modonome decisions"},{"hash":"sha256:1d2f92bf5237ba63d8447070c29beff13597b9668ab64f9f017a2e485bfe6ff7","id":"F:26c8e3a19a","path":"templates/.modonome/LESSONS.md","purpose":"Learnings, staged candidate conventions"},{"hash":"sha256:5c959a9f08896f57831c56e1321e34fe5301a1baa94c3ff6d316e75a43f633b8","id":"F:515a65a35b","path":"templates/.modonome/NETWORK.md","purpose":"Cross-repo network"},{"hash":"sha256:8918ad8e3a343b8450ba620de91ea940fb320d0cfd4c2b312a035aa6fe9fdc6f","id":"F:e27748d089","path":"templates/.modonome/STATUS.md","purpose":"Modonome status"},{"hash":"sha256:d528b04b9da3809145bc30439e8a0577daa9d4cfd059d7436aec7858660ec7b0","id":"F:75c1125713","path":"templates/.modonome/control-panel.md","purpose":"Modonome control panel"},{"hash":"sha256:1a28680281da45ca68d4e4d912b5cc4147c97f5d61c2b95d17513a69804347a7","id":"F:2148814594","path":"terraform/README.md","purpose":"Modonome org-provisioning module"},{"hash":"sha256:faafda4763433ac754f4936ae5a7545fe0f2aac848ef92003a78b1ac6f8fdef3","id":"F:195e9217ca","path":"tests/action-queue.test.mjs","purpose":"function tmpQueue"},{"hash":"sha256:66d197135fce5140ea1ee62cdf60ce50c1f2565d5589e95fce7657b99d8bc830","id":"F:cacaab56e1","path":"tests/adapter-verify.test.mjs","purpose":"Coverage for the adapter conformance verifier (docs/adapters.md). Tier 1"},{"hash":"sha256:f03b2f065139b4a025ce69bef63c9ab58d672c1674bcaf9628bc18e6a3013f8d","id":"F:18f569225a","path":"tests/agent-model-fallback.test.mjs","purpose":"WI-041 (ADR-039 follow-up): runtime model fallback in the loop. resolveRoleModelChain"},{"hash":"sha256:c6049e544a248e0df041509b989f0e4717b4df24aaa212aeb2ac984a48fad4d0","id":"F:1bc6d1449f","path":"tests/agentproof-attestation.test.mjs","purpose":"Tests for the AgentProof conformance attestation (ADR-042). The Statement shape and"},{"hash":"sha256:270640c566b3fb72ea5a277b4db30f7ed12cf51cc0e63472de3b6ebb4248bc88","id":"F:940d5f4399","path":"tests/arm-disarm.test.mjs","purpose":"Tests for `modonome arm` and `modonome disarm`: the guided ceremony that flips"},{"hash":"sha256:43bbfe482e04ee3d5f5310c89bb7ea589d5a9a57078fea7d007331560f81332b","id":"F:60548316f5","path":"tests/arming.test.mjs","purpose":"function tmpRepo"},{"hash":"sha256:0d90c61482079b4e23bcd539618b23439c4b11c4e026cbc7e677a3328f5df0ea","id":"F:8fe56e5618","path":"tests/chaos.test.mjs","purpose":"Chaos test helper: any call must either return errors cleanly OR not throw. A crash or hang is a failure."},{"hash":"sha256:825ad054cf87ff7205f4d60e6cb87fa820f7aeb1addb4b1d005dc71a480cbe5d","id":"F:564b053598","path":"tests/check-architecture-drift.test.mjs","purpose":"function makeMinimalRepo"},{"hash":"sha256:a9ca00820366b64f0e6c4b6d9108c7d0e7b152671ff5fe423e428ef0710f9f4c","id":"F:df4b55ecef","path":"tests/check-gate-dag.test.mjs","purpose":"Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says."},{"hash":"sha256:30690fee946ac10a3ecc618e5909fc2bb31f51b111173e2f2e52d999f2d01443","id":"F:0391f3b249","path":"tests/check-md-governance.test.mjs","purpose":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under te"},{"hash":"sha256:3259bd59e61779d8a103d0f84bdec0d1f9552ed5852a618e80ed732b23f15800","id":"F:54784dcc0a","path":"tests/check-risk-surface-allowlist.test.mjs","purpose":"function run"},{"hash":"sha256:91b3a910fa42af06c4cfeba5b735c93e31a0268ef94c5c1c94f77bef05fb8497","id":"F:e359adb110","path":"tests/check-style-lexicon.test.mjs","purpose":"Tests for the Lexicon Gate wired into scripts/check-style.mjs: a banned term from"},{"hash":"sha256:4cba8865613c76bc3e95b3308f1be5cc76e5ba7b2a1003a85602f95e4c0f8aa6","id":"F:40e4f39b59","path":"tests/cli-dispatch.test.mjs","purpose":"function cli"},{"hash":"sha256:c803e7cccf71bd7bfc883e20cf0612e043e0ca62ef8b64215e32f1a71209b75e","id":"F:3ea503e7c0","path":"tests/compliance-evidence.test.mjs","purpose":"Helper reused by the mapping test."},{"hash":"sha256:cb57af34873242513701019e39d38d9336899d37c263372f90fcbbc74ef417ff","id":"F:5eff4122c0","path":"tests/config-key-parity.test.mjs","purpose":"Extract the string literals inside a named list/set declaration, regardless of whether it is `new Set([...])` or `[...] as const`."},{"hash":"sha256:b1abc614f5f29ceacb2dbe8490be13605cbbab487feee98818689423b5fb451a","id":"F:5956278014","path":"tests/connect.test.mjs","purpose":"Tests for `modonome connect`, which registers the read-only MCP server with an agent"},{"hash":"sha256:2037529df3e0aa6dd33508e799f1cf299758373e3daf4c18dfa3b6920e803cdb","id":"F:d0da1cab80","path":"tests/control-panel-ownership.test.mjs","purpose":"A scratch repo whose git email is faked through the injected `exec`, so the decision is tested without touching this repo's real git config."},{"hash":"sha256:a0d9d96354cbf39c606470a59f64a93247ac045059b0e654319de426b68fb0c8","id":"F:e00aec45ce","path":"tests/control-panel-work-item-writer.test.mjs","purpose":"A minimal scratch .modonome dir: a config.yaml (read for governance validation, e.g. require_distinct_maker_checker_model) and an empty work-items/ directory."},{"hash":"sha256:6b5ed813cc8f8442ef1975e65f3a1cad7db442e8f7323a668e8acf41d13f5274","id":"F:8b2f3dbcba","path":"tests/control-panel-writer-nested.test.mjs","purpose":"Every test operates on a scratch copy of a real config.yaml, never the file itself, so a bug here can never corrupt real state."},{"hash":"sha256:4e1f4b2cf905b3e5f11747628e019caeb327d4f1d9b77220575715ab16506836","id":"F:f921eecad7","path":"tests/decisions-authority.test.mjs","purpose":"A repo with one commit (base: entry \"a\" only) and a second commit that adds a new Resolved entry \"b\" on top. Returns { dir, baseSha }."},{"hash":"sha256:c80f660e875231f20615c19af04c4a405427dd7822dbbf8b48334c6d9aa4f8f3","id":"F:b70824b13e","path":"tests/dependency.test.mjs","purpose":"Read all .mjs files in a directory (non-recursive by default)."},{"hash":"sha256:c2a5852ebeed046ca14df04e80f524f33a60f0608226bb36a19b55bf6ed7ba95","id":"F:778c33cdc0","path":"tests/dry-run.test.mjs","purpose":"function dryRun"},{"hash":"sha256:56a9c14022247f4b8398927593ddee297edf4c37cc70fcc82446998691b173eb","id":"F:9cbe9238f8","path":"tests/e2e.test.mjs","purpose":"function tmp"},{"hash":"sha256:4cc22fbbf064820e9641e044e84851171e2b401d1f18d0d946875e9bce143951","id":"F:cc65dd1342","path":"tests/embedding-safety.test.mjs","purpose":"Run preflight in --json mode against a fixture. Returns { code, report, raw }. A clean environment is used so the host's own MODONOME_* shell does not leak into"},{"hash":"sha256:e2138a1e49810b80b6b1bdd808e8139b7d586bc22874a53008f044e7faa897bb","id":"F:06b982f5a2","path":"tests/envisioner-role.test.mjs","purpose":"Envisioner role (ADR-039/ADR-040, Milestone 5): scoped innovation proposals from an"},{"hash":"sha256:c884fce8a5b2e930ae9a000272d3a4faa55a3e017229ab755bb695a370aec720","id":"F:571aa2f3ae","path":"tests/fleet-ledger.test.mjs","purpose":"Build a well-formed policy-attestation object (ADR-036 shape) via a helper, so the fixtures are constructed at runtime rather than pasted as large literals."},{"hash":"sha256:c4b0075f9fbb43245412a6ea6c9b4a8e7e43d6a6aab66477de3323fbf14d5046","id":"F:6da7bd8294","path":"tests/gauntlet.test.mjs","purpose":"Tests for `modonome gauntlet` (see docs/adr/ADR-041-gauntlet-replay.md): a read-only"},{"hash":"sha256:7aa6848dd94a7b5dc83ae094f4175a91cb90d6c063ac64311cdf78757efd7f66","id":"F:4dabd020df","path":"tests/helpers/mock-github-server.mjs","purpose":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @pa"},{"hash":"sha256:8f4842a323938cbfa8f9b1a0c8200938b87cee281a26dea3bd75f76d6c92e0c8","id":"F:eb14a0bdeb","path":"tests/helpers/mock-openai-server.mjs","purpose":"Start a mock OpenAI chat-completions server. * * @param {object} [options] * @param {\"success\"|\"retry-then-success\"|\"delay\"|\"malformed\"|\"error\"} [options.mode] "},{"hash":"sha256:159dd5948af7b763cca4920cd28fd95d9df9dc496cfbf88e69c7d776357163cc","id":"F:9bb94e1b40","path":"tests/hygiene.test.mjs","purpose":"function cli"},{"hash":"sha256:aa5c6b359e7da8f7b228dcb2a6e39a272695c3c9a4bb1a8bc512808e505b6b82","id":"F:cba8f1d03b","path":"tests/install-hooks.test.mjs","purpose":"function tempRepo"},{"hash":"sha256:27e8759927ffe5f7f0342d88dee88b66d761fa6eb8458b5696da274656995701","id":"F:54a3c626d9","path":"tests/learnings.test.mjs","purpose":"function run"},{"hash":"sha256:15169d4a2e50f7cebfddf83be2b0616b2d0d5dcf18202f83ab1a00288382fa19","id":"F:5994385869","path":"tests/maker-checker.test.mjs","purpose":"function run"},{"hash":"sha256:0e60f6fabd39f650beed080526df7fe86b8fc589a3b71b89f47cc52922ced78e","id":"F:093689bb8e","path":"tests/marketresearcher-role.test.mjs","purpose":"Market-researcher role (ADR-039/ADR-040, Milestone 5): an opt-in ecosystem scan,"},{"hash":"sha256:a1eb606786fdd89c7f98afcc4aa05eae41cfe658a4576a060335d499329b27d9","id":"F:a167609a41","path":"tests/mcp-compliance.test.mjs","purpose":"Send requests to a fresh server process and resolve once every expected id has replied. The child is killed as soon as the responses arrive, which avoids the st"},{"hash":"sha256:92582915bee1a0805d1bdba172b6b977e595259d11e36c09e790fcd065796ae2","id":"F:fadcf390da","path":"tests/metrics.test.mjs","purpose":"Schema-conformant event line using \"event\" field (not \"type\")."},{"hash":"sha256:201277007ce3e5c29c3424e6a238772c624c5d5398b20cd4baa147e91895310f","id":"F:55b3a4e2c0","path":"tests/migrate-lessons-rename.test.mjs","purpose":"Tests for `modonome migrate --rename-lessons`: the file-rename half of the LEARNINGS ->"},{"hash":"sha256:7701733aef7d6c28befcc6e63452082dbd3b00b8d8d351c6aa1577be6969e120","id":"F:3de9042953","path":"tests/packet-signing.test.mjs","purpose":"function setup"},{"hash":"sha256:eea7438755704a2c9aebdf7685484a77e9aff97e7b7d53d4db8ccc7930a55a2a","id":"F:b28f13b600","path":"tests/performance.test.mjs","purpose":"Build a synthetic 1000-line diff that is clean (no gaming patterns)."},{"hash":"sha256:75b053f720a36f2d63161f5be3a70fcec9c6fa29dba432e517124b391589a996","id":"F:137056535b","path":"tests/policy-attestation.test.mjs","purpose":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind."},{"hash":"sha256:e7d7eb8b5d39ac2311b724a6c4f4665ec1c8d7bb5d0b70763c250a63a484768a","id":"F:fd6ebce602","path":"tests/portability.test.mjs","purpose":"Run validate-config.mjs against a given config path."},{"hash":"sha256:8b3911ae2cc0de4fb6990f765ec3412ec60af1ebb34a2d997e75f322a5ce00a4","id":"F:e540f7b669","path":"tests/promote-learning.test.mjs","purpose":"function run"},{"hash":"sha256:72142379302da73a19ab7a02001f93b893a909a0066d609fcd6b3ff4a412f468","id":"F:ddd82fc886","path":"tests/promoted-learnings.test.mjs","purpose":"function withRoot"},{"hash":"sha256:cb2324595499e121c6c87625451a14ad222a01194ae72ef88d2ad3fccc2e2c0f","id":"F:ba97282cf5","path":"tests/provenance.test.mjs","purpose":"Base valid packet factory: returns a fresh object each call."},{"hash":"sha256:a2902a5457d0fcb137970762dc3a90f1f6f111c1b2cea892a1313bea8349350b","id":"F:ee02e563c6","path":"tests/providers.test.mjs","purpose":"function baseCfg"},{"hash":"sha256:e8cb0e1034dc9e30ccb24b0d3f85669463a1ed529752fd8edf71c2a2c568129c","id":"F:9f6dd5e5a3","path":"tests/queue.test.mjs","purpose":"Tests for `modonome queue`: converts scored dry-run proposals into schema-valid"},{"hash":"sha256:772d914bb9dbe6a2f28760d78c9f636fa97137e89f585137b041c0323d9585ce","id":"F:92dde817ee","path":"tests/ratchet-attestation.test.mjs","purpose":"Tests for the gate-integrity in-toto receipt. The Statement shape and predicate type"},{"hash":"sha256:3f465e8c640ee3a806371b2dd83ea7aba8fd2ee34a1c4bf726919ff0abb02743","id":"F:cede5f9fa2","path":"tests/ratchet-format.test.mjs","purpose":"Tests for the machine-readable ratchet output (--json and --sarif). These lock in"},{"hash":"sha256:a1600871aa4fc565b91d374e0b7944f56464a5dde0feab3b57d8174cdc51cb35","id":"F:f238d164c9","path":"tests/ratchet.test.mjs","purpose":"function ratchet"},{"hash":"sha256:63511f631cfdeb4f83708b6f72d1de0b0624fbf3036cc45ed2d24cc7b6a1b897","id":"F:44a5987438","path":"tests/remediate.test.mjs","purpose":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commi"},{"hash":"sha256:abe1d5445a00324d9c4fa6fcd367756fab6cae0f0939280c43695f586b009318","id":"F:8a3433b070","path":"tests/report-impact.test.mjs","purpose":"function tmp"},{"hash":"sha256:2f40d127b1ebdbf3e1719bcdaf07937b5d0e20fff5d66fb2d161bca1c541234b","id":"F:ce41983a53","path":"tests/researcher-role.test.mjs","purpose":"WI-042 (ADR-039/ADR-040 follow-up): the researcher actually running in the loop."},{"hash":"sha256:f570a31c09c9d1f7549c7540faca29aeea23c2d957f8308bdd937befb7ab35f7","id":"F:4fad18c892","path":"tests/risk-surface-guard.test.mjs","purpose":"function run"},{"hash":"sha256:b87d5890928df18b21f8c57d5b46e743d330f1d4a108e3b682fb4254279a7df1","id":"F:e2f1b5ac07","path":"tests/role-registry.test.mjs","purpose":"A single-environment config with no runner reachability declared, so routing stays inline for every role (matching the shipped default posture). Crew roles are "},{"hash":"sha256:94e8507428bca4a9f2a0183ad7754b1e4380364e5c170115acc0f978a0d79f26","id":"F:0103cf3d56","path":"tests/rollback.test.mjs","purpose":"Recursively snapshot path -> \"size:sha-like(content)\" for every file."},{"hash":"sha256:5aa570f9f5b52b1376719c311c4348cccd1eedcaec959f655fcd0b04a236bdb7","id":"F:704e42d42b","path":"tests/route-action.test.mjs","purpose":"A config where each runner declares its environment and reach."},{"hash":"sha256:192c851aec2639e573cfac1e35f7b91fd162eaca7bfff35561dd3a38df433558","id":"F:580d11b514","path":"tests/run-cycle-openai.test.mjs","purpose":"Create a throwaway git repo with a single committed file, and return the repo dir plus a unified diff (produced by a real `git diff`, so it is guaranteed to be "},{"hash":"sha256:84c54d851c6f663b48b14ec859edb9176d4fe3f214b8c5502d7cafd8163d29d1","id":"F:d7d4e8d2a9","path":"tests/run-log.test.mjs","purpose":"function tmp"},{"hash":"sha256:b0ccad59d3b2eb7f575bb28dc4c0cdeae656b734372ef1c4f5a28283aca7763f","id":"F:de5ebbf586","path":"tests/scaffold-adoption.test.mjs","purpose":"function gitRepo"},{"hash":"sha256:7eb4259f6448778374d4957041691a8b6d237b611ed1de7368026d9dd2ee8e11","id":"F:48355ccf4d","path":"tests/self-application.test.mjs","purpose":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true})."},{"hash":"sha256:939dff56c806160478559ac542a3ac09753c42c0cad986b79c0515d83225a153","id":"F:9f36b3ef29","path":"tests/snapshot-cli.test.mjs","purpose":"function run"},{"hash":"sha256:98db4465944b66bc892fa065a25ff21499c9c8b36790c7e484cce522c06d4c94","id":"F:2a74ae3f05","path":"tests/snapshot-golden.test.mjs","purpose":"function names"},{"hash":"sha256:c58456e425434ea92d0315727dbf7493b7bf5163acccc471865359b53708fdc3","id":"F:4637e1fecb","path":"tests/snapshot-incremental.test.mjs","purpose":"function repo"},{"hash":"sha256:1ac7429a13d1ee6d63273a9f1c12642328bbf454c9be2f3954c3518912bf5160","id":"F:ca05b6ba1c","path":"tests/terraform-module-shape.test.mjs","purpose":"function tf"},{"hash":"sha256:c5fcee70cbe65990dba4744c7b0e29280ad8e2165a7fce074f20773d5356cfe7","id":"F:baf7641a01","path":"tests/tick.test.mjs","purpose":"function tmp"},{"hash":"sha256:53a0c9a0ab5516f2c454f41ecf22f0516829d55376940b4daa24f91af95bbb8e","id":"F:ed9c47feb2","path":"tests/tool-loop-adapter.test.mjs","purpose":"A scriptable fake child process. Captures the constructor call, emits the configured stdout/stderr, then closes (or hangs, when never told to close)."},{"hash":"sha256:325d8278b663211e574a2afc843024be684cf1dd5d51278b4a39a622dd38a824","id":"F:61c2a29876","path":"tests/tripwire.test.mjs","purpose":"Tripwires: the local, best-effort editor hook kernel (scripts/tripwire-check.mjs)."},{"hash":"sha256:c2c7ad14be6fbc5d9e6fe5cc3e40a4a0f72e82745c9c74948decc2628c1357b4","id":"F:1bcaaff9eb","path":"tests/ws-b-harness.test.mjs","purpose":"A config fixture with distinct maker/checker models and a models registry."},{"hash":"sha256:b2fde6e1764d60ca1135a54c765a9183d684d3c44012fe19e79dcf49b4114c77","id":"F:bbb6476d71","path":"tests/ws-e-negative-controls.test.mjs","purpose":"WS-E: negative-control fixtures that prove governance gates have teeth."},{"hash":"sha256:670746ec74b6650d92a5081683d9d20bf923b2141dcd011cee1a82126c8cbcfc","id":"F:2b49c74e74","path":"tests/ws-e-ratchet-languages.test.mjs","purpose":"function runRatchet"}],"schema_version":1,"token_budget":120000,"token_estimate":139595,"truncated":false}
diff --git a/.modonome/snapshot/map.md b/.modonome/snapshot/map.md
index faaa35ec..49df451e 100644
--- a/.modonome/snapshot/map.md
+++ b/.modonome/snapshot/map.md
@@ -2,8 +2,8 @@
Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.
-Merkle root: sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595
-Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
+Merkle root: sha256:00937728fdf5de9a8af526bf191da7ed19afeb83fd2a5a75a508e8bc6cad0473
+Files: 1094 Bytes: 3971943 Map tokens: 139595/120000
## Modules
@@ -406,6 +406,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/lib/message-catalog/gate/check-promotion-readiness.mjs [F:973aca5f3e]: const MESSAGES
- scripts/lib/message-catalog/gate/check-regex-safety.mjs [F:b4f4e16ca1]: const MESSAGES
- scripts/lib/message-catalog/gate/check-repo-hygiene.mjs [F:597cc7ae15]: Catalog entries for scripts/check-repo-hygiene.mjs.
+- scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs [F:b37de0ee8e]: const MESSAGES
- scripts/lib/message-catalog/gate/check-self-application.mjs [F:de188c1b79]: const MESSAGES
- scripts/lib/message-catalog/gate/check-state-machine-acyclic.mjs [F:179564da6f]: const MESSAGES
- scripts/lib/message-catalog/gate/check-style.mjs [F:9dbf431d3e]: Catalog entries for scripts/check-style.mjs.
@@ -425,6 +426,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/lib/policy-manifest.mjs [F:4db1101024]: v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored
- scripts/lib/remediate.mjs [F:8ffb11f281]: Remove every line carrying an AI-authorship signature from a commit message, then * drop the trailing blank lines the removal leaves behind. Pure and determinis
- scripts/lib/repo-detect.mjs [F:ae46bbab81]: Build the small file helpers a detector needs, bound to one target directory.
+- scripts/lib/risk-surface-allowlist.mjs [F:33ffae019c]: parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at this boundary: whenever errors is non-empty, entries is always []. Callers never need
- scripts/lib/risk-surface-rules.mjs [F:2f3e98ab2c]: Simple "#" to end of line stripper for YAML and shell-like formats. Not quote-aware (a "#" inside a quoted YAML string is still treated as a comment start) -- a
- scripts/lib/run-gate-capped.mjs [F:b014028f57]: Thin wrapper around spawnSync with a hard timeout and output-size cap.
- scripts/lib/secret-patterns.mjs [F:68c4da7fe8]: Returns an array of { name } objects for every pattern that matches text.
@@ -446,7 +448,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/release.mjs [F:edf42fb1af]: !/usr/bin/env node
- scripts/remediate.mjs [F:1e5ef6ba70]: Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-
- scripts/report.mjs [F:3b382f95c0]: A source module counts as "documented" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple he
-- scripts/risk-surface-guard.mjs [F:116adfb9f8]: !/usr/bin/env node
+- scripts/risk-surface-guard.mjs [F:116adfb9f8]: A suppressed finding (allowlist match) never counts toward the exit code, the result verdict, or the finding count in the summary line, even though it stays vis
- scripts/run-gate-pipeline.mjs [F:edb11415f0]: parseArgs(argv) -> { diff, "work-item" } map of fixture paths by gate arg name.
- scripts/scaffold.mjs [F:5e450ff82c]: Turn snapshot consumption on during adoption: generate the first snapshot, install a host pre-commit hook, and drop an AGENTS.md pointer when none exists. Skipp
- scripts/score-proposals.mjs [F:e11f907cba]: Fill in missing signal fields with the documented neutral value and clamp every field to the [SIGNAL_MIN, SIGNAL_MAX] scale.
@@ -477,6 +479,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- tests/check-architecture-drift.test.mjs [F:564b053598]: function makeMinimalRepo
- tests/check-gate-dag.test.mjs [F:df4b55ecef]: Build a temp repo whose detect-attribution.mjs imports whatever `daImports` says.
- tests/check-md-governance.test.mjs [F:0391f3b249]: Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under te
+- tests/check-risk-surface-allowlist.test.mjs [F:54784dcc0a]: function run
- tests/check-style-lexicon.test.mjs [F:e359adb110]: Tests for the Lexicon Gate wired into scripts/check-style.mjs: a banned term from
- tests/cli-dispatch.test.mjs [F:40e4f39b59]: function cli
- tests/compliance-evidence.test.mjs [F:3ea503e7c0]: Helper reused by the mapping test.
@@ -562,7 +565,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:bac2ebbef5 function gitCommit `function gitCommit(tmp, message)` L53
- S:cd2e7eba8f function gitCommitAt `function gitCommitAt(tmp, message, isoDate)` L61 : Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as
### scripts/lib/message-catalog/index.mjs [F:03f476958e]
-- S:405ee38bbe const CATALOG_PARTIALS `export const CATALOG_PARTIALS = [` L66
+- S:405ee38bbe const CATALOG_PARTIALS `export const CATALOG_PARTIALS = [` L67
### examples/demo-app/tests/OrderService.test.js [F:044b762a79]
- S:949f988c9e function makeDb `function makeDb(orders = new Map())` L10
### scripts/lib/message-catalog/gate/check-edit-set-compliance.mjs [F:05a0f0d5a5]
@@ -664,23 +667,24 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
### apps/control-panel/src/App.tsx [F:113387361d]
- S:a1d4334d94 function App `export function App()` L44
### scripts/risk-surface-guard.mjs [F:116adfb9f8]
-- S:f034e67219 function normalizeLF `function normalizeLF(s)` L36
-- S:e23dca26d1 function stripFlags `export function stripFlags(argv)` L45
-- S:8fc6479414 function getDiff `function getDiff(positional)` L72
-- S:6202790aac class UsageError `class UsageError extends Error {}` L103
-- S:a8ccdc0c7d function parseDiff `export function parseDiff(diffText)` L112
-- S:4295d27685 function makeFinding `function makeFinding(rule, file, line, rawText)` L158
-- S:afdc9fa742 function scanFile `export function scanFile(filePath, addedLines)` L172
-- S:9435112073 function scanDiff `export function scanDiff(diffText)` L194
-- S:34df82b1c2 function hasHighOrCritical `function hasHighOrCritical(findings)` L215
-- S:672926584c function decideExitCode `export function decideExitCode(mode, findings)` L219
-- S:6117b8ec80 function decideResult `export function decideResult(mode, findings)` L224
-- S:74c8951fb9 function severityToSarifLevel `export function severityToSarifLevel(severity)` L230
-- S:8b3d7e9050 function summaryMessage `function summaryMessage(mode, findings)` L240
-- S:17bc177192 function formatHuman `export function formatHuman(findings, { mode })` L251
-- S:82407637b4 function emitJson `export function emitJson(findings, { mode })` L266
-- S:38407e52ac function emitSarif `export function emitSarif(findings)` L274
-- S:9f6788d90d function runCli `function runCli()` L314
+- S:f034e67219 function normalizeLF `function normalizeLF(s)` L41
+- S:e23dca26d1 function stripFlags `export function stripFlags(argv)` L50
+- S:8fc6479414 function getDiff `function getDiff(positional)` L78
+- S:6202790aac class UsageError `class UsageError extends Error {}` L109
+- S:a8ccdc0c7d function parseDiff `export function parseDiff(diffText)` L118
+- S:4295d27685 function makeFinding `function makeFinding(rule, file, line, rawText)` L164
+- S:afdc9fa742 function scanFile `export function scanFile(filePath, addedLines)` L178
+- S:9435112073 function scanDiff `export function scanDiff(diffText)` L200
+- S:34df82b1c2 function hasHighOrCritical `function hasHighOrCritical(findings)` L221
+- S:40aaf05c36 function activeFindings `function activeFindings(findings)` L229 : A suppressed finding (allowlist match) never counts toward the exit code, the result verdict, or the finding count in the summary line, even though it stays visible in the output. This is the whole po
+- S:672926584c function decideExitCode `export function decideExitCode(mode, findings)` L233
+- S:6117b8ec80 function decideResult `export function decideResult(mode, findings)` L238
+- S:74c8951fb9 function severityToSarifLevel `export function severityToSarifLevel(severity)` L245
+- S:8b3d7e9050 function summaryMessage `function summaryMessage(mode, findings)` L255
+- S:17bc177192 function formatHuman `export function formatHuman(findings, { mode })` L267
+- S:82407637b4 function emitJson `export function emitJson(findings, { mode })` L284
+- S:38407e52ac function emitSarif `export function emitSarif(findings)` L292
+- S:9f6788d90d function runCli `function runCli()` L336
### scripts/lib/snapshot-cache.mjs [F:119e3c0fce]
- S:670e55d75a const CACHE_SCHEMA_VERSION `export const CACHE_SCHEMA_VERSION = 1;` L10
- S:31032f0509 function isPlausibleRevision `export function isPlausibleRevision(value)` L17 : A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading "-", which git would parse as an option (some git options can read or write fil
@@ -912,15 +916,15 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:2216bfd660 function isTerraformScope `export function isTerraformScope(path)` L79
- S:f88ca29ea3 function isBroadScope `export function isBroadScope(path)` L90
- S:823d7fa306 const PROTECTED_PATH_GLOBS `export const PROTECTED_PATH_GLOBS = [` L100
-- S:2dc33a851f function globToRegExp `function globToRegExp(glob)` L120
+- S:2dc33a851f function globToRegExp `export function globToRegExp(glob)` L120
- S:5e20ef9f71 function matchesProtectedPath `export function matchesProtectedPath(path)` L132
- S:bb036fe763 function stripSameLineNoise `export function stripSameLineNoise(rawLine)` L144
- S:7d38304e55 function stripPythonSameLineNoise `export function stripPythonSameLineNoise(line)` L173
- S:cf9f3a025e function stripHashComment `export function stripHashComment(line)` L199 : Simple "#" to end of line stripper for YAML and shell-like formats. Not quote-aware (a "#" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the
- S:d9eda62ca5 function stripForScope `export function stripForScope(path, line)` L205
- S:e4bb79a957 function redactMatchedText `export function redactMatchedText(text, opts = {})` L219
-- S:ec6c0b3d73 const RULES `export const RULES = [` L245
-- S:02759ae11a const RULES_BY_ID `export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));` L955
+- S:ec6c0b3d73 const RULES `export const RULES = [` L250
+- S:02759ae11a const RULES_BY_ID `export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));` L973
### design-system/src/components/States/States.tsx [F:2f6c42c5ee]
- S:c504685956 interface EmptyStateProps `export interface EmptyStateProps` L4
- S:80e9a1f555 function EmptyState `export function EmptyState({ title, message, icon = "queue", action }: EmptyStateProps)` L20 : Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it
@@ -957,6 +961,11 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:e25d17a09c function SafeDefaults `export const SafeDefaults = () => (` L17
### scripts/lib/message-catalog/agent-run/remediate.mjs [F:33c4d744f3]
- S:457f8a5e17 const MESSAGES `export const MESSAGES =` L4 : Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi
+### scripts/lib/risk-surface-allowlist.mjs [F:33ffae019c]
+- S:52027883f7 function parseAllowlist `export function parseAllowlist(text)` L24 : parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at this boundary: whenever errors is non-empty, entries is always []. Callers never need to remember to check errors before trust
+- S:8c5294d2ea function loadAllowlist `export function loadAllowlist(path)` L49 : loadAllowlist(path) -> { entries, errors }. A missing file is the default, backward-compatible state (zero suppressions), never an error.
+- S:27874d43ac function isSuppressed `export function isSuppressed(finding, entries, today)` L62 : isSuppressed(finding, entries, today) -> the matching entry, or null. `today` is a "YYYY-MM-DD" string passed explicitly by the caller (never read from the system clock in here), so this stays determi
+- S:f4e42f5cd6 function applyAllowlist `export function applyAllowlist(findings, entries, today)` L75 : applyAllowlist(findings, entries, today) -> findings with a new `suppressed` field on each ({entry_id, reason} or null). Every other field is untouched.
### checkerproof/scenarios/cp-05-clean-negative-control.mjs [F:34ca4e55d1]
- S:4b38793395 const scenario `export const scenario =` L8 : CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal
### scripts/lib/jsonschema.mjs [F:34cb2b6c48]
@@ -1039,7 +1048,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:fa6785fa4b const MESSAGES `export const MESSAGES =` L1
### scripts/check-self-application.mjs [F:4096620673]
- S:91c42b4f27 function read `function read(rel)` L23
-- S:87c8d03eb8 function dirsFromCodeowners `function dirsFromCodeowners()` L126 : 4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that
+- S:87c8d03eb8 function dirsFromCodeowners `function dirsFromCodeowners()` L132 : 4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that
### scripts/lib/message-catalog/gate/check-architecture-drift.mjs [F:40d8f235fd]
- S:4287ee7685 const MESSAGES `export const MESSAGES =` L1
### tests/cli-dispatch.test.mjs [F:40e4f39b59]
@@ -1062,9 +1071,9 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
### scripts/check-architecture-drift.mjs [F:4749cc43a0]
- S:fd2e16186e function escapeRegExp `function escapeRegExp(s)` L66 : Escape regex metacharacters so an unexpected schema value (e.g. containing "." or "+") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is
### tests/self-application.test.mjs [F:48355ccf4d]
-- S:e3c36060ec function makeMinimalRepo `function makeMinimalRepo()` L95 : Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).
-- S:7c9eb8f22d function runScript `function runScript(tmp)` L113
-- S:43cc2b28a1 function withStubRunner `function withStubRunner(tmp, score, extendedScore, totalScore)` L227
+- S:e3c36060ec function makeMinimalRepo `function makeMinimalRepo()` L98 : Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).
+- S:7c9eb8f22d function runScript `function runScript(tmp)` L116
+- S:43cc2b28a1 function withStubRunner `function withStubRunner(tmp, score, extendedScore, totalScore)` L230
### scripts/lib/detect-attribution.mjs [F:4a7eaceb5c]
- S:bb570e99d8 const AI_SIGNATURE_RE `export const AI_SIGNATURE_RE = new RegExp(P, "iu");` L40
- S:ba4cb77f9c function branchHasModelSegment `export function branchHasModelSegment(name)` L51 : True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions
@@ -1109,8 +1118,8 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:d49b633132 function isValidUrl `function isValidUrl(value: string): boolean` L67
- S:6d2334f815 function SettingsScreen `export function SettingsScreen({ state, write }: { state: PanelState; write: WriteActions })` L125 : The advanced-configuration screen, one conceptual area per tab so nothing forces an * operator to scroll past unrelated subsystems to reach the one they came for. Full * CRUD lives here for the model-
### tests/risk-surface-guard.test.mjs [F:4fad18c892]
-- S:fcf3c9d4a4 function run `function run(diffPath, extraArgs = [])` L39
-- S:9e3d232a1b function fixture `function fixture(dir, name)` L43
+- S:fcf3c9d4a4 function run `function run(diffPath, extraArgs = [])` L40
+- S:9e3d232a1b function fixture `function fixture(dir, name)` L44
### scripts/gauntlet.mjs [F:522efae76d]
- S:d439b00c59 function writeRunLog `function writeRunLog(runsDir, command, payload)` L73 : A run-log writer copied from dry-run-sweep.mjs's writeRunLog: same audit-trail convention, same 30-entry cap, same "log writes must never crash the command" rule.
- S:76dbb025c9 function removeFirstMatch `function removeFirstMatch(text, re)` L116
@@ -1133,6 +1142,8 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
### .design-sync/previews/ModeSwitcher.tsx [F:545c0ccfeb]
- S:2a04172292 function HostSelected `export const HostSelected = () => {}} />;` L4
- S:2bd0a26c48 function ProductSelected `export const ProductSelected = () => {}} />;` L6
+### tests/check-risk-surface-allowlist.test.mjs [F:54784dcc0a]
+- S:0d3e338a93 function run `function run(...args)` L15
### tests/learnings.test.mjs [F:54a3c626d9]
- S:5e3d6fa91f function run `function run(script, args = [], env = {})` L20
- S:2f1892a712 function makeStagedFixture `function makeStagedFixture(stagedLines = [])` L127
@@ -1745,6 +1756,8 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- S:41ad75ea93 function buildLargeDiff `function buildLargeDiff(lines)` L17 : Build a synthetic 1000-line diff that is clean (no gaming patterns).
### scripts/lib/message-catalog/gate/check-trust-boundary.mjs [F:b2efd505ef]
- S:d0587dc399 const MESSAGES `export const MESSAGES =` L1
+### scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs [F:b37de0ee8e]
+- S:dbaef09fdf const MESSAGES `export const MESSAGES =` L1
### design-system/src/components/ModeSwitcher/ModeSwitcher.tsx [F:b3a2ad52bb]
- S:3e2d44a335 type PanelMode `export type PanelMode = "host" | "product";` L4
- S:0c7a33bcbe interface ModeSwitcherProps `export interface ModeSwitcherProps` L6
@@ -2197,6 +2210,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/agent-run/run-cycle.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-md-governance.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-trust-boundary.mjs
+- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-regex-safety.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/check-control-panel-coverage.mjs
- scripts/lib/message-catalog/index.mjs -> scripts/lib/message-catalog/gate/validate-work-item.mjs
@@ -2260,6 +2274,7 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/risk-surface-guard.mjs -> scripts/lib/messages.mjs
- scripts/risk-surface-guard.mjs -> scripts/lib/cli-args.mjs
- scripts/risk-surface-guard.mjs -> scripts/lib/risk-surface-rules.mjs
+- scripts/risk-surface-guard.mjs -> scripts/lib/risk-surface-allowlist.mjs
- scripts/lib/packet-id.mjs -> scripts/lib/canonical-json.mjs
- design-system/src/components/Carousel/index.ts -> design-system/src/components/Carousel/Carousel.tsx
- design-system/src/components/ActivationLadder/ActivationLadder.tsx -> design-system/src/lib/cx.ts
@@ -2323,6 +2338,8 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- scripts/agent/review-diff.mjs -> scripts/agent/resolve-role.mjs
- scripts/agent/review-diff.mjs -> scripts/agent/openai-client.mjs
- scripts/agent/review-diff.mjs -> scripts/validate-config.mjs
+- scripts/check-risk-surface-allowlist.mjs -> scripts/lib/messages.mjs
+- scripts/check-risk-surface-allowlist.mjs -> scripts/lib/risk-surface-allowlist.mjs
- scripts/lib/risk-surface-rules.mjs -> scripts/lib/secret-patterns.mjs
- design-system/src/components/States/States.tsx -> design-system/src/components/Icon/Icon.tsx
- design-system/src/components/StatusPill/StatusPill.tsx -> design-system/src/lib/cx.ts
@@ -2333,6 +2350,8 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- apps/control-panel/src/screens/GatesScreen.tsx -> apps/control-panel/src/lib/messages.ts
- scripts/check-learning-traceability.mjs -> scripts/lib/messages.mjs
- scripts/check-learning-traceability.mjs -> scripts/lib/learnings.mjs
+- scripts/lib/risk-surface-allowlist.mjs -> scripts/lib/risk-surface-rules.mjs
+- scripts/lib/risk-surface-allowlist.mjs -> scripts/lib/jsonschema.mjs
- design-system/src/components/RoleBadge/RoleBadge.tsx -> design-system/src/lib/cx.ts
- design-system/src/components/RoleBadge/RoleBadge.tsx -> design-system/src/components/Icon/Icon.tsx
- examples/demo-app/tests/PaymentProcessor.test.js -> examples/demo-app/src/PaymentProcessor.js
@@ -2377,12 +2396,14 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
- apps/control-panel/src/screens/SettingsScreen.tsx -> apps/control-panel/src/lib/confirm.tsx
- apps/control-panel/src/screens/SettingsScreen.tsx -> apps/control-panel/src/lib/messages.ts
- apps/control-panel/src/screens/SettingsScreen.tsx -> apps/control-panel/src/state/liveClient.ts
+- tests/risk-surface-guard.test.mjs -> scripts/lib/risk-surface-allowlist.mjs
- scripts/disarm.mjs -> scripts/lib/messages.mjs
- scripts/disarm.mjs -> scripts/lib/yaml-lite.mjs
- design-system/src/components/RoleBadge/index.ts -> design-system/src/components/RoleBadge/RoleBadge.tsx
- tests/openai-client.test.mjs -> tests/helpers/mock-openai-server.mjs
- examples/demo-app/tests/CheckoutService.test.js -> examples/demo-app/src/CheckoutService.js
- tests/near-miss.test.mjs -> scripts/lib/learnings.mjs
+- tests/check-risk-surface-allowlist.test.mjs -> scripts/lib/risk-surface-allowlist.mjs
- design-system/src/components/SafetyStrip/SafetyStrip.tsx -> design-system/src/components/StatusPill/StatusPill.tsx
- design-system/src/components/SafetyStrip/SafetyStrip.tsx -> design-system/src/components/HelpHint/HelpHint.tsx
- tests/run-cycle-openai.test.mjs -> scripts/agent/apply-patch.mjs
@@ -2772,54 +2793,54 @@ Files: 1081 Bytes: 3926905 Map tokens: 138602/120000
## Attention (centrality + pagerank)
-1. scripts/lib/messages.mjs centrality=64 pagerank=0.037911
-2. scripts/lib/message-catalog/index.mjs centrality=59 pagerank=0.011418
-3. design-system/src/lib/cx.ts centrality=32 pagerank=0.025731
-4. design-system/src/components/Icon/Icon.tsx centrality=23 pagerank=0.016681
-5. design-system/src/index.ts centrality=48 pagerank=0.000677
-6. scripts/lib/yaml-lite.mjs centrality=21 pagerank=0.01643
-7. scripts/lib/jsonschema.mjs centrality=15 pagerank=0.019128
-8. scripts/agent/run-cycle.mjs centrality=25 pagerank=0.004961
-9. scripts/validate-config.mjs centrality=16 pagerank=0.00481
-10. apps/control-panel/src/state/types.ts centrality=13 pagerank=0.006543
-11. design-system/src/components/HelpHint/HelpHint.tsx centrality=12 pagerank=0.005677
-12. design-system/src/components/StatusPill/StatusPill.tsx centrality=12 pagerank=0.004047
-13. scripts/lib/learnings.mjs centrality=11 pagerank=0.004449
-14. scripts/agent/resolve-role.mjs centrality=11 pagerank=0.003453
-15. scripts/lib/canonical-json.mjs centrality=10 pagerank=0.003433
-16. scripts/lib/snapshot-core.mjs centrality=13 pagerank=0.001132
-17. design-system/src/components/Button/Button.tsx centrality=9 pagerank=0.003264
-18. scripts/lib/detect-attribution.mjs centrality=7 pagerank=0.003715
-19. scripts/validate-work-item.mjs centrality=9 pagerank=0.002517
-20. scripts/lib/config-validate.mjs centrality=7 pagerank=0.003416
-21. design-system/src/components/IconButton/IconButton.tsx centrality=6 pagerank=0.003787
-22. scripts/validate-knowledge-packet.mjs centrality=8 pagerank=0.002384
-23. apps/control-panel/src/App.tsx centrality=10 pagerank=0.000964
-24. scripts/agent/render-prompt.mjs centrality=7 pagerank=0.002657
-25. design-system/src/components/WorkItemCard/WorkItemCard.tsx centrality=8 pagerank=0.001977
-26. scripts/lib/secret-patterns.mjs centrality=5 pagerank=0.003609
-27. apps/control-panel/server/modonomeWriter.mjs centrality=8 pagerank=0.001721
-28. design-system/src/tokens/tokens.ts centrality=6 pagerank=0.002365
-29. scripts/agent/providers.mjs centrality=3 pagerank=0.004106
-30. scripts/lib/lang-adapters/index.mjs centrality=8 pagerank=0.001132
-31. scripts/lib/graph.mjs centrality=5 pagerank=0.002781
-32. scripts/lib/branch-name.mjs centrality=4 pagerank=0.003241
-33. design-system/src/components/Tooltip/Tooltip.tsx centrality=3 pagerank=0.003674
-34. scripts/snapshot.mjs centrality=8 pagerank=0.000677
-35. design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx centrality=7 pagerank=0.001262
-36. apps/control-panel/src/lib/confirm.tsx centrality=6 pagerank=0.001714
-37. apps/control-panel/src/lib/messages.ts centrality=6 pagerank=0.001623
-38. design-system/src/components/Card/Card.tsx centrality=5 pagerank=0.001977
-39. design-system/src/lib/format.ts centrality=5 pagerank=0.001975
-40. scripts/agent/openai-client.mjs centrality=5 pagerank=0.001948
-41. design-system/src/components/LeaseTable/LeaseTable.tsx centrality=6 pagerank=0.001262
-42. scripts/lib/commit-identity.mjs centrality=3 pagerank=0.003022
-43. scripts/agent/review-diff.mjs centrality=5 pagerank=0.001518
-44. scripts/lib/work-item-validate.mjs centrality=4 pagerank=0.002039
-45. apps/control-panel/src/screens/SettingsScreen.tsx centrality=6 pagerank=0.000768
-46. apps/control-panel/src/state/adapter.ts centrality=6 pagerank=0.000768
-47. examples/demo-app/src/index.js centrality=6 pagerank=0.000677
-48. scripts/build-policy-attestation.mjs centrality=6 pagerank=0.000677
-49. design-system/src/components/ActivationLadder/ActivationLadder.tsx centrality=5 pagerank=0.001262
-50. design-system/src/components/CostPanel/CostPanel.tsx centrality=5 pagerank=0.001262
+1. scripts/lib/messages.mjs centrality=65 pagerank=0.037644
+2. scripts/lib/message-catalog/index.mjs centrality=60 pagerank=0.011333
+3. design-system/src/lib/cx.ts centrality=32 pagerank=0.025389
+4. design-system/src/components/Icon/Icon.tsx centrality=23 pagerank=0.016459
+5. scripts/lib/jsonschema.mjs centrality=16 pagerank=0.019887
+6. design-system/src/index.ts centrality=48 pagerank=0.000668
+7. scripts/lib/yaml-lite.mjs centrality=21 pagerank=0.016278
+8. scripts/agent/run-cycle.mjs centrality=25 pagerank=0.004895
+9. scripts/validate-config.mjs centrality=16 pagerank=0.004746
+10. apps/control-panel/src/state/types.ts centrality=13 pagerank=0.006456
+11. design-system/src/components/HelpHint/HelpHint.tsx centrality=12 pagerank=0.005601
+12. design-system/src/components/StatusPill/StatusPill.tsx centrality=12 pagerank=0.003993
+13. scripts/lib/learnings.mjs centrality=11 pagerank=0.00439
+14. scripts/agent/resolve-role.mjs centrality=11 pagerank=0.003407
+15. scripts/lib/canonical-json.mjs centrality=10 pagerank=0.003387
+16. scripts/lib/snapshot-core.mjs centrality=13 pagerank=0.001117
+17. design-system/src/components/Button/Button.tsx centrality=9 pagerank=0.00322
+18. scripts/lib/detect-attribution.mjs centrality=7 pagerank=0.003666
+19. scripts/validate-work-item.mjs centrality=9 pagerank=0.002483
+20. scripts/lib/config-validate.mjs centrality=7 pagerank=0.00337
+21. scripts/lib/secret-patterns.mjs centrality=5 pagerank=0.004326
+22. design-system/src/components/IconButton/IconButton.tsx centrality=6 pagerank=0.003736
+23. scripts/validate-knowledge-packet.mjs centrality=8 pagerank=0.002353
+24. apps/control-panel/src/App.tsx centrality=10 pagerank=0.000951
+25. scripts/agent/render-prompt.mjs centrality=7 pagerank=0.002622
+26. design-system/src/components/WorkItemCard/WorkItemCard.tsx centrality=8 pagerank=0.00195
+27. apps/control-panel/server/modonomeWriter.mjs centrality=8 pagerank=0.001698
+28. design-system/src/tokens/tokens.ts centrality=6 pagerank=0.002334
+29. scripts/agent/providers.mjs centrality=3 pagerank=0.004052
+30. scripts/lib/lang-adapters/index.mjs centrality=8 pagerank=0.001117
+31. scripts/lib/risk-surface-allowlist.mjs centrality=6 pagerank=0.002228
+32. scripts/lib/graph.mjs centrality=5 pagerank=0.002744
+33. scripts/lib/branch-name.mjs centrality=4 pagerank=0.003198
+34. design-system/src/components/Tooltip/Tooltip.tsx centrality=3 pagerank=0.003625
+35. scripts/snapshot.mjs centrality=8 pagerank=0.000668
+36. design-system/src/components/WorkItemDrawer/WorkItemDrawer.tsx centrality=7 pagerank=0.001245
+37. apps/control-panel/src/lib/confirm.tsx centrality=6 pagerank=0.001691
+38. apps/control-panel/src/lib/messages.ts centrality=6 pagerank=0.001601
+39. design-system/src/components/Card/Card.tsx centrality=5 pagerank=0.00195
+40. design-system/src/lib/format.ts centrality=5 pagerank=0.001949
+41. scripts/agent/openai-client.mjs centrality=5 pagerank=0.001922
+42. design-system/src/components/LeaseTable/LeaseTable.tsx centrality=6 pagerank=0.001245
+43. scripts/lib/commit-identity.mjs centrality=3 pagerank=0.002982
+44. scripts/agent/review-diff.mjs centrality=5 pagerank=0.001497
+45. scripts/lib/work-item-validate.mjs centrality=4 pagerank=0.002012
+46. apps/control-panel/src/screens/SettingsScreen.tsx centrality=6 pagerank=0.000757
+47. apps/control-panel/src/state/adapter.ts centrality=6 pagerank=0.000757
+48. examples/demo-app/src/index.js centrality=6 pagerank=0.000668
+49. scripts/build-policy-attestation.mjs centrality=6 pagerank=0.000668
+50. design-system/src/components/ActivationLadder/ActivationLadder.tsx centrality=5 pagerank=0.001245
diff --git a/.modonome/snapshot/signature.json b/.modonome/snapshot/signature.json
index 393c9a4a..75e20ef4 100644
--- a/.modonome/snapshot/signature.json
+++ b/.modonome/snapshot/signature.json
@@ -1 +1 @@
-{"commands":{"build":"","lint":"","test":"npm test"},"entrypoints":["bin/modonome.mjs"],"generated_at":"2026-07-27T13:36:25.593Z","generated_for":"modonome","governance":{"armed":false,"autonomy_enabled":false,"dry_run":true},"instructions":["AGENTS.md","CLAUDE.md","CODEX.md","CONTRIBUTING.md","README.md"],"language_mix":{"(none)":12,"cff":1,"css":50,"diff":63,"html":9,"js":19,"json":140,"jsonl":8,"md":146,"mjs":355,"patch":40,"png":5,"py":4,"sh":1,"svg":2,"tf":4,"toml":2,"ts":61,"tsx":98,"txt":18,"webmanifest":1,"webp":1,"woff2":9,"xml":1,"yaml":9,"yml":22},"merkle_root":"sha256:c1daa79484edf32eae0f0b3a4bf545dec57dc1db32eba3503259c70c7829f595","preamble":"Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.","protected_paths":[".github",".github/CODEOWNERS","package-lock.json"],"schema_version":1,"size":{"bytes":3926905,"files":1081},"snapshot_version":51,"stack":{"name":"Node or TypeScript","pm":"npm"},"tier_hashes":{"map":"sha256:4107f381d43119a5e5850dda534611f3767ef536e4432f181948df5f59c7a86d","map_md":"sha256:d43930234923d1087387eb6c02d059e044874abbbfc9e198953e4bfde86c563d"}}
+{"commands":{"build":"","lint":"","test":"npm test"},"entrypoints":["bin/modonome.mjs"],"generated_at":"2026-07-27T16:49:54.360Z","generated_for":"modonome","governance":{"armed":false,"autonomy_enabled":false,"dry_run":true},"instructions":["AGENTS.md","CLAUDE.md","CODEX.md","CONTRIBUTING.md","README.md"],"language_mix":{"(none)":12,"cff":1,"css":50,"diff":66,"html":9,"js":19,"json":146,"jsonl":8,"md":146,"mjs":359,"patch":40,"png":5,"py":4,"sh":1,"svg":2,"tf":4,"toml":2,"ts":61,"tsx":98,"txt":18,"webmanifest":1,"webp":1,"woff2":9,"xml":1,"yaml":9,"yml":22},"merkle_root":"sha256:00937728fdf5de9a8af526bf191da7ed19afeb83fd2a5a75a508e8bc6cad0473","preamble":"Modonome snapshot. Read this before reading the repo. Tier 0 (signature.json) is the fingerprint: if merkle_root matches your last read, nothing changed. Tier 1 (map.json / map.md) lists modules, public API signatures, import edges, and attention ranking. Cite anchors (F: for files, S: for symbols); each resolves to a path and line so you can act without re-reading the whole repo.","protected_paths":[".github",".github/CODEOWNERS","package-lock.json"],"schema_version":1,"size":{"bytes":3971943,"files":1094},"snapshot_version":53,"stack":{"name":"Node or TypeScript","pm":"npm"},"tier_hashes":{"map":"sha256:6d8d23d5f56222f499db22990b8bea8fabf4f752ca72f6de5f6c673e8dc51d89","map_md":"sha256:5fe0a2479f5bf41b2b9428b2066da4549e8edca29697dbbec4dd3305f71b860f"}}
diff --git a/.modonome/work-items/WI-055-risk-surface-guard.json b/.modonome/work-items/WI-055-risk-surface-guard.json
index c6717513..7a2a54ce 100644
--- a/.modonome/work-items/WI-055-risk-surface-guard.json
+++ b/.modonome/work-items/WI-055-risk-surface-guard.json
@@ -9,14 +9,22 @@
"allowed_edit_set": [
"scripts/risk-surface-guard.mjs",
"scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/risk-surface-allowlist.mjs",
+ "scripts/check-risk-surface-allowlist.mjs",
"scripts/lib/message-catalog/gate/risk-surface-guard.mjs",
+ "scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs",
"scripts/lib/message-catalog/index.mjs",
"scripts/check-self-application.mjs",
"scripts/check-gate-dag.mjs",
"schemas/gate-graph.json",
+ "schemas/risk-surface-allowlist.schema.json",
+ ".modonome/risk-surface-allowlist.json",
"tests/risk-surface-guard.test.mjs",
+ "tests/check-risk-surface-allowlist.test.mjs",
+ "tests/self-application.test.mjs",
"fixtures/risk-surface/should-flag/*",
"fixtures/risk-surface/should-allow/*",
+ "fixtures/risk-surface/allowlist/*",
"docs/risk-surface-guard.md",
"docs/adr/ADR-047-risk-surface-guard.md",
"docs/README.md",
@@ -34,8 +42,10 @@
"gates": [
"node scripts/check-style.mjs .",
"node --test tests/risk-surface-guard.test.mjs",
+ "node --test tests/check-risk-surface-allowlist.test.mjs",
"node scripts/check-gate-dag.mjs",
"node scripts/check-self-application.mjs",
+ "node scripts/check-risk-surface-allowlist.mjs",
"npm run verify"
],
"queued_at": "2026-07-27",
diff --git a/RELEASE-EVIDENCE.md b/RELEASE-EVIDENCE.md
index 81db7bda..9eb9960b 100644
--- a/RELEASE-EVIDENCE.md
+++ b/RELEASE-EVIDENCE.md
@@ -18,14 +18,14 @@ be added here once the owner arms the loop on this repo.
| Gate | Result |
|---|---|
| Drift guard | pass |
-| Style check | FAIL |
-| Repo hygiene | FAIL |
-| Self-application conformance | FAIL |
+| Style check | pass |
+| Repo hygiene | pass |
+| Self-application conformance | pass |
| Learning traceability | pass |
| Capability promotion readiness | pass |
| Work item validation | pass |
| Checker engagement | pass |
-| AgentProof | unavailable HARDENED |
+| AgentProof | 25/25 HARDENED |
## Work queue
diff --git a/action.yml b/action.yml
index c22c184b..7eaaf107 100644
--- a/action.yml
+++ b/action.yml
@@ -34,6 +34,10 @@ inputs:
description: 'Run Risk Surface Guard. Values: off, warn, fail.'
required: false
default: 'warn'
+ risk-surface-sarif-file:
+ description: 'Path to write the Risk Surface Guard SARIF 2.1.0 report.'
+ required: false
+ default: 'modonome-risk-surface.sarif'
runs:
using: 'composite'
@@ -83,12 +87,16 @@ runs:
MODONOME_BASE: ${{ steps.ratchet.outputs.base }}
MODONOME_ACTION_PATH: ${{ github.action_path }}
MODONOME_RISK_MODE: ${{ inputs.risk-surface }}
+ MODONOME_RISK_SARIF_FILE: ${{ inputs.risk-surface-sarif-file }}
run: |
set -uo pipefail
MODE="$MODONOME_RISK_MODE"
if [ "$MODE" != "fail" ]; then MODE="warn"; fi
- node "$MODONOME_ACTION_PATH/scripts/risk-surface-guard.mjs" "$MODONOME_BASE" --mode "$MODE" \
- | tee -a "$GITHUB_STEP_SUMMARY"
+ GUARD="$MODONOME_ACTION_PATH/scripts/risk-surface-guard.mjs"
+ # SARIF for the security tab, best-effort like the gate integrity step above.
+ node "$GUARD" "$MODONOME_BASE" --sarif > "$MODONOME_RISK_SARIF_FILE" || true
+ # Human output for the run log and the job summary. Its exit code is the verdict.
+ node "$GUARD" "$MODONOME_BASE" --mode "$MODE" | tee -a "$GITHUB_STEP_SUMMARY"
exit "${PIPESTATUS[0]}"
- name: Upload SARIF to code scanning
@@ -98,6 +106,13 @@ runs:
sarif_file: ${{ inputs.sarif-file }}
category: modonome-gate-integrity
+ - name: Upload Risk Surface Guard SARIF to code scanning
+ if: ${{ always() && inputs.upload-sarif == 'true' && inputs.risk-surface != 'off' }}
+ uses: github/codeql-action/upload-sarif@v3
+ with:
+ sarif_file: ${{ inputs.risk-surface-sarif-file }}
+ category: modonome-risk-surface
+
# Optional: an in-toto receipt of the verdict, keyless-signed via Sigstore and logged
# in Rekor, so a downstream verifier can confirm the tests were not weakened. Runs on
# success and failure so the receipt records either outcome.
diff --git a/docs/adr/ADR-047-risk-surface-guard.md b/docs/adr/ADR-047-risk-surface-guard.md
index 9534b090..1881e836 100644
--- a/docs/adr/ADR-047-risk-surface-guard.md
+++ b/docs/adr/ADR-047-risk-surface-guard.md
@@ -87,6 +87,67 @@ from or modify `guard-ratchet.mjs`.
allowlist, never a PR-head-loaded one, for the same reason point 4 requires
base-pinning the detector itself.
+9. **Suppression allowlist realizes decision 8's design note.** A base-branch-loaded
+ allowlist, never PR-head-loaded, exactly like the detector itself is base-pinned per
+ decision 4. `.modonome/risk-surface-allowlist.json` and its loader
+ `scripts/lib/risk-surface-allowlist.mjs` are both base-pinned in `ci.yml`'s `ratchet`
+ job and registered in `check-self-application.mjs`'s `BASE_PINNED`. A pull request
+ that adds a suppression entry is judged by the OLD (base-branch) allowlist on that
+ same pull request; the new entry only takes effect starting with the next pull
+ request opened after this one merges. No inline suppression comments were added; the
+ concern decision 8 raised (an agent adding one to silence a real finding, in the same
+ diff, with no review cycle) is exactly what base-pinning the allowlist avoids.
+10. **Entry shape and glob reuse.** Every allowlist entry requires all seven fields
+ (`id`, `rule`, `file`, `reason`, `added_by`, `added_at`, `expires_at`); none are
+ optional, since each is structurally necessary for auditability, who, why, what,
+ and until when. Matching is rule-id-only, with no category-level suppression, so
+ suppression breadth stays proportional to review cost: one entry silences one rule
+ against one file or glob, never a whole category. `file` reuses `globToRegExp`,
+ exported from `risk-surface-rules.mjs` for this purpose, the same glob syntax
+ `PROTECTED_PATH_GLOBS` already uses, so one matching implementation serves both a
+ literal path and a wildcard pattern. There is no `line` field: pinning to a line
+ number would make an entry brittle against unrelated edits that shift line numbers
+ elsewhere in the same file.
+11. **Output visibility rules.** A suppressed finding stays visible, marked, in human
+ and `--json` output (a `[SUPPRESSED]` marker, the entry id, and its reason), so a
+ reviewer or an audit can see what was suppressed and why without cross-referencing
+ the allowlist file separately. It is excluded entirely from `--sarif` output, since
+ SARIF feeds the GitHub Security tab, which should only ever list findings still
+ awaiting review, not ones already reviewed and time-boxed. A suppressed finding
+ never counts toward the exit code, the pass/warn/fail result, or the finding count
+ in the summary line, in any mode, including fail mode: that is the entire point of
+ suppression, and doing it selectively (hidden from SARIF but still counted toward
+ the exit code) would leave the noise problem half-solved.
+12. **`scripts/check-risk-surface-allowlist.mjs` is an author-feedback gate, not the
+ trust boundary.** It runs pre-base-checkout, against the pull request's own
+ proposed allowlist edits, so a malformed entry is caught on the pull request that
+ introduces it rather than a review cycle later. It is blocking, registered in
+ `REQUIRED_GATES` without the "(advisory)" qualifier decision 5 gives the scanner
+ itself, because it is pure structural validation with no false-positive rate to
+ prove out first, unlike the scanner's pattern-matching rules. Making it blocking
+ cannot let a bad diff through by itself, since the actual trust boundary is
+ decision 9's base-pinning; the gate only ever improves feedback latency for the
+ pull request's author.
+13. **Fail-closed is enforced at two independent layers, deliberately redundant.**
+ First, `parseAllowlist` guarantees `entries: []` whenever validation produces any
+ error, so a malformed allowlist file suppresses nothing rather than something
+ unpredictable. Second, `isSuppressed` independently re-validates each entry's
+ `expires_at` shape at match time rather than trusting `parseAllowlist` already ran:
+ `scripts/lib/jsonschema.mjs` is a generic, non-base-pinned utility shared by other
+ gates (`check-work-items.mjs` among them), so if it were ever weakened by a pull
+ request and a malformed no-`expires_at` entry slipped past
+ `check-risk-surface-allowlist.mjs` in the same pull request, a naive
+ `entry.expires_at < today` comparison would evaluate `undefined < "2026-..."` as
+ `false`, silently treating a missing expiry as permanent. Re-validating inside
+ `isSuppressed` closes this without needing to base-pin the generic schema validator
+ itself, a disproportionate change for what it buys.
+14. **SARIF upload wiring.** Risk Surface Guard's `--sarif` output is now uploaded to
+ the GitHub Security tab by `action.yml`, reusing the ratchet's own `upload-sarif`
+ toggle rather than adding a second boolean input, gated additionally on
+ `risk-surface` not being `off`. Results land under a distinct `modonome-risk-surface`
+ category, separate from the ratchet's `modonome-gate-integrity` category, so both
+ uploads coexist in the same run without overwriting each other.
+
## What this does not change
- The zero-runtime-dependency guarantee (ADR-032) is untouched.
@@ -106,3 +167,10 @@ depends on well-formed `@@` hunk headers in the diff, and the broad-scope creden
network and TLS rules trade some false-positive risk for coverage deliberately, since a
missed expansion is worse than an extra reviewer glance. None of this is marketed as
breach prevention or as a replacement for the security tooling named in point 8.
+
+RS106 (benign environment variable names), RS703 (Python `verify=False` co-occurrence
+window), and RS707 (network egress structural match) were tuned after initial shipping
+against more realistic code shapes (a `process.env.NODE_ENV` read in a file merely named
+after auth, a `black`-wrapped multi-line `requests` call, prose that mentions "egress"
+near an unrelated `0.0.0.0/0`). This reduces, but does not eliminate, the false-positive
+risk the paragraph above already discloses; it remains a heuristic, not a guarantee.
diff --git a/docs/risk-surface-guard.md b/docs/risk-surface-guard.md
index 298faf28..3e38862d 100644
--- a/docs/risk-surface-guard.md
+++ b/docs/risk-surface-guard.md
@@ -54,8 +54,17 @@ Example workflow:
- uses: enumind/modonome@v1
with:
risk-surface: warn # or 'fail', or 'off'
+ upload-sarif: 'true' # also uploads Risk Surface Guard's SARIF; on by default
```
+Findings also upload to the GitHub Security tab as SARIF, sharing the action's
+existing `upload-sarif` toggle (default `true`) with the anti-gaming ratchet's
+own upload. Risk Surface Guard's results land under a separate
+`modonome-risk-surface` category, distinct from the ratchet's
+`modonome-gate-integrity` category, so both show up independently. The SARIF
+file path defaults to `modonome-risk-surface.sarif` and is configurable via
+the `risk-surface-sarif-file` input.
+
The check also runs as a standalone CLI:
```bash
@@ -82,7 +91,36 @@ Each finding includes:
- **reviewer_guidance**: Suggested questions or alternatives for the reviewer.
- **limitation**: Constraints on what this rule can detect (e.g., "does not catch commented or obfuscated patterns").
-The CLI can emit findings as SARIF 2.1.0 (`--sarif`) or plain JSON (`--json`) for scripting. Unlike the anti-gaming ratchet, the GitHub Action does not currently upload Risk Surface Guard's SARIF output to the Security tab; that is a possible future enhancement, not something this version does.
+The CLI can emit findings as SARIF 2.1.0 (`--sarif`) or plain JSON (`--json`) for scripting. The GitHub Action uploads the SARIF output to the Security tab automatically when `upload-sarif` is `true` (the default) and `risk-surface` is not `off`, under the `modonome-risk-surface` category, as described above.
+
+## Suppressing a finding
+
+Findings can be suppressed with a base-branch-loaded allowlist. The trust model matters more than the mechanics: an entry you add in a pull request does not suppress a finding in that same pull request. CI loads `.modonome/risk-surface-allowlist.json` from the base branch, exactly like it loads `scripts/risk-surface-guard.mjs` itself, so a new suppression only takes effect starting with the next pull request opened after this one merges. A suppression always gets a full review cycle before it can hide anything; nothing in a PR's own diff can silence a finding in that PR.
+
+Add an entry to `.modonome/risk-surface-allowlist.json`:
+
+```json
+{
+ "schema_version": 1,
+ "entries": [
+ {
+ "id": "RSAL-001",
+ "rule": "RS106",
+ "file": "src/auth/legacy-session.js",
+ "reason": "Reads a fixed, repo-authored env var name; not attacker-influenced.",
+ "added_by": "your-github-handle",
+ "added_at": "2026-07-27",
+ "expires_at": "2026-10-27"
+ }
+ ]
+}
+```
+
+Every field is required. `rule` is the finding's `id` (e.g., `RS106`). `file` matches the finding's `file` path; it accepts the same glob syntax as the tool's own protected-path list (`**` for any depth, `*` within one path segment), or a literal path for an exact match. `expires_at` is required and inclusive: the entry suppresses through and including that date, and stops the day after. There is no automatic renewal notice yet; a lapsed entry silently starts flagging again with no warning beyond the finding itself reappearing, which is a known limitation of this version. A pull request that adds or edits an entry is validated at author-feedback time by `node scripts/check-risk-surface-allowlist.mjs`, which runs in CI before the base-branch checkout so a malformed entry is caught on the PR that introduces it.
+
+A suppressed finding stays visible, marked, in `--json` and the default human-readable output (a `[SUPPRESSED]` marker and the entry's reason), but is excluded entirely from `--sarif` output, since SARIF feeds the GitHub Security tab, which should only ever list findings still awaiting review. A suppressed finding never counts toward the exit code or the summary count in any mode, including fail mode: suppression fully removes it from the pass/warn/fail decision while keeping the audit trail intact.
+
+If the allowlist file is missing, that is the default state (zero suppressions), not an error. If it is present but malformed (invalid JSON, a schema violation, a duplicate id, an unrecognized rule, or `expires_at` before `added_at`), the scan fails closed: it prints a warning and proceeds as if zero entries were suppressed, so a broken allowlist can only ever produce more findings, never fewer.
## Why warn mode is the default in alpha
@@ -118,4 +156,4 @@ The tool scans diffs, not running code. Semantic obfuscation can evade it. A det
False-positive discipline applies: only added lines are flagged; removals of risky code never trigger a finding; same-line comments are skipped; and pinned official GitHub Actions and SHA-pinned third-party actions are exempted from the unpinned-action rule.
-No inline suppression comments are supported in this version. If a finding is a false positive specific to your repository, discuss it in a GitHub issue or reach out to the maintainers.
+No inline suppression comments are supported in this version. See "Suppressing a finding" above for the base-branch-loaded allowlist, the supported mechanism for a false positive specific to your repository. For anything the allowlist does not fit, discuss it in a GitHub issue or reach out to the maintainers.
diff --git a/fixtures/risk-surface/allowlist/expired-entry.json b/fixtures/risk-surface/allowlist/expired-entry.json
new file mode 100644
index 00000000..fa8d27d6
--- /dev/null
+++ b/fixtures/risk-surface/allowlist/expired-entry.json
@@ -0,0 +1,14 @@
+{
+ "schema_version": 1,
+ "entries": [
+ {
+ "id": "fixture-expired",
+ "rule": "RS101",
+ "file": "src/handler.js",
+ "reason": "fixture: an entry whose expiry has already passed",
+ "added_by": "fixture-author",
+ "added_at": "2020-01-01",
+ "expires_at": "2020-01-02"
+ }
+ ]
+}
diff --git a/fixtures/risk-surface/allowlist/glob-entry.json b/fixtures/risk-surface/allowlist/glob-entry.json
new file mode 100644
index 00000000..96e45264
--- /dev/null
+++ b/fixtures/risk-surface/allowlist/glob-entry.json
@@ -0,0 +1,14 @@
+{
+ "schema_version": 1,
+ "entries": [
+ {
+ "id": "fixture-glob",
+ "rule": "RS101",
+ "file": "src/**/*.js",
+ "reason": "fixture: a glob file pattern instead of a literal path",
+ "added_by": "fixture-author",
+ "added_at": "2026-01-01",
+ "expires_at": "2099-01-01"
+ }
+ ]
+}
diff --git a/fixtures/risk-surface/allowlist/malformed.json b/fixtures/risk-surface/allowlist/malformed.json
new file mode 100644
index 00000000..bbb88631
--- /dev/null
+++ b/fixtures/risk-surface/allowlist/malformed.json
@@ -0,0 +1,6 @@
+{
+ "schema_version": 1,
+ "entries": [
+ { this is not valid JSON
+ ]
+}
diff --git a/fixtures/risk-surface/allowlist/single-valid-entry.json b/fixtures/risk-surface/allowlist/single-valid-entry.json
new file mode 100644
index 00000000..3e0805fd
--- /dev/null
+++ b/fixtures/risk-surface/allowlist/single-valid-entry.json
@@ -0,0 +1,14 @@
+{
+ "schema_version": 1,
+ "entries": [
+ {
+ "id": "fixture-single-valid",
+ "rule": "RS101",
+ "file": "src/handler.js",
+ "reason": "fixture: a single well-formed entry",
+ "added_by": "fixture-author",
+ "added_at": "2026-01-01",
+ "expires_at": "2099-01-01"
+ }
+ ]
+}
diff --git a/fixtures/risk-surface/should-allow/k8s-ingress-0.0.0.0-near-egress-prose.diff b/fixtures/risk-surface/should-allow/k8s-ingress-0.0.0.0-near-egress-prose.diff
new file mode 100644
index 00000000..e18303f5
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/k8s-ingress-0.0.0.0-near-egress-prose.diff
@@ -0,0 +1,10 @@
+diff --git a/k8s/network-policy.yaml b/k8s/network-policy.yaml
+--- a/k8s/network-policy.yaml
++++ b/k8s/network-policy.yaml
+@@ -1,4 +1,6 @@
+ spec:
++ # ingress rule below; keep separate from our egress policy elsewhere in this file
++ ingress:
++ - from:
++ - ipBlock:
++ cidr: 0.0.0.0/0
diff --git a/fixtures/risk-surface/should-allow/process-env-benign-var-in-auth-file.diff b/fixtures/risk-surface/should-allow/process-env-benign-var-in-auth-file.diff
new file mode 100644
index 00000000..c1371310
--- /dev/null
+++ b/fixtures/risk-surface/should-allow/process-env-benign-var-in-auth-file.diff
@@ -0,0 +1,8 @@
+diff --git a/src/auth-middleware.js b/src/auth-middleware.js
+--- a/src/auth-middleware.js
++++ b/src/auth-middleware.js
+@@ -1,3 +1,4 @@
+ function middleware(req, res, next) {
++ if (process.env.NODE_ENV === "production") {
+ next();
+ }
diff --git a/fixtures/risk-surface/should-flag/tls-python-verify-false-multiline.diff b/fixtures/risk-surface/should-flag/tls-python-verify-false-multiline.diff
new file mode 100644
index 00000000..eb118598
--- /dev/null
+++ b/fixtures/risk-surface/should-flag/tls-python-verify-false-multiline.diff
@@ -0,0 +1,12 @@
+diff --git a/scripts/client.py b/scripts/client.py
+--- a/scripts/client.py
++++ b/scripts/client.py
+@@ -1,3 +1,9 @@
+ def fetch(url):
+- return requests.get(url)
++ return requests.get(
++ url,
++ timeout=30,
++ headers=DEFAULT_HEADERS,
++ verify=False,
++ )
diff --git a/package.json b/package.json
index b0dad535..f8b7b71b 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
"check:control-panel": "node scripts/check-control-panel-coverage.mjs && node scripts/check-control-panel-coherence.mjs",
"check:frontend": "npm --prefix design-system run build && npm --prefix apps/control-panel run build",
"check:messages": "node scripts/check-message-catalog-integrity.mjs",
- "verify": "npm run check:drift && npm run check:style && node scripts/check-repo-hygiene.mjs && npm run check:snapshot && npm run check:attestation && node scripts/check-md-governance.mjs && npm run check:architecture-drift && node scripts/check-self-application.mjs && node scripts/check-attribution-fp-corpus.mjs && node scripts/check-regex-safety.mjs && node scripts/check-gate-dag.mjs && node scripts/check-decisions-authority.mjs && node scripts/check-learning-traceability.mjs && node scripts/check-promotion-readiness.mjs && node scripts/check-work-items.mjs && node scripts/check-work-item-staleness.mjs && node scripts/check-checker-engagement.mjs && node scripts/check-agentproof-registry.mjs && npm run check:messages && npm run check:frontend && npm run check:control-panel && npm test && npm run agentproof && npm run evidence",
+ "verify": "npm run check:drift && npm run check:style && node scripts/check-repo-hygiene.mjs && npm run check:snapshot && npm run check:attestation && node scripts/check-md-governance.mjs && npm run check:architecture-drift && node scripts/check-self-application.mjs && node scripts/check-attribution-fp-corpus.mjs && node scripts/check-regex-safety.mjs && node scripts/check-gate-dag.mjs && node scripts/check-decisions-authority.mjs && node scripts/check-learning-traceability.mjs && node scripts/check-promotion-readiness.mjs && node scripts/check-work-items.mjs && node scripts/check-risk-surface-allowlist.mjs && node scripts/check-work-item-staleness.mjs && node scripts/check-checker-engagement.mjs && node scripts/check-agentproof-registry.mjs && npm run check:messages && npm run check:frontend && npm run check:control-panel && npm test && npm run agentproof && npm run evidence",
"audit:learnings": "node scripts/audit-learnings.mjs",
"evidence": "node scripts/build-release-evidence.mjs",
"check:evidence": "node scripts/build-release-evidence.mjs --check",
@@ -36,6 +36,7 @@
"checkerproof": "node checkerproof/runner.mjs",
"report": "node scripts/report.mjs",
"risk": "node scripts/risk-surface-guard.mjs",
+ "check:risk-surface-allowlist": "node scripts/check-risk-surface-allowlist.mjs",
"demo:agent": "node scripts/agent/run-cycle.mjs",
"prepare": "node scripts/install-hooks.mjs",
"release": "node scripts/release.mjs",
diff --git a/schemas/gate-graph.json b/schemas/gate-graph.json
index ea79daf4..d06bded9 100644
--- a/schemas/gate-graph.json
+++ b/schemas/gate-graph.json
@@ -1 +1 @@
-{"ratchet":[],"work-item":["ratchet"],"risk-surface-guard":[]}
+{"ratchet":[],"work-item":["ratchet"],"risk-surface-guard":[],"risk-surface-allowlist":[]}
diff --git a/schemas/risk-surface-allowlist.schema.json b/schemas/risk-surface-allowlist.schema.json
new file mode 100644
index 00000000..31e78431
--- /dev/null
+++ b/schemas/risk-surface-allowlist.schema.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://modonome.com/schemas/risk-surface-allowlist.schema.json",
+ "title": "Modonome Risk Surface Guard suppression allowlist",
+ "description": "Spec of record: docs/risk-surface-guard.md, \"Suppressing a finding\"; ADR-047 decision 9. Base-branch-loaded suppression list for scripts/risk-surface-guard.mjs. An entry added by a pull request does not affect that same pull request's own scan: see scripts/lib/risk-surface-allowlist.mjs and the base-pin checkout in .github/workflows/ci.yml.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["schema_version", "entries"],
+ "properties": {
+ "schema_version": { "type": "integer", "minimum": 1 },
+ "entries": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "rule", "file", "reason", "added_by", "added_at", "expires_at"],
+ "properties": {
+ "id": { "type": "string", "minLength": 1, "description": "A short, unique, human-chosen identifier for this entry, e.g. RSAL-001." },
+ "rule": { "type": "string", "pattern": "^RS\\d{3}$", "description": "The rule id this entry suppresses, e.g. RS106." },
+ "file": { "type": "string", "minLength": 1, "description": "The finding's file path this entry applies to. Supports the same glob syntax as PROTECTED_PATH_GLOBS in scripts/lib/risk-surface-rules.mjs (** for any depth, * within a path segment); a literal path with no wildcard matches exactly." },
+ "reason": { "type": "string", "minLength": 1, "description": "Why this finding is a false positive or an accepted risk here." },
+ "added_by": { "type": "string", "minLength": 1, "description": "Who added this entry, for audit purposes." },
+ "added_at": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "description": "YYYY-MM-DD." },
+ "expires_at": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "description": "YYYY-MM-DD. Required: suppression is always time-boxed and must be re-justified on expiry, never permanent by default." }
+ }
+ }
+ }
+ }
+}
diff --git a/scripts/check-risk-surface-allowlist.mjs b/scripts/check-risk-surface-allowlist.mjs
new file mode 100644
index 00000000..0cd170cb
--- /dev/null
+++ b/scripts/check-risk-surface-allowlist.mjs
@@ -0,0 +1,40 @@
+#!/usr/bin/env node
+// Validates the risk-surface-guard suppression allowlist (ADR-047 decision 11).
+// This is an author-feedback gate, not the trust boundary: the trust boundary is
+// the base-pinned checkout of .modonome/risk-surface-allowlist.json and its loader
+// in ci.yml (see scripts/lib/risk-surface-allowlist.mjs). This gate exists so a
+// malformed entry is caught on the pull request that introduces it, instead of
+// silently suppressing nothing a review cycle later once the base-pinned copy
+// is the one actually in effect.
+//
+// Usage: node scripts/check-risk-surface-allowlist.mjs [path]
+// path defaults to .modonome/risk-surface-allowlist.json.
+import { readFileSync, existsSync } from "node:fs";
+import { fileURLToPath } from "node:url";
+import { dirname, join } from "node:path";
+import { parseAllowlist } from "./lib/risk-surface-allowlist.mjs";
+import { formatMessage, loadMessageOverrides } from "./lib/messages.mjs";
+
+const here = dirname(fileURLToPath(import.meta.url));
+const root = join(here, "..");
+const overrides = loadMessageOverrides(join(root, ".modonome"));
+
+const path = process.argv[2] || join(root, ".modonome", "risk-surface-allowlist.json");
+
+console.log("Risk Surface Guard allowlist validation (ADR-047)");
+console.log("=================================================");
+
+if (!existsSync(path)) {
+ console.log(`PASS: ${path} not present; zero suppressions is the default state.`);
+ process.exit(0);
+}
+
+const { entries, errors } = parseAllowlist(readFileSync(path, "utf8"));
+if (errors.length === 0) {
+ console.log(`PASS: ${entries.length} allowlist entr${entries.length === 1 ? "y" : "ies"} valid.`);
+ process.exit(0);
+}
+
+console.error(formatMessage("gate.check-risk-surface-allowlist.fail-summary", { count: errors.length }, overrides).message);
+for (const e of errors) console.error(" - " + e);
+process.exit(1);
diff --git a/scripts/check-self-application.mjs b/scripts/check-self-application.mjs
index f21444dd..2d20a177 100644
--- a/scripts/check-self-application.mjs
+++ b/scripts/check-self-application.mjs
@@ -65,6 +65,10 @@ const REQUIRED_GATES = [
// repository's own build; a downstream adopter can opt into --mode fail via
// action.yml's risk-surface input.
{ name: "risk surface guard (advisory)", needle: "risk-surface-guard.mjs" },
+ // Blocking, pre-base-checkout: validates the PR's own proposed allowlist edits
+ // (ADR-047 decision 11) so a malformed entry is caught on the PR that introduces
+ // it, not a review cycle later once the base-pinned copy is the one in effect.
+ { name: "risk-surface allowlist validation", needle: "check-risk-surface-allowlist.mjs" },
// Scans the PR body and comments for AI-participation signatures (operational-note 6):
// the one attribution surface no tracked-file gate can see.
{ name: "PR body and comment hygiene", needle: "hygiene check --pr" },
@@ -97,6 +101,8 @@ const BASE_PINNED = [
"scripts/lib/detect-attribution.mjs",
"scripts/risk-surface-guard.mjs",
"scripts/lib/risk-surface-rules.mjs",
+ "scripts/lib/risk-surface-allowlist.mjs",
+ ".modonome/risk-surface-allowlist.json",
];
for (const rel of BASE_PINNED) {
const escaped = rel.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
diff --git a/scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs b/scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs
new file mode 100644
index 00000000..e2352125
--- /dev/null
+++ b/scripts/lib/message-catalog/gate/check-risk-surface-allowlist.mjs
@@ -0,0 +1,8 @@
+export const MESSAGES = {
+ "gate.check-risk-surface-allowlist.fail-summary": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "FAIL: {count} risk-surface-guard allowlist problem(s):",
+ },
+};
diff --git a/scripts/lib/message-catalog/gate/risk-surface-guard.mjs b/scripts/lib/message-catalog/gate/risk-surface-guard.mjs
index a8707068..c2773b83 100644
--- a/scripts/lib/message-catalog/gate/risk-surface-guard.mjs
+++ b/scripts/lib/message-catalog/gate/risk-surface-guard.mjs
@@ -8,7 +8,7 @@ export const MESSAGES = {
category: "gate",
severity: "blocked",
non_suppressible: true,
- template: "usage: risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json], or --diff , or --staged",
+ template: "usage: risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json] [--allowlist ], or --diff , or --staged",
},
"gate.risk-surface-guard.unsafe-ref": {
category: "gate",
@@ -64,4 +64,10 @@ export const MESSAGES = {
non_suppressible: true,
template: "WARN: {count} risk-surface finding(s), none high or critical. Mode is fail but the threshold was not reached.",
},
+ "gate.risk-surface-guard.allowlist-invalid": {
+ category: "gate",
+ severity: "blocked",
+ non_suppressible: true,
+ template: "WARN: .modonome/risk-surface-allowlist.json is invalid ({count} error(s)); continuing with zero suppressions applied.",
+ },
};
diff --git a/scripts/lib/message-catalog/index.mjs b/scripts/lib/message-catalog/index.mjs
index b0930c8e..a6e377f3 100644
--- a/scripts/lib/message-catalog/index.mjs
+++ b/scripts/lib/message-catalog/index.mjs
@@ -24,6 +24,7 @@ import { MESSAGES as M_GATE_CHECK_PORTABILITY } from "./gate/check-portability.m
import { MESSAGES as M_GATE_CHECK_PROMOTION_READINESS } from "./gate/check-promotion-readiness.mjs";
import { MESSAGES as M_GATE_CHECK_REGEX_SAFETY } from "./gate/check-regex-safety.mjs";
import { MESSAGES as M_GATE_CHECK_REPO_HYGIENE } from "./gate/check-repo-hygiene.mjs";
+import { MESSAGES as M_GATE_CHECK_RISK_SURFACE_ALLOWLIST } from "./gate/check-risk-surface-allowlist.mjs";
import { MESSAGES as M_GATE_CHECK_SELF_APPLICATION } from "./gate/check-self-application.mjs";
import { MESSAGES as M_GATE_CHECK_STATE_MACHINE_ACYCLIC } from "./gate/check-state-machine-acyclic.mjs";
import { MESSAGES as M_GATE_CHECK_STYLE } from "./gate/check-style.mjs";
@@ -84,6 +85,7 @@ export const CATALOG_PARTIALS = [
M_GATE_CHECK_PROMOTION_READINESS,
M_GATE_CHECK_REGEX_SAFETY,
M_GATE_CHECK_REPO_HYGIENE,
+ M_GATE_CHECK_RISK_SURFACE_ALLOWLIST,
M_GATE_CHECK_SELF_APPLICATION,
M_GATE_CHECK_STATE_MACHINE_ACYCLIC,
M_GATE_CHECK_STYLE,
diff --git a/scripts/lib/risk-surface-allowlist.mjs b/scripts/lib/risk-surface-allowlist.mjs
new file mode 100644
index 00000000..da0d3acd
--- /dev/null
+++ b/scripts/lib/risk-surface-allowlist.mjs
@@ -0,0 +1,80 @@
+// Base-branch-loaded suppression allowlist for scripts/risk-surface-guard.mjs
+// (ADR-047 decision 9). Pure data-handling: no console output here, callers
+// format their own messages from the entries/errors this returns.
+//
+// Trust model: this module and the data file it reads
+// (.modonome/risk-surface-allowlist.json) are both base-pinned in ci.yml,
+// exactly like scripts/risk-surface-guard.mjs and scripts/lib/risk-surface-rules.mjs
+// are. A pull request that adds a suppression entry is judged by the OLD
+// (base-branch) allowlist on that same pull request; the new entry only takes
+// effect starting with the next pull request opened after this one merges.
+import { readFileSync, existsSync } from "node:fs";
+import { fileURLToPath } from "node:url";
+import { dirname, join } from "node:path";
+import { validate } from "./jsonschema.mjs";
+import { globToRegExp, RULES_BY_ID } from "./risk-surface-rules.mjs";
+
+const here = dirname(fileURLToPath(import.meta.url));
+const SCHEMA = JSON.parse(readFileSync(join(here, "..", "..", "schemas", "risk-surface-allowlist.schema.json"), "utf8"));
+const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
+
+// parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at
+// this boundary: whenever errors is non-empty, entries is always []. Callers
+// never need to remember to check errors before trusting entries.
+export function parseAllowlist(text) {
+ let parsed;
+ try {
+ parsed = JSON.parse(text);
+ } catch (e) {
+ return { entries: [], errors: [`invalid JSON: ${e.message}`] };
+ }
+
+ const errors = validate(SCHEMA, parsed);
+ if (errors.length === 0) {
+ const seen = new Set();
+ for (const entry of parsed.entries) {
+ if (seen.has(entry.id)) errors.push(`duplicate entry id "${entry.id}"`);
+ seen.add(entry.id);
+ if (!RULES_BY_ID.has(entry.rule)) errors.push(`entry "${entry.id}": unknown rule id "${entry.rule}"`);
+ if (entry.expires_at < entry.added_at) errors.push(`entry "${entry.id}": expires_at is before added_at`);
+ }
+ }
+
+ if (errors.length > 0) return { entries: [], errors };
+ return { entries: parsed.entries, errors: [] };
+}
+
+// loadAllowlist(path) -> { entries, errors }. A missing file is the default,
+// backward-compatible state (zero suppressions), never an error.
+export function loadAllowlist(path) {
+ if (!existsSync(path)) return { entries: [], errors: [] };
+ return parseAllowlist(readFileSync(path, "utf8"));
+}
+
+// isSuppressed(finding, entries, today) -> the matching entry, or null.
+// `today` is a "YYYY-MM-DD" string passed explicitly by the caller (never
+// read from the system clock in here), so this stays deterministic and
+// testable without faking the clock. Independently re-validates each entry's
+// expires_at shape rather than trusting parseAllowlist already ran on it:
+// scripts/lib/jsonschema.mjs is a generic, non-base-pinned utility shared by
+// other gates, so a weakened validator plus a malformed entry that slipped
+// past review must never silently read as "never expires."
+export function isSuppressed(finding, entries, today) {
+ for (const entry of entries) {
+ if (entry.rule !== finding.id) continue;
+ if (typeof entry.file !== "string" || !globToRegExp(entry.file).test(finding.file)) continue;
+ if (typeof entry.expires_at !== "string" || !DATE_RE.test(entry.expires_at)) continue;
+ if (entry.expires_at < today) continue;
+ return entry;
+ }
+ return null;
+}
+
+// applyAllowlist(findings, entries, today) -> findings with a new `suppressed`
+// field on each ({entry_id, reason} or null). Every other field is untouched.
+export function applyAllowlist(findings, entries, today) {
+ return findings.map((f) => {
+ const entry = isSuppressed(f, entries, today);
+ return { ...f, suppressed: entry ? { entry_id: entry.id, reason: entry.reason } : null };
+ });
+}
diff --git a/scripts/lib/risk-surface-rules.mjs b/scripts/lib/risk-surface-rules.mjs
index 00565765..80f3e180 100644
--- a/scripts/lib/risk-surface-rules.mjs
+++ b/scripts/lib/risk-surface-rules.mjs
@@ -117,7 +117,7 @@ export const PROTECTED_PATH_GLOBS = [
".modonome/**",
];
-function globToRegExp(glob) {
+export function globToRegExp(glob) {
// Split on the literal "**" substring first, so each segment holds at most
// single "*" wildcards, then escape and rejoin with ".*" for where "**" was.
// This sidesteps the placeholder round-trip that corrupted an earlier draft.
@@ -242,6 +242,11 @@ export function redactMatchedText(text, opts = {}) {
// YAML mapping key does.
// ---------------------------------------------------------------------------
+// RS106: environment variable names common enough, and benign enough, that a
+// bare read of one in an auth/secret/credential-named file is routine rather
+// than worth a reviewer's attention.
+const RS106_BENIGN_VARS = new Set(["NODE_ENV", "PORT", "HOST", "DEBUG", "LOG_LEVEL", "CI", "HOME", "PATH", "PWD", "TZ", "LANG"]);
+
export const RULES = [
// ---- RS1xx: dynamic-code-execution / unsafe-deserialization / shell-execution ----
{
@@ -309,12 +314,16 @@ export const RULES = [
category: "credential-surface-expansion",
severity: "low",
scope: (p) => isJsTsScope(p) && /auth|secret|credential|token/i.test(basename(p)),
- pattern: /\bprocess\.env\b/,
+ test: (line) => {
+ const m = line.match(/\bprocess\.env\.([A-Za-z_][A-Za-z0-9_]*)\b/) || line.match(/\bprocess\.env\[["']([A-Za-z_][A-Za-z0-9_]*)["']\]/);
+ if (!m) return false;
+ return !RS106_BENIGN_VARS.has(m[1]);
+ },
reason:
"New process.env access in a file whose name suggests it handles authentication, secrets, or credentials. Not inherently unsafe, but a new environment-variable read in this kind of file is worth a quick look at what it reads and where the value goes.",
reviewer_guidance: "Confirm the value read is used narrowly (not logged, not echoed into a response or a wider object) and that the variable name matches what the file already handles.",
limitation:
- "Scoped only by filename convention, not by actual file purpose, and only to JS/TS files. This is the rule most likely to be noisy in a repo with a different naming convention; it stays intentionally low severity and narrow for that reason.",
+ "Scoped only by filename convention, not by actual file purpose, and only to JS/TS files. Exempts a small set of near-universally-benign variable names (NODE_ENV, PORT, HOST, DEBUG, LOG_LEVEL, CI, HOME, PATH, PWD, TZ, LANG) so a routine environment check doesn't fire just because the file is named for auth or credentials; a bare process.env access with no readable variable name (destructuring, a computed key) is not matched at all. This is still the rule most likely to be noisy in a repo with a different naming or variable convention; it stays intentionally low severity and narrow for that reason.",
},
{
id: "RS109",
@@ -876,18 +885,22 @@ export const RULES = [
fileTest: (lines) => {
const verifyFalseRe = /\bverify\s*=\s*False\b/;
const httpCallRe = /\b(requests|session)\./;
+ const WINDOW = 4;
const matches = [];
for (let i = 0; i < lines.length; i++) {
const stripped = stripPythonSameLineNoise(lines[i].text);
if (!verifyFalseRe.test(stripped)) continue;
- const nearby = [lines[i - 1], lines[i], lines[i + 1]].filter(Boolean);
+ const nearby = [];
+ for (let offset = -WINDOW; offset <= WINDOW; offset++) {
+ if (lines[i + offset]) nearby.push(lines[i + offset]);
+ }
if (nearby.some((l) => httpCallRe.test(stripPythonSameLineNoise(l.text)))) matches.push(lines[i]);
}
return matches;
},
reason: "Disables TLS certificate verification on a requests/session call, near an added verify=False. Machine-in-the-middle interception becomes possible for anything sent over this connection.",
reviewer_guidance: "Fix the underlying certificate problem instead of disabling verification. If this is genuinely a local development-only code path, confirm it cannot run in production.",
- limitation: "Co-occurrence heuristic scoped to the same and adjacent added lines; a requests/session call several lines away from its verify=False argument (a common multi-line call-signature style) is not detected, and an unrelated verify=False on an unrelated object would still be flagged if a requests/session call happens to sit on an adjacent added line.",
+ limitation: "Co-occurrence heuristic scoped to added lines within 4 lines of each other, wide enough to catch a typical black or autopep8-wrapped multi-line call (the requests/session call on one line, verify=False as its own keyword argument line several lines below) without tracking real call boundaries. A call whose arguments span more than 4 lines is still not detected, and an unrelated verify=False on an unrelated object would still be flagged if a requests/session call happens to sit within the window.",
},
{
id: "RS704",
@@ -926,18 +939,23 @@ export const RULES = [
scope: (p) => isTerraformScope(p) || isK8sScope(p),
fileTest: (lines) => {
const wildcardCidrRe = /0\.0\.0\.0\/0/;
- const egressWordRe = /\b(egress|outbound)\b/i;
+ // Requires "egress" to look like a structural block or key (a Terraform
+ // block opener/attribute, or a Kubernetes YAML mapping key), not merely
+ // prose mentioning the word nearby. "outbound" has no equivalent
+ // structural spelling in either format, so it stays a bare-word fallback.
+ const egressStructuralRe = /\begress\s*[{:=]/i;
+ const outboundWordRe = /\boutbound\b/i;
const matches = [];
for (let i = 0; i < lines.length; i++) {
if (!wildcardCidrRe.test(lines[i].text)) continue;
const nearby = [lines[i - 1], lines[i], lines[i + 1]].filter(Boolean);
- if (nearby.some((l) => egressWordRe.test(l.text))) matches.push(lines[i]);
+ if (nearby.some((l) => egressStructuralRe.test(l.text) || outboundWordRe.test(l.text))) matches.push(lines[i]);
}
return matches;
},
reason: "This infrastructure config allows outbound traffic to any address (0.0.0.0/0) near an egress or outbound rule. A broad egress allowance makes data exfiltration from a compromised workload easier and harder to contain.",
reviewer_guidance: "Scope egress to the specific destinations the workload actually needs to reach.",
- limitation: "Co-occurrence heuristic on nearby lines only, hedged deliberately per the task's own \"if detectable\" framing: a wildcard CIDR used for an unrelated, legitimately broad purpose (a public ingress rule, for instance) sitting near the word egress or outbound could still be flagged.",
+ limitation: "Co-occurrence heuristic on nearby lines only, hedged deliberately per the task's own \"if detectable\" framing. The egress side requires a structural block or key shape (egress {, egress =, egress:) rather than the bare word appearing anywhere in nearby prose, but outbound has no such structural form in Terraform or Kubernetes and stays a bare-word match, so a wildcard CIDR sitting near unrelated prose that happens to say \"outbound\" could still be flagged; a wildcard CIDR used for a legitimate, unrelated purpose (a public ingress rule, for instance) sitting near a real egress block would also still be flagged, since this rule does not parse which block the CIDR actually belongs to.",
},
// ---- RS8xx: protected-security-config (path-based, content-independent) ----
diff --git a/scripts/risk-surface-guard.mjs b/scripts/risk-surface-guard.mjs
index 79a69bf7..6a007e9f 100644
--- a/scripts/risk-surface-guard.mjs
+++ b/scripts/risk-surface-guard.mjs
@@ -10,9 +10,13 @@
// changes that expand risk surface and helps a reviewer notice them before merge.
//
// Usage:
-// node scripts/risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json]
-// node scripts/risk-surface-guard.mjs --diff [--mode warn|fail] [--sarif] [--json]
-// node scripts/risk-surface-guard.mjs --staged [--mode warn|fail] [--sarif] [--json]
+// node scripts/risk-surface-guard.mjs [--mode warn|fail] [--sarif] [--json] [--allowlist ]
+// node scripts/risk-surface-guard.mjs --diff [--mode warn|fail] [--sarif] [--json] [--allowlist ]
+// node scripts/risk-surface-guard.mjs --staged [--mode warn|fail] [--sarif] [--json] [--allowlist ]
+//
+// --allowlist defaults to .modonome/risk-surface-allowlist.json (see
+// scripts/lib/risk-surface-allowlist.mjs and docs/risk-surface-guard.md,
+// "Suppressing a finding"). A missing allowlist file is not an error.
//
// Exit codes: 0 no findings, or warn mode regardless of findings; 1 fail mode with a
// high or critical finding; 2 usage or internal error.
@@ -23,6 +27,7 @@ import { dirname, join } from "node:path";
import { formatMessage, loadMessageOverrides } from "./lib/messages.mjs";
import { flagValue } from "./lib/cli-args.mjs";
import { RULES, RULES_BY_ID, matchesProtectedPath, stripForScope, redactMatchedText } from "./lib/risk-surface-rules.mjs";
+import { loadAllowlist, applyAllowlist } from "./lib/risk-surface-allowlist.mjs";
const here = dirname(fileURLToPath(import.meta.url));
const root = join(here, "..");
@@ -38,12 +43,13 @@ function normalizeLF(s) {
}
// ---------------------------------------------------------------------------
-// Flag parsing. --mode, --sarif, --json, --format=json/sarif, and the
-// positional base-ref (or --diff / --staged) compose in any order.
+// Flag parsing. --mode, --allowlist, --sarif, --json, --format=json/sarif, and
+// the positional base-ref (or --diff / --staged) compose in any order.
// ---------------------------------------------------------------------------
export function stripFlags(argv) {
const mode = flagValue(argv, "--mode");
+ const allowlist = flagValue(argv, "--allowlist");
const format = argv.includes("--sarif") || argv.includes("--format=sarif")
? "sarif"
: argv.includes("--json") || argv.includes("--format=json")
@@ -52,14 +58,14 @@ export function stripFlags(argv) {
const positional = [];
for (let i = 0; i < argv.length; i++) {
const a = argv[i];
- if (a === "--mode") {
+ if (a === "--mode" || a === "--allowlist") {
i++; // also skip its value
continue;
}
if (/^--(json|sarif|format=(json|sarif))$/.test(a)) continue;
positional.push(a);
}
- return { mode, format, positional };
+ return { mode, format, positional, allowlist };
}
// ---------------------------------------------------------------------------
@@ -216,14 +222,23 @@ function hasHighOrCritical(findings) {
return findings.some((f) => f.severity === "high" || f.severity === "critical");
}
+// A suppressed finding (allowlist match) never counts toward the exit code,
+// the result verdict, or the finding count in the summary line, even though
+// it stays visible in the output. This is the whole point of suppression:
+// reduce noise, including in fail mode, without hiding that it happened.
+function activeFindings(findings) {
+ return findings.filter((f) => !f.suppressed);
+}
+
export function decideExitCode(mode, findings) {
- if (mode === "fail" && hasHighOrCritical(findings)) return 1;
+ if (mode === "fail" && hasHighOrCritical(activeFindings(findings))) return 1;
return 0;
}
export function decideResult(mode, findings) {
- if (findings.length === 0) return "pass";
- if (mode === "fail" && hasHighOrCritical(findings)) return "fail";
+ const active = activeFindings(findings);
+ if (active.length === 0) return "pass";
+ if (mode === "fail" && hasHighOrCritical(active)) return "fail";
return "warn";
}
@@ -238,25 +253,28 @@ export function severityToSarifLevel(severity) {
// ---------------------------------------------------------------------------
function summaryMessage(mode, findings) {
- if (findings.length === 0) return formatMessage("gate.risk-surface-guard.pass-summary", {}, overrides).message;
+ const active = activeFindings(findings);
+ if (active.length === 0) return formatMessage("gate.risk-surface-guard.pass-summary", {}, overrides).message;
if (mode === "fail") {
- if (hasHighOrCritical(findings)) {
- return formatMessage("gate.risk-surface-guard.fail-block-summary", { count: findings.length }, overrides).message;
+ if (hasHighOrCritical(active)) {
+ return formatMessage("gate.risk-surface-guard.fail-block-summary", { count: active.length }, overrides).message;
}
- return formatMessage("gate.risk-surface-guard.fail-mode-below-threshold-summary", { count: findings.length }, overrides).message;
+ return formatMessage("gate.risk-surface-guard.fail-mode-below-threshold-summary", { count: active.length }, overrides).message;
}
- return formatMessage("gate.risk-surface-guard.warn-summary", { count: findings.length }, overrides).message;
+ return formatMessage("gate.risk-surface-guard.warn-summary", { count: active.length }, overrides).message;
}
export function formatHuman(findings, { mode }) {
const lines = ["Risk Surface Guard", "===================", `Mode: ${mode}`, ""];
for (const f of findings) {
- lines.push(`[${f.severity.toUpperCase()}] ${f.id} ${f.category}`);
+ const marker = f.suppressed ? " [SUPPRESSED]" : "";
+ lines.push(`[${f.severity.toUpperCase()}] ${f.id} ${f.category}${marker}`);
lines.push(` ${f.file}${f.line ? ":" + f.line : ""}`);
lines.push(` ${f.matched_text}`);
lines.push(` ${f.reason}`);
lines.push(` Reviewer guidance: ${f.reviewer_guidance}`);
lines.push(` Limitation: ${f.limitation}`);
+ if (f.suppressed) lines.push(` Suppressed by allowlist entry ${f.suppressed.entry_id}: ${f.suppressed.reason}`);
lines.push("");
}
lines.push(summaryMessage(mode, findings));
@@ -272,7 +290,11 @@ export function emitJson(findings, { mode }) {
}
export function emitSarif(findings) {
- const usedIds = [...new Set(findings.map((f) => f.id))];
+ // Suppressed findings are excluded entirely: SARIF feeds the GitHub Security
+ // tab, which should only ever show actionable findings, not ones a reviewer
+ // has already accepted and time-boxed via the allowlist.
+ const active = findings.filter((f) => !f.suppressed);
+ const usedIds = [...new Set(active.map((f) => f.id))];
const rules = usedIds.map((id) => {
const rule = RULES_BY_ID.get(id);
return {
@@ -282,7 +304,7 @@ export function emitSarif(findings) {
helpUri: `https://modonome.com/codes/${id}`,
};
});
- const results = findings.map((f) => ({
+ const results = active.map((f) => ({
ruleId: f.id,
level: severityToSarifLevel(f.severity),
message: { text: f.reason },
@@ -312,7 +334,7 @@ export function emitSarif(findings) {
// ---------------------------------------------------------------------------
function runCli() {
- const { mode: rawMode, format, positional } = stripFlags(process.argv.slice(2));
+ const { mode: rawMode, format, positional, allowlist } = stripFlags(process.argv.slice(2));
const mode = rawMode || "warn";
if (mode !== "warn" && mode !== "fail") {
process.stderr.write(formatMessage("gate.risk-surface-guard.invalid-mode", { value: rawMode }, overrides).message + "\n");
@@ -339,6 +361,16 @@ function runCli() {
process.exit(2);
}
+ const allowlistPath = allowlist || join(root, ".modonome", "risk-surface-allowlist.json");
+ const { entries: allowlistEntries, errors: allowlistErrors } = loadAllowlist(allowlistPath);
+ if (allowlistErrors.length > 0) {
+ process.stderr.write(
+ formatMessage("gate.risk-surface-guard.allowlist-invalid", { count: allowlistErrors.length }, overrides).message + "\n",
+ );
+ }
+ const today = new Date().toISOString().slice(0, 10);
+ findings = applyAllowlist(findings, allowlistEntries, today);
+
if (format === "sarif") {
process.stdout.write(emitSarif(findings) + "\n");
} else if (format === "json") {
diff --git a/tests/check-risk-surface-allowlist.test.mjs b/tests/check-risk-surface-allowlist.test.mjs
new file mode 100644
index 00000000..983bab42
--- /dev/null
+++ b/tests/check-risk-surface-allowlist.test.mjs
@@ -0,0 +1,165 @@
+import { test } from "node:test";
+import assert from "node:assert/strict";
+import { join, dirname } from "node:path";
+import { fileURLToPath } from "node:url";
+import { spawnSync } from "node:child_process";
+import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
+import { tmpdir } from "node:os";
+import { parseAllowlist } from "../scripts/lib/risk-surface-allowlist.mjs";
+
+const here = dirname(fileURLToPath(import.meta.url));
+const root = join(here, "..");
+const SCRIPT = join(root, "scripts/check-risk-surface-allowlist.mjs");
+const FIXTURES = join(root, "fixtures/risk-surface/allowlist");
+
+function run(...args) {
+ return spawnSync("node", [SCRIPT, ...args], { encoding: "utf8", timeout: 30000 });
+}
+
+// ---------------------------------------------------------------------------
+// Pure pass-through: the gate's PASS/FAIL decision and printed problem list
+// are exactly what parseAllowlist already decided; this file adds no
+// additional validation logic of its own.
+// ---------------------------------------------------------------------------
+
+test("the gate's pass/fail decision matches parseAllowlist's own errors list", () => {
+ const valid = '{"schema_version": 1, "entries": []}';
+ assert.deepEqual(parseAllowlist(valid).errors, []);
+ const r = run(join(FIXTURES, "single-valid-entry.json"));
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+});
+
+// ---------------------------------------------------------------------------
+// CLI integration
+// ---------------------------------------------------------------------------
+
+test("a single well-formed entry exits 0", () => {
+ const r = run(join(FIXTURES, "single-valid-entry.json"));
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stdout, /PASS: 1 allowlist entry valid\./);
+});
+
+test("an expired entry is still structurally valid and exits 0 (expiry is a scan-time concern, not a validation-time one)", () => {
+ const r = run(join(FIXTURES, "expired-entry.json"));
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+});
+
+test("a glob file pattern is a valid entry shape and exits 0", () => {
+ const r = run(join(FIXTURES, "glob-entry.json"));
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+});
+
+test("malformed JSON exits 1 with a specific stderr message, not a crash", () => {
+ const r = run(join(FIXTURES, "malformed.json"));
+ assert.strictEqual(r.status, 1, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stderr, /FAIL: 1 risk-surface-guard allowlist problem\(s\):/);
+ assert.match(r.stderr, /invalid JSON/);
+});
+
+test("a missing file is treated as zero suppressions, not an error", () => {
+ const r = run(join(FIXTURES, "does-not-exist.json"));
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stdout, /not present; zero suppressions is the default state\./);
+});
+
+test("the gate passes against this repository's own live allowlist file", () => {
+ const r = run();
+ assert.strictEqual(r.status, 0, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stdout, /Risk Surface Guard allowlist validation \(ADR-047\)/);
+});
+
+// ---------------------------------------------------------------------------
+// Adversarial cases
+// ---------------------------------------------------------------------------
+
+test("a duplicate entry id exits 1 and names the duplicate", () => {
+ const dir = mkdtempSync(join(tmpdir(), "risk-surface-allowlist-"));
+ try {
+ const file = join(dir, "duplicate-id.json");
+ writeFileSync(
+ file,
+ JSON.stringify({
+ schema_version: 1,
+ entries: [
+ { id: "dup", rule: "RS101", file: "a.js", reason: "r1", added_by: "x", added_at: "2026-01-01", expires_at: "2099-01-01" },
+ { id: "dup", rule: "RS102", file: "b.js", reason: "r2", added_by: "x", added_at: "2026-01-01", expires_at: "2099-01-01" },
+ ],
+ }),
+ );
+ const r = run(file);
+ assert.strictEqual(r.status, 1, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stderr, /duplicate entry id "dup"/);
+ } finally {
+ rmSync(dir, { recursive: true, force: true });
+ }
+});
+
+test("an unknown rule id exits 1 and names the unrecognized rule", () => {
+ const dir = mkdtempSync(join(tmpdir(), "risk-surface-allowlist-"));
+ try {
+ const file = join(dir, "unknown-rule.json");
+ writeFileSync(
+ file,
+ JSON.stringify({
+ schema_version: 1,
+ entries: [
+ {
+ id: "bad-rule",
+ rule: "RS999",
+ file: "a.js",
+ reason: "r1",
+ added_by: "x",
+ added_at: "2026-01-01",
+ expires_at: "2099-01-01",
+ },
+ ],
+ }),
+ );
+ const r = run(file);
+ assert.strictEqual(r.status, 1, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stderr, /unknown rule id "RS999"/);
+ } finally {
+ rmSync(dir, { recursive: true, force: true });
+ }
+});
+
+test("expires_at before added_at exits 1", () => {
+ const dir = mkdtempSync(join(tmpdir(), "risk-surface-allowlist-"));
+ try {
+ const file = join(dir, "backwards-dates.json");
+ writeFileSync(
+ file,
+ JSON.stringify({
+ schema_version: 1,
+ entries: [
+ {
+ id: "backwards",
+ rule: "RS101",
+ file: "a.js",
+ reason: "r1",
+ added_by: "x",
+ added_at: "2026-06-01",
+ expires_at: "2026-01-01",
+ },
+ ],
+ }),
+ );
+ const r = run(file);
+ assert.strictEqual(r.status, 1, `${r.stdout}\n${r.stderr}`);
+ assert.match(r.stderr, /expires_at is before added_at/);
+ } finally {
+ rmSync(dir, { recursive: true, force: true });
+ }
+});
+
+test("an unknown top-level property exits 1 (additionalProperties: false)", () => {
+ const dir = mkdtempSync(join(tmpdir(), "risk-surface-allowlist-"));
+ try {
+ const file = join(dir, "extra-prop.json");
+ writeFileSync(file, JSON.stringify({ schema_version: 1, entries: [], notes: "not allowed" }));
+ const r = run(file);
+ assert.strictEqual(r.status, 1, `${r.stdout}\n${r.stderr}`);
+ } finally {
+ rmSync(dir, { recursive: true, force: true });
+ }
+});
diff --git a/tests/risk-surface-guard.test.mjs b/tests/risk-surface-guard.test.mjs
index 7e239304..214f27f9 100644
--- a/tests/risk-surface-guard.test.mjs
+++ b/tests/risk-surface-guard.test.mjs
@@ -27,6 +27,7 @@ import {
RULES,
RULES_BY_ID,
} from "../scripts/lib/risk-surface-rules.mjs";
+import { parseAllowlist, loadAllowlist, isSuppressed, applyAllowlist } from "../scripts/lib/risk-surface-allowlist.mjs";
const here = dirname(fileURLToPath(import.meta.url));
const root = join(here, "..");
@@ -235,6 +236,51 @@ test("scanFile applies a representative rule from each ID family", () => {
}
});
+test("RS106 exempts a small set of benign env var names but still flags others", () => {
+ const benign = scanFile("src/auth-middleware.js", [{ text: 'if (process.env.NODE_ENV === "production") {', line: 1 }]);
+ assert.ok(!benign.some((f) => f.id === "RS106"), "expected NODE_ENV to be exempt");
+
+ const notBenign = scanFile("src/auth-middleware.js", [{ text: "const key = process.env.AUTH_SECRET_KEY;", line: 1 }]);
+ assert.ok(
+ notBenign.some((f) => f.id === "RS106"),
+ "expected a non-exempt var name to still flag",
+ );
+});
+
+test("RS703 catches a black-wrapped multi-line requests call within the widened window", () => {
+ const lines = [
+ { text: "response = requests.get(", line: 1 },
+ { text: " url,", line: 2 },
+ { text: " timeout=30,", line: 3 },
+ { text: " headers=headers,", line: 4 },
+ { text: " verify=False,", line: 5 },
+ { text: ")", line: 6 },
+ ];
+ const findings = scanFile("scripts/client.py", lines);
+ assert.ok(
+ findings.some((f) => f.id === "RS703"),
+ "expected RS703 to catch a call 4 lines away",
+ );
+});
+
+test("RS707 requires a structural egress block or key, not bare prose mentioning the word", () => {
+ const structural = scanFile("k8s/policy.yaml", [
+ { text: "egress:", line: 1 },
+ { text: " - to: [{ ipBlock: { cidr: 0.0.0.0/0 } }]", line: 2 },
+ ]);
+ assert.ok(
+ structural.some((f) => f.id === "RS707"),
+ "expected a real egress: key to still flag",
+ );
+
+ const proseOnly = scanFile("k8s/policy.yaml", [
+ { text: "# ingress rule below; keep separate from our egress policy elsewhere", line: 1 },
+ { text: "ingress:", line: 2 },
+ { text: " - from: [{ ipBlock: { cidr: 0.0.0.0/0 } }]", line: 3 },
+ ]);
+ assert.ok(!proseOnly.some((f) => f.id === "RS707"), "expected prose-only mention of egress not to flag an unrelated ingress rule");
+});
+
test("decideExitCode: pure implementation of the exit-code contract", () => {
const high = [{ severity: "high" }];
const medium = [{ severity: "medium" }];
@@ -265,18 +311,193 @@ test("stripFlags composes --mode with --sarif/--json/positional args in any orde
mode: "fail",
format: "sarif",
positional: ["origin/main"],
+ allowlist: null,
});
assert.deepEqual(stripFlags(["--sarif", "--mode", "fail", "origin/main"]), {
mode: "fail",
format: "sarif",
positional: ["origin/main"],
+ allowlist: null,
});
assert.deepEqual(stripFlags(["--mode", "warn", "--diff", "x.diff", "--json"]), {
mode: "warn",
format: "json",
positional: ["--diff", "x.diff"],
+ allowlist: null,
+ });
+ assert.deepEqual(stripFlags(["origin/main"]), {
+ mode: null,
+ format: "human",
+ positional: ["origin/main"],
+ allowlist: null,
+ });
+});
+
+test("stripFlags extracts --allowlist and composes with other flags in any order", () => {
+ assert.deepEqual(stripFlags(["origin/main", "--allowlist", "my-list.json", "--mode", "fail"]), {
+ mode: "fail",
+ format: "human",
+ positional: ["origin/main"],
+ allowlist: "my-list.json",
+ });
+ assert.deepEqual(stripFlags(["--allowlist", "my-list.json", "--diff", "x.diff", "--json"]), {
+ mode: null,
+ format: "json",
+ positional: ["--diff", "x.diff"],
+ allowlist: "my-list.json",
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Suppression allowlist: pure functions (ADR-047 decision 9)
+// ---------------------------------------------------------------------------
+
+test("parseAllowlist accepts a well-formed document", () => {
+ const doc = JSON.stringify({
+ schema_version: 1,
+ entries: [
+ { id: "a1", rule: "RS101", file: "src/x.js", reason: "r", added_by: "u", added_at: "2026-01-01", expires_at: "2099-01-01" },
+ ],
+ });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(errors, []);
+ assert.equal(entries.length, 1);
+ assert.equal(entries[0].id, "a1");
+});
+
+test("parseAllowlist fails closed on invalid JSON", () => {
+ const { entries, errors } = parseAllowlist("{ not json");
+ assert.deepEqual(entries, []);
+ assert.ok(errors.length > 0);
+ assert.match(errors[0], /invalid JSON/);
+});
+
+test("parseAllowlist fails closed on a document missing expires_at", () => {
+ const doc = JSON.stringify({
+ schema_version: 1,
+ entries: [{ id: "a1", rule: "RS101", file: "src/x.js", reason: "r", added_by: "u", added_at: "2026-01-01" }],
+ });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(entries, []);
+ assert.ok(errors.some((e) => e.includes("expires_at")), errors.join(","));
+});
+
+test("parseAllowlist fails closed on an unknown top-level property (additionalProperties: false)", () => {
+ const doc = JSON.stringify({ schema_version: 1, entries: [], extra: true });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(entries, []);
+ assert.ok(errors.length > 0);
+});
+
+test("parseAllowlist fails closed on a duplicate entry id", () => {
+ const doc = JSON.stringify({
+ schema_version: 1,
+ entries: [
+ { id: "dup", rule: "RS101", file: "a.js", reason: "r", added_by: "u", added_at: "2026-01-01", expires_at: "2099-01-01" },
+ { id: "dup", rule: "RS102", file: "b.js", reason: "r", added_by: "u", added_at: "2026-01-01", expires_at: "2099-01-01" },
+ ],
+ });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(entries, []);
+ assert.ok(errors.some((e) => e.includes('duplicate entry id "dup"')), errors.join(","));
+});
+
+test("parseAllowlist fails closed on an unrecognized rule id", () => {
+ const doc = JSON.stringify({
+ schema_version: 1,
+ entries: [{ id: "a1", rule: "RS999", file: "a.js", reason: "r", added_by: "u", added_at: "2026-01-01", expires_at: "2099-01-01" }],
});
- assert.deepEqual(stripFlags(["origin/main"]), { mode: null, format: "human", positional: ["origin/main"] });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(entries, []);
+ assert.ok(errors.some((e) => e.includes('unknown rule id "RS999"')), errors.join(","));
+});
+
+test("parseAllowlist fails closed when expires_at is before added_at", () => {
+ const doc = JSON.stringify({
+ schema_version: 1,
+ entries: [
+ { id: "a1", rule: "RS101", file: "a.js", reason: "r", added_by: "u", added_at: "2026-06-01", expires_at: "2026-01-01" },
+ ],
+ });
+ const { entries, errors } = parseAllowlist(doc);
+ assert.deepEqual(entries, []);
+ assert.ok(errors.some((e) => e.includes("expires_at is before added_at")), errors.join(","));
+});
+
+test("loadAllowlist on a missing path returns zero entries and zero errors (default, not an error)", () => {
+ const { entries, errors } = loadAllowlist(join(fxRoot, "allowlist", "does-not-exist.json"));
+ assert.deepEqual(entries, []);
+ assert.deepEqual(errors, []);
+});
+
+test("loadAllowlist reads and parses a real fixture file", () => {
+ const { entries, errors } = loadAllowlist(join(fxRoot, "allowlist", "single-valid-entry.json"));
+ assert.deepEqual(errors, []);
+ assert.equal(entries.length, 1);
+ assert.equal(entries[0].id, "fixture-single-valid");
+});
+
+const SAMPLE_ALLOWLIST_ENTRY = {
+ id: "e1",
+ rule: "RS101",
+ file: "src/handler.js",
+ reason: "sample",
+ added_by: "u",
+ added_at: "2026-01-01",
+ expires_at: "2026-06-01",
+};
+
+test("isSuppressed matches on rule and exact file, within expiry", () => {
+ const finding = { id: "RS101", file: "src/handler.js" };
+ assert.equal(isSuppressed(finding, [SAMPLE_ALLOWLIST_ENTRY], "2026-03-01"), SAMPLE_ALLOWLIST_ENTRY);
+});
+
+test("isSuppressed returns null on a rule mismatch", () => {
+ const finding = { id: "RS102", file: "src/handler.js" };
+ assert.equal(isSuppressed(finding, [SAMPLE_ALLOWLIST_ENTRY], "2026-03-01"), null);
+});
+
+test("isSuppressed returns null on a file mismatch", () => {
+ const finding = { id: "RS101", file: "src/other.js" };
+ assert.equal(isSuppressed(finding, [SAMPLE_ALLOWLIST_ENTRY], "2026-03-01"), null);
+});
+
+test("isSuppressed matches a ** glob file pattern", () => {
+ const globEntry = { ...SAMPLE_ALLOWLIST_ENTRY, file: "src/**/*.js" };
+ const finding = { id: "RS101", file: "src/nested/deep/handler.js" };
+ assert.equal(isSuppressed(finding, [globEntry], "2026-03-01"), globEntry);
+});
+
+test("isSuppressed treats expires_at as inclusive: still suppresses on the expiry date itself", () => {
+ const finding = { id: "RS101", file: "src/handler.js" };
+ assert.equal(isSuppressed(finding, [SAMPLE_ALLOWLIST_ENTRY], "2026-06-01"), SAMPLE_ALLOWLIST_ENTRY);
+});
+
+test("isSuppressed does not suppress the day after expiry", () => {
+ const finding = { id: "RS101", file: "src/handler.js" };
+ assert.equal(isSuppressed(finding, [SAMPLE_ALLOWLIST_ENTRY], "2026-06-02"), null);
+});
+
+test("isSuppressed defends against a malformed expires_at bypassing parseAllowlist: never throws, never suppresses", () => {
+ const finding = { id: "RS101", file: "src/handler.js" };
+ const nonsenseDate = { ...SAMPLE_ALLOWLIST_ENTRY, expires_at: "not-a-date" };
+ assert.doesNotThrow(() => isSuppressed(finding, [nonsenseDate], "2026-03-01"));
+ assert.equal(isSuppressed(finding, [nonsenseDate], "2026-03-01"), null);
+ const missingDate = { ...SAMPLE_ALLOWLIST_ENTRY, expires_at: undefined };
+ assert.doesNotThrow(() => isSuppressed(finding, [missingDate], "2026-03-01"));
+ assert.equal(isSuppressed(finding, [missingDate], "2026-03-01"), null);
+});
+
+test("applyAllowlist sets suppressed on a matching finding and leaves every other field untouched", () => {
+ const findings = [
+ { id: "RS101", file: "src/handler.js", severity: "high", extra: "keep-me" },
+ { id: "RS102", file: "src/handler.js", severity: "medium" },
+ ];
+ const out = applyAllowlist(findings, [SAMPLE_ALLOWLIST_ENTRY], "2026-03-01");
+ assert.deepEqual(out[0].suppressed, { entry_id: "e1", reason: "sample" });
+ assert.equal(out[0].extra, "keep-me");
+ assert.equal(out[0].severity, "high");
+ assert.equal(out[1].suppressed, null);
});
test("formatHuman, emitJson, and emitSarif are pure string builders over the same findings", () => {
@@ -410,6 +631,50 @@ test("runs cleanly against this repository's own live diff against origin/main",
const r = spawnSync("node", [guard, "origin/main", "--mode", "warn"], { encoding: "utf8", cwd: root });
assert.ok(r.status === 0 || r.status === 1, `unexpected exit ${r.status}: ${r.stderr}`);
assert.doesNotMatch(r.stderr, /internal error/);
+ // No --allowlist given: this exercises the default-path resolution to
+ // .modonome/risk-surface-allowlist.json, which must load cleanly with zero
+ // warnings against the repo's own real (currently empty) allowlist file.
+ assert.doesNotMatch(r.stderr, /allowlist.*invalid/);
+});
+
+// ---------------------------------------------------------------------------
+// Suppression allowlist: CLI integration (ADR-047 decision 9)
+// ---------------------------------------------------------------------------
+
+const allowlistFixture = (name) => join(fxRoot, "allowlist", name);
+
+test("a matching allowlist entry suppresses a high-severity finding: fail mode exits 0, not 1", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "fail", "--allowlist", allowlistFixture("single-valid-entry.json")]);
+ assert.equal(r.status, 0, r.stdout + r.stderr);
+ assert.match(r.stdout, /PASS: no risk-surface findings\./);
+});
+
+test("an expired allowlist entry does not suppress: fail mode still exits 1", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "fail", "--allowlist", allowlistFixture("expired-entry.json")]);
+ assert.equal(r.status, 1, r.stdout + r.stderr);
+});
+
+test("a malformed allowlist file does not crash the scan: finding stays unsuppressed and stderr warns", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "fail", "--allowlist", allowlistFixture("malformed.json")]);
+ assert.equal(r.status, 1, r.stdout + r.stderr);
+ assert.match(r.stderr, /allowlist.*is invalid/);
+ const json = run(fixture(flagDir, "js-eval.diff"), ["--json", "--allowlist", allowlistFixture("malformed.json")]);
+ assert.equal(JSON.parse(json.stdout).findings[0].suppressed, null);
+});
+
+test("--sarif excludes a suppressed finding while --json on the same input includes it marked", () => {
+ const allowlist = allowlistFixture("single-valid-entry.json");
+ const sarif = JSON.parse(run(fixture(flagDir, "js-eval.diff"), ["--sarif", "--allowlist", allowlist]).stdout);
+ assert.equal(sarif.runs[0].results.length, 0);
+ const json = JSON.parse(run(fixture(flagDir, "js-eval.diff"), ["--json", "--allowlist", allowlist]).stdout);
+ assert.equal(json.findings.length, 1);
+ assert.deepEqual(json.findings[0].suppressed, { entry_id: "fixture-single-valid", reason: "fixture: a single well-formed entry" });
+});
+
+test("formatHuman shows the [SUPPRESSED] marker and the allowlist entry's reason", () => {
+ const r = run(fixture(flagDir, "js-eval.diff"), ["--mode", "fail", "--allowlist", allowlistFixture("single-valid-entry.json")]);
+ assert.match(r.stdout, /\[SUPPRESSED\]/);
+ assert.match(r.stdout, /Suppressed by allowlist entry fixture-single-valid: fixture: a single well-formed entry/);
});
// ---------------------------------------------------------------------------
diff --git a/tests/self-application.test.mjs b/tests/self-application.test.mjs
index 35e4f0fa..13434620 100644
--- a/tests/self-application.test.mjs
+++ b/tests/self-application.test.mjs
@@ -47,6 +47,7 @@ jobs:
- run: node scripts/detect-near-miss.mjs
- run: node scripts/build-policy-attestation.mjs --check
- run: node scripts/risk-surface-guard.mjs origin/main --mode warn
+ - run: node scripts/check-risk-surface-allowlist.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/guard-ratchet.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/check-style.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/check-repo-hygiene.mjs
@@ -55,6 +56,8 @@ jobs:
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/detect-attribution.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/risk-surface-guard.mjs
- run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/risk-surface-rules.mjs
+ - run: git checkout "origin/\${{ github.base_ref }}" -- scripts/lib/risk-surface-allowlist.mjs
+ - run: git checkout "origin/\${{ github.base_ref }}" -- .modonome/risk-surface-allowlist.json
`;
// A minimal safe template config.yaml.
From 18d74361b3f93818e3bf6f0ca2dd1ff507e5a961 Mon Sep 17 00:00:00 2001
From: nateshpp <107772539+nateshpp@users.noreply.github.com>
Date: Tue, 28 Jul 2026 07:19:42 +0000
Subject: [PATCH 3/3] Bump the new Risk Surface Guard SARIF upload to
codeql-action v4
Consistency fix: the gate-integrity SARIF upload two steps above was
already bumped to v4 in a separate PR; this repeats it for the newer
Risk Surface Guard upload step, which didn't exist yet when that bump
landed.
---
.modonome/snapshot/map.json | 2 +-
.modonome/snapshot/map.md | 2 +-
.modonome/snapshot/signature.json | 2 +-
action.yml | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.modonome/snapshot/map.json b/.modonome/snapshot/map.json
index a50397de..dfebf305 100644
--- a/.modonome/snapshot/map.json
+++ b/.modonome/snapshot/map.json
@@ -1 +1 @@
-{"api":[{"anchor":"S:c5854b8940","doc":"Recursively snapshot path -> \"size:sha-like(content)\" for every file.","kind":"function","line":27,"name":"snapshot","path_id":"F:0103cf3d56","signature":"async function snapshot(dir)"},{"anchor":"S:44e7188c1d","doc":"Tiny content hash (FNV-1a): avoids a crypto import and is deterministic.","kind":"function","line":50,"name":"hash","path_id":"F:0103cf3d56","signature":"function hash(buf)"},{"anchor":"S:4ee042ed06","kind":"function","line":59,"name":"makeHostRepo","path_id":"F:0103cf3d56","signature":"async function makeHostRepo()"},{"anchor":"S:08df8d7472","kind":"function","line":70,"name":"runPreflight","path_id":"F:0103cf3d56","signature":"function runPreflight(target)"},{"anchor":"S:c47beeac78","doc":"Normalize a relative import against the importing file's directory, resolving \".\" and \"..\" segments. Returns a posix path with no leading \"./\".","kind":"function","line":11,"name":"normalizeRelative","path_id":"F:015261eab0","signature":"function normalizeRelative(fromPath, module)"},{"anchor":"S:0d7b0da50a","doc":"Resolve a relative import to a repo file, trying common extensions and index files. External and bare imports return null and become no edge.","kind":"function","line":24,"name":"resolveImport","path_id":"F:015261eab0","signature":"function resolveImport(fromPath, module, fileSet)"},{"anchor":"S:c732826ee5","doc":"Build an adjacency map { relPath -> [relPath, ...] } from per-file imports. Only edges that resolve to another repo file are kept.","kind":"function","line":41,"name":"buildImportGraph","path_id":"F:015261eab0","signature":"export function buildImportGraph(perFile, fileSet)"},{"anchor":"S:79144070a6","doc":"Degree centrality: out-edges of a node plus in-edges pointing at it.","kind":"function","line":55,"name":"centrality","path_id":"F:015261eab0","signature":"export function centrality(adj)"},{"anchor":"S:bb578790a3","doc":"PageRank over the import graph. Fixed iteration count keeps it deterministic. Dangling nodes (no out-edges) redistribute their rank uniformly.","kind":"function","line":67,"name":"pagerank","path_id":"F:015261eab0","signature":"export function pagerank(adj, { damping = 0.85, iterations = 40 } = {})"},{"anchor":"S:4d0bae812e","kind":"function","line":91,"name":"round","path_id":"F:015261eab0","signature":"function round(n, places = 6)"},{"anchor":"S:b88ce47ede","doc":"Rank files by a normalized composite of churn, centrality, and PageRank. Returns a sorted list of { path, churn, centrality, pagerank, score }, highest first.","kind":"function","line":98,"name":"attentionRank","path_id":"F:015261eab0","signature":"export function attentionRank(paths, { churn = new Map(), centralityMap = new Map(), pagerankMap = new Map() } = {})"},{"anchor":"S:5ad0c942a1","doc":"Report whether the import graph has a cycle and one example cycle, reusing the shared cycle detector so the snapshot can warn about circular dependencies.","kind":"function","line":117,"name":"findCycle","path_id":"F:015261eab0","signature":"export function findCycle(adj)"},{"anchor":"S:1e6749f65a","kind":"function","line":31,"name":"run","path_id":"F:02a5f8fc55","signature":"function run(env)"},{"anchor":"S:c932c7339f","doc":"Build a minimal repo that satisfies the root allow-list, protected-file manifest, link integrity, and audit-naming checks, so only the ADR-number logic under test can make the run fail or pass.","kind":"function","line":15,"name":"makeMinimalRepo","path_id":"F:0391f3b249","signature":"function makeMinimalRepo()"},{"anchor":"S:0ab594146c","kind":"function","line":33,"name":"runScript","path_id":"F:0391f3b249","signature":"function runScript(tmp)"},{"anchor":"S:689125598d","doc":"A git-init'd variant of makeMinimalRepo(), for the staleness check, which shells out to `git log` and needs a real repository to query.","kind":"function","line":43,"name":"makeMinimalGitRepo","path_id":"F:0391f3b249","signature":"function makeMinimalGitRepo()"},{"anchor":"S:bac2ebbef5","kind":"function","line":53,"name":"gitCommit","path_id":"F:0391f3b249","signature":"function gitCommit(tmp, message)"},{"anchor":"S:cd2e7eba8f","doc":"Commit with an explicit, backdated timestamp, so staleness tests do not depend on same-day wall-clock ordering between setup commits and a `last_reviewed` stamp (git's `--since` treats a bare date as ","kind":"function","line":61,"name":"gitCommitAt","path_id":"F:0391f3b249","signature":"function gitCommitAt(tmp, message, isoDate)"},{"anchor":"S:405ee38bbe","kind":"const","line":67,"name":"CATALOG_PARTIALS","path_id":"F:03f476958e","signature":"export const CATALOG_PARTIALS = ["},{"anchor":"S:949f988c9e","kind":"function","line":10,"name":"makeDb","path_id":"F:044b762a79","signature":"function makeDb(orders = new Map())"},{"anchor":"S:e96fb86528","doc":"Catalog entries for scripts/check-edit-set-compliance.mjs.","kind":"const","line":2,"name":"MESSAGES","path_id":"F:05a0f0d5a5","signature":"export const MESSAGES ="},{"anchor":"S:f8524caefc","kind":"const","line":18,"name":"SEVERITY_RANK","path_id":"F:05bffc70e9","signature":"export const SEVERITY_RANK = { ok: 0, info: 1, attention: 2, blocked: 3 };"},{"anchor":"S:c12913d4da","kind":"function","line":22,"name":"mergeCatalog","path_id":"F:05bffc70e9","signature":"function mergeCatalog(sources)"},{"anchor":"S:4bea381dfd","kind":"const","line":33,"name":"MESSAGES","path_id":"F:05bffc70e9","signature":"export const MESSAGES = mergeCatalog(CATALOG_SOURCES);"},{"anchor":"S:81c9c1291a","kind":"function","line":35,"name":"interpolate","path_id":"F:05bffc70e9","signature":"function interpolate(template, params)"},{"anchor":"S:db0bb71f37","doc":"Clamp a requested severity to an entry's floor. Only ever raises severity toward (never past) the catalog default for non_suppressible entries.","kind":"function","line":41,"name":"clampSeverity","path_id":"F:05bffc70e9","signature":"function clampSeverity(entry, requestedSeverity)"},{"anchor":"S:a79dad6e97","kind":"function","line":48,"name":"loadMessageOverrides","path_id":"F:05bffc70e9","signature":"export function loadMessageOverrides(modonomeDir)"},{"anchor":"S:0044d1a126","doc":"Validate an overrides document (the parsed contents of messages.yaml) against both the JSON schema and the severity-floor rule. Shared by scripts/check-message-catalog-integrity.mjs (CI) and the contr","kind":"function","line":59,"name":"checkOverridesIntegrity","path_id":"F:05bffc70e9","signature":"export function checkOverridesIntegrity(overridesDoc, schema)"},{"anchor":"S:8282a0b575","doc":"Look up a message by id, apply any operator override (clamped to the floor for non_suppressible entries), interpolate {param} tokens, and return the resolved { id, severity, suppressed, message } read","kind":"function","line":85,"name":"formatMessage","path_id":"F:05bffc70e9","signature":"export function formatMessage(id, params = {}, overrides = {})"},{"anchor":"S:6dde857e83","doc":"List every catalog entry with its resolved (override-applied) state, for the control panel's Messages tab.","kind":"function","line":104,"name":"listMessages","path_id":"F:05bffc70e9","signature":"export function listMessages(overrides = {})"},{"anchor":"S:ab3548c3d0","kind":"function","line":16,"name":"baseCfg","path_id":"F:06b982f5a2","signature":"function baseCfg(extra = {})"},{"anchor":"S:0a11409d06","doc":"Full detail for a single work item, as shown in the read-only inspector drawer. * Extends the card summary shape with the fields only needed once someone opens the * item: identities, lease, allowed e","kind":"interface","line":14,"name":"WorkItemDetail","path_id":"F:08064e0c53","signature":"export interface WorkItemDetail extends WorkItemSummary"},{"anchor":"S:6a4d8aa30d","kind":"interface","line":31,"name":"WorkItemDrawerProps","path_id":"F:08064e0c53","signature":"export interface WorkItemDrawerProps"},{"anchor":"S:1e67af68fc","kind":"function","line":52,"name":"Section","path_id":"F:08064e0c53","signature":"function Section({ label, children }: { label: string; children: ReactNode })"},{"anchor":"S:fff471613b","doc":"A read-only inspector for a single work item, presented in the shared `Drawer` * primitive. Lays out status, the maker and checker identities, lease and branch * info, attempt count, the allowed edit ","kind":"function","line":68,"name":"WorkItemDrawer","path_id":"F:08064e0c53","signature":"export function WorkItemDrawer({ item, open, onClose }: WorkItemDrawerProps)"},{"anchor":"S:9f9c07db7d","kind":"function","line":10,"name":"Model","path_id":"F:08577063d4","signature":"export const Model = () => ("},{"anchor":"S:d3f17c584a","kind":"function","line":26,"name":"isSelfGovernance","path_id":"F:08b7435c86","signature":"function isSelfGovernance(dir)"},{"anchor":"S:02e2e85572","kind":"function","line":30,"name":"resolveModonomeDir","path_id":"F:08b7435c86","signature":"function resolveModonomeDir(rawMode, dirParam)"},{"anchor":"S:8097fe47fc","kind":"function","line":40,"name":"readBody","path_id":"F:08b7435c86","signature":"function readBody(req)"},{"anchor":"S:a10a756308","kind":"function","line":59,"name":"sendJson","path_id":"F:08b7435c86","signature":"function sendJson(res, status, body)"},{"anchor":"S:0e6240f5b7","doc":"The single source of truth for \"may a write to this dir proceed\", used both to decide a 403 and to set source.writable, so the two can never drift. Returns the base flag first (off => nothing is writa","kind":"function","line":70,"name":"writeGate","path_id":"F:08b7435c86","signature":"function writeGate(baseWritable, dir)"},{"anchor":"S:b06f3444be","kind":"function","line":86,"name":"stateWithSource","path_id":"F:08b7435c86","signature":"function stateWithSource(baseWritable, dir, mode)"},{"anchor":"S:62210684b4","doc":"Best-effort reachability probe for an OpenAI-compatible endpoint (LM Studio, Ollama, a gateway). Read-only and network-only: it never touches config.yaml, so it needs no write guard. Always resolves (","kind":"function","line":98,"name":"buildModelsUrl","path_id":"F:08b7435c86","signature":"function buildModelsUrl(baseUrl)"},{"anchor":"S:3f9e6b3a7b","kind":"function","line":104,"name":"testConnection","path_id":"F:08b7435c86","signature":"async function testConnection(baseUrl)"},{"anchor":"S:5092562c12","kind":"function","line":130,"name":"modonomeApiPlugin","path_id":"F:08b7435c86","signature":"export function modonomeApiPlugin()"},{"anchor":"S:9b40c124ce","kind":"function","line":17,"name":"baseCfg","path_id":"F:093689bb8e","signature":"function baseCfg(extra = {})"},{"anchor":"S:7078ce1661","kind":"function","line":40,"name":"today","path_id":"F:09ba331878","signature":"function today()"},{"anchor":"S:735c642c3a","doc":"Gather every near-miss across the branch name, commit identities, and commit bodies unique to this branch.","kind":"function","line":46,"name":"collectNearMisses","path_id":"F:09ba331878","signature":"export function collectNearMisses({ branch, commits })"},{"anchor":"S:4358d9c393","doc":"A denylist proposal is per unique (tier, surface, token): the widener proposes adding a token, not fixing N occurrences. Keep the first occurrence as evidence.","kind":"function","line":67,"name":"proposalsFrom","path_id":"F:09ba331878","signature":"export function proposalsFrom(findings)"},{"anchor":"S:b89188d9e3","kind":"function","line":76,"name":"main","path_id":"F:09ba331878","signature":"function main(argv)"},{"anchor":"S:79997ba94d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:09ea014068","signature":"export const MESSAGES ="},{"anchor":"S:b29fc4b0d5","kind":"function","line":3,"name":"ArmEngine","path_id":"F:0a6a758e7d","signature":"export const ArmEngine = () => ("},{"anchor":"S:8cd25e6f09","kind":"type","line":10,"name":"PanelMode","path_id":"F:0a85f3b8e5","signature":"export type PanelMode = \"host\" | \"product\";"},{"anchor":"S:40a4170626","kind":"type","line":11,"name":"ArmingMode","path_id":"F:0a85f3b8e5","signature":"export type ArmingMode = \"disabled\" | \"dry-run\" | \"armed\";"},{"anchor":"S:49f97badd7","kind":"type","line":12,"name":"WorkState","path_id":"F:0a85f3b8e5","signature":"export type WorkState ="},{"anchor":"S:3e9158c80b","kind":"type","line":22,"name":"RiskTier","path_id":"F:0a85f3b8e5","signature":"export type RiskTier = 1 | 2 | 3 | 4;"},{"anchor":"S:86cb290127","doc":"The subject a mode points at: which repo the panel is reading.","kind":"interface","line":25,"name":"Subject","path_id":"F:0a85f3b8e5","signature":"export interface Subject"},{"anchor":"S:a337ae8f0b","doc":"The engine configuration (schemas/config.schema.json), the levers the panel edits.","kind":"interface","line":37,"name":"ModonomeConfig","path_id":"F:0a85f3b8e5","signature":"export interface ModonomeConfig"},{"anchor":"S:577a1daeb3","kind":"type","line":95,"name":"MessageSeverity","path_id":"F:0a85f3b8e5","signature":"export type MessageSeverity = \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:6605365375","doc":"One entry of the built-in message catalog (scripts/lib/messages.mjs), with * this subject's .modonome/messages.yaml overrides already resolved. A * non_suppressible entry's severity/suppressed always ","kind":"interface","line":104,"name":"MessageCatalogEntryVM","path_id":"F:0a85f3b8e5","signature":"export interface MessageCatalogEntryVM"},{"anchor":"S:d22e005d52","doc":"A patch to one message's override, as sent to onSaveMessages. Omitted * fields reset to the catalog default; severity/suppressed are rejected * server-side for a non_suppressible id.","kind":"interface","line":118,"name":"MessageOverridePatch","path_id":"F:0a85f3b8e5","signature":"export interface MessageOverridePatch"},{"anchor":"S:d56c1854d7","doc":"One prerequisite in the armed-mode gate checklist.","kind":"interface","line":125,"name":"ArmingCheck","path_id":"F:0a85f3b8e5","signature":"export interface ArmingCheck"},{"anchor":"S:6bc87187a8","kind":"interface","line":133,"name":"ArmingStatus","path_id":"F:0a85f3b8e5","signature":"export interface ArmingStatus"},{"anchor":"S:a4a9a79fbe","kind":"type","line":140,"name":"WorkItemType","path_id":"F:0a85f3b8e5","signature":"export type WorkItemType = \"fix-issue\" | \"develop-feature\" | \"create-article\" | \"create-plan\" | \"update-docs\" | \"chore\";"},{"anchor":"S:3f93aaa307","doc":"True for any state where a real actor could be actively working the item: * mutating it destructively (delete) needs the lease released first.","kind":"const","line":144,"name":"IN_FLIGHT_STATES","path_id":"F:0a85f3b8e5","signature":"export const IN_FLIGHT_STATES: WorkState[] = [\"claimed\", \"making\", \"checking\", \"rework\", \"merge_ready\", \"merging\"];"},{"anchor":"S:5a49db2766","kind":"interface","line":146,"name":"WorkItemVM","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemVM"},{"anchor":"S:f3e5c99141","kind":"interface","line":172,"name":"LeaseVM","path_id":"F:0a85f3b8e5","signature":"export interface LeaseVM"},{"anchor":"S:dddb39652d","kind":"type","line":179,"name":"GateStatus","path_id":"F:0a85f3b8e5","signature":"export type GateStatus = \"pass\" | \"fail\" | \"flaky\" | \"running\" | \"pending\";"},{"anchor":"S:9bc07de53c","kind":"interface","line":181,"name":"GateVM","path_id":"F:0a85f3b8e5","signature":"export interface GateVM"},{"anchor":"S:126357e421","kind":"interface","line":190,"name":"CostByModel","path_id":"F:0a85f3b8e5","signature":"export interface CostByModel"},{"anchor":"S:ebe2964819","kind":"interface","line":198,"name":"CostVM","path_id":"F:0a85f3b8e5","signature":"export interface CostVM"},{"anchor":"S:72a5c214ac","kind":"interface","line":207,"name":"LearningVM","path_id":"F:0a85f3b8e5","signature":"export interface LearningVM"},{"anchor":"S:e03cf612ca","kind":"interface","line":217,"name":"DecisionVM","path_id":"F:0a85f3b8e5","signature":"export interface DecisionVM"},{"anchor":"S:6ef3b2f2e5","doc":"One commit the metadata-only remediator would rewrite, and why.","kind":"interface","line":227,"name":"RemediationProposalVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationProposalVM"},{"anchor":"S:b41535d6e7","doc":"The armed metadata-only remediator (ADR-035) as a read-only surface plus one owner * lever. `applyEnabled` mirrors the config flag; `ready` is true only when every arming * condition is met, and `bloc","kind":"interface","line":238,"name":"RemediationVM","path_id":"F:0a85f3b8e5","signature":"export interface RemediationVM"},{"anchor":"S:3ad2d564a8","kind":"type","line":247,"name":"AuditKind","path_id":"F:0a85f3b8e5","signature":"export type AuditKind ="},{"anchor":"S:7c6ba2a644","kind":"interface","line":262,"name":"AuditEventVM","path_id":"F:0a85f3b8e5","signature":"export interface AuditEventVM"},{"anchor":"S:19226d4902","kind":"interface","line":269,"name":"ProtectedPathVM","path_id":"F:0a85f3b8e5","signature":"export interface ProtectedPathVM"},{"anchor":"S:61e677ae40","kind":"interface","line":276,"name":"TrendPoint","path_id":"F:0a85f3b8e5","signature":"export interface TrendPoint"},{"anchor":"S:cefb8c3f64","doc":"Where a loaded PanelState actually came from, so the UI never presents demo data as real.","kind":"interface","line":282,"name":"PanelSource","path_id":"F:0a85f3b8e5","signature":"export interface PanelSource"},{"anchor":"S:4a0171ecb5","kind":"interface","line":295,"name":"PanelState","path_id":"F:0a85f3b8e5","signature":"export interface PanelState"},{"anchor":"S:6dcad3cdf1","doc":"Fields a new work item is created with. Always starts in state \"queued\".","kind":"interface","line":331,"name":"NewWorkItemInput","path_id":"F:0a85f3b8e5","signature":"export interface NewWorkItemInput"},{"anchor":"S:7934857ce3","doc":"Safe-to-edit-anytime fields: never state, owner, or lease, since those change only * through the existing lease/transition machinery, never a generic metadata edit.","kind":"interface","line":343,"name":"WorkItemPatch","path_id":"F:0a85f3b8e5","signature":"export interface WorkItemPatch"},{"anchor":"S:a2d9480f78","kind":"interface","line":352,"name":"WriteActions","path_id":"F:0a85f3b8e5","signature":"export interface WriteActions"},{"anchor":"S:6dd199eea1","doc":"Resolve an alias to an active, in-window key entry in the allowlist. `overrides` (from loadMessageOverrides()) is an optional caller-supplied parameter rather than something this function reads itself","kind":"function","line":24,"name":"resolveActiveKey","path_id":"F:0c1c5ad5d9","signature":"export function resolveActiveKey(peerKeys, alias, now = new Date(), overrides = {})"},{"anchor":"S:f3b8628cdb","doc":"Full ordered verification. options.skipContentGate runs only the signature checks (steps 3 to 5), used when the caller already ran the schema and redaction gate.","kind":"function","line":41,"name":"verifyPacket","path_id":"F:0c1c5ad5d9","signature":"export function verifyPacket(packet, peerKeys, { now = new Date(), skipContentGate = false, overrides = {} } = {})"},{"anchor":"S:0af608ade0","kind":"const","line":1,"name":"MESSAGES","path_id":"F:0c731e3460","signature":"export const MESSAGES ="},{"anchor":"S:ee5246d16c","kind":"function","line":14,"name":"generateKeypair","path_id":"F:0cacf66a3b","signature":"export function generateKeypair()"},{"anchor":"S:842e875c5a","doc":"Raw 32-byte public key as base64, accepting either a public or private KeyObject.","kind":"function","line":19,"name":"publicKeyB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyB64(keyObject)"},{"anchor":"S:8a971e3c54","doc":"Public KeyObject from a raw 32-byte base64 public key.","kind":"function","line":26,"name":"publicKeyFromB64","path_id":"F:0cacf66a3b","signature":"export function publicKeyFromB64(b64)"},{"anchor":"S:380b82547c","doc":"Private KeyObject from base64 PKCS8 DER (the env-secret format).","kind":"function","line":32,"name":"privateKeyFromB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyFromB64Pkcs8(b64)"},{"anchor":"S:19e5ddb185","kind":"function","line":36,"name":"privateKeyToB64Pkcs8","path_id":"F:0cacf66a3b","signature":"export function privateKeyToB64Pkcs8(keyObject)"},{"anchor":"S:1c7919b4ea","kind":"function","line":40,"name":"signMessage","path_id":"F:0cacf66a3b","signature":"export function signMessage(message, privateKeyObject)"},{"anchor":"S:fb81ef11a3","kind":"function","line":44,"name":"verifyMessage","path_id":"F:0cacf66a3b","signature":"export function verifyMessage(message, sigB64, publicKeyObject)"},{"anchor":"S:4a08c48993","doc":"Short fingerprint for out-of-band key comparison (ADR-017 enrollment): the first 16 hex characters of sha256 over the raw public key bytes.","kind":"function","line":54,"name":"fingerprint","path_id":"F:0cacf66a3b","signature":"export function fingerprint(pubB64)"},{"anchor":"S:f2e1ea8458","kind":"function","line":16,"name":"deriveMode","path_id":"F:0da05a2a05","signature":"export function deriveMode(config: ModonomeConfig, envArmed: boolean): ArmingMode"},{"anchor":"S:97bc3f0eb4","kind":"function","line":22,"name":"deriveArming","path_id":"F:0da05a2a05","signature":"export function deriveArming("},{"anchor":"S:a3fb13b441","kind":"function","line":4,"name":"Tones","path_id":"F:10e76cfcd3","signature":"export const Tones = () => ("},{"anchor":"S:14ef0a45e8","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1127892e72","signature":"export const MESSAGES ="},{"anchor":"S:a1d4334d94","kind":"function","line":44,"name":"App","path_id":"F:113387361d","signature":"export function App()"},{"anchor":"S:f034e67219","kind":"function","line":41,"name":"normalizeLF","path_id":"F:116adfb9f8","signature":"function normalizeLF(s)"},{"anchor":"S:e23dca26d1","kind":"function","line":50,"name":"stripFlags","path_id":"F:116adfb9f8","signature":"export function stripFlags(argv)"},{"anchor":"S:8fc6479414","kind":"function","line":78,"name":"getDiff","path_id":"F:116adfb9f8","signature":"function getDiff(positional)"},{"anchor":"S:6202790aac","kind":"class","line":109,"name":"UsageError","path_id":"F:116adfb9f8","signature":"class UsageError extends Error {}"},{"anchor":"S:a8ccdc0c7d","kind":"function","line":118,"name":"parseDiff","path_id":"F:116adfb9f8","signature":"export function parseDiff(diffText)"},{"anchor":"S:4295d27685","kind":"function","line":164,"name":"makeFinding","path_id":"F:116adfb9f8","signature":"function makeFinding(rule, file, line, rawText)"},{"anchor":"S:afdc9fa742","kind":"function","line":178,"name":"scanFile","path_id":"F:116adfb9f8","signature":"export function scanFile(filePath, addedLines)"},{"anchor":"S:9435112073","kind":"function","line":200,"name":"scanDiff","path_id":"F:116adfb9f8","signature":"export function scanDiff(diffText)"},{"anchor":"S:34df82b1c2","kind":"function","line":221,"name":"hasHighOrCritical","path_id":"F:116adfb9f8","signature":"function hasHighOrCritical(findings)"},{"anchor":"S:40aaf05c36","doc":"A suppressed finding (allowlist match) never counts toward the exit code, the result verdict, or the finding count in the summary line, even though it stays visible in the output. This is the whole po","kind":"function","line":229,"name":"activeFindings","path_id":"F:116adfb9f8","signature":"function activeFindings(findings)"},{"anchor":"S:672926584c","kind":"function","line":233,"name":"decideExitCode","path_id":"F:116adfb9f8","signature":"export function decideExitCode(mode, findings)"},{"anchor":"S:6117b8ec80","kind":"function","line":238,"name":"decideResult","path_id":"F:116adfb9f8","signature":"export function decideResult(mode, findings)"},{"anchor":"S:74c8951fb9","kind":"function","line":245,"name":"severityToSarifLevel","path_id":"F:116adfb9f8","signature":"export function severityToSarifLevel(severity)"},{"anchor":"S:8b3d7e9050","kind":"function","line":255,"name":"summaryMessage","path_id":"F:116adfb9f8","signature":"function summaryMessage(mode, findings)"},{"anchor":"S:17bc177192","kind":"function","line":267,"name":"formatHuman","path_id":"F:116adfb9f8","signature":"export function formatHuman(findings, { mode })"},{"anchor":"S:82407637b4","kind":"function","line":284,"name":"emitJson","path_id":"F:116adfb9f8","signature":"export function emitJson(findings, { mode })"},{"anchor":"S:38407e52ac","kind":"function","line":292,"name":"emitSarif","path_id":"F:116adfb9f8","signature":"export function emitSarif(findings)"},{"anchor":"S:9f6788d90d","kind":"function","line":336,"name":"runCli","path_id":"F:116adfb9f8","signature":"function runCli()"},{"anchor":"S:670e55d75a","kind":"const","line":10,"name":"CACHE_SCHEMA_VERSION","path_id":"F:119e3c0fce","signature":"export const CACHE_SCHEMA_VERSION = 1;"},{"anchor":"S:31032f0509","doc":"A value safe to pass as a git revision argument: a short-to-full hex SHA. Rejects anything else, in particular a leading \"-\", which git would parse as an option (some git options can read or write fil","kind":"function","line":17,"name":"isPlausibleRevision","path_id":"F:119e3c0fce","signature":"export function isPlausibleRevision(value)"},{"anchor":"S:7762c6d861","kind":"function","line":21,"name":"cachePath","path_id":"F:119e3c0fce","signature":"function cachePath(root)"},{"anchor":"S:59b9039619","doc":"Load the cache for a repo, or null when absent, unreadable, or a different version.","kind":"function","line":28,"name":"loadCache","path_id":"F:119e3c0fce","signature":"export function loadCache(root)"},{"anchor":"S:ba5f7d1ffe","doc":"Persist the cache. entries is { relPath: { hash, symbols, imports, purposeRaw } }.","kind":"function","line":41,"name":"saveCache","path_id":"F:119e3c0fce","signature":"export function saveCache(root, { built_at_head = null, entries = {} })"},{"anchor":"S:ed24428ce0","doc":"The current git HEAD sha for the repo, or null when unavailable.","kind":"function","line":50,"name":"gitHead","path_id":"F:119e3c0fce","signature":"export function gitHead(root)"},{"anchor":"S:236237bc1b","doc":"Strip git's optional quoting from a porcelain path.","kind":"function","line":56,"name":"unquote","path_id":"F:119e3c0fce","signature":"function unquote(p)"},{"anchor":"S:93d0a78f18","doc":"The set of paths that changed since the cache was built: uncommitted work (git status) plus commits since cache.built_at_head. Returns null when git is not usable, which forces a full rebuild.","kind":"function","line":65,"name":"changedPaths","path_id":"F:119e3c0fce","signature":"export function changedPaths(root, cache)"},{"anchor":"S:c3d94f0812","doc":"Pull \"owner/repo\" out of a repository URL such as https://github.com/enumind/modonome(.git). Returns \"\" when it does not parse.","kind":"function","line":32,"name":"parseRepoFromUrl","path_id":"F:128b647d9a","signature":"export function parseRepoFromUrl(url)"},{"anchor":"S:d1b03afffb","doc":"Derive a stable repo label. The generator block credits the tool (generator.name is always \"modonome\"), so the per-repo identity lives in generator.repository. Prefer that, then fall back to the filen","kind":"function","line":41,"name":"deriveRepoName","path_id":"F:128b647d9a","signature":"export function deriveRepoName(att, filename)"},{"anchor":"S:3a57c07db5","doc":"Three-way posture from the attestation posture block.","kind":"function","line":48,"name":"derivePosture","path_id":"F:128b647d9a","signature":"export function derivePosture(posture)"},{"anchor":"S:26df582c22","doc":"Build one row from a filename and its raw text. A parse or shape problem is recorded on the row and reported as a table cell; it never throws, so one bad file cannot crash the whole run.","kind":"function","line":57,"name":"buildRow","path_id":"F:128b647d9a","signature":"export function buildRow(filename, text)"},{"anchor":"S:ba36fd17d6","doc":"Read every *.json file in dir and build a row for each. Files are read once with readFileSync (no separate stat then read, so there is no check-to-use race window). Returns unsorted rows.","kind":"function","line":100,"name":"collectRows","path_id":"F:128b647d9a","signature":"export function collectRows(dir)"},{"anchor":"S:c42dd60d39","doc":"Deterministic order: by repo label, then by filename as a tie-break.","kind":"function","line":126,"name":"sortRows","path_id":"F:128b647d9a","signature":"export function sortRows(rows)"},{"anchor":"S:7619cf060d","kind":"function","line":133,"name":"escapeHtml","path_id":"F:128b647d9a","signature":"function escapeHtml(s)"},{"anchor":"S:7bcf8115de","kind":"function","line":141,"name":"capabilitiesCell","path_id":"F:128b647d9a","signature":"function capabilitiesCell(caps)"},{"anchor":"S:b366c411d2","doc":"Render the sorted rows to a self-contained HTML document. Pure: given the same rows and options it returns the same string.","kind":"function","line":150,"name":"renderHtml","path_id":"F:128b647d9a","signature":"export function renderHtml(rows, options = {})"},{"anchor":"S:5afb2ca954","doc":"Full pipeline: directory to HTML string. Exported for tests.","kind":"function","line":225,"name":"renderLedgerFromDir","path_id":"F:128b647d9a","signature":"export function renderLedgerFromDir(dir, options = {})"},{"anchor":"S:0255163ba3","kind":"function","line":229,"name":"parseArgs","path_id":"F:128b647d9a","signature":"function parseArgs(argv)"},{"anchor":"S:cecb0a4a33","kind":"function","line":248,"name":"main","path_id":"F:128b647d9a","signature":"function main(argv)"},{"anchor":"S:3968554637","kind":"const","line":8,"name":"VOLATILE_FIELDS","path_id":"F:12c7a4e461","signature":"export const VOLATILE_FIELDS = ['id', 'signature'];"},{"anchor":"S:9f7fa8d585","kind":"function","line":10,"name":"packetContent","path_id":"F:12c7a4e461","signature":"export function packetContent(packet)"},{"anchor":"S:a0ea4d9d0f","kind":"function","line":18,"name":"computePacketId","path_id":"F:12c7a4e461","signature":"export function computePacketId(packet)"},{"anchor":"S:d2ef86c19f","kind":"function","line":23,"name":"packetIdMatches","path_id":"F:12c7a4e461","signature":"export function packetIdMatches(packet)"},{"anchor":"S:4700befa2a","kind":"function","line":16,"name":"run","path_id":"F:137056535b","signature":"function run(args = [], env = {})"},{"anchor":"S:bc56c13940","doc":"Restore the committed (current, unsigned) artifact after any test that writes to it, so the suite leaves no drift behind.","kind":"function","line":22,"name":"preservingArtifact","path_id":"F:137056535b","signature":"function preservingArtifact(fn)"},{"anchor":"S:2cd4d9571d","kind":"function","line":189,"name":"withTempFile","path_id":"F:137056535b","signature":"function withTempFile(name, content, fn)"},{"anchor":"S:5708b6bd2b","kind":"function","line":4,"name":"PendingApproval","path_id":"F:13d31b33ea","signature":"export const PendingApproval = () => ("},{"anchor":"S:4f265e8008","kind":"function","line":8,"name":"Approved","path_id":"F:13d31b33ea","signature":"export const Approved = () => ("},{"anchor":"S:93e0292f30","kind":"function","line":12,"name":"Protected","path_id":"F:13d31b33ea","signature":"export const Protected = () => ;"},{"anchor":"S:e80517f20b","kind":"interface","line":6,"name":"ActivationCheck","path_id":"F:14edab923f","signature":"export interface ActivationCheck"},{"anchor":"S:30eded078f","kind":"interface","line":17,"name":"ActivationLadderProps","path_id":"F:14edab923f","signature":"export interface ActivationLadderProps"},{"anchor":"S:73a3da9f65","doc":"The activation ladder: the three-rung progression from Disabled to Dry-run to Armed, * paired with the armed-mode gate checklist. Arming is only allowed when every * prerequisite holds. Items marked o","kind":"function","line":46,"name":"ActivationLadder","path_id":"F:14edab923f","signature":"export function ActivationLadder("},{"anchor":"S:237d74cadf","kind":"function","line":21,"name":"parseScalar","path_id":"F:1575110130","signature":"function parseScalar(raw)"},{"anchor":"S:299c43d83e","kind":"function","line":40,"name":"stripQuotes","path_id":"F:1575110130","signature":"function stripQuotes(s)"},{"anchor":"S:0b7b39d873","doc":"Parse a raw value string from after the colon, handling inline comments and quoted strings. Returns the trimmed scalar text or empty string.","kind":"function","line":49,"name":"extractRawValue","path_id":"F:1575110130","signature":"function extractRawValue(afterColon)"},{"anchor":"S:b4a3093fe9","doc":"Count leading spaces to determine nesting depth.","kind":"function","line":66,"name":"indentOf","path_id":"F:1575110130","signature":"function indentOf(line)"},{"anchor":"S:bec355e18a","doc":"Parse an array of non-empty, non-comment lines into a nested object. Each entry is { indent, key, rawValue, isItem }, where a sequence-item line (\"- value\") has isItem: true and key: null.","kind":"function","line":75,"name":"parseEntries","path_id":"F:1575110130","signature":"function parseEntries(entries, start, minIndent)"},{"anchor":"S:8990e6571f","kind":"function","line":118,"name":"parseFlatYaml","path_id":"F:1575110130","signature":"export function parseFlatYaml(text)"},{"anchor":"S:5bac9ae6d5","kind":"function","line":151,"name":"formatScalarForYaml","path_id":"F:1575110130","signature":"function formatScalarForYaml(value)"},{"anchor":"S:efe9cb11d4","doc":"Patch one or more top-level (zero-indent) scalar keys in a config.yaml's raw text, line by line. Every other line, including every comment, is left untouched, so a hand-written config file survives an","kind":"function","line":162,"name":"patchTopLevelYaml","path_id":"F:1575110130","signature":"export function patchTopLevelYaml(text, patch)"},{"anchor":"S:0b56ac32a5","kind":"const","line":1,"name":"MESSAGES","path_id":"F:179564da6f","signature":"export const MESSAGES ="},{"anchor":"S:1b14fa60f7","kind":"function","line":92,"name":"git","path_id":"F:18f569225a","signature":"function git(args, cwd)"},{"anchor":"S:34df99c630","kind":"function","line":98,"name":"makeGitFixture","path_id":"F:18f569225a","signature":"function makeGitFixture()"},{"anchor":"S:a3cae87964","kind":"function","line":109,"name":"makePlan","path_id":"F:18f569225a","signature":"function makePlan(role, roleDescriptor, transcriptSubdir, extra = {})"},{"anchor":"S:0eec918c49","kind":"function","line":116,"name":"cleanupTranscripts","path_id":"F:18f569225a","signature":"function cleanupTranscripts()"},{"anchor":"S:0064b473e6","kind":"function","line":14,"name":"tmpQueue","path_id":"F:195e9217ca","signature":"function tmpQueue()"},{"anchor":"S:d240732a9d","kind":"function","line":18,"name":"sampleAction","path_id":"F:195e9217ca","signature":"function sampleAction(id, target = \"ci\")"},{"anchor":"S:05a5299b28","kind":"interface","line":5,"name":"ConceptTileProps","path_id":"F:1a137480ae","signature":"export interface ConceptTileProps extends ButtonHTMLAttributes"},{"anchor":"S:14c08c7efc","doc":"A compact, focusable tile naming one engine concept: an icon, its name, and a short * category tag. Renders as a real button so it is keyboard-reachable on its own, meant * to be wrapped in a HoverCar","kind":"function","line":20,"name":"ConceptTile","path_id":"F:1a137480ae","signature":"export function ConceptTile({ icon, label, tag, className, ...rest }: ConceptTileProps)"},{"anchor":"S:76d7b21daf","doc":"Today's real high-water mark is 7 (Arming & Safety, Caps & budget tab). The budget is set a few above that: a real ratchet against regression, not an arbitrary ceiling.","kind":"const","line":18,"name":"MAX_CONTROLS_PER_TAB","path_id":"F:1a19f02364","signature":"export const MAX_CONTROLS_PER_TAB = 10;"},{"anchor":"S:b840cddd67","kind":"function","line":20,"name":"readScreens","path_id":"F:1a19f02364","signature":"function readScreens(root)"},{"anchor":"S:7a05eaea5a","doc":"Every field in config.schema.json must resolve to either a literal reference in a screen (a real control, or read-only display) or a documented exemption in exposure.json. A plain substring search, no","kind":"function","line":34,"name":"auditCoverage","path_id":"F:1a19f02364","signature":"export function auditCoverage(root)"},{"anchor":"S:da2f845458","doc":"Splits a screen's source into one segment per tab (by source order, using the `{tab === \"id\" ?` marker this codebase's tabbed screens consistently use), or a single whole-file segment for screens with","kind":"function","line":57,"name":"splitByTabs","path_id":"F:1a19f02364","signature":"function splitByTabs(text)"},{"anchor":"S:6a7737bb57","kind":"function","line":66,"name":"extractTags","path_id":"F:1a19f02364","signature":"function extractTags(text, tagNames)"},{"anchor":"S:0ac24bec51","doc":"Two checks, both numeric: a screen/tab must not exceed the control-density budget, and every value-entry control (Toggle, NumberField, Slider, Select) must carry a hint. Input is excluded from the hin","kind":"function","line":76,"name":"auditCoherence","path_id":"F:1a19f02364","signature":"export function auditCoherence(root)"},{"anchor":"S:762b3eaf4a","kind":"function","line":17,"name":"Models","path_id":"F:1aa7cf650d","signature":"export const Models = () => ("},{"anchor":"S:8da618623d","kind":"function","line":18,"name":"headSha","path_id":"F:1bc6d1449f","signature":"function headSha()"},{"anchor":"S:fc01241f03","doc":"A config fixture with distinct maker/checker models and a models registry.","kind":"function","line":13,"name":"cfg","path_id":"F:1bcaaff9eb","signature":"function cfg(overrides = {})"},{"anchor":"S:55b15c0abb","doc":"A short, stable id from a string. Hex keeps it deterministic across platforms.","kind":"function","line":9,"name":"short","path_id":"F:1cf31c4792","signature":"function short(text, len = 10)"},{"anchor":"S:2e016b842d","kind":"function","line":13,"name":"fileAnchor","path_id":"F:1cf31c4792","signature":"export function fileAnchor(relPath)"},{"anchor":"S:00db09c5a8","kind":"function","line":17,"name":"symbolAnchor","path_id":"F:1cf31c4792","signature":"export function symbolAnchor(relPath, name)"},{"anchor":"S:ab79b43633","doc":"Build the path dictionary from walked files. Returns { paths, pathIdByPath } where `paths` is the serializable { id -> relPath } map and `pathIdByPath` is the reverse lookup callers use to reference p","kind":"function","line":24,"name":"buildPathDictionary","path_id":"F:1cf31c4792","signature":"export function buildPathDictionary(relPaths)"},{"anchor":"S:63613c3a63","doc":"Build the symbol dictionary from API entries. Each entry carries its anchor, owning path id, name, and line, so an anchor resolves to an exact location.","kind":"function","line":37,"name":"buildSymbolDictionary","path_id":"F:1cf31c4792","signature":"export function buildSymbolDictionary(apiEntries)"},{"anchor":"S:a3ca73d34c","doc":"Lifecycle status of a learning: staged for review, or promoted into a permanent gate.","kind":"type","line":6,"name":"LearningStatus","path_id":"F:1d03291691","signature":"export type LearningStatus = \"staged\" | \"promoted\";"},{"anchor":"S:6cbed7ff26","doc":"Plain data shape for a single learning surfaced by the system. Components in this * package define their own shape rather than importing app-level types, so this * interface is the contract a host app","kind":"interface","line":13,"name":"LearningSummary","path_id":"F:1d03291691","signature":"export interface LearningSummary"},{"anchor":"S:8b9971d92a","kind":"interface","line":30,"name":"LearningCardProps","path_id":"F:1d03291691","signature":"export interface LearningCardProps"},{"anchor":"S:d293a69125","doc":"A card summarizing a single learning the system has surfaced: the lesson learned, * how old it is, what signal or evidence produced it, and its lifecycle status. * Staged learnings offer Promote and P","kind":"function","line":49,"name":"LearningCard","path_id":"F:1d03291691","signature":"export function LearningCard({ learning, onPromote, onPrune }: LearningCardProps)"},{"anchor":"S:14850052c8","kind":"interface","line":6,"name":"TabItem","path_id":"F:1db369d970","signature":"export interface TabItem"},{"anchor":"S:c68bb17ca2","kind":"interface","line":17,"name":"TabsProps","path_id":"F:1db369d970","signature":"export interface TabsProps"},{"anchor":"S:bd1a0a35f8","doc":"An accessible horizontal tab list. Implements the WAI-ARIA tabs pattern: the * container carries `role=\"tablist\"`, each tab carries `role=\"tab\"` and * `aria-selected`, and only the active tab is in th","kind":"function","line":35,"name":"Tabs","path_id":"F:1db369d970","signature":"export function Tabs({ tabs, active, onChange, className }: TabsProps)"},{"anchor":"S:d737cd7277","kind":"function","line":52,"name":"flagValue","path_id":"F:1e5ef6ba70","signature":"function flagValue(argv, name)"},{"anchor":"S:8f93f4689a","doc":"Resolve the full arming posture. Config values are advisory; the MODONOME_ARMED environment variable is authoritative (ADR-004). The capability flag layers ADR-024: even an armed engine will not rewri","kind":"function","line":60,"name":"armState","path_id":"F:1e5ef6ba70","signature":"function armState(root, env = process.env)"},{"anchor":"S:46d884501c","kind":"function","line":75,"name":"armingBlockers","path_id":"F:1e5ef6ba70","signature":"function armingBlockers(arm)"},{"anchor":"S:baa16abe42","kind":"function","line":84,"name":"targetIdentity","path_id":"F:1e5ef6ba70","signature":"function targetIdentity(argv)"},{"anchor":"S:6140d7ae56","kind":"function","line":90,"name":"identityUsable","path_id":"F:1e5ef6ba70","signature":"function identityUsable(id)"},{"anchor":"S:edeb959111","doc":"Gather the branch-unique commit range oldest-first with the fields the applier needs: tree object, first parent, author and committer identity and dates, and raw message. Enforces the protected-histor","kind":"function","line":97,"name":"gatherRange","path_id":"F:1e5ef6ba70","signature":"function gatherRange()"},{"anchor":"S:4bc9723575","doc":"Advisory range for `plan`: tolerant of a missing origin/main so the proposal works in a fresh clone. Newest-first from git log; reversed to oldest-first for stable output.","kind":"function","line":121,"name":"advisoryRange","path_id":"F:1e5ef6ba70","signature":"function advisoryRange()"},{"anchor":"S:59807c1a98","kind":"function","line":134,"name":"buildPlan","path_id":"F:1e5ef6ba70","signature":"function buildPlan(branch, commits, identity)"},{"anchor":"S:2484ffb006","kind":"function","line":142,"name":"printPlan","path_id":"F:1e5ef6ba70","signature":"function printPlan(plan, identity)"},{"anchor":"S:e7f49cafe1","kind":"function","line":168,"name":"isDirtyTracked","path_id":"F:1e5ef6ba70","signature":"function isDirtyTracked()"},{"anchor":"S:e2861b1099","kind":"function","line":173,"name":"rollback","path_id":"F:1e5ef6ba70","signature":"function rollback(savedHead)"},{"anchor":"S:e8b27564c5","doc":"Replay the range from the first changed commit forward, reusing each original tree object so the rewrite is metadata-only. Verifies tree-SHA invariance per commit and rolls back on any failure. Return","kind":"function","line":180,"name":"applyPlan","path_id":"F:1e5ef6ba70","signature":"function applyPlan(commits, plan)"},{"anchor":"S:b97efe3854","kind":"function","line":232,"name":"cmdPlan","path_id":"F:1e5ef6ba70","signature":"function cmdPlan(argv)"},{"anchor":"S:69db4ad7cc","kind":"function","line":244,"name":"cmdApply","path_id":"F:1e5ef6ba70","signature":"function cmdApply(argv, root)"},{"anchor":"S:602e030d27","kind":"function","line":297,"name":"main","path_id":"F:1e5ef6ba70","signature":"function main(argv)"},{"anchor":"S:5a6c3aef24","kind":"class","line":7,"name":"OrderService","path_id":"F:1ecd18c4b9","signature":"export class OrderService"},{"anchor":"S:a2fef04067","kind":"function","line":4,"name":"Budget","path_id":"F:1f40b6eb6e","signature":"export const Budget = () => ("},{"anchor":"S:2ed4ecfad7","kind":"const","line":1,"name":"MESSAGES","path_id":"F:1ff2bf39a4","signature":"export const MESSAGES ="},{"anchor":"S:8c2cd9c54f","doc":"The proposal text is fenced and framed as untrusted data, so a proposal cannot prompt-inject the checker into approving itself. Same hardening as review-diff.mjs.","kind":"function","line":26,"name":"buildProposalReviewPrompt","path_id":"F:2127a8caca","signature":"export function buildProposalReviewPrompt(proposal, checkerModel, authorLabel)"},{"anchor":"S:ebd259dfef","doc":"Resolve the checker and plan its review of a proposal, without calling a model. * * @returns {{ checker: object, authorLabel: string, proposal: string, prompt: string }}","kind":"function","line":43,"name":"planProposalReview","path_id":"F:2127a8caca","signature":"export function planProposalReview(cfg, { proposal, authorLabel = \"an external author\" } = {})"},{"anchor":"S:a1cc5660fe","doc":"A garbled review, or one with no explicit marker, must NOT read as an approval: a proposal is admitted to the backlog only on an explicit APPROVE: yes. Fail closed.","kind":"function","line":56,"name":"parseProposalVerdict","path_id":"F:2127a8caca","signature":"export function parseProposalVerdict(text)"},{"anchor":"S:3fc87c5f7e","doc":"Plan the proposal review and, under execute:true, run the checker on its endpoint. * The live path supports the openai-http transport (a local or free/gateway model), * matching the local-first cost s","kind":"function","line":73,"name":"reviewProposal","path_id":"F:2127a8caca","signature":"export async function reviewProposal(cfg, { proposal, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:537ea4dfe0","kind":"type","line":5,"name":"ToggleTone","path_id":"F:214cc0a5f4","signature":"export type ToggleTone = \"primary\" | \"info\" | \"owner\";"},{"anchor":"S:cd836c2fc7","kind":"interface","line":7,"name":"ToggleProps","path_id":"F:214cc0a5f4","signature":"export interface ToggleProps"},{"anchor":"S:84b00e90de","doc":"An accessible switch for boolean config such as dry_run, auto_merge, or * local_model_only_by_default. Implemented as a `role=\"switch\"` button rather * than a checkbox so the on/off semantics are anno","kind":"function","line":28,"name":"Toggle","path_id":"F:214cc0a5f4","signature":"export function Toggle("},{"anchor":"S:b919653baa","kind":"function","line":44,"name":"DryRun","path_id":"F:2207a6ebce","signature":"export const DryRun = () => ("},{"anchor":"S:ea5d04ea13","kind":"function","line":48,"name":"Armed","path_id":"F:2207a6ebce","signature":"export const Armed = () => ("},{"anchor":"S:e193570e9e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2215d0e1fc","signature":"export const MESSAGES ="},{"anchor":"S:7cd45cbc03","kind":"function","line":62,"name":"formatYamlScalar","path_id":"F:22566cb46e","signature":"function formatYamlScalar(value)"},{"anchor":"S:1c5d801590","doc":"A line-level patch, not a full YAML re-serialize, so every hand-written comment in config.yaml survives an edit made from the panel. Only top-level, zero-indent scalar or array keys are touched here; ","kind":"function","line":70,"name":"patchYamlText","path_id":"F:22566cb46e","signature":"function patchYamlText(text, patch)"},{"anchor":"S:15b3a95566","doc":"Locate a top-level `key:` block-opening line (a zero-indent key whose value is empty, meaning what follows is a nested map) and the half-open [start, end) line range it and its indented content occupy","kind":"function","line":100,"name":"findBlock","path_id":"F:22566cb46e","signature":"function findBlock(lines, key)"},{"anchor":"S:aa8f9a7b3d","doc":"Split a block's interior lines into ordered segments: a real entry (a line at exactly ENTRY_INDENT spaces naming a key, plus every following line indented deeper than that), or \"other\" (blank lines, a","kind":"function","line":122,"name":"captureSegments","path_id":"F:22566cb46e","signature":"function captureSegments(lines, start, end)"},{"anchor":"S:c3a1d0f1a7","kind":"function","line":151,"name":"serializeEntry","path_id":"F:22566cb46e","signature":"function serializeEntry(topKey, entryKey, value)"},{"anchor":"S:af28852c7f","kind":"function","line":169,"name":"deepEqualJson","path_id":"F:22566cb46e","signature":"function deepEqualJson(a, b)"},{"anchor":"S:2eef7d840d","doc":"Reconcile one nested map's block against its new value, entry by entry. An entry present in both, unchanged, is copied verbatim (comments and all); a changed entry is re-serialized (dropping any comme","kind":"function","line":180,"name":"rewriteBlock","path_id":"F:22566cb46e","signature":"function rewriteBlock(lines, topKey, oldValue, newValue)"},{"anchor":"S:b06714d9c5","kind":"function","line":225,"name":"patchConfig","path_id":"F:22566cb46e","signature":"export function patchConfig(modonomeDir, patch)"},{"anchor":"S:8b67ef3e8b","kind":"function","line":266,"name":"workItemFile","path_id":"F:22566cb46e","signature":"function workItemFile(modonomeDir, itemId)"},{"anchor":"S:fd9d32de9a","kind":"function","line":272,"name":"releaseLease","path_id":"F:22566cb46e","signature":"export function releaseLease(modonomeDir, itemId)"},{"anchor":"S:d7086f2a5b","kind":"function","line":300,"name":"loadConfigForValidation","path_id":"F:22566cb46e","signature":"function loadConfigForValidation(modonomeDir)"},{"anchor":"S:f22a53ac17","kind":"function","line":305,"name":"createWorkItem","path_id":"F:22566cb46e","signature":"export function createWorkItem(modonomeDir, input)"},{"anchor":"S:a4e623c70b","doc":"Metadata-only edit: type, assigned_role, allowed_edit_set, gates, max_attempts, and touches_protected_path are safe to change regardless of the item's current state, including in flight, since none of","kind":"function","line":354,"name":"updateWorkItem","path_id":"F:22566cb46e","signature":"export function updateWorkItem(modonomeDir, itemId, patch)"},{"anchor":"S:14cb0e8cbb","doc":"Refuses outright for any in-flight state, regardless of whether its lease has technically expired: an item past \"queued\" represents real record of what happened (a branch, a PR, attempts, a maker iden","kind":"function","line":377,"name":"deleteWorkItem","path_id":"F:22566cb46e","signature":"export function deleteWorkItem(modonomeDir, itemId)"},{"anchor":"S:e152142e8c","doc":"Merge a patch of { id: { severity?, text?, suppressed? } } into .modonome/messages.yaml's overrides map, re-validate against both the schema and the severity-floor rule (the same checkOverridesIntegri","kind":"function","line":399,"name":"patchMessages","path_id":"F:22566cb46e","signature":"export function patchMessages(modonomeDir, patch)"},{"anchor":"S:5b0e153cfb","kind":"function","line":424,"name":"pruneLearning","path_id":"F:22566cb46e","signature":"export function pruneLearning(modonomeDir, lesson)"},{"anchor":"S:a931ad2e62","doc":"Concatenate the committed prompt source files into one searchable string. * @param {string} root repository root that contains the prompts directory * @returns {string} the concatenated committed prom","kind":"function","line":46,"name":"resolvePromptText","path_id":"F:23917c6197","signature":"export function resolvePromptText(root)"},{"anchor":"S:0a5fed1978","doc":"Load every fixture JSON file from a directory. * @param {string} dir directory holding fixture *.json files * @returns {Array} parsed fixture objects, sorted by file name for stable output","kind":"function","line":59,"name":"loadFixtures","path_id":"F:23917c6197","signature":"export function loadFixtures(dir)"},{"anchor":"S:407ded8730","doc":"Evaluate one fixture against the committed prompt text. A fixture is ok only when * every one of its anchors is present, meaning the governing rule that produces its * golden decision still exists in ","kind":"function","line":79,"name":"evaluateFixture","path_id":"F:23917c6197","signature":"export function evaluateFixture(fixture, promptText)"},{"anchor":"S:c2e641f1c8","doc":"Run the whole suite: load fixtures, resolve prompt text, evaluate each. * @param {string} root repository root * @param {string} fixturesDir directory holding fixtures * @returns {{ results: Array<{id","kind":"function","line":106,"name":"runSuite","path_id":"F:23917c6197","signature":"export function runSuite(root, fixturesDir)"},{"anchor":"S:87ceb91d57","kind":"const","line":1,"name":"MESSAGES","path_id":"F:23dbdd7e76","signature":"export const MESSAGES ="},{"anchor":"S:b5883cd7f4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:240ace7a8f","signature":"export const MESSAGES ="},{"anchor":"S:76171943e3","kind":"function","line":7,"name":"canonicalize","path_id":"F:245efb551c","signature":"export function canonicalize(value)"},{"anchor":"S:781c4112a2","doc":"Domain separation tag binds a signature to this packet type and version so a signature over one structure cannot be replayed as another.","kind":"const","line":22,"name":"PACKET_DOMAIN","path_id":"F:245efb551c","signature":"export const PACKET_DOMAIN = 'modonome.knowledge-packet.v1\\n';"},{"anchor":"S:210b0c6999","doc":"The exact bytes a packet signature covers: the domain tag followed by the JCS of the packet with its signature object removed.","kind":"function","line":26,"name":"signedBytes","path_id":"F:245efb551c","signature":"export function signedBytes(packet)"},{"anchor":"S:c44da37a7d","kind":"function","line":12,"name":"Dashboard","path_id":"F:2470e60179","signature":"export const Dashboard = () => ("},{"anchor":"S:7d5af2fca1","kind":"function","line":22,"name":"Staged","path_id":"F:250c8a0d4a","signature":"export const Staged = () => ("},{"anchor":"S:dd05df51d3","kind":"function","line":26,"name":"Promoted","path_id":"F:250c8a0d4a","signature":"export const Promoted = () => ;"},{"anchor":"S:4df7a92e8e","kind":"function","line":15,"name":"registerAdapter","path_id":"F:2554ddd30c","signature":"export function registerAdapter(adapter)"},{"anchor":"S:a07487517b","doc":"Resolve the adapter for a path by extension, defaulting to the generic fallback.","kind":"function","line":25,"name":"getAdapter","path_id":"F:2554ddd30c","signature":"export function getAdapter(relPath)"},{"anchor":"S:ec18e42e1a","doc":"Extract from one file, guarding against any adapter error so a single bad file never aborts a whole snapshot.","kind":"function","line":32,"name":"extractFile","path_id":"F:2554ddd30c","signature":"export function extractFile(relPath, source)"},{"anchor":"S:2fbd29545b","kind":"function","line":42,"name":"nestedMapChanged","path_id":"F:25e649633c","signature":"function nestedMapChanged(a: Record | undefined, b: Record | undefined): boolean"},{"anchor":"S:ea841eb82d","kind":"function","line":49,"name":"diffConfig","path_id":"F:25e649633c","signature":"export function diffConfig(base: ModonomeConfig, edited: ModonomeConfig): Partial"},{"anchor":"S:4426823827","kind":"interface","line":5,"name":"NavItem","path_id":"F:268769c4a6","signature":"export interface NavItem"},{"anchor":"S:a4155f5067","kind":"interface","line":16,"name":"AppShellProps","path_id":"F:268769c4a6","signature":"export interface AppShellProps"},{"anchor":"S:24b854ce78","doc":"The Modonome brand mark: a teal ring with a check on the dark ground.","kind":"function","line":36,"name":"BrandMark","path_id":"F:268769c4a6","signature":"function BrandMark()"},{"anchor":"S:5154763a93","doc":"The application frame: a fixed sidebar of primary navigation, a sticky top bar for * the mode switch and arming status, and a scrollable content column. It establishes * the mdn-root wrapper (the dark","kind":"function","line":60,"name":"AppShell","path_id":"F:268769c4a6","signature":"export function AppShell("},{"anchor":"S:33dfee21e3","kind":"const","line":1,"name":"MESSAGES","path_id":"F:2715f09f24","signature":"export const MESSAGES ="},{"anchor":"S:df7e6c1db0","kind":"function","line":4,"name":"Disabled","path_id":"F:28b7af3c53","signature":"export const Disabled = () => ;"},{"anchor":"S:36be7c4ac5","kind":"function","line":6,"name":"DryRun","path_id":"F:28b7af3c53","signature":"export const DryRun = () => ;"},{"anchor":"S:813f68335e","kind":"function","line":8,"name":"Armed","path_id":"F:28b7af3c53","signature":"export const Armed = () => ;"},{"anchor":"S:28578fa81a","kind":"function","line":10,"name":"Large","path_id":"F:28b7af3c53","signature":"export const Large = () => ;"},{"anchor":"S:bd9f62784d","doc":"CP-04: Scope creep. The work item's allowed_edit_set is test-only, but the diff also touches a CI workflow file, lowering a coverage threshold there. A checker that only reads the rationale and skims ","kind":"const","line":5,"name":"scenario","path_id":"F:28f278b1d9","signature":"export const scenario ="},{"anchor":"S:d595535449","kind":"function","line":9,"name":"names","path_id":"F:2a74ae3f05","signature":"function names(result)"},{"anchor":"S:a5baaff840","kind":"function","line":12,"name":"modules","path_id":"F:2a74ae3f05","signature":"function modules(result)"},{"anchor":"S:b9942b1651","kind":"function","line":11,"name":"runRatchet","path_id":"F:2b49c74e74","signature":"function runRatchet(diffFile)"},{"anchor":"S:015c572711","doc":"Hash raw file bytes (Buffer or string) into a prefixed digest.","kind":"function","line":9,"name":"hashFileContent","path_id":"F:2b9c43b0ca","signature":"export function hashFileContent(bytes)"},{"anchor":"S:b926c18911","doc":"Hash an arbitrary string, used for oversized or unreadable files where content is represented by a stable stand-in rather than its bytes.","kind":"function","line":15,"name":"hashString","path_id":"F:2b9c43b0ca","signature":"export function hashString(text)"},{"anchor":"S:a320bea4da","doc":"Build a Merkle tree from file leaves. `entries` is [{ relPath, hash }]. Returns { root, nodes } where nodes maps every directory path (root is \".\") to its hash.","kind":"function","line":21,"name":"buildMerkleTree","path_id":"F:2b9c43b0ca","signature":"export function buildMerkleTree(entries)"},{"anchor":"S:85c852fd1a","doc":"File-level diff between two { relPath -> hash } maps. Returns sorted lists of added, removed, and changed paths. Directory node hashes (from buildMerkleTree) let a caller skip re-extracting an unchang","kind":"function","line":52,"name":"diffMerkle","path_id":"F:2b9c43b0ca","signature":"export function diffMerkle(prevFiles, nextFiles)"},{"anchor":"S:ad4edf7e81","kind":"function","line":4,"name":"test_total_sums_prices","path_id":"F:2c2cc77861","signature":"def test_total_sums_prices()"},{"anchor":"S:54d2db3f99","doc":"Test discount with 0% - should return full amount. Note: This covers only the zero-discount case. The function should be tested with non-zero discounts (10%, 50%, etc.) to verify correct discount calc","kind":"function","line":8,"name":"test_apply_discount_zero_percent","path_id":"F:2c2cc77861","signature":"def test_apply_discount_zero_percent()"},{"anchor":"S:93fa315ac7","kind":"function","line":48,"name":"fail","path_id":"F:2d4c555ba1","signature":"function fail(code, message)"},{"anchor":"S:8252cf2ba8","kind":"function","line":52,"name":"warn","path_id":"F:2d4c555ba1","signature":"function warn(code, message)"},{"anchor":"S:003e6c53c4","kind":"function","line":56,"name":"info","path_id":"F:2d4c555ba1","signature":"function info(code, message)"},{"anchor":"S:5ef7e9a80c","doc":"Build the review prompt. The diff is fenced and explicitly framed as untrusted data, never as instructions, so a change cannot prompt-inject the checker into approving itself (the new attack surface a","kind":"function","line":33,"name":"buildReviewPrompt","path_id":"F:2d6ef08990","signature":"export function buildReviewPrompt(diff, checkerModel, authorLabel)"},{"anchor":"S:d5a9bb4227","kind":"function","line":47,"name":"capDiff","path_id":"F:2d6ef08990","signature":"function capDiff(diff)"},{"anchor":"S:fb6bf396bc","doc":"Resolve the checker and plan its review of a diff, without calling any model. * Enforces checker independence: when the change's maker model is known and distinct * models are required, the checker mu","kind":"function","line":61,"name":"planReview","path_id":"F:2d6ef08990","signature":"export function planReview(cfg, { diff, makerModel = null, authorLabel = \"an external author\" } = {})"},{"anchor":"S:9ab63d4bb2","doc":"Extract a coarse structured verdict from the checker's free text. Deliberately simple: the summary is the first line, REQUEST_CHANGES drives the requestChanges flag. A missing marker is treated as \"no","kind":"function","line":83,"name":"parseVerdict","path_id":"F:2d6ef08990","signature":"export function parseVerdict(text)"},{"anchor":"S:bca7722767","doc":"Plan the review and, under execute:true, run the checker on its configured endpoint. * The spike's live path supports the openai-http transport (a local or free/gateway * model, matching the local-fir","kind":"function","line":100,"name":"reviewDiff","path_id":"F:2d6ef08990","signature":"export async function reviewDiff(cfg, { diff, makerModel, authorLabel, execute = false } = {}, deps = {})"},{"anchor":"S:568ac62670","doc":"--- CLI ---------------------------------------------------------------------","kind":"function","line":124,"name":"parseArgs","path_id":"F:2d6ef08990","signature":"function parseArgs(argv)"},{"anchor":"S:f12376c7b1","kind":"function","line":136,"name":"readDiff","path_id":"F:2d6ef08990","signature":"function readDiff(path)"},{"anchor":"S:2d24ebcbdf","doc":"A markdown block for a human, and for GitHub Actions the same block lands in the job summary when the workflow redirects stdout to $GITHUB_STEP_SUMMARY.","kind":"function","line":143,"name":"renderReport","path_id":"F:2d6ef08990","signature":"function renderReport({ plan, executed, review })"},{"anchor":"S:118e66be10","doc":"Minimal argv helper shared by scripts that take `--flag value` pairs.","kind":"function","line":2,"name":"flagValue","path_id":"F:2d93cea2d4","signature":"export function flagValue(argv, name)"},{"anchor":"S:4bacff1244","kind":"function","line":15,"name":"fileExists","path_id":"F:2e327963ed","signature":"function fileExists(root, ...candidates)"},{"anchor":"S:41050d03a4","kind":"function","line":19,"name":"readIfExists","path_id":"F:2e327963ed","signature":"function readIfExists(root, rel)"},{"anchor":"S:1be3814c77","kind":"function","line":24,"name":"listWorkflows","path_id":"F:2e327963ed","signature":"function listWorkflows(root)"},{"anchor":"S:8f1da92228","doc":"Observe concrete facts about a repository. Pure with respect to its inputs: it only reads the filesystem under root and returns a plain object.","kind":"function","line":32,"name":"detectRepoFacts","path_id":"F:2e327963ed","signature":"export function detectRepoFacts(root)"},{"anchor":"S:74bea9ecdf","doc":"A criterion entry: a stable id, the framework and level, whether the observed facts satisfy it, and the evidence or remediation note.","kind":"function","line":59,"name":"criterion","path_id":"F:2e327963ed","signature":"function criterion(id, framework, level, met, evidence)"},{"anchor":"S:8e94f927e1","doc":"Map observed facts to criteria across the supported frameworks. Pure.","kind":"function","line":64,"name":"mapToCriteria","path_id":"F:2e327963ed","signature":"export function mapToCriteria(facts)"},{"anchor":"S:a0db477c6e","kind":"function","line":90,"name":"summarize","path_id":"F:2e327963ed","signature":"export function summarize(criteria)"},{"anchor":"S:f93b3b8c7c","kind":"function","line":95,"name":"buildEvidence","path_id":"F:2e327963ed","signature":"export function buildEvidence(root, generatedAt)"},{"anchor":"S:43f1c85009","kind":"function","line":108,"name":"renderMarkdown","path_id":"F:2e327963ed","signature":"export function renderMarkdown(evidence)"},{"anchor":"S:b6efca77f5","kind":"function","line":17,"name":"basename","path_id":"F:2f3e98ab2c","signature":"function basename(path)"},{"anchor":"S:e2afc6b75b","kind":"function","line":44,"name":"isContentExempt","path_id":"F:2f3e98ab2c","signature":"export function isContentExempt(path)"},{"anchor":"S:1562160a7c","kind":"function","line":48,"name":"isJsTsScope","path_id":"F:2f3e98ab2c","signature":"export function isJsTsScope(path)"},{"anchor":"S:c0981a3461","kind":"function","line":52,"name":"isPythonScope","path_id":"F:2f3e98ab2c","signature":"export function isPythonScope(path)"},{"anchor":"S:4195e187b2","kind":"function","line":56,"name":"isWorkflowScope","path_id":"F:2f3e98ab2c","signature":"export function isWorkflowScope(path)"},{"anchor":"S:732a1c21fe","kind":"function","line":63,"name":"isDockerComposeScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerComposeScope(path)"},{"anchor":"S:d25b3fbe33","kind":"function","line":68,"name":"isDockerfileScope","path_id":"F:2f3e98ab2c","signature":"export function isDockerfileScope(path)"},{"anchor":"S:55386d6b24","kind":"function","line":73,"name":"isK8sScope","path_id":"F:2f3e98ab2c","signature":"export function isK8sScope(path)"},{"anchor":"S:2216bfd660","kind":"function","line":79,"name":"isTerraformScope","path_id":"F:2f3e98ab2c","signature":"export function isTerraformScope(path)"},{"anchor":"S:f88ca29ea3","kind":"function","line":90,"name":"isBroadScope","path_id":"F:2f3e98ab2c","signature":"export function isBroadScope(path)"},{"anchor":"S:823d7fa306","kind":"const","line":100,"name":"PROTECTED_PATH_GLOBS","path_id":"F:2f3e98ab2c","signature":"export const PROTECTED_PATH_GLOBS = ["},{"anchor":"S:2dc33a851f","kind":"function","line":120,"name":"globToRegExp","path_id":"F:2f3e98ab2c","signature":"export function globToRegExp(glob)"},{"anchor":"S:5e20ef9f71","kind":"function","line":132,"name":"matchesProtectedPath","path_id":"F:2f3e98ab2c","signature":"export function matchesProtectedPath(path)"},{"anchor":"S:bb036fe763","kind":"function","line":144,"name":"stripSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripSameLineNoise(rawLine)"},{"anchor":"S:7d38304e55","kind":"function","line":173,"name":"stripPythonSameLineNoise","path_id":"F:2f3e98ab2c","signature":"export function stripPythonSameLineNoise(line)"},{"anchor":"S:cf9f3a025e","doc":"Simple \"#\" to end of line stripper for YAML and shell-like formats. Not quote-aware (a \"#\" inside a quoted YAML string is still treated as a comment start) -- an accepted simplification, matching the ","kind":"function","line":199,"name":"stripHashComment","path_id":"F:2f3e98ab2c","signature":"export function stripHashComment(line)"},{"anchor":"S:d9eda62ca5","kind":"function","line":205,"name":"stripForScope","path_id":"F:2f3e98ab2c","signature":"export function stripForScope(path, line)"},{"anchor":"S:e4bb79a957","kind":"function","line":219,"name":"redactMatchedText","path_id":"F:2f3e98ab2c","signature":"export function redactMatchedText(text, opts = {})"},{"anchor":"S:ec6c0b3d73","kind":"const","line":250,"name":"RULES","path_id":"F:2f3e98ab2c","signature":"export const RULES = ["},{"anchor":"S:02759ae11a","kind":"const","line":973,"name":"RULES_BY_ID","path_id":"F:2f3e98ab2c","signature":"export const RULES_BY_ID = new Map(RULES.map((r) => [r.id, r]));"},{"anchor":"S:c504685956","kind":"interface","line":4,"name":"EmptyStateProps","path_id":"F:2f6c42c5ee","signature":"export interface EmptyStateProps"},{"anchor":"S:80e9a1f555","doc":"Calm, muted placeholder for a screen or panel that has no content yet. Use for * empty queues, empty search results, or a fresh workspace before any work items * exist. Centered and low-emphasis so it","kind":"function","line":20,"name":"EmptyState","path_id":"F:2f6c42c5ee","signature":"export function EmptyState({ title, message, icon = \"queue\", action }: EmptyStateProps)"},{"anchor":"S:baacff5701","kind":"interface","line":33,"name":"LoadingStateProps","path_id":"F:2f6c42c5ee","signature":"export interface LoadingStateProps"},{"anchor":"S:0a9b63cb4b","doc":"Centered spinner with a label, used while a screen or panel is fetching data. * The spinner is a decorative rotating ring; the label carries the accessible * status via `role=\"status\"` so assistive te","kind":"function","line":44,"name":"LoadingState","path_id":"F:2f6c42c5ee","signature":"export function LoadingState({ label = \"Loading\" }: LoadingStateProps)"},{"anchor":"S:9382da6a24","kind":"interface","line":53,"name":"ErrorStateProps","path_id":"F:2f6c42c5ee","signature":"export interface ErrorStateProps"},{"anchor":"S:78e9af551d","doc":"Danger-toned placeholder for a screen or panel that failed to load. Pairs the * danger color with an alert icon and text so the failure is never color-only. * Use `role=\"alert\"` semantics are carried ","kind":"function","line":68,"name":"ErrorState","path_id":"F:2f6c42c5ee","signature":"export function ErrorState({ title = \"Something went wrong\", message, action }: ErrorStateProps)"},{"anchor":"S:79676d74df","kind":"interface","line":81,"name":"PermissionDeniedStateProps","path_id":"F:2f6c42c5ee","signature":"export interface PermissionDeniedStateProps"},{"anchor":"S:3800b0c645","doc":"Owner-toned placeholder shown when the current actor lacks the role needed to * view or act on a screen. Pairs the owner color with a lock icon and text so the * restriction is never color-only.","kind":"function","line":95,"name":"PermissionDeniedState","path_id":"F:2f6c42c5ee","signature":"export function PermissionDeniedState("},{"anchor":"S:fc6f0e771f","kind":"type","line":5,"name":"StatusPillTone","path_id":"F:2fc610bd94","signature":"export type StatusPillTone = \"neutral\" | \"ok\" | \"info\" | \"attention\" | \"blocked\";"},{"anchor":"S:0518e5f603","kind":"type","line":6,"name":"StatusPillSize","path_id":"F:2fc610bd94","signature":"export type StatusPillSize = \"sm\" | \"md\";"},{"anchor":"S:c850118bb2","kind":"interface","line":8,"name":"StatusPillProps","path_id":"F:2fc610bd94","signature":"export interface StatusPillProps extends HTMLAttributes"},{"anchor":"S:eb647d4678","doc":"A compact rounded status indicator. Pairs a tinted background and border with the * tone's color, and always renders its label text (plus an optional icon or dot) so * the status reads correctly even ","kind":"function","line":27,"name":"StatusPill","path_id":"F:2fc610bd94","signature":"export function StatusPill("},{"anchor":"S:35a01a919e","doc":"The role's primary model: an explicit `model`, else the head of its prioritized `models` fallback list, else the role default. Keeping `model` authoritative when present preserves every existing confi","kind":"function","line":45,"name":"primaryModel","path_id":"F:304ce7b89d","signature":"function primaryModel(roleCfg, roleDefaults)"},{"anchor":"S:0713a27a1f","kind":"function","line":51,"name":"resolveRole","path_id":"F:304ce7b89d","signature":"export function resolveRole(cfg, role)"},{"anchor":"S:433f196465","doc":"Resolve a role's prioritized model list into an ordered array of fully-resolved model descriptors, highest priority first. Source is roleCfg.models when present, else the single primary model, so a ro","kind":"function","line":85,"name":"resolveRoleModelChain","path_id":"F:304ce7b89d","signature":"export function resolveRoleModelChain(cfg, role)"},{"anchor":"S:5aed523637","doc":"Pick the first model in a chain that is affordable under the daily budget, so a prioritized list falls back from a paid frontier choice to a free or local one when no budget is set. A local or free mo","kind":"function","line":108,"name":"selectUsableModel","path_id":"F:304ce7b89d","signature":"export function selectUsableModel(chain, { budgetUsdPerDay = 0 } = {})"},{"anchor":"S:a2d5fcb920","doc":"The integrity surface: the deterministic CI gates every change must pass, the * protected paths that require explicit owner approval, and the separation-of-duties * contract (distinct maker, checker, ","kind":"function","line":13,"name":"GatesScreen","path_id":"F:304fa8ef33","signature":"export function GatesScreen({ state }: { state: PanelState })"},{"anchor":"S:b6cbeed65d","kind":"const","line":1,"name":"MESSAGES","path_id":"F:313bcfac46","signature":"export const MESSAGES ="},{"anchor":"S:6425f5a6c7","kind":"function","line":10,"name":"WithLeases","path_id":"F:31658eff0b","signature":"export const WithLeases = () => {}} />;"},{"anchor":"S:618d055a7c","doc":"Dependency-free signature extractor for Python. It captures top-level def and class declarations (async included), their leading triple-quoted docstring, and import edges. Bodies are never included. e","kind":"function","line":5,"name":"clean","path_id":"F:3213d03b72","signature":"function clean(text)"},{"anchor":"S:37c1996b57","kind":"function","line":10,"name":"signature","path_id":"F:3213d03b72","signature":"function signature(line)"},{"anchor":"S:1bafda617f","doc":"The docstring is the first triple-quoted string on the line(s) after a def/class.","kind":"function","line":15,"name":"docBelow","path_id":"F:3213d03b72","signature":"function docBelow(lines, defIndex)"},{"anchor":"S:82727ee8e7","kind":"function","line":35,"name":"collectImports","path_id":"F:3213d03b72","signature":"function collectImports(trimmed, lineNo, out)"},{"anchor":"S:aaa1eac555","kind":"const","line":47,"name":"adapter","path_id":"F:3213d03b72","signature":"export const adapter ="},{"anchor":"S:a63cef8ef8","kind":"function","line":4,"name":"Armed","path_id":"F:3319e5c923","signature":"export const Armed = () => ("},{"anchor":"S:e25d17a09c","kind":"function","line":17,"name":"SafeDefaults","path_id":"F:3319e5c923","signature":"export const SafeDefaults = () => ("},{"anchor":"S:457f8a5e17","doc":"Governed Remediation (ADR-035) apply-path refusals. All non_suppressible: each guards the metadata-only rewrite's safety invariants (arming, branch protection, clean tree, usable identity, provable hi","kind":"const","line":4,"name":"MESSAGES","path_id":"F:33c4d744f3","signature":"export const MESSAGES ="},{"anchor":"S:52027883f7","doc":"parseAllowlist(text) -> { entries, errors }. Fail-closed is guaranteed at this boundary: whenever errors is non-empty, entries is always []. Callers never need to remember to check errors before trust","kind":"function","line":24,"name":"parseAllowlist","path_id":"F:33ffae019c","signature":"export function parseAllowlist(text)"},{"anchor":"S:8c5294d2ea","doc":"loadAllowlist(path) -> { entries, errors }. A missing file is the default, backward-compatible state (zero suppressions), never an error.","kind":"function","line":49,"name":"loadAllowlist","path_id":"F:33ffae019c","signature":"export function loadAllowlist(path)"},{"anchor":"S:27874d43ac","doc":"isSuppressed(finding, entries, today) -> the matching entry, or null. `today` is a \"YYYY-MM-DD\" string passed explicitly by the caller (never read from the system clock in here), so this stays determi","kind":"function","line":62,"name":"isSuppressed","path_id":"F:33ffae019c","signature":"export function isSuppressed(finding, entries, today)"},{"anchor":"S:f4e42f5cd6","doc":"applyAllowlist(findings, entries, today) -> findings with a new `suppressed` field on each ({entry_id, reason} or null). Every other field is untouched.","kind":"function","line":75,"name":"applyAllowlist","path_id":"F:33ffae019c","signature":"export function applyAllowlist(findings, entries, today)"},{"anchor":"S:4b38793395","doc":"CP-05: Negative control. A genuinely correct, well-scoped test addition with no planted defect: real bug fix in the source, a real assertion that verifies it, no scope creep. A checker with a high fal","kind":"const","line":8,"name":"scenario","path_id":"F:34ca4e55d1","signature":"export const scenario ="},{"anchor":"S:f794e6adf4","kind":"function","line":6,"name":"typeOf","path_id":"F:34cb2b6c48","signature":"function typeOf(value)"},{"anchor":"S:0768a4cf0f","kind":"function","line":13,"name":"matchesType","path_id":"F:34cb2b6c48","signature":"function matchesType(value, type)"},{"anchor":"S:52913852e3","kind":"function","line":22,"name":"validate","path_id":"F:34cb2b6c48","signature":"export function validate(schema, value, path = \"$\", errors = [])"},{"anchor":"S:4b7a72e608","kind":"type","line":4,"name":"Role","path_id":"F:35c6d59157","signature":"export type Role ="},{"anchor":"S:fdc2a33d21","kind":"type","line":16,"name":"RoleBadgeSize","path_id":"F:35c6d59157","signature":"export type RoleBadgeSize = \"sm\" | \"md\";"},{"anchor":"S:e3f95000e0","kind":"interface","line":60,"name":"RoleBadgeProps","path_id":"F:35c6d59157","signature":"export interface RoleBadgeProps"},{"anchor":"S:301cb496d5","doc":"A labeled chip identifying a governance actor or role, pairing an icon with the * human-readable name. The four core review actors (maker, checker, merge authority, * owner) get distinct accent colors","kind":"function","line":72,"name":"RoleBadge","path_id":"F:35c6d59157","signature":"export function RoleBadge({ role, size = \"md\" }: RoleBadgeProps)"},{"anchor":"S:35902c8cc1","kind":"const","line":1,"name":"MESSAGES","path_id":"F:35d4a12b63","signature":"export const MESSAGES ="},{"anchor":"S:61ec9209fc","kind":"function","line":22,"name":"matchSymbol","path_id":"F:36419aa427","signature":"function matchSymbol(trimmed)"},{"anchor":"S:500f4c1cd3","kind":"function","line":30,"name":"cleanSignature","path_id":"F:36419aa427","signature":"function cleanSignature(trimmed)"},{"anchor":"S:3602dcc44c","kind":"function","line":37,"name":"cleanDoc","path_id":"F:36419aa427","signature":"function cleanDoc(text)"},{"anchor":"S:df1472b647","kind":"function","line":47,"name":"docAbove","path_id":"F:36419aa427","signature":"function docAbove(lines, index)"},{"anchor":"S:ac015d1f81","kind":"function","line":67,"name":"collectImports","path_id":"F:36419aa427","signature":"function collectImports(trimmed, lineNo)"},{"anchor":"S:70c4ff437c","kind":"const","line":80,"name":"adapter","path_id":"F:36419aa427","signature":"export const adapter ="},{"anchor":"S:65d6e9b42e","kind":"function","line":112,"name":"dedupeImports","path_id":"F:36419aa427","signature":"function dedupeImports(imports)"},{"anchor":"S:442c9dff6c","kind":"function","line":5,"name":"makeGateway","path_id":"F:373a946d5c","signature":"function makeGateway()"},{"anchor":"S:af1450421c","doc":"Classify a role's model endpoint into a coarse reachability descriptor: kind: \"local\" self-hosted / private-host endpoint (Ollama, llama.cpp) kind: \"github\" the github-models provider (needs models:re","kind":"function","line":24,"name":"classifyEndpoint","path_id":"F:37f4a5c04e","signature":"export function classifyEndpoint(role)"},{"anchor":"S:cbbe6a270b","doc":"A base_url points at a private/self-hosted host when its hostname is localhost, a loopback address, a *.local mDNS name, or an RFC1918 range.","kind":"function","line":38,"name":"isPrivateHost","path_id":"F:37f4a5c04e","signature":"function isPrivateHost(baseUrl)"},{"anchor":"S:ff45c441d1","doc":"Decide whether a runner target can reach a role's endpoint. A target declares * its reach with optional fields on its config entry: * reachable_providers: provider names it can call (for example [\"loc","kind":"function","line":67,"name":"canReach","path_id":"F:37f4a5c04e","signature":"export function canReach(target, roleEndpoint)"},{"anchor":"S:55ee648216","doc":"Resolve the required execution target (environment id) for a role's model * endpoint. Reads cfg.runners and returns the first target that both declares an * environment and can reach the endpoint, pre","kind":"function","line":97,"name":"resolveExecutionTarget","path_id":"F:37f4a5c04e","signature":"export function resolveExecutionTarget(role, cfg, overrides = {})"},{"anchor":"S:2a28972ca4","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3835919e8e","signature":"export const MESSAGES ="},{"anchor":"S:a9b3acb352","kind":"function","line":16,"name":"writeRunLog","path_id":"F:3b382f95c0","signature":"function writeRunLog(runsDir, command, payload)"},{"anchor":"S:4118076b3e","kind":"function","line":29,"name":"pad","path_id":"F:3b382f95c0","signature":"function pad(s, n) { return String(s).padEnd(n); }"},{"anchor":"S:0ba2f17fcf","kind":"function","line":30,"name":"rpad","path_id":"F:3b382f95c0","signature":"function rpad(s, n) { return String(s).padStart(n); }"},{"anchor":"S:02e9b6beea","kind":"function","line":32,"name":"parseMetrics","path_id":"F:3b382f95c0","signature":"function parseMetrics()"},{"anchor":"S:5962011a99","kind":"function","line":41,"name":"summarize","path_id":"F:3b382f95c0","signature":"function summarize(events)"},{"anchor":"S:b288f69305","kind":"function","line":76,"name":"agentproofScore","path_id":"F:3b382f95c0","signature":"function agentproofScore()"},{"anchor":"S:145bc035b8","kind":"function","line":92,"name":"listFilesRecursive","path_id":"F:3b382f95c0","signature":"function listFilesRecursive(dir, matches, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:5967648d07","doc":"A source module counts as \"documented\" if its first non-shebang line is a `//` comment, or the file contains a ` ... ` JSDoc block anywhere. This is a simple heuristic, not a full doc-coverage analysi","kind":"function","line":116,"name":"isDocumented","path_id":"F:3b382f95c0","signature":"function isDocumented(filePath)"},{"anchor":"S:98d9caecec","doc":"Advisory, bounded heuristic: an exported symbol is a \"dead code suspect\" when its declared name never appears again (by plain text match) anywhere else under scripts/ or tests/. This is a name-collisi","kind":"function","line":134,"name":"findExportedSymbols","path_id":"F:3b382f95c0","signature":"function findExportedSymbols(filePath)"},{"anchor":"S:cab6ecab70","kind":"function","line":144,"name":"computeDeadCodeSuspects","path_id":"F:3b382f95c0","signature":"export function computeDeadCodeSuspects(sourceFiles, root, cap = IMPACT_SCAN_CAP)"},{"anchor":"S:62f42e9591","doc":"Computes a deterministic, offline snapshot of repo-impact metrics rooted at `root` (a directory containing scripts/, tests/, docs/). Pure aside from filesystem reads; never writes anything.","kind":"function","line":175,"name":"computeImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function computeImpactSnapshot(root)"},{"anchor":"S:882efb23a5","doc":"Reads the newest run log under runsDir that carries an `impact` field. Returns null if none exists (first run, no baseline).","kind":"function","line":196,"name":"findPriorImpactSnapshot","path_id":"F:3b382f95c0","signature":"export function findPriorImpactSnapshot(runsDir)"},{"anchor":"S:d444b209b8","doc":"Pure delta computation: current minus prior for each numeric field. When prior is null/undefined, returns a \"first run, no baseline\" marker instead of numeric deltas.","kind":"function","line":212,"name":"computeImpactDelta","path_id":"F:3b382f95c0","signature":"export function computeImpactDelta(current, prior)"},{"anchor":"S:bafcfbb33c","kind":"function","line":224,"name":"formatDelta","path_id":"F:3b382f95c0","signature":"function formatDelta(n)"},{"anchor":"S:b6eeacb415","kind":"function","line":4,"name":"Requirement","path_id":"F:3b4065b679","signature":"export const Requirement = () => ("},{"anchor":"S:35e362f448","kind":"function","line":79,"name":"emit","path_id":"F:3b96b6dfed","signature":"function emit(format, decision, reason)"},{"anchor":"S:073124e2d8","kind":"function","line":106,"name":"extractFromClaudeToolInput","path_id":"F:3b96b6dfed","signature":"function extractFromClaudeToolInput(toolName, input, cwd)"},{"anchor":"S:40cce153df","doc":"Format-agnostic: driven by which fields the payload actually has, not by --format. A Claude PreToolUse payload always carries tool_name/tool_input; a Cursor beforeShellExecution payload carries `comma","kind":"function","line":135,"name":"extractChange","path_id":"F:3b96b6dfed","signature":"function extractChange(payload)"},{"anchor":"S:f2e55d9b4a","kind":"function","line":158,"name":"guessFileFromCommand","path_id":"F:3b96b6dfed","signature":"function guessFileFromCommand(cmd)"},{"anchor":"S:209a48ca7f","doc":"Best-effort parse of a `sed 's/PATTERN/REPLACEMENT/'` (or `#`, `|`, `,`, `@` delimited) substitution. This is the one shell idiom common enough, and structured enough, to reliably recover a real befor","kind":"function","line":181,"name":"parseSedReplacement","path_id":"F:3b96b6dfed","signature":"function parseSedReplacement(cmd)"},{"anchor":"S:485d7c5e96","kind":"function","line":192,"name":"unescapeSed","path_id":"F:3b96b6dfed","signature":"function unescapeSed(s)"},{"anchor":"S:4214f7fa01","doc":"Best-effort parse of a shell redirect target (`> file`, `>> file`), which names the exact file the command is about to write, stronger than any token guess.","kind":"function","line":198,"name":"parseRedirectTarget","path_id":"F:3b96b6dfed","signature":"function parseRedirectTarget(cmd)"},{"anchor":"S:2305f3725a","kind":"function","line":206,"name":"diffForCommand","path_id":"F:3b96b6dfed","signature":"function diffForCommand(cmd)"},{"anchor":"S:d761c7660a","kind":"function","line":231,"name":"diffForReplace","path_id":"F:3b96b6dfed","signature":"function diffForReplace(filePath, oldText, newText)"},{"anchor":"S:2df1658785","kind":"function","line":239,"name":"diffForMultiEdit","path_id":"F:3b96b6dfed","signature":"function diffForMultiEdit(filePath, edits)"},{"anchor":"S:ae3c96ae84","kind":"function","line":249,"name":"diffForWrite","path_id":"F:3b96b6dfed","signature":"function diffForWrite(filePath, content, cwd)"},{"anchor":"S:7d253ea6b0","kind":"function","line":264,"name":"buildSyntheticDiff","path_id":"F:3b96b6dfed","signature":"function buildSyntheticDiff(change)"},{"anchor":"S:8761033dfb","kind":"function","line":283,"name":"runGuardRatchet","path_id":"F:3b96b6dfed","signature":"function runGuardRatchet(diffText)"},{"anchor":"S:12c1e0f104","kind":"function","line":321,"name":"formatDenyReason","path_id":"F:3b96b6dfed","signature":"function formatDenyReason(findings)"},{"anchor":"S:745c98231d","kind":"function","line":338,"name":"main","path_id":"F:3b96b6dfed","signature":"function main()"},{"anchor":"S:efea80af4e","doc":"Provides an imperative confirm() that resolves true when the operator approves. * Every destructive control in the panel awaits this before it fires, satisfying the * control-panel requirement of a co","kind":"function","line":20,"name":"ConfirmProvider","path_id":"F:3c479cac6e","signature":"export function ConfirmProvider({ children }: { children: ReactNode })"},{"anchor":"S:7989466d34","kind":"function","line":59,"name":"useConfirm","path_id":"F:3c479cac6e","signature":"export function useConfirm(): ConfirmFn"},{"anchor":"S:b908c74a11","kind":"function","line":5,"name":"makeDb","path_id":"F:3c53926ecd","signature":"function makeDb()"},{"anchor":"S:225c7a7d84","kind":"function","line":21,"name":"Open","path_id":"F:3ce0fd77eb","signature":"export const Open = () => {}} />;"},{"anchor":"S:a2df9a5c24","kind":"function","line":23,"name":"Resolved","path_id":"F:3ce0fd77eb","signature":"export const Resolved = () => ;"},{"anchor":"S:7c44412e8a","kind":"function","line":4,"name":"WithHeader","path_id":"F:3d505706cd","signature":"export const WithHeader = () => ("},{"anchor":"S:72d4f657d5","kind":"function","line":91,"name":"setup","path_id":"F:3de9042953","signature":"function setup()"},{"anchor":"S:09a834e684","kind":"function","line":14,"name":"makeRepo","path_id":"F:3ea503e7c0","signature":"function makeRepo(spec)"},{"anchor":"S:64de4c98b6","doc":"Helper reused by the mapping test.","kind":"function","line":91,"name":"makeRepoOnce","path_id":"F:3ea503e7c0","signature":"function makeRepoOnce()"},{"anchor":"S:fa6785fa4b","kind":"const","line":1,"name":"MESSAGES","path_id":"F:3f1216fc11","signature":"export const MESSAGES ="},{"anchor":"S:91c42b4f27","kind":"function","line":23,"name":"read","path_id":"F:4096620673","signature":"function read(rel)"},{"anchor":"S:87c8d03eb8","doc":"4. The two protected-path surfaces must agree. CODEOWNERS is what GitHub enforces; protected_paths_extra is what the engine reads. If they disagree, a path is protected in name only (the bin/ gap that","kind":"function","line":132,"name":"dirsFromCodeowners","path_id":"F:4096620673","signature":"function dirsFromCodeowners()"},{"anchor":"S:4287ee7685","kind":"const","line":1,"name":"MESSAGES","path_id":"F:40d8f235fd","signature":"export const MESSAGES ="},{"anchor":"S:daac1f172a","kind":"function","line":12,"name":"cli","path_id":"F:40e4f39b59","signature":"function cli(...args)"},{"anchor":"S:1c82a73570","kind":"function","line":19,"name":"tmp","path_id":"F:40e4f39b59","signature":"function tmp()"},{"anchor":"S:586705c7a0","kind":"type","line":5,"name":"CardTone","path_id":"F:40eb542a82","signature":"export type CardTone = \"default\" | \"raised\";"},{"anchor":"S:1ae77ae47b","kind":"interface","line":7,"name":"CardProps","path_id":"F:40eb542a82","signature":"export interface CardProps extends HTMLAttributes"},{"anchor":"S:555c013724","doc":"The standard container surface for the control panel. Renders an optional header * row (eyebrow, title, help hint, and right-aligned actions) above a divider, then the * body. When no title, eyebrow, ","kind":"function","line":31,"name":"Card","path_id":"F:40eb542a82","signature":"export function Card("},{"anchor":"S:b6fce3a5a9","kind":"function","line":3,"name":"ItemDetail","path_id":"F:41f5ffe77a","signature":"export const ItemDetail = () => ("},{"anchor":"S:afe9763761","kind":"function","line":3,"name":"RaiseCap","path_id":"F:4387a44284","signature":"export const RaiseCap = () => ("},{"anchor":"S:24f0960624","kind":"function","line":29,"name":"runRemediate","path_id":"F:44a5987438","signature":"function runRemediate(args, { cwd, env = {} })"},{"anchor":"S:c8ee4f2e2e","doc":"Build a temp git repo whose origin/main is the base commit, then lay down a feature branch with one signature-in-message commit and one forbidden-identity commit.","kind":"function","line":40,"name":"makePollutedRepo","path_id":"F:44a5987438","signature":"function makePollutedRepo()"},{"anchor":"S:3e43134e83","kind":"function","line":69,"name":"arm","path_id":"F:44a5987438","signature":"function arm(dir, overrides = {})"},{"anchor":"S:48356203e2","kind":"function","line":13,"name":"repo","path_id":"F:4637e1fecb","signature":"function repo()"},{"anchor":"S:fd2e16186e","doc":"Escape regex metacharacters so an unexpected schema value (e.g. containing \".\" or \"+\") cannot produce an invalid pattern or change what the word-boundary match means. schemas/work-item.schema.json is ","kind":"function","line":66,"name":"escapeRegExp","path_id":"F:4749cc43a0","signature":"function escapeRegExp(s)"},{"anchor":"S:e3c36060ec","doc":"Build a minimal passing temp repo and return the path. Caller must rmSync(tmp, {recursive:true}).","kind":"function","line":98,"name":"makeMinimalRepo","path_id":"F:48355ccf4d","signature":"function makeMinimalRepo()"},{"anchor":"S:7c9eb8f22d","kind":"function","line":116,"name":"runScript","path_id":"F:48355ccf4d","signature":"function runScript(tmp)"},{"anchor":"S:43cc2b28a1","kind":"function","line":230,"name":"withStubRunner","path_id":"F:48355ccf4d","signature":"function withStubRunner(tmp, score, extendedScore, totalScore)"},{"anchor":"S:bb570e99d8","kind":"const","line":40,"name":"AI_SIGNATURE_RE","path_id":"F:4a7eaceb5c","signature":"export const AI_SIGNATURE_RE = new RegExp(P, \"iu\");"},{"anchor":"S:ba4cb77f9c","doc":"True when any path segment of a branch name exactly equals a denylisted token. * This is a strict superset of isModelIdentifierBranch (which checks only the first * segment): it also catches evasions ","kind":"function","line":51,"name":"branchHasModelSegment","path_id":"F:4a7eaceb5c","signature":"export function branchHasModelSegment(name)"},{"anchor":"S:4bfc88b9a8","doc":"Propose a compliant branch name by replacing any denylisted segment with a neutral * placeholder, preserving the rest of the path so the suggestion stays meaningful. * \"claude/fix-config\" -> \"change/f","kind":"function","line":65,"name":"suggestBranchName","path_id":"F:4a7eaceb5c","signature":"export function suggestBranchName(name)"},{"anchor":"S:38e44b5fa7","doc":"Scan a branch name and return a finding if it carries a model identifier.","kind":"function","line":79,"name":"detectBranch","path_id":"F:4a7eaceb5c","signature":"export function detectBranch(name)"},{"anchor":"S:e0f397f4e1","doc":"Scan commits for forbidden author/committer identity (reusing commit-identity.mjs) * AND for AI signatures inside commit-message bodies. The identity check and the body * check are complementary: the ","kind":"function","line":103,"name":"detectCommits","path_id":"F:4a7eaceb5c","signature":"export function detectCommits(logOutput, bodies = [])"},{"anchor":"S:099c6ccde0","doc":"Scan a block of free text (PR body, a comment, a tracked file) for AI signatures. * Returns one finding per matching line so the remedy can point at the exact spot.","kind":"function","line":132,"name":"detectText","path_id":"F:4a7eaceb5c","signature":"export function detectText(kind, where, text)"},{"anchor":"S:6c21b6660b","kind":"function","line":149,"name":"firstMatch","path_id":"F:4a7eaceb5c","signature":"function firstMatch(text)"},{"anchor":"S:af6abeace9","doc":"Render a precomputed, actionable remedy so a blocked violation is never a dead end. * The message names the exact fix and, where applicable, the literal git commands to * apply it, so a reviewer paste","kind":"function","line":159,"name":"formatRemedy","path_id":"F:4a7eaceb5c","signature":"export function formatRemedy(findings)"},{"anchor":"S:3ef15e4c1b","doc":"Mask every matching secret in `text`. Returns { text, redactions } where each redaction records the pattern name and how many matches it masked.","kind":"function","line":13,"name":"redactText","path_id":"F:4b91a9f65b","signature":"export function redactText(text, { strict = false } = {})"},{"anchor":"S:7379962c7e","kind":"const","line":1,"name":"MESSAGES","path_id":"F:4d08d5472f","signature":"export const MESSAGES ="},{"anchor":"S:5e08a11ce4","doc":"Start a mock GitHub API server. * * @param {object} [options] * @param {object} [options.pr] - The PR object returned by the pulls endpoint (title, body). * @param {Array} [options.comments] -","kind":"function","line":19,"name":"startMockGitHubServer","path_id":"F:4dabd020df","signature":"export function startMockGitHubServer(options = {})"},{"anchor":"S:2ea6241ebd","kind":"function","line":68,"name":"writeJson","path_id":"F:4dabd020df","signature":"function writeJson(res, status, body)"},{"anchor":"S:a76a61b560","doc":"v2 adds the required `generator` credit block (Phase 4: policy-pack adoption tooling, ADR-037). Because `generator` is required and content-digested, a vendored copy cannot silently drop credit to mod","kind":"const","line":25,"name":"MANIFEST_VERSION","path_id":"F:4db1101024","signature":"export const MANIFEST_VERSION = 2;"},{"anchor":"S:d4ed2d5fe7","kind":"const","line":26,"name":"ATTESTATION_KIND","path_id":"F:4db1101024","signature":"export const ATTESTATION_KIND = \"policy-attestation\";"},{"anchor":"S:78dd5bd63d","kind":"function","line":52,"name":"sha256Hex","path_id":"F:4db1101024","signature":"function sha256Hex(bytes)"},{"anchor":"S:fc880b17bd","kind":"function","line":56,"name":"readOrNull","path_id":"F:4db1101024","signature":"function readOrNull(root, rel)"},{"anchor":"S:262e039096","doc":"Extract a Markdown section body: the heading whose text matches `heading` (case-insensitive) and the lines beneath it, up to the next heading of the same or higher level. Returns null when no such hea","kind":"function","line":68,"name":"extractSection","path_id":"F:4db1101024","signature":"export function extractSection(markdown, heading)"},{"anchor":"S:e6c1406727","kind":"function","line":91,"name":"fingerprintDisclosureSources","path_id":"F:4db1101024","signature":"function fingerprintDisclosureSources(root)"},{"anchor":"S:41514ae74b","kind":"function","line":101,"name":"fingerprintPolicyFiles","path_id":"F:4db1101024","signature":"function fingerprintPolicyFiles(root)"},{"anchor":"S:cf9af1e29c","doc":"The disclosed gate set is derived from the actual `verify` npm script so it cannot drift from what the project runs. One level of `npm run