Autonomy implementation status (evidence)

Date: 2026-07-18 Nearest milestone: Safe autonomous mutation in a mocked environment — not production docs.subactor.com deploy. Roadmap: ../plans/autonomy-implementation-roadmap.md ADRs: adr/README.md

CURRENT / TARGET / PLANNED / LEGACY

LayerCURRENT (implemented)TARGETPLANNEDLEGACY (still present)
IntentPack registry + pack-first resolvers; derived phrases/LLM/step-catalog sync; PR10: INTENT_PACK_DUAL_RUN=shadow default; cold FALLBACK_PHRASES removed (fail closed)Single pack SSOT end-to-endFlip dual-run off after metrics; full Planfile auto from packPlanfile ticket body hand-maintained (ids synced); dual-run shadow retained
Policyon_fail / retry / timeout / depends_on vs after; rollback → release-rollback (PR7); verify → applied_unverified (PR8)Full lifecycle + try_in_orderDefault halt
Apply authDual kill switch + signed apply grant + plan_hash + jti replay (PR5a–5c)production verify DoD on live DNSPR9 cutover (blocked)Founder token ≠ grant (ADR-003)
TransportSFTP readiness (PR6) + release paths (PR7): upload→verify→activate; symlink/pointerLive SFTP apply on Plesk + docroot cutoverPR9Live urirun-node rebuilt 2026-07-18: paramiko OK, production_publish_ready=true; FTP ok; legacy direct /httpdocs sync still present
DNS / verifyPR8: publish-verify ladder; PR9 prep: runbook + desired A=217.160.250.222DNS→Plesk + live public DoDPR9 execute when G0–G6 greenGitHub Pages unhealthy LKG; origin subdomain+probe marker OK (needs_human: cert + DNS HITL)
VaultLease via browser-agent vault in recipes; lease error mapping (401→credential_expired)ADR-006 lease/revoke/audit.env tokens in lab

PR0–PR8 evidence table

Commands run 2026-07-18 (PR8):

UnitComponent commit (sibling)Platform pinTestsStatus
PR1 canonical paths + driftADR-007 docs; gate in platformplatform fbd0692; drift scriptcheck-component-drift.mjs okverified
PR2 intent pack registrycore d44fbb2 (pack-first intents earlier in history); packs in platform/config/intent-packs/core pin d44fbb2; agents 771053dintent-pack-registry 6/6verified (dual-run retained)
PR3 phrase/LLM/step dedupeagents 771053d; sync script on platformagents pin 771053dsync --check ok; nlp-uri-pack 4/4partial — pack SSOT for resolvers + derived artifacts; Planfile imports still separate; dual-run until PR10
PR4 recipe policy engineorchestrator (policy core + hardening)orchestrator not a compose submodule (CLI package)pipeline testspartial→hardened — ticket/rollback stages; compensation → PR7
PR5a immutable manifesturirun-connector-plesk 63a4fe1; connectors 580ba39; testkit 8675a5dconnectors/testkit pins updatedplesk pytest; testkit; smoke dry-rundone
PR5b signed apply grantruntime 31d2cb6; core 011e763; connectors a42dcfc; plesk 66be5c5; testkit 531170cplatform 385b24cruntime 12; plesk 33; testkit 9done — grant-required apply
PR5c jti replayruntime c6ba013; plesk cecfb36; core 79d3178; connectors c578cc2platform 17740ccruntime 17; plesk 34done — single-use jti
PR6 SFTP/paramiko readinessplesk 7d8ab5b; connectors cc4c4e5platform 0ab75d1plesk 42; Dockerfile testdone
PR7 release upload/activate/rollbackplesk d72e8d8; orchestrator 2adf375; connectors d8895c9platform d302defplesk 53; orchestrator 22done
PR8 DNS/TLS + fingerprint verifyplesk 530dda9; orchestrator 9c687f5; connectors 866cc96platform 803aa45plesk 64; orchestrator 24done
PR9 docs Pages→Plesk cutoverdocs (this update)formal origin release + marker; public Pagesprep / blocked on G2/G6 — G1 green; cert + DNS HITL; no DNS flip
PR10 dual-run reducecore f679796; agents b8fa969platform f22763ccontrol 9/9; agents 5/5; sync --check OKin progress (shadow retained)

Honesty notes:

Fail-closed apply gates (CURRENT)

GateEnv / artifactDeny codeStatus
Master killAUTONOMY_MUTATIONS_ENABLED≠1autonomy_mutations_disabledCURRENT (PR5b)
Domain killPLESK_SYNC_APPLY≠1plesk_sync_apply_requiredCURRENT
Grantmissing / bad sig / expired / wrong bindingapply_grant_*CURRENT (PR5b)
Manifestapply plan_hash ≠ recomputed dry-runplan_hash_mismatchCURRENT (PR5a)
Replayreused jtiapply_grant_replayCURRENT (PR5c)
SFTP requiredno paramiko / FTP-only without fallbackcapability_unavailableCURRENT (PR6)
Publish verifyDNS/TLS/HTTPS/fingerprint mismatch when enableddns_mismatch / tls_san_mismatch / fingerprint_stale → stage applied_unverifiedCURRENT (PR8)

Founder / admin grant path

After dry-run: POST /api/apply-grants (scope plans:approve) with run_id, plan_hash, artifact_sha256, target, pack, risk_class. HMAC: APPLY_GRANT_HMAC_SECRET (preferred) or TOKEN_PEPPER; rotation via APPLY_GRANT_HMAC_SECRET_NEXT. Pass returned grant as apply_grant on mutate. Each jti is single-use (replay store; optional APPLY_GRANT_JTI_STORE file). Secrets never in tickets/logs.

Transport policy (PR6) + release (PR7) + verify (PR8)

PR5–PR8 split

  1. ADR-003 Accepted (crypto/TTL/replay/rotation/fail-closed).
  2. PR5a–5c done: manifest, grant, jti replay.
  3. PR6 done: paramiko in image, capability readiness, structured errors, SFTP-required prod policy.
  4. PR7 done: release upload / activate / rollback + orchestrator compensation.
  5. PR8 done: DNS/TLS preflight + public content fingerprint verify (mocked; no cutover claim).
  6. PR9 prep: cutover runbook + desired A=217.160.250.222 + formal origin releaseno production DNS flip (G2/G6 red; G1 green).
  7. PR10 in progress: INTENT_PACK_DUAL_RUN=shadow|off|on (default shadow); cold FALLBACK_PHRASES removed; dual-run shadow kept until metrics OK.

Do not treat GitHub Pages as safe DNS/content rollback without noting it is an unhealthy last_known_good until Plesk cutover + verify (ADR-002/005).

PR9 dry preflight (public + origin, 2026-07-18 continuation #5)

CLI autonomy (founder ask)

CURRENT (2026-07-18): subactor ask "…docs-stage…" --execute --yes completes reversible apply without permanent kill switches:

  1. pack-first + capability preflight
  2. dry-run (publish-verify skipped on dry-run)
  3. session mutate lease on urirun-node (TTL)
  4. signed apply-grant
  5. apply → applied; lease cleared

docs-stage docroot bound to /docs-stage.subactor.com (or …/current). Production docs.subactor.com public DNS cutover remains HITL (Pages → Plesk).