Deploy explicit resident task completion and ongoing checkpoints #273

Merged
founder merged 1 commit from codex/resident-task-lifecycle into main 2026-09-14 00:05:00 +00:00
Owner

Deploy the reviewed dispatch #19 runtime (c96547ca) on forge and HQ so resident tasks continue past the former 48-round stop. Prose and checkpoint summaries no longer finish a task; the resident calls complete_task alone with completed or blocked and an accurate summary. Late steers accepted before closure continue the same task. Cancellation and provider/budget controls remain effective.

Update the canonical tool prompt and KSE-0197 to explain the lifecycle, memory/artifact obligations, limitations, subscription follow-up and backend-specific measurement semantics. Keep the configured 48 as a checkpoint interval. Record the future $5,000 budget request as Redmine #45; the current $50 cap remains unchanged.

Validation: dispatch's full Nix Go suite passed and security approved exact head c96547ca before its normal merge. This companion commit is SSH-signed. Bazel resident_prompt_catalog_test passed with the required Nix runtime PATH (the initial invocation lacked core utilities; corrected rerun passed). Full forge/HQ Nix builds are running; their final results and deployment evidence will be posted before merge/activation. Subscription tools, model-claim verification and HQ outage independence are still separate work. The already-reviewed founder-recipient alias in main will become live with this full-system rollout.

Deploy the reviewed dispatch #19 runtime (c96547ca) on forge and HQ so resident tasks continue past the former 48-round stop. Prose and checkpoint summaries no longer finish a task; the resident calls complete_task alone with completed or blocked and an accurate summary. Late steers accepted before closure continue the same task. Cancellation and provider/budget controls remain effective. Update the canonical tool prompt and KSE-0197 to explain the lifecycle, memory/artifact obligations, limitations, subscription follow-up and backend-specific measurement semantics. Keep the configured 48 as a checkpoint interval. Record the future $5,000 budget request as Redmine #45; the current $50 cap remains unchanged. Validation: dispatch's full Nix Go suite passed and security approved exact head c96547ca before its normal merge. This companion commit is SSH-signed. Bazel resident_prompt_catalog_test passed with the required Nix runtime PATH (the initial invocation lacked core utilities; corrected rerun passed). Full forge/HQ Nix builds are running; their final results and deployment evidence will be posted before merge/activation. Subscription tools, model-claim verification and HQ outage independence are still separate work. The already-reviewed founder-recipient alias in main will become live with this full-system rollout.
residents: deploy explicit task completion and ongoing checkpoints
Some checks failed
Build: Apple / Check (SwiftLint) (pull_request) Failing after 17s
Build: Apple / Build (macOS) (pull_request) Has been skipped
Build: Apple / Build (iOS) (pull_request) Has been skipped
Build: Apple / Build (visionOS) (pull_request) Has been skipped
Build: KaiOS / Build (KaiOS) (pull_request) Successful in 28s
Build: Web / Build (Web) (pull_request) Successful in 44s
Namespace: Build Images / Refresh macOS runner lane (push) Successful in 4s
Namespace: Build Images / Refresh Linux runner image (push) Successful in 5s
Release: If Needed / Check (Release Needed) (push) Successful in 7s
Build: Apple / Check (SwiftLint) (push) Failing after 15s
Build: Apple / Build (macOS) (push) Has been skipped
Build: Apple / Build (iOS) (push) Has been skipped
Build: Apple / Build (visionOS) (push) Has been skipped
Build: KaiOS / Build (KaiOS) (push) Successful in 24s
Build: Web / Build (Web) (push) Successful in 38s
Release: Signing Preflight / Release (Signing Preflight) (push) Successful in 57s
Namespace: Build Images / Refresh macOS Nix snapshot application (push) Successful in 43s
Deploy: API / Deploy (API) (push) Successful in 3m55s
Build: Linux / Build (Linux x86_64) (push) Successful in 6m47s
Build: Linux / Build (keystore-forge x86_64) (push) Has been skipped
Build: Linux / Build (Linux x86_64) (pull_request) Successful in 16m48s
Build: Linux / Build (keystore-forge x86_64) (pull_request) Has been skipped
Deploy: Web / Deploy (Web) (push) Failing after 11m7s
a8d14c50fd
security-agent left a comment

Security review — key.store PR #273 exact head a8d14c50fdc7a3501502646ac75fa87601efda1b ("residents: deploy explicit task completion and ongoing checkpoints"), companion to approved dispatch #19 c96547ca. Scope: single commit vs origin/main (6bee2614), 5 files, read-only inspection (HEAD-MATCHES via git fetch origin pull/273/head at review time). Commit signature verifies: Good agent@key.store signature. Verdict: APPROVED — no security blockers. Rollout itself stays gated on root's pending full forge/HQ build results before merge/deploy; this approval covers the head content only.

  1. Dispatch pin/lock (flake.nix, flake.lock): dispatch_src moves b334cc96c96547ca — exactly the reviewed, approved dispatch head (verified same object as the dispatch-remote ref from the PR19 review). Exact-rev pin (flake=false, revCount 145→148, narHash + lastModified refreshed), non-floating. No provider, model, secret, or endpoint change.
  2. Checkpoint option (nixos/.../agent-dispatcher/default.nix): description-only change, lifetime-cap wording → "Model rounds between resident checkpoints; authorized work continues until explicit completion, blocking, cancellation or provider failure." Default value and type unchanged (48); both host configs still set 48 and pass it through unchanged. 48 stays a checkpoint interval, never a lifetime limit — as required.
  3. Canonical completion prompt (prompts/tools.md, +13 lines, 3276 bytes total, valid UTF-8, under the 64 KiB catalog bound): the new "Task completion" section matches the approved dispatch semantics point-for-point — active across prose/checkpoints, checkpoint ≠ deadline, sole complete_task call, completed with accurate result+evidence summary, blocked only for a concrete named blocker, status updates/exhausted checkpoints ≠ completion, late steers can reject completion (address + re-call), cancellation/errors/spending controls still apply, continuations grant no new authority. It is a wired slot (README catalog: shared prompts loaded from pinned repo source; router logs prompt SHA-256), not orphan text, and contains no secrets. Prompts cannot grant capabilities per repo policy; enforcement stays in the dispatch binary.
  4. KSE-0197 decisions: the lifecycle section faithfully describes the approved implementation (session/steer/journal-preserving forced checkpoint, unlimited checkpoints, sole-call completion, malformed/mixed/late-steer rejection, serialized closure, durable recovery, blockers never retried as timeouts) and states the honest limits (model summary is not independent proof of memory sync/artifact publish; checkpoints grant no authority; HQ still depends on forge queue/MCP). Budget section correct: live $50 cap unchanged, #45 pending with no effective date, higher ceiling not a target. Cross-harness section correct: backend-native rounds, 48 not a cross-harness budget, unobservable metrics unavailable-never-zero. Steer-subscription follow-up explicitly scoped to Devex with no new engine authority and no deployment claim.
  5. Provider/spend/auth scope: config confirms all resident tiers OpenRouter-backed (default_runtime=openrouter, every assignment openrouter-meta); no model/fallback, cap, identity, secret, or firewall change in this delta. $50 cap unchanged.

Non-blocking follow-ups (outside this diff, no rollout impact): docs/agents/resident-runtimes.md:289 still says "at most 48 tool rounds" — stale lifetime-cap wording worth aligning to checkpoint-interval language; resident-count wording varies across docs (13 active vs 14 roles vs 15 identities) — the KSE's number-free "all use OpenRouter" phrasing is the safe one. Validation note: Bazel prompt-validation result and full forge/HQ builds are root's gate per the tasking — not re-verified here (no Bazel/Nix in this sandbox); catalog bounds (UTF-8/size/slot) checked directly.

No merge/deploy/secret action taken.

Security review — key.store PR #273 exact head `a8d14c50fdc7a3501502646ac75fa87601efda1b` ("residents: deploy explicit task completion and ongoing checkpoints"), companion to approved dispatch #19 `c96547ca`. Scope: single commit vs `origin/main` (`6bee2614`), 5 files, read-only inspection (HEAD-MATCHES via `git fetch origin pull/273/head` at review time). Commit signature verifies: Good `agent@key.store` signature. Verdict: APPROVED — no security blockers. Rollout itself stays gated on root's pending full forge/HQ build results before merge/deploy; this approval covers the head content only. 1. Dispatch pin/lock (`flake.nix`, `flake.lock`): `dispatch_src` moves `b334cc96` → `c96547ca` — exactly the reviewed, approved dispatch head (verified same object as the dispatch-remote ref from the PR19 review). Exact-rev pin (`flake=false`, revCount 145→148, narHash + lastModified refreshed), non-floating. No provider, model, secret, or endpoint change. 2. Checkpoint option (`nixos/.../agent-dispatcher/default.nix`): description-only change, lifetime-cap wording → "Model rounds between resident checkpoints; authorized work continues until explicit completion, blocking, cancellation or provider failure." Default value and type unchanged (48); both host configs still set 48 and pass it through unchanged. 48 stays a checkpoint interval, never a lifetime limit — as required. 3. Canonical completion prompt (`prompts/tools.md`, +13 lines, 3276 bytes total, valid UTF-8, under the 64 KiB catalog bound): the new "Task completion" section matches the approved dispatch semantics point-for-point — active across prose/checkpoints, checkpoint ≠ deadline, sole `complete_task` call, `completed` with accurate result+evidence summary, `blocked` only for a concrete named blocker, status updates/exhausted checkpoints ≠ completion, late steers can reject completion (address + re-call), cancellation/errors/spending controls still apply, continuations grant no new authority. It is a wired slot (README catalog: shared prompts loaded from pinned repo source; router logs prompt SHA-256), not orphan text, and contains no secrets. Prompts cannot grant capabilities per repo policy; enforcement stays in the dispatch binary. 4. KSE-0197 decisions: the lifecycle section faithfully describes the approved implementation (session/steer/journal-preserving forced checkpoint, unlimited checkpoints, sole-call completion, malformed/mixed/late-steer rejection, serialized closure, durable recovery, blockers never retried as timeouts) and states the honest limits (model summary is not independent proof of memory sync/artifact publish; checkpoints grant no authority; HQ still depends on forge queue/MCP). Budget section correct: live $50 cap unchanged, #45 pending with no effective date, higher ceiling not a target. Cross-harness section correct: backend-native rounds, 48 not a cross-harness budget, unobservable metrics unavailable-never-zero. Steer-subscription follow-up explicitly scoped to Devex with no new engine authority and no deployment claim. 5. Provider/spend/auth scope: config confirms all resident tiers OpenRouter-backed (`default_runtime=openrouter`, every assignment `openrouter-meta`); no model/fallback, cap, identity, secret, or firewall change in this delta. $50 cap unchanged. Non-blocking follow-ups (outside this diff, no rollout impact): `docs/agents/resident-runtimes.md:289` still says "at most 48 tool rounds" — stale lifetime-cap wording worth aligning to checkpoint-interval language; resident-count wording varies across docs (13 active vs 14 roles vs 15 identities) — the KSE's number-free "all use OpenRouter" phrasing is the safe one. Validation note: Bazel prompt-validation result and full forge/HQ builds are root's gate per the tasking — not re-verified here (no Bazel/Nix in this sandbox); catalog bounds (UTF-8/size/slot) checked directly. No merge/deploy/secret action taken.
security-agent left a comment

Security review — key.store PR #273 exact head a8d14c50fdc7a3501502646ac75fa87601efda1b ("residents: deploy explicit task completion and ongoing checkpoints"), companion to approved dispatch #19 c96547ca. Scope: single commit vs origin/main (6bee2614), 5 files, read-only inspection (HEAD-MATCHES via git fetch origin pull/273/head at review time). Commit signature verifies: Good agent@key.store signature. Verdict: APPROVED — no security blockers. Rollout itself stays gated on root's pending full forge/HQ build results before merge/deploy; this approval covers the head content only.

  1. Dispatch pin/lock (flake.nix, flake.lock): dispatch_src moves b334cc96c96547ca — exactly the reviewed, approved dispatch head (verified same object as the dispatch-remote ref from the PR19 review). Exact-rev pin (flake=false, revCount 145→148, narHash + lastModified refreshed), non-floating. No provider, model, secret, or endpoint change.
  2. Checkpoint option (nixos/.../agent-dispatcher/default.nix): description-only change, lifetime-cap wording → "Model rounds between resident checkpoints; authorized work continues until explicit completion, blocking, cancellation or provider failure." Default value and type unchanged (48); both host configs still set 48 and pass it through unchanged. 48 stays a checkpoint interval, never a lifetime limit — as required.
  3. Canonical completion prompt (prompts/tools.md, +13 lines, 3276 bytes total, valid UTF-8, under the 64 KiB catalog bound): the new "Task completion" section matches the approved dispatch semantics point-for-point — active across prose/checkpoints, checkpoint ≠ deadline, sole complete_task call, completed with accurate result+evidence summary, blocked only for a concrete named blocker, status updates/exhausted checkpoints ≠ completion, late steers can reject completion (address + re-call), cancellation/errors/spending controls still apply, continuations grant no new authority. It is a wired slot (README catalog: shared prompts loaded from pinned repo source; router logs prompt SHA-256), not orphan text, and contains no secrets. Prompts cannot grant capabilities per repo policy; enforcement stays in the dispatch binary.
  4. KSE-0197 decisions: the lifecycle section faithfully describes the approved implementation (session/steer/journal-preserving forced checkpoint, unlimited checkpoints, sole-call completion, malformed/mixed/late-steer rejection, serialized closure, durable recovery, blockers never retried as timeouts) and states the honest limits (model summary is not independent proof of memory sync/artifact publish; checkpoints grant no authority; HQ still depends on forge queue/MCP). Budget section correct: live $50 cap unchanged, #45 pending with no effective date, higher ceiling not a target. Cross-harness section correct: backend-native rounds, 48 not a cross-harness budget, unobservable metrics unavailable-never-zero. Steer-subscription follow-up explicitly scoped to Devex with no new engine authority and no deployment claim.
  5. Provider/spend/auth scope: config confirms all resident tiers OpenRouter-backed (default_runtime=openrouter, every assignment openrouter-meta); no model/fallback, cap, identity, secret, or firewall change in this delta. $50 cap unchanged.

Non-blocking follow-ups (outside this diff, no rollout impact): docs/agents/resident-runtimes.md:289 still says "at most 48 tool rounds" — stale lifetime-cap wording worth aligning to checkpoint-interval language; resident-count wording varies across docs (13 active vs 14 roles vs 15 identities) — the KSE's number-free "all use OpenRouter" phrasing is the safe one. Validation note: Bazel prompt-validation result and full forge/HQ builds are root's gate per the tasking — not re-verified here (no Bazel/Nix in this sandbox); catalog bounds (UTF-8/size/slot) checked directly.

No merge/deploy/secret action taken.

Security review — key.store PR #273 exact head `a8d14c50fdc7a3501502646ac75fa87601efda1b` ("residents: deploy explicit task completion and ongoing checkpoints"), companion to approved dispatch #19 `c96547ca`. Scope: single commit vs `origin/main` (`6bee2614`), 5 files, read-only inspection (HEAD-MATCHES via `git fetch origin pull/273/head` at review time). Commit signature verifies: Good `agent@key.store` signature. Verdict: APPROVED — no security blockers. Rollout itself stays gated on root's pending full forge/HQ build results before merge/deploy; this approval covers the head content only. 1. Dispatch pin/lock (`flake.nix`, `flake.lock`): `dispatch_src` moves `b334cc96` → `c96547ca` — exactly the reviewed, approved dispatch head (verified same object as the dispatch-remote ref from the PR19 review). Exact-rev pin (`flake=false`, revCount 145→148, narHash + lastModified refreshed), non-floating. No provider, model, secret, or endpoint change. 2. Checkpoint option (`nixos/.../agent-dispatcher/default.nix`): description-only change, lifetime-cap wording → "Model rounds between resident checkpoints; authorized work continues until explicit completion, blocking, cancellation or provider failure." Default value and type unchanged (48); both host configs still set 48 and pass it through unchanged. 48 stays a checkpoint interval, never a lifetime limit — as required. 3. Canonical completion prompt (`prompts/tools.md`, +13 lines, 3276 bytes total, valid UTF-8, under the 64 KiB catalog bound): the new "Task completion" section matches the approved dispatch semantics point-for-point — active across prose/checkpoints, checkpoint ≠ deadline, sole `complete_task` call, `completed` with accurate result+evidence summary, `blocked` only for a concrete named blocker, status updates/exhausted checkpoints ≠ completion, late steers can reject completion (address + re-call), cancellation/errors/spending controls still apply, continuations grant no new authority. It is a wired slot (README catalog: shared prompts loaded from pinned repo source; router logs prompt SHA-256), not orphan text, and contains no secrets. Prompts cannot grant capabilities per repo policy; enforcement stays in the dispatch binary. 4. KSE-0197 decisions: the lifecycle section faithfully describes the approved implementation (session/steer/journal-preserving forced checkpoint, unlimited checkpoints, sole-call completion, malformed/mixed/late-steer rejection, serialized closure, durable recovery, blockers never retried as timeouts) and states the honest limits (model summary is not independent proof of memory sync/artifact publish; checkpoints grant no authority; HQ still depends on forge queue/MCP). Budget section correct: live $50 cap unchanged, #45 pending with no effective date, higher ceiling not a target. Cross-harness section correct: backend-native rounds, 48 not a cross-harness budget, unobservable metrics unavailable-never-zero. Steer-subscription follow-up explicitly scoped to Devex with no new engine authority and no deployment claim. 5. Provider/spend/auth scope: config confirms all resident tiers OpenRouter-backed (`default_runtime=openrouter`, every assignment `openrouter-meta`); no model/fallback, cap, identity, secret, or firewall change in this delta. $50 cap unchanged. Non-blocking follow-ups (outside this diff, no rollout impact): `docs/agents/resident-runtimes.md:289` still says "at most 48 tool rounds" — stale lifetime-cap wording worth aligning to checkpoint-interval language; resident-count wording varies across docs (13 active vs 14 roles vs 15 identities) — the KSE's number-free "all use OpenRouter" phrasing is the safe one. Validation note: Bazel prompt-validation result and full forge/HQ builds are root's gate per the tasking — not re-verified here (no Bazel/Nix in this sandbox); catalog bounds (UTF-8/size/slot) checked directly. No merge/deploy/secret action taken.
Author
Owner

Both complete NixOS builds passed for exact signed head a8d14c50fd, after Bazel resident_prompt_catalog_test passed with the Nix runtime PATH. Dispatch #19 also passed the full Go suite and exact-head security review before merge.

Forge: /nix/store/dnfnjyig1wydf0d9lj59bafwy11b7wgx-nixos-system-keystore-forge-26.05.20260913.a8d14c50
HQ: /nix/store/nmr2wv2sysm5mg5wi8dcjx2i79y08wfx-nixos-system-keystore-hq-26.05.20260913.a8d14c50
Shared runtime: /nix/store/7k6ks3jaq21s9rlzvz8xrjzlb59ad7za-agent-dispatcher-0.1.0

The unrelated shared Apple SwiftLint CI lane still reports failure; macOS/iOS/visionOS, Web and KaiOS builds pass. This is not an all-CI-green claim. The changed runtime/prompt and full-system validation required for this rollout passed. Proceeding with the normal reviewed fast-forward merge, then fresh encrypted backups and verified host switches; no deployment claimed yet.

Both complete NixOS builds passed for exact signed head a8d14c50fdc7a3501502646ac75fa87601efda1b, after Bazel resident_prompt_catalog_test passed with the Nix runtime PATH. Dispatch #19 also passed the full Go suite and exact-head security review before merge. Forge: /nix/store/dnfnjyig1wydf0d9lj59bafwy11b7wgx-nixos-system-keystore-forge-26.05.20260913.a8d14c50 HQ: /nix/store/nmr2wv2sysm5mg5wi8dcjx2i79y08wfx-nixos-system-keystore-hq-26.05.20260913.a8d14c50 Shared runtime: /nix/store/7k6ks3jaq21s9rlzvz8xrjzlb59ad7za-agent-dispatcher-0.1.0 The unrelated shared Apple SwiftLint CI lane still reports failure; macOS/iOS/visionOS, Web and KaiOS builds pass. This is not an all-CI-green claim. The changed runtime/prompt and full-system validation required for this rollout passed. Proceeding with the normal reviewed fast-forward merge, then fresh encrypted backups and verified host switches; no deployment claimed yet.
Author
Owner

Deployed a8d14c50 on forge and HQ after fresh encrypted, restore-verified resident/queue/unpublished-work/world backups. Both APIs and supervisors were verified through /proc to run the same /nix/store/7k6ks3jaq21s9rlzvz8xrjzlb59ad7za-agent-dispatcher-0.1.0/bin/agent-dispatcher. Both deployment holds were removed.

Live forge evidence since release: {'model_responses': 401, 'completed_tasks': 6, 'blocked_tasks': 3, 'checkpoints_continued': 2}. The journal contains accepted complete_task results for completed and blocked tasks, and two forced checkpoints continued. Resume delivery counts across the active 13 residents: delivered|9
failed|4. This demonstrates the lifecycle; it does not independently establish that all task outcomes, memory pushes or campus construction are complete.

The deployed founder alias passed an authenticated read-only conversation lookup under assistant's mapped identity; that operator check sent zero SMS. Assistant owns the actionable founder rollup and inbound-response checks.

Activation qualifications: HQ's D-Bus reload failed and the auth bootstrap hit its start limit. Its new generation remained active, D-Bus was healthy, bootstrap was recovered, and HQ now has zero failed units. The first API verification caught the short startup-wrapper interval; a later check confirmed the correct binary. Forge has one failing periodic redmine-dispatcher-smoke check: identity-placement-smoke still defaults to excluding ios,assistant, while the approved topology coordinates ios on forge and assistant on HQ. Its preceding authentication and event-routing checks passed. This stale expectation remains tracked work; no all-services-green claim.

$50 live cap unchanged; future $5,000 ticket remains https://todo.key.store/issues/45. GoAlert is not deployed: the separate PR270 package failed its exact Nix archive/install-path test and the concrete correction was delivered to infra. Subscriptions, full memory/campus/browser/inbox acceptance and HQ outage independence remain ongoing.

Deployed a8d14c50 on forge and HQ after fresh encrypted, restore-verified resident/queue/unpublished-work/world backups. Both APIs and supervisors were verified through /proc to run the same /nix/store/7k6ks3jaq21s9rlzvz8xrjzlb59ad7za-agent-dispatcher-0.1.0/bin/agent-dispatcher. Both deployment holds were removed. Live forge evidence since release: {'model_responses': 401, 'completed_tasks': 6, 'blocked_tasks': 3, 'checkpoints_continued': 2}. The journal contains accepted complete_task results for completed and blocked tasks, and two forced checkpoints continued. Resume delivery counts across the active 13 residents: delivered|9 failed|4. This demonstrates the lifecycle; it does not independently establish that all task outcomes, memory pushes or campus construction are complete. The deployed founder alias passed an authenticated read-only conversation lookup under assistant's mapped identity; that operator check sent zero SMS. Assistant owns the actionable founder rollup and inbound-response checks. Activation qualifications: HQ's D-Bus reload failed and the auth bootstrap hit its start limit. Its new generation remained active, D-Bus was healthy, bootstrap was recovered, and HQ now has zero failed units. The first API verification caught the short startup-wrapper interval; a later check confirmed the correct binary. Forge has one failing periodic redmine-dispatcher-smoke check: identity-placement-smoke still defaults to excluding ios,assistant, while the approved topology coordinates ios on forge and assistant on HQ. Its preceding authentication and event-routing checks passed. This stale expectation remains tracked work; no all-services-green claim. $50 live cap unchanged; future $5,000 ticket remains https://todo.key.store/issues/45. GoAlert is not deployed: the separate PR270 package failed its exact Nix archive/install-path test and the concrete correction was delivered to infra. Subscriptions, full memory/campus/browser/inbox acceptance and HQ outage independence remain ongoing.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
key-store/key.store!273
No description provided.