diff --git a/.ai/NEXT-ACTION-OPTIONS.md b/.ai/NEXT-ACTION-OPTIONS.md index 640af82e..fb9a4c4b 100644 --- a/.ai/NEXT-ACTION-OPTIONS.md +++ b/.ai/NEXT-ACTION-OPTIONS.md @@ -4,27 +4,25 @@ This repository adopts the Vertex Systems Network interactive AI-development han ## User-facing handoff -Do not hand control back merely because an internal milestone completed, one lane became blocked, or one external check is waiting. While execution can continue and at least one safe authorized task exists, synchronize durable progress and continue automatically; do not pre-estimate a host/token budget as a stopping rule. +This repository overrides interactive-choice handoffs in favor of autonomous continuation. -Expose 1 to 3 currently valid next actions only at a **terminal execution-window handoff**, and only after the mandatory fallback work scan in `AGENTS.md` proves no safe automatic lane remains. A completed milestone, waiting CI/provider lane, repairable failure, available maintenance task, state drift, or host-token conservation preference is not a valid reason to present options. Do not emit next-action options after internal continuous Fast-Batch progress updates or routine milestone boundaries. - -- Always include the canonical/recommended next action, but do not bind it permanently to option 1. -- When two or more valid options exist, reshuffle the visible 1/2/3 numbering on every handoff. -- If the previously selected action identity and number are known, that same action must move to a different visible number on the next handoff. With only one valid action, number reuse is allowed. -- Mark the canonical action as **Recommended**. Numbering is ephemeral presentation state and never changes priority, safety, scope, or authorization. -- A reply containing only an option number starts the corresponding continuous execution window. Re-read current repository state before any mutation. If the option became stale or unsafe, fail closed on that option and continue/recompute any other safe authorized path; show new options only if no safe automatic path remains. -- Interactive buttons may be used when the host supports them; otherwise numbered one-line options are the mandatory fallback. +- Do **not** present numbered 1/2/3 engineering choices during ordinary development, after milestone completion, after CI failure, after a merge, during external waits, or because compact state moved. +- Run the mandatory fallback work scan and select the highest-priority safe authorized action automatically. +- At a genuine terminal condition, report the exact blocker/status without asking the owner to choose between engineering tasks. +- Ask a single minimal concrete question only when a user-owned fact, secret, legal/commercial decision, explicit new product scope, or separately protected destructive/provider/production/release/migration authority is actually required and no independent safe lane remains. +- If the user explicitly asks for options, up to 3 current safe choices may be shown; otherwise autonomous execution is the default. +- A numeric reply, when the user explicitly requested options earlier, starts the selected continuous execution window after fresh revalidation. ## URL-only repository entry -When the user's message contains only this repository's canonical GitHub URL (optionally with surrounding whitespace), treat it as a read-only development entry request. +When the user's message contains only this repository's canonical GitHub URL (optionally with surrounding whitespace), treat it as a **resume/rehydration entry**, not as a forced choice prompt. 1. Resolve the repository and default/protected branch. -2. Read this repository's durable/current state and governing instructions. -3. Reconcile open Issues first, then open PRs, then any repository-specific coordination/runner state required by local rules. -4. Do **not** create a branch, commit, PR, merge, deployment, provider call, destructive action, or other mutation from the URL alone. -5. Respond with 1 to 3 shuffled valid next-action options and mark the canonical one **Recommended**. -6. The user's subsequent number selection initiates the normal fully revalidated development turn. +2. Read durable/current state and governing instructions. +3. Reconcile OPEN Issues first, then OPEN PRs, reviews/checks, coordination and Runner state. +4. If safe authorized work exists under current repository/standing maintenance authority, continue it automatically using Continuous Fast-Batch. +5. Do not invent new product scope, bypass protected authority, or perform destructive/provider/production/release/migration actions merely from a URL. +6. If no safe automatic lane exists, return terminal status. Do not ask the user to choose engineering options unless the user explicitly requested options; ask only for a genuinely required user-owned fact or authority. ## Safety and local authority diff --git a/AGENTS.md b/AGENTS.md index 824b8b55..bd35abf0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,7 +14,7 @@ Repository-native authority outranks chat memory, generated plans, Linear commen A lower layer cannot broaden a higher layer. One repository cannot authorize changes in another repository. -At the current post-M13 checkpoint, no repository-native M14 product implementation authority exists. GitHub Issue #50 is the current planning/product-authority gate only; it authorizes no product implementation until a concrete owner-approved scope names the acceptance evidence and exact starting Git state. Do not invent M14 features, migrations, APIs, UI, release changes or product scope until that authority exists. +Historical GitHub Issue #50 is closed and must **not** be treated as a live approval gate or a reason to prompt the owner. Resolve current authority from protected `main`, currently accepted OPEN Issues/PRs, and current repository architecture/status contracts. The active M14 release-trust/configuration lane is tracked by Issue #62; it does not authorize unrelated new product features. New product scope outside currently accepted repository-native authority still requires an explicit owner-approved scope, but stale or closed authority records must be reconciled automatically rather than surfaced as a user-confirmation request. ## Compact durable state and source of truth @@ -58,6 +58,30 @@ Never weaken tests, security, review, tenant isolation, release trust, destructi A single blocked lane, pending CI run, provider wait, unavailable credential, external approval, or deferred task must **not** stop the whole execution window when another safe authorized task exists. Mark the lane `WAITING_EXTERNAL` or `BLOCKED`, preserve evidence, and continue elsewhere. +### User-prompt suppression and authority reconciliation + +For ordinary repository development, maintenance, CI repair, review resolution, dependency maintenance, state reconciliation, and next-safe-task selection, the default interaction is **execute, not ask**. + +Before requesting any user decision: +1. reconcile protected `main`, OPEN Issues, OPEN PRs, current reviews/checks, compact state, and the standing maintenance authority; +2. discard closed/superseded authority records as live gates; +3. automatically choose the highest-priority safe authorized lane; +4. if the current lane needs unavailable external/user/protected authority, mark only that lane blocked and run the fallback scan; +5. request user input only when **all** safe authorized lanes are exhausted and the missing item is genuinely user-owned or cannot legally/safely be inferred (for example a secret, legal/commercial decision, new product scope, or separately protected destructive/provider/production/release/migration authority). + +Do not ask the owner to choose between multiple safe engineering tasks. Do not turn repository drift, a closed historical Issue, CI failure, stale state, branch movement, merge completion, or an external wait into a confirmation prompt. + +### Committed state is a semantic checkpoint, not a live transaction ledger + +Committed `docs/ai-state/CURRENT-STATE.yaml` and the README progress block must remain valid across a PR merge without requiring an immediate follow-up state-only PR. + +- Live PR number, working branch, check run IDs, merge SHA, and exact post-merge pointer state come from GitHub at runtime and belong on PR/Issue evidence surfaces. +- `active_pr`, `active_branch`, `observed_main_sha`, and merge metadata in committed compact state are resume hints only, never authority for deciding whether to prompt or stop. +- Committed state should use stable semantic work/module/blocker/continuation text that remains truthful before and after the current PR merges. +- Do not create a new PR solely to change a just-merged PR number, branch name, merge SHA, check-run identity, or `Last Completed` transaction sentence. +- README's compact AI progress block must exclude volatile PR/branch/merge transaction fields. It mirrors stable semantic progress; live transaction facts are read from GitHub when reporting status. +- A follow-up source mutation is justified only by a substantive code/governance/documentation change or real semantic status change, not by the fact that the previous PR merged. + ### Mandatory fallback work scan — no idle Before any voluntary terminal handoff, perform a fresh repository-wide safe-work scan. Use this deterministic priority order: @@ -126,7 +150,7 @@ Before every material read-write sequence: 3. re-read this contract and the exact issue/specification that grants authority; 4. compare working state with current protected `main`; 5. inspect required checks, review state, unresolved conversations, and authorization boundaries when a PR exists; -6. stop and rehydrate if main/head/scope/governance/authorization moved materially; +6. if main/head/scope/governance/authorization moved materially, rehydrate immediately inside the same execution window, recompute the safe lane, and continue automatically; do not hand control back merely because repository state moved; 7. never treat a previously green SHA as evidence for a newer head. ## Product and architecture diff --git a/README.md b/README.md index 3a068d9a..6b6091d4 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,14 @@ WorkIntel is a single Laravel 13 + React/TypeScript workforce operations platfor ## AI Development Progress - **Repo:** `Vertex-Systems-Network/workforce-intelligence` -- **Current Work:** PR #146 README M14 subtask table is open; exact-head CI and Windows Certification exposed a failing README/compact-state synchronization contract, and the docs/state repair is in progress. +- **Current Work:** M14 release-trust evidence remains partially external; repository development continues through automatic live-PR/Issue reconciliation, CI repair, maintenance, and fallback work without routine owner prompts. - **Current Module:** M14 — Production Release Trust & Real-Target Readiness - **Module Progress:** [███████░░░] **70%** - **Overall Progress:** [██████████] **100%** — active release-scope modular maturity - **Active Issue:** #62 -- **Active PR:** #146 -- **Active Branch:** `docs/m14-readme-subtask-progress-20261008` -- **Last Completed:** PR #144 merged to protected main as 33411a06b2585705880181f056d7b42d3bdf7458 after all six required PR-head checks passed on 989ededc74ce6bc72191ca740ae313aae64babde. -- **Next Action:** Synchronize the README AI progress block with compact state in PR #146, then require exact-head CI, Code Quality and Windows Certification to pass before merge. Keep M14 at 70%; external release-policy, signing, publication, real-target and restore evidence remain unverified, deferred or not run. +- **Next Action:** On every resume, reconcile live GitHub OPEN PRs and Issues first and automatically repair/review/merge the highest-priority safe authorized lane. If M14 Issue #62 remains externally blocked, continue the deterministic fallback ladder without asking the owner to choose routine engineering work. Ask only when all safe lanes are exhausted and a genuinely user-owned fact, new product/legal-commercial decision, or separately protected authority is required. -> Apple/macOS release trust is deferred to future Issue #123 and is not represented as complete. Overall progress is scoped to active release-scope modular maturity. +> Live PR number, working branch, check run IDs, and merge SHA are intentionally read from GitHub at runtime rather than committed here. Apple/macOS release trust remains deferred under Issue #123. @@ -39,7 +36,7 @@ WorkIntel is a single Laravel 13 + React/TypeScript workforce operations platfor ## Audit snapshot and incomplete tracked work -This continuation index reflects the state observed on **2026-10-08** at protected `main` `dfb4fc7ec9536a304b7df582027968dc60f3e53a`. GitHub Issues, PRs, `AGENTS.md`, and exact-head checks remain authoritative. +This continuation index reflects the repository's 2026-10-08 semantic state. Live protected-`main`, PR, branch and check identities are resolved from GitHub at runtime rather than embedded here as continuation gates. GitHub Issues, PRs, `AGENTS.md`, and exact-head checks remain authoritative. | Priority | Work item | Current state | Completion condition | |---|---|---|---| diff --git a/docs/ai-state/COORDINATION-QUEUE.yaml b/docs/ai-state/COORDINATION-QUEUE.yaml index b9701fc6..0b51c23c 100644 --- a/docs/ai-state/COORDINATION-QUEUE.yaml +++ b/docs/ai-state/COORDINATION-QUEUE.yaml @@ -2,14 +2,14 @@ "schema_version": 1, "non_authoritative_resume_index": true, "repository": "Vertex-Systems-Network/workforce-intelligence", - "observed_main_sha": "33411a06b2585705880181f056d7b42d3bdf7458", + "observed_main_sha": "09e9dac0d09b5ac8521006721001eca9611f5c8a", "reconciled_at": "2026-10-08", "issues": [ { "number": 62, "title": "M14 external release configuration — immutable tags and production-release gate", "state": "open", - "action": "owner-deferred-provider-signing;gate-a-a2-verified;remaining-admin-target-evidence-open" + "action": "gate-a-a2-verified;remaining-admin-target-evidence-waiting-external;provider-signing-deferred" }, { "number": 70, @@ -28,11 +28,12 @@ { "number": 146, "title": "docs(m14): track release-trust subtasks in README", - "state": "open", + "state": "merged", "draft": false, "head_ref": "docs/m14-readme-subtask-progress-20261008", - "head_sha": "d9793944dde9fdada1cf3041bc01bf1160504796", - "action": "repair-readme-compact-state-sync-before-recertification" + "head_sha": "c2ad9c6cd4a309e9daefc3717bfaf26a98b2cb8b", + "base_sha": "33411a06b2585705880181f056d7b42d3bdf7458", + "action": "all-three-exact-head-checks-green;resulting-main-09e9dac0d09b5ac8521006721001eca9611f5c8a" }, { "number": 144, diff --git a/docs/ai-state/CURRENT-STATE.yaml b/docs/ai-state/CURRENT-STATE.yaml index 89adae62..578c185f 100644 --- a/docs/ai-state/CURRENT-STATE.yaml +++ b/docs/ai-state/CURRENT-STATE.yaml @@ -2,14 +2,14 @@ "schema_version": 1, "compact_state_path": "docs/ai-state", "repository": "Vertex-Systems-Network/workforce-intelligence", - "observed_main_sha": "33411a06b2585705880181f056d7b42d3bdf7458", + "observed_main_sha": "09e9dac0d09b5ac8521006721001eca9611f5c8a", "active_issue": 62, - "active_pr": 146, - "active_branch": "docs/m14-readme-subtask-progress-20261008", + "active_pr": null, + "active_branch": "main", "current_milestone": "M14 Windows/Linux release trust — provider-based signing deferred; real-target evidence remains separate", - "milestone_status": "VERIFYING", - "last_completed_milestone": "PR #144 merged to protected main as 33411a06b2585705880181f056d7b42d3bdf7458 after all six required PR-head checks passed on 989ededc74ce6bc72191ca740ae313aae64babde.", - "exact_next_safe_action": "Synchronize the README AI progress block with compact state in PR #146, then require exact-head CI, Code Quality and Windows Certification to pass before merge. Keep M14 at 70%; external release-policy, signing, publication, real-target and restore evidence remain unverified, deferred or not run.", + "milestone_status": "WAITING_EXTERNAL", + "last_completed_milestone": "Latest substantive source checkpoint: M14 release-trust progress reporting, continuous no-idle execution, CI server supervision, and anti-recursive state governance are integrated. Exact PR/check/merge transaction evidence lives on GitHub PR/Issue surfaces and is resolved live at runtime.", + "exact_next_safe_action": "On every resume, reconcile live GitHub OPEN PRs and Issues first and automatically repair/review/merge the highest-priority safe authorized lane. If M14 Issue #62 remains externally blocked, continue the deterministic fallback ladder without asking the owner to choose routine engineering work. Ask only when all safe lanes are exhausted and a genuinely user-owned fact, new product/legal-commercial decision, or separately protected authority is required.", "pending_runner_ids": [ "RB-001", "RB-002", @@ -28,8 +28,7 @@ "Public-trust Windows private signing keys must not be treated as portable GitHub PFX secrets; existing PFX secrets remain unset for the public-trust path.", "Live GitHub readback on 2026-10-08 confirms active main branch ruleset 21176050 with zero bypass actors and active `agent-v-release-tags` ruleset 23938765 for `refs/tags/agent-v*` with zero bypass actors plus update/deletion restrictions; the VERIFIED attestation matches updated_at `2026-09-24T17:49:27.650+05:00`. `production-release` environment protection, token placement/least privilege, and immutable-releases setting remain Not Verified because the connector cannot read those admin endpoints.", "Issue #70 remains open; RB-005 remains not-authorized/blocked.", - "Apple/macOS signing and notarization are intentionally deferred to future Issue #123 and are not an active M14 execution blocker; do not claim Apple completion.", - "PR #146 exact-head Code Quality passed, but WorkIntel CI and Windows Certification failed because README AI progress fields did not match docs/ai-state/CURRENT-STATE.yaml. Repair the synchronized source files before another exact-head certification." + "Apple/macOS signing and notarization are intentionally deferred to future Issue #123 and are not an active M14 execution blocker; do not claim Apple completion." ], "timeout_control": { "max_consolidated_status_refreshes_per_milestone": 1, @@ -43,16 +42,19 @@ "chain_safe_milestones_without_user_reply": true, "technical_blocker_confirmation_required": false, "waiting_external_lane_stops_execution_window": false, - "readme_progress_sync_each_milestone": true + "readme_progress_sync_each_milestone": true, + "authority_drift_requires_user_confirmation": false, + "rehydrate_material_drift_in_same_window": true, + "terminal_engineering_choice_prompt_default": false }, "last_reconciled_at": "2026-10-08", "response_status": { "repository_name": "Vertex-Systems-Network/workforce-intelligence", - "current_work": "PR #146 README M14 subtask table is open; exact-head CI and Windows Certification exposed a failing README/compact-state synchronization contract, and the docs/state repair is in progress.", + "current_work": "M14 release-trust evidence remains partially external; repository development continues through automatic live-PR/Issue reconciliation, CI repair, maintenance, and fallback work without routine owner prompts.", "current_module": "M14 — Production Release Trust & Real-Target Readiness", "module_progress": { "percent": 70, - "basis": "Provider-based trusted signing is deferred by owner; Gate A/A2 is verified, while release-policy, trusted-artifact and real-target evidence remain open. M14 remains 70% until its authorized external evidence gates pass." + "basis": "Provider-based trusted signing is deferred by owner; Gate A/A2 is verified, while production-release/immutable-release policy, trusted-artifact and real-target evidence remain open. M14 remains 70% until its authorized external evidence gates pass." }, "overall_progress": { "percent": 100, @@ -83,6 +85,14 @@ "recursive_post_merge_state_only_pr_forbidden": true, "pointer_only_drift_reconciled_in_memory": true, "semantic_status_drift_requires_source_sync": true, - "merge_evidence_may_live_on_pr_issue_until_next_substantive_mutation": true + "merge_evidence_may_live_on_pr_issue_until_next_substantive_mutation": true, + "committed_state_is_semantic_checkpoint": true, + "live_transaction_status_read_from_github": true, + "committed_active_pr_is_live_authority": false, + "committed_active_branch_is_live_authority": false, + "readme_includes_volatile_transaction_fields": false, + "post_merge_state_only_reconciliation_required": false, + "closed_authority_issue_requires_user_prompt": false, + "last_completed_transaction_evidence_may_live_on_github": true } } diff --git a/docs/ai-state/DETERMINISTIC-CLAIMS.yaml b/docs/ai-state/DETERMINISTIC-CLAIMS.yaml index e270b606..6fc73454 100644 --- a/docs/ai-state/DETERMINISTIC-CLAIMS.yaml +++ b/docs/ai-state/DETERMINISTIC-CLAIMS.yaml @@ -139,6 +139,42 @@ "subject": "semantic_status_drift_requires_source_sync", "value": true, "authority": "AGENTS.md#readme-progress-synchronization-contract" + }, + { + "id": "CLAIM-024", + "subject": "closed_historical_authority_issue_requires_user_prompt", + "value": false, + "authority": "AGENTS.md#user-prompt-suppression-and-authority-reconciliation" + }, + { + "id": "CLAIM-025", + "subject": "material_git_drift_requires_conversational_handoff", + "value": false, + "authority": "AGENTS.md#start--resume-protocol" + }, + { + "id": "CLAIM-026", + "subject": "url_only_repository_entry_forces_numbered_options", + "value": false, + "authority": ".ai/NEXT-ACTION-OPTIONS.md#url-only-repository-entry" + }, + { + "id": "CLAIM-027", + "subject": "committed_state_is_live_pr_transaction_ledger", + "value": false, + "authority": "AGENTS.md#committed-state-is-a-semantic-checkpoint-not-a-live-transaction-ledger" + }, + { + "id": "CLAIM-028", + "subject": "post_merge_state_only_reconciliation_required", + "value": false, + "authority": "AGENTS.md#committed-state-is-a-semantic-checkpoint-not-a-live-transaction-ledger" + }, + { + "id": "CLAIM-029", + "subject": "routine_terminal_handoff_offers_engineering_choices_by_default", + "value": false, + "authority": ".ai/NEXT-ACTION-OPTIONS.md#user-facing-handoff" } ] } diff --git a/docs/ai-state/FAST-BATCH-EXECUTION.md b/docs/ai-state/FAST-BATCH-EXECUTION.md index 238e2e9a..52c5bbed 100644 --- a/docs/ai-state/FAST-BATCH-EXECUTION.md +++ b/docs/ai-state/FAST-BATCH-EXECUTION.md @@ -60,7 +60,7 @@ If a safe fallback exists, choose it automatically. Do not ask the user to choos Do not voluntarily stop to conserve tokens/context. Persist a compact checkpoint and continue. A host/session hard termination can interrupt execution, but it is not a repository decision; resume from durable state on the next turn. -Hand control back voluntarily only when the fallback scan proves every reachable lane needs unavailable user/external/protected authority, a material security/authority conflict makes further work unsafe, or all authorized product and maintenance work is complete. +Hand control back voluntarily only when the fallback scan proves every reachable lane needs unavailable user/external/protected authority, a material security/authority conflict makes further work unsafe, or all authorized product and maintenance work is complete. At that point, do not offer engineering choices by default: report the blocker/status. Ask one minimal concrete question only if a user-owned fact or authority is actually required to proceed. ## CI and remote-call budget @@ -70,13 +70,13 @@ Never tight-poll. One consolidated refresh per milestone/lane is the default bud Routine technical work never requires user confirmation. The supervisor must not ask the user to confirm an error repair, retry, test fix, refactor, PR metadata update, safe merge that is already authorized, or next safe milestone selection. -User input remains required only for information or authority the repository cannot legitimately infer or self-create, such as user-owned secrets, explicit product/scope decisions, legal/commercial decisions, or separately protected destructive/provider/production/release/migration actions. Even then, block that lane and continue another safe lane when possible. +User input remains required only for information or authority the repository cannot legitimately infer or self-create, such as user-owned secrets, explicit new product/scope decisions, legal/commercial decisions, or separately protected destructive/provider/production/release/migration actions. Before asking, perform a fresh live-authority reconciliation and the mandatory fallback scan. A stale/closed Issue, moved branch/head, failed CI, merge completion, state drift, or ordinary technical choice is never sufficient reason to ask. If another safe lane exists, continue it instead. ## README progress synchronization At every completed milestone and meaningful durable progress checkpoint, synchronize `docs/ai-state/CURRENT-STATE.yaml` and the root `README.md` **AI Development Progress** block before chaining onward, when source mutation is safe. -Do not invent percentages. Preserve the exact-head rule: while a candidate head is under certification, do not mutate it solely for status; record live remote status on the PR/Issue evidence surface. After merge, expected pointer-only drift (`observed_main_sha`, active PR identity, merge metadata) must not spawn a recursive state-only PR; fold it into the next substantive safe source mutation. Semantic status drift still requires correction. +Do not invent percentages. Preserve the exact-head rule: while a candidate head is under certification, do not mutate it solely for status; record live remote status on the PR/Issue evidence surface. Committed compact state and README are semantic checkpoints, not live transaction ledgers: PR number, working branch, check IDs, merge SHA and pointer-only post-merge drift are resolved from GitHub at runtime and must not spawn a recursive state-only PR. README must omit those volatile transaction fields. Semantic product/module/progress/blocker drift still requires correction. ## User updates diff --git a/docs/ai-state/LAST-CHECKPOINT.md b/docs/ai-state/LAST-CHECKPOINT.md index 1c7b815a..50b8d7c4 100644 --- a/docs/ai-state/LAST-CHECKPOINT.md +++ b/docs/ai-state/LAST-CHECKPOINT.md @@ -1,15 +1,17 @@ # Last AI Engineering Supervisor Checkpoint **Repository:** `Vertex-Systems-Network/workforce-intelligence` -**Observed protected main:** `33411a06b2585705880181f056d7b42d3bdf7458` +**Observed protected main:** 09e9dac0d09b5ac8521006721001eca9611f5c8a **Active Issue:** #62 **Deferred Future Issue:** #123 — Apple signing, notarization and macOS release trust -**Active PR:** #146 — M14 README subtask progress -**Active branch:** `docs/m14-readme-subtask-progress-20261008` +**Active PR:** none +**Active branch:** `main` **Milestone:** M14 Windows/Linux release trust — provider-based signing deferred; real-target evidence remains separate -**Status:** PR #146 is being repaired after exact-head checks found README/compact-state drift; provider-based Windows signing is deferred; M14 remains 70%. +**Status:** PR #146 merged after all three exact-head checks passed; M14 remains 70% and is waiting on external admin/target evidence; provider-based Windows and Apple signing remain deferred. -## Completed +## Verified + +- PR #146 merged to protected main as 09e9dac0d09b5ac8521006721001eca9611f5c8a after WorkIntel CI, Code Quality and Windows Certification passed on exact head c2ad9c6cd4a309e9daefc3717bfaf26a98b2cb8b; zero submitted reviews and zero unresolved review threads. - Owner decision on 2026-10-08: defer third-party Windows trust-signing provider qualification/integration to future scope. Do not purchase/configure signing material or claim trusted signatures; this does not block safe repository maintenance. - PR #145 merged to protected main at `dfb4fc7ec9536a304b7df582027968dc60f3e53a` after all six exact-head checks passed on `dab1ad7af440334d6ed7a7847665659216fedb69`; it adds bounded supervision/recovery for the Laravel E2E server. Zero unresolved review threads. @@ -36,6 +38,18 @@ 2. Keep non-secret real-target and recovery evidence separate and do not execute target, restore, signing, publication or Runner tasks without their required authority. 3. Third-party Windows trusted signing and Apple/macOS signing are deferred to future owner authorization; do not purchase/configure signing material or claim trusted signatures. +## Not Verified + +- `production-release` environment protection, immutable-release administration read-back, trusted artifact signing/publication, real-target readiness and restore evidence remain unverified or not run. +- No Windows public-trust signer has been selected or configured; provider-based signing is deferred. +- Apple Developer ID/notarization evidence remains deferred under Issue #123. + +## Known Risk + +- Issue #70 remains a real recurrent-but-unproven AccessControl seed risk; fail-closed diagnostics are integrated and RB-005 remains blocked/not-authorized. +- External release/admin/target facts must not be inferred from green source CI. +- Live PR/branch/check/merge transaction state must be read from GitHub at runtime; committed checkpoint pointers are non-authoritative resume hints. + ## Next Action -Synchronize the README AI progress block with compact state in PR #146, then require exact-head CI, Code Quality and Windows Certification to pass before merge. Keep M14 at 70%; external release-policy, signing, publication, real-target and restore evidence remain unverified, deferred or not run. Do not deploy, restore, publish, sign or run Runner tasks without separate authority. +Issue #62's remaining production-release, immutable-release and real-target evidence requires administrator/target evidence unavailable through this connector. Continue only when new authorized non-secret evidence is available; signing, publication, production, restore and Runner execution remain blocked or deferred. Keep M14 at 70% until the applicable evidence gates pass. diff --git a/docs/ai-state/USER-RESPONSE-CONTRACT.md b/docs/ai-state/USER-RESPONSE-CONTRACT.md index 4dc85466..81853749 100644 --- a/docs/ai-state/USER-RESPONSE-CONTRACT.md +++ b/docs/ai-state/USER-RESPONSE-CONTRACT.md @@ -18,7 +18,7 @@ Use a 10-cell bar. The displayed numeric percentage remains exact; the visual fi ## Progress sources -The machine-readable baseline is `docs/ai-state/CURRENT-STATE.yaml.response_status`. +The machine-readable semantic baseline is `docs/ai-state/CURRENT-STATE.yaml.response_status`. Live PR/branch/check/merge transaction facts must be read from GitHub at response time and must not force a source commit merely to keep the display current. - **Module Progress** is evidence-based progress against the explicit acceptance boundary of the active module/milestone. - **Overall Progress** must come from an authoritative repository progress document, not chat inference. @@ -38,7 +38,8 @@ Continuous Fast-Batch is the default repository-development interaction mode. - During a long-running execution window, surface only material security findings, genuinely required user action, or meaningful state transitions; otherwise keep selecting and executing safe work. Do not estimate or use a token/session budget as a voluntary stopping condition. - Group manual configuration into one checklist unless the user explicitly asks for one-by-one instructions. - Before any terminal execution-window handoff, run the mandatory fallback work scan from `AGENTS.md`; if a safe PR/Issue/repair/maintenance/reconciliation/evidence-preparation lane exists, select it automatically and continue. -- Show numbered next-action choices only when that fallback scan proves no safe authorized work can continue automatically, not after every completed/blocked/waiting internal milestone. +- Do not show numbered next-action choices by default. If the fallback scan proves no safe authorized work can continue automatically, report the terminal blocker/status without asking the owner to choose engineering work. Ask one minimal concrete question only when a genuinely user-owned fact/secret/legal-commercial/new-scope/protected authority is required. +- Closed/superseded Issues, stale compact-state pointers, branch/head movement, merge completion, failed CI, and ordinary technical choices must never become user-confirmation prompts; reconcile or repair them automatically. - Do not voluntarily end a development response merely to conserve tokens/context; checkpoint compact state and continue until a genuine terminal repository condition or a hard host boundary is reached. Continuous Fast-Batch changes cadence and autonomy only. It does not weaken authorization, security, review, exact-head certification, merge, deployment, migration, secrets, provider, or release-publication requirements. diff --git a/docs/architecture/M14_RELEASE_TRUST_READINESS.md b/docs/architecture/M14_RELEASE_TRUST_READINESS.md index 6620d9bc..f141f811 100644 --- a/docs/architecture/M14_RELEASE_TRUST_READINESS.md +++ b/docs/architecture/M14_RELEASE_TRUST_READINESS.md @@ -1,11 +1,12 @@ # M14 — Production Release Trust & Real-Target Readiness **Module ID:** `M14-RELEASE-TRUST` -**State:** `IMPLEMENTING` -**Authority:** GitHub Issue #50 +**State:** `VERIFYING / PARTIALLY COMPLETE` +**Authority provenance:** historical owner approval in closed GitHub Issue #50; this approval remains the accepted M14 scope and must not be requested again merely because the Issue is closed +**Current continuation authority:** open Issue #62 for remaining release-control/admin/target evidence, plus this specification and protected `main` **Owner approval:** `OWNER APPROVAL: M14-RELEASE-TRUST APPROVED FOR IMPLEMENTATION` -**Starting protected-main SHA:** `7f46f9542bbab6fa210a5c9d30acb07d44b91fb4` -**Implementation branch:** `m14/release-trust-readiness` +**Historical starting protected-main SHA:** `7f46f9542bbab6fa210a5c9d30acb07d44b91fb4` — provenance only, never live Git truth +**Historical implementation branch:** `m14/release-trust-readiness` — merged/superseded execution identity, never a reason to prompt for re-approval **Risk:** HIGH **Review assurance:** AI-ONLY SINGLE-MAINTAINER MODE — owner-authorized by GitHub Issue #96; independent human review is optional unless a higher external requirement mandates it **Real-target evidence required:** YES for `PRODUCTION_VERIFIED` / M14 `DONE` diff --git a/docs/status/AI_CHECKPOINT.md b/docs/status/AI_CHECKPOINT.md index f86dcba8..03d6f11b 100644 --- a/docs/status/AI_CHECKPOINT.md +++ b/docs/status/AI_CHECKPOINT.md @@ -14,7 +14,15 @@ When this file conflicts with observed repository state, use the authority order Never treat an embedded SHA below as live truth after the repository has moved. Rehydrate the current branch/PR/main before every material write sequence. -## Current checkpoint — 2026-08-31 +## Current continuation semantics — 2026-10-08 + +- M14 remains the accepted release-trust scope and is partially complete/verification-gated, not awaiting a fresh product-scope decision. +- Historical Issue #50 records the owner approval that promoted M14. It is closed authorization provenance, not a live gate that requires the owner to approve M14 again. +- Open Issue #62 tracks the remaining authorized external release-control/admin/target evidence. Provider-based Windows signing is deferred; Apple/macOS trust is deferred under Issue #123. +- Live PR, branch, check and protected-main identities are resolved from GitHub at runtime. Do not ask the owner to reconfirm scope because a historical branch/SHA below is stale. +- When an M14 lane is externally blocked, continue the repository's mandatory safe fallback work scan automatically. + +## Historical M14 promotion checkpoint — 2026-08-31 - **Repository:** `Vertex-Systems-Network/workforce-intelligence` - **Observed protected main at M14 promotion:** `7f46f9542bbab6fa210a5c9d30acb07d44b91fb4` diff --git a/tests/frontend/ai-supervisor-control-plane.test.mjs b/tests/frontend/ai-supervisor-control-plane.test.mjs index 37f74138..30c2bb9b 100644 --- a/tests/frontend/ai-supervisor-control-plane.test.mjs +++ b/tests/frontend/ai-supervisor-control-plane.test.mjs @@ -24,6 +24,9 @@ test('compact AI supervisor state is machine-readable, bounded and resume-safe', assert.equal(state.timeout_control.technical_blocker_confirmation_required,false) assert.equal(state.timeout_control.waiting_external_lane_stops_execution_window,false) assert.equal(state.timeout_control.readme_progress_sync_each_milestone,true) + assert.equal(state.timeout_control.authority_drift_requires_user_confirmation,false) + assert.equal(state.timeout_control.rehydrate_material_drift_in_same_window,true) + assert.equal(state.timeout_control.terminal_engineering_choice_prompt_default,false) assert.equal(state.fallback_work_policy.enabled,true) assert.equal(state.fallback_work_policy.scan_before_terminal_handoff,true) assert.equal(state.fallback_work_policy.automatic_selection,true) @@ -35,6 +38,14 @@ test('compact AI supervisor state is machine-readable, bounded and resume-safe', assert.equal(state.state_sync_policy.pointer_only_drift_reconciled_in_memory,true) assert.equal(state.state_sync_policy.semantic_status_drift_requires_source_sync,true) assert.equal(state.state_sync_policy.merge_evidence_may_live_on_pr_issue_until_next_substantive_mutation,true) + assert.equal(state.state_sync_policy.committed_state_is_semantic_checkpoint,true) + assert.equal(state.state_sync_policy.live_transaction_status_read_from_github,true) + assert.equal(state.state_sync_policy.committed_active_pr_is_live_authority,false) + assert.equal(state.state_sync_policy.committed_active_branch_is_live_authority,false) + assert.equal(state.state_sync_policy.readme_includes_volatile_transaction_fields,false) + assert.equal(state.state_sync_policy.post_merge_state_only_reconciliation_required,false) + assert.equal(state.state_sync_policy.closed_authority_issue_requires_user_prompt,false) + assert.equal(state.state_sync_policy.last_completed_transaction_evidence_may_live_on_github,true) assert.deepEqual(state.fallback_work_policy.order,[ 'accepted_open_pr_repair_review_merge', 'accepted_actionable_open_issue', @@ -115,10 +126,25 @@ test('README AI progress block stays synchronized with compact state', () => { assert.ok(readme.includes('**Module Progress:** ['+bar(rs.module_progress.percent)+'] **'+rs.module_progress.percent+'%**')) assert.ok(readme.includes('**Overall Progress:** ['+bar(rs.overall_progress.percent)+'] **'+rs.overall_progress.percent+'%** — '+rs.overall_progress.scope)) assert.ok(readme.includes('**Active Issue:** '+(state.active_issue===null?'none':'#'+state.active_issue))) - assert.ok(readme.includes('**Active PR:** '+(state.active_pr===null?'none':'#'+state.active_pr))) - assert.ok(readme.includes('**Active Branch:** `'+state.active_branch+'`')) - assert.ok(readme.includes('**Last Completed:** '+state.last_completed_milestone)) assert.ok(readme.includes('**Next Action:** '+state.exact_next_safe_action)) + const block=readme.slice(readme.indexOf(''),readme.indexOf('')) + for(const volatile of ['**Active PR:**','**Active Branch:**','**Last Completed:**']) assert.equal(block.includes(volatile),false) +}) + +test('historical M14 authority remains provenance and never a repeat-approval prompt', () => { + const agents=read('AGENTS.md') + const checkpoint=read('docs/status/AI_CHECKPOINT.md') + const m14=read('docs/architecture/M14_RELEASE_TRUST_READINESS.md') + assert.ok(agents.includes('Historical GitHub Issue #50 is closed')) + assert.ok(checkpoint.includes('Current continuation semantics — 2026-10-08')) + assert.ok(checkpoint.includes('closed authorization provenance')) + assert.ok(checkpoint.includes('not a live gate')) + assert.ok(checkpoint.includes('Live PR, branch, check and protected-main identities are resolved from GitHub at runtime')) + assert.ok(m14.includes('**State:** `VERIFYING / PARTIALLY COMPLETE`')) + assert.ok(m14.includes('**Authority provenance:** historical owner approval in closed GitHub Issue #50')) + assert.ok(m14.includes('**Current continuation authority:** open Issue #62')) + assert.ok(m14.includes('never a reason to prompt for re-approval')) + assert.equal(m14.includes('**State:** `IMPLEMENTING`'),false) }) test('Continuous Fast-Batch chains safe milestones without routine user confirmation or weakened gates', () => { @@ -142,8 +168,10 @@ test('Continuous Fast-Batch chains safe milestones without routine user confirma assert.equal(responseContract.includes('execution budget is exhausted'),false) assert.equal(options.includes('host/session execution budget remains'),false) assert.equal(fastBatch.includes('host/session execution budget is exhausted'),false) - assert.ok(options.includes('terminal execution-window handoff')) - assert.ok(options.includes('continue automatically')) + assert.ok(options.includes('autonomous continuation')) + assert.ok(options.includes('Do **not** present numbered 1/2/3 engineering choices')) + assert.ok(options.includes('resume/rehydration entry')) + assert.equal(options.includes('Respond with 1 to 3 shuffled valid next-action options'),false) assert.equal(claims.claims.find(x=>x.id==='CLAIM-010')?.value,true) assert.equal(claims.claims.find(x=>x.id==='CLAIM-011')?.value,false) assert.equal(claims.claims.find(x=>x.id==='CLAIM-012')?.value,false) @@ -158,6 +186,16 @@ test('Continuous Fast-Batch chains safe milestones without routine user confirma assert.equal(claims.claims.find(x=>x.id==='CLAIM-021')?.value,false) assert.equal(claims.claims.find(x=>x.id==='CLAIM-022')?.value,false) assert.equal(claims.claims.find(x=>x.id==='CLAIM-023')?.value,true) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-024')?.value,false) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-025')?.value,false) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-026')?.value,false) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-027')?.value,false) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-028')?.value,false) + assert.equal(claims.claims.find(x=>x.id==='CLAIM-029')?.value,false) + assert.ok(agents.includes('User-prompt suppression and authority reconciliation')) + assert.ok(agents.includes('Committed state is a semantic checkpoint, not a live transaction ledger')) + assert.ok(agents.includes('do not hand control back merely because repository state moved')) + assert.equal(agents.includes('GitHub Issue #50 is the current planning/product-authority gate only'),false) assert.ok(agents.includes('Post-merge recursion guard')) assert.ok(agents.includes('expected post-merge pointer drift')) assert.ok(fastBatch.includes('must not spawn a recursive state-only PR')) diff --git a/tools/ai-supervisor-state-audit.mjs b/tools/ai-supervisor-state-audit.mjs index df4166d5..fe17c9de 100644 --- a/tools/ai-supervisor-state-audit.mjs +++ b/tools/ai-supervisor-state-audit.mjs @@ -1,10 +1,10 @@ import fs from 'node:fs' const fail=m=>{throw new Error('[ai-supervisor-state-audit] '+m)} -const p={state:'docs/ai-state/CURRENT-STATE.yaml',checkpoint:'docs/ai-state/LAST-CHECKPOINT.md',journal:'docs/ai-state/EXECUTION-JOURNAL.md',queue:'docs/ai-state/COORDINATION-QUEUE.yaml',claims:'docs/ai-state/DETERMINISTIC-CLAIMS.yaml',runner:'benchmarks/runner/registry.json',agents:'AGENTS.md'} +const p={state:'docs/ai-state/CURRENT-STATE.yaml',checkpoint:'docs/ai-state/LAST-CHECKPOINT.md',journal:'docs/ai-state/EXECUTION-JOURNAL.md',queue:'docs/ai-state/COORDINATION-QUEUE.yaml',claims:'docs/ai-state/DETERMINISTIC-CLAIMS.yaml',runner:'benchmarks/runner/registry.json',agents:'AGENTS.md',fast:'docs/ai-state/FAST-BATCH-EXECUTION.md',response:'docs/ai-state/USER-RESPONSE-CONTRACT.md',options:'.ai/NEXT-ACTION-OPTIONS.md',statusCheckpoint:'docs/status/AI_CHECKPOINT.md',m14:'docs/architecture/M14_RELEASE_TRUST_READINESS.md'} for(const x of Object.values(p))if(!fs.existsSync(x))fail('missing '+x) for(const [x,max] of [[p.state,12*1024],[p.checkpoint,16*1024],[p.journal,32*1024]])if(fs.statSync(x).size>max)fail(x+' exceeds compact size limit') const parse=x=>{try{return JSON.parse(fs.readFileSync(x,'utf8'))}catch(e){fail(x+' must remain JSON-compatible YAML: '+e.message)}} -const s=parse(p.state),q=parse(p.queue),c=parse(p.claims),r=parse(p.runner),a=fs.readFileSync(p.agents,'utf8'),cp=fs.readFileSync(p.checkpoint,'utf8'),readme=fs.readFileSync('README.md','utf8') +const s=parse(p.state),q=parse(p.queue),c=parse(p.claims),r=parse(p.runner),a=fs.readFileSync(p.agents,'utf8'),cp=fs.readFileSync(p.checkpoint,'utf8'),readme=fs.readFileSync('README.md','utf8'),fast=fs.readFileSync(p.fast,'utf8'),response=fs.readFileSync(p.response,'utf8'),options=fs.readFileSync(p.options,'utf8'),statusCheckpoint=fs.readFileSync(p.statusCheckpoint,'utf8'),m14=fs.readFileSync(p.m14,'utf8') for(const k of ['observed_main_sha','active_issue','active_pr','active_branch','current_milestone','milestone_status','last_completed_milestone','exact_next_safe_action','pending_runner_ids','blocked_runner_ids','current_blockers','timeout_control','fallback_work_policy','state_sync_policy','response_status'])if(!(k in s))fail('CURRENT-STATE missing '+k) if(s.compact_state_path!=='docs/ai-state')fail('compact_state_path mismatch') if(!/^[0-9a-f]{40}$/i.test(s.observed_main_sha||''))fail('observed_main_sha invalid') @@ -19,6 +19,9 @@ if(s.timeout_control?.chain_safe_milestones_without_user_reply!==true)fail('safe if(s.timeout_control?.technical_blocker_confirmation_required!==false)fail('technical blocker confirmation must default false') if(s.timeout_control?.waiting_external_lane_stops_execution_window!==false)fail('waiting external lane must not stop execution window') if(s.timeout_control?.readme_progress_sync_each_milestone!==true)fail('README progress sync must remain enabled for each milestone') +if(s.timeout_control?.authority_drift_requires_user_confirmation!==false)fail('authority drift must not require user confirmation') +if(s.timeout_control?.rehydrate_material_drift_in_same_window!==true)fail('material drift must rehydrate in the same execution window') +if(s.timeout_control?.terminal_engineering_choice_prompt_default!==false)fail('terminal engineering choice prompts must default false') const fw=s.fallback_work_policy if(!fw||fw.enabled!==true||fw.scan_before_terminal_handoff!==true||fw.automatic_selection!==true)fail('fallback work policy must stay enabled and automatic') if(fw.stop_early_to_conserve_tokens!==false)fail('fallback policy must forbid voluntary token-conservation stop') @@ -30,6 +33,14 @@ if(sp.recursive_post_merge_state_only_pr_forbidden!==true)fail('recursive post-m if(sp.pointer_only_drift_reconciled_in_memory!==true)fail('pointer-only drift must reconcile in memory') if(sp.semantic_status_drift_requires_source_sync!==true)fail('semantic status drift must require source sync') if(sp.merge_evidence_may_live_on_pr_issue_until_next_substantive_mutation!==true)fail('merge evidence deferral contract missing') +if(sp.committed_state_is_semantic_checkpoint!==true)fail('committed state must be a semantic checkpoint') +if(sp.live_transaction_status_read_from_github!==true)fail('live transaction status must come from GitHub') +if(sp.committed_active_pr_is_live_authority!==false)fail('committed active_pr must not be live authority') +if(sp.committed_active_branch_is_live_authority!==false)fail('committed active_branch must not be live authority') +if(sp.readme_includes_volatile_transaction_fields!==false)fail('README must exclude volatile transaction fields') +if(sp.post_merge_state_only_reconciliation_required!==false)fail('post-merge state-only reconciliation must not be required') +if(sp.closed_authority_issue_requires_user_prompt!==false)fail('closed authority issue must not require user prompt') +if(sp.last_completed_transaction_evidence_may_live_on_github!==true)fail('transaction completion evidence may live on GitHub') const fallbackOrder=['accepted_open_pr_repair_review_merge','accepted_actionable_open_issue','ci_test_security_review_audit_state_branch_repair','authorized_dependency_supply_chain_maintenance','docs_compact_state_readme_coordination_lifecycle_reconciliation','non_destructive_evidence_diagnostics_for_existing_blocker'] if(JSON.stringify(fw.order)!==JSON.stringify(fallbackOrder))fail('fallback work order drifted') const rs=s.response_status @@ -54,12 +65,11 @@ const readmeExpected=[ '**Module Progress:** ['+progressBar(rs.module_progress.percent)+'] **'+rs.module_progress.percent+'%**', '**Overall Progress:** ['+progressBar(rs.overall_progress.percent)+'] **'+rs.overall_progress.percent+'%** — '+rs.overall_progress.scope, '**Active Issue:** '+(s.active_issue===null?'none':'#'+s.active_issue), - '**Active PR:** '+(s.active_pr===null?'none':'#'+s.active_pr), - '**Active Branch:** `'+s.active_branch+'`', - '**Last Completed:** '+s.last_completed_milestone, '**Next Action:** '+s.exact_next_safe_action, ] for(const marker of readmeExpected)if(!readme.includes(marker))fail('README progress block stale/missing: '+marker) +const progressBlock=readme.slice(readme.indexOf(''),readme.indexOf('')) +for(const volatile of ['**Active PR:**','**Active Branch:**','**Last Completed:**'])if(progressBlock.includes(volatile))fail('README progress block contains volatile transaction field '+volatile) if(q.non_authoritative_resume_index!==true)fail('coordination queue must be non-authoritative') if(!Array.isArray(q.issues)||!Array.isArray(q.pull_requests))fail('coordination queue arrays missing') @@ -68,5 +78,12 @@ const runnerIds=new Set((r.entries||[]).map(x=>x.id)) for(const k of ['pending_runner_ids','blocked_runner_ids'])for(const id of s[k])if(!runnerIds.has(id))fail(k+' references missing '+id) for(const id of s.blocked_runner_ids){const e=r.entries.find(x=>x.id===id);if(e?.definition_status!=='blocked')fail(id+' is not blocked in registry')} for(const m of ['## Verified','## Not Verified','## Known Risk','## Next Action'])if(!cp.includes(m))fail('LAST-CHECKPOINT missing '+m) -for(const m of ['docs/ai-state/CURRENT-STATE.yaml','Runner registration NEVER grants execution authority','at most one consolidated CI/status refresh','OPEN GitHub Issues first','Message delivery timed out','Repo:','Current Work:','Current Module:','Module Progress:','Overall Progress:','README progress synchronization contract','every completed milestone','Fast-Batch default','Continuous autonomous execution window','Milestone completion is a checkpoint','Do **not** ask the user to diagnose or confirm a technical repair','A single blocked lane','Mandatory fallback work scan','Do not voluntarily stop merely to conserve tokens/context','Post-merge recursion guard','expected post-merge pointer drift'])if(!a.includes(m))fail('AGENTS missing '+m) +for(const m of ['Current continuation semantics — 2026-10-08','closed authorization provenance','not a live gate','Live PR, branch, check and protected-main identities are resolved from GitHub at runtime'])if(!statusCheckpoint.includes(m))fail('AI_CHECKPOINT stale authority mirror: '+m) +for(const m of ['**State:** `VERIFYING / PARTIALLY COMPLETE`','**Authority provenance:** historical owner approval in closed GitHub Issue #50','**Current continuation authority:** open Issue #62','never a reason to prompt for re-approval'])if(!m14.includes(m))fail('M14 authority mirror stale: '+m) +for(const forbidden of ['GitHub Issue #50 is the current planning/product-authority gate only','stop and rehydrate if main/head/scope/governance/authorization moved materially'])if(a.includes(forbidden))fail('AGENTS contains stale prompt trigger: '+forbidden) +for(const m of ['Do not show numbered next-action choices by default','Closed/superseded Issues, stale compact-state pointers'])if(!response.includes(m))fail('response contract missing prompt suppression: '+m) +for(const m of ['Routine technical work never requires user confirmation','Before asking, perform a fresh live-authority reconciliation'])if(!fast.includes(m))fail('Fast-Batch prompt suppression missing: '+m) +for(const m of ['autonomous continuation','Do **not** present numbered 1/2/3 engineering choices','resume/rehydration entry'])if(!options.includes(m))fail('next-action options contract missing autonomous rule: '+m) +if(options.includes('Respond with 1 to 3 shuffled valid next-action options'))fail('URL-only repository entry must not force numbered options') +for(const m of ['docs/ai-state/CURRENT-STATE.yaml','Runner registration NEVER grants execution authority','at most one consolidated CI/status refresh','OPEN GitHub Issues first','Message delivery timed out','Repo:','Current Work:','Current Module:','Module Progress:','Overall Progress:','README progress synchronization contract','every completed milestone','Fast-Batch default','Continuous autonomous execution window','Milestone completion is a checkpoint','Do **not** ask the user to diagnose or confirm a technical repair','A single blocked lane','Mandatory fallback work scan','Do not voluntarily stop merely to conserve tokens/context','Post-merge recursion guard','expected post-merge pointer drift','User-prompt suppression and authority reconciliation','Committed state is a semantic checkpoint, not a live transaction ledger','reconcile protected `main`, OPEN Issues, OPEN PRs','do not hand control back merely because repository state moved'])if(!a.includes(m))fail('AGENTS missing '+m) console.log('AI supervisor compact state valid.')