Skip to content

[HAR.40] Retire arcforges-ai-hello: remove the main-push deploy, add a dry-run-first retirement dispatch (cleanup 5.2) - #36

Merged
deku2026 merged 3 commits into
mainfrom
task/har-40
Oct 11, 2026
Merged

deku2026 merged 3 commits into
mainfrom
task/har-40

Conversation

@deku2026

Copy link
Copy Markdown
Contributor

Cleanup 5.2 (user authorization of 2026-10-10, quoted verbatim in the coordinator brief, section 0d): retire the replaced AI Worker arcforges-ai-hello (Workflow arcforges-ai-hello, binding HELLO_AGENT, class HelloAgentWorkflow). The HAR.40 C# Harness in Cloud (#80) replaces it.

Claim: HAR.40 epoch 2 (w-deku-20261010-har-40)

Changes

  • ci.yml: removes the main-push deploy job and the deployment-verification job that depended on it. validate, quality, codeql, dependencies, candidate and verify are unchanged, and Verify stays the only required check. After this merge, no push to main deploys the Worker.
  • New retire-cloudflare.yml:
    • Trigger and access: workflow_dispatch only, main only, environment cloudflare, contents: read; inputs pass through env.
    • Default: mode is dry-run. A dry run sends only GET requests and writes plan.json.
    • The plan refuses while any non-terminal Workflow instance exists, while any status is unknown, while any paged list comes back full, or inside the seven-day drain horizon.
    • Delete mode needs mode=delete plus the exact confirm string delete arcforges-ai-hello, checked before any network call. It re-runs the plan, deletes the Workflow, then the script (without force), verifies 404 on both, and writes result.json.
  • eng/retire.mjs and eng/tests/retire.test.mjs: 21 tests with a fake fetcher cover every branch, the endpoint allowlist, and a check that no secret appears in output.
  • eng/cloudflare.mjs: exports credentials, and deploy() now refuses.
  • Status docs (AGENTS.md, docs/deploying.md, README.md, docs/development.md): retirement in progress and deletion pending, changing to retired only after the delete run verifies 404.
  • ADP-07 supporting files: eng/policy/dependency-reviews/har-40-r2.json, a successor of har-40-r1 (only the ci.yml digest and rationale change; packages identical); eng/policy/dependency-policy.json (the ci.yml binding and the review pointer); eng/provenance/files.json (new rows).
  • Untouched: wrangler.json, package.json, package-lock.json and .node-version. They are dependency inputs, and DesktopPlatform's SI-08 rule reads the wrangler workflows block. Every ai-* release, tag, deployment record, the evidence and the provenance are kept.

Authority and planning

  • The write scope comes from coordinator ruling S57(17), carried by planning repair fix8 (Design/Plan, P2-026 item 20). This PR merges only after fix8.
  • The replacement was checked read-only first: production /api/healthz returned 200 with the revision at Cloud main and nativeAot true. Live Proof 1 cannot run, because the proof environment has no AI binding. It is recorded as "not proven", per the user's 5.2 text.
  • The live dispatch (dry run, then delete) is done by the coordinator after the merge. The run ids go into the Plan HAR.40 ledger.

Validation (local, under CI conditions; hosted CI is authoritative)

  • Simulated PR merge in a fresh clone: npm ci, npm run check, which covers dependency, architecture and repository checks, prettier, biome, tsc, vitest (157) and tooling (70).
  • npm audit: 0. actionlint 1.7.12: clean. gitleaks (pinned image, WSL Docker, full history): 0.
  • Candidate build and verify:candidate passed. retire.test.mjs: 21/21.

Merge with a merge commit, keeping the three commits together.

🤖 Generated with Claude Code

deku2026 and others added 3 commits October 10, 2026 22:35
…atch workflow

eng/retire.mjs plans the retirement read-only (Worker settings, Workflow
definition, every non-terminal instance status and the paged terminal
history), refuses on any non-terminal or unknown instance, unproven paging or
activity inside the seven-day drain horizon, and in delete mode (exact
confirmation checked before any request) re-plans, deletes the Workflow, then
the Worker without force, and proves both return 404. Requests are limited to
an allowlist of the endpoints used, dry-run sends only GET, and no response
body or credential is echoed. retire-cloudflare.yml runs it only by
workflow_dispatch on main in the cloudflare environment. eng/cloudflare.mjs
exports credentials() for reuse and deploy() now refuses because
arcforges-ai-hello is retired. The new files are first-party in the source
inventory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… retirement

ci.yml loses only the main-push "Deploy Cloudflare" job and the dependent
"Verify deployment" job, under the user's 2026-10-10 cleanup authorization
(item 5.2) and ruling S57(17). validate, quality, codeql, dependencies,
candidate and Verify are unchanged; Verify stays the only required check and
no job needs the removed ones. Main no longer deploys or creates ai-*
prereleases; the Worker and Workflow are deleted only by retire-cloudflare.yml.

ci.yml is a bound dependency-policy input, so its digest is rebound (ADP-07
admission input binding): har-40-r1 supersedes sharp-source-map-js-r1, names
reviewer w-deku-20261010-rev-har-40, decision approved, reviewedOn
2026-10-10 (S25), and the policy review and reviewRecord point at it.
Packages, closure, manifests, wrangler.json, .node-version, the lock and the
artifact profiles and records are unchanged. The receipt is first-party in
the source inventory.

AGENTS.md, README.md, docs/deploying.md and docs/development.md state the
retired status: main no longer deploys, npm run deploy refuses, the
retirement workflow (dry-run first, exact confirmation for delete) is the only
deletion path and its run IDs go to the Plan HAR.40 ledger; HAR.40 Proof 1 is
blocked on the operator proof-environment deploy, not proven. The automatic
main delivery section is kept as history, and every ai-* release, tag,
deployment record and evidence file is kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… progress

Merging this change removes only the main-push deploy; the Worker and
Workflow stay deployed until the retire-cloudflare delete dispatch passes
and verifies 404. README, AGENTS, deploying and development docs and the
ci.yml, cloudflare.mjs and retire-cloudflare.yml comments now say the
retirement is authorized and in progress (deletion pending) instead of
claiming it is done; the retired/deleted status follows only in the
post-deletion follow-up. The pre-P2-021 AGENTS.md loop rule is marked as
history.

ci.yml is a bound dependency-policy input, so its new digest is bound by
the immutable successor receipt har-40-r2 (supersedes har-40-r1; reviewer
w-deku-20261010-rev-har-40, approved), with its files.json row. No
package, lock, manifest, wrangler.json or .node-version change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@deku2026

Copy link
Copy Markdown
Contributor Author

Independent review record: HAR.40 epoch 2 (cleanup 5.2 retirement PR). Reviewer w-deku-20261010-rev-har-40 (Opus 5.5), an independent session that authored nothing.

Reviewed 600abae for [HAR.40] epoch 2: approved.

  • Scope: every path is inside the S57(17) AI writes or is a justified ADP-07 receipt file. wrangler.json, package.json, package-lock.json and .node-version are byte-identical to main.
  • The receipt chain is append-only: har-40-r2 supersedes har-40-r1, and its packages are identical. The S25 reviewer field names this session.
  • ci.yml: only the deploy and deployment-verification jobs are removed, and Verify still needs [validate, quality, codeql, dependencies, candidate].
  • The status docs say "retirement in progress; deletion pending" until the delete run verifies 404.
  • Gates, re-run on a simulated PR merge in a fresh clone under CI conditions with Node 24.21/npm 11.19: npm ci, check (157 vitest and 70 tooling tests), audit 0, actionlint clean, gitleaks 0, candidate build and verify, retire tests 21/21.

Non-blocking:

  • The runtime refusal string and one workflow step name say "retired". They can be reworded in the post-deletion follow-up.
  • PR CI does not run retire.test.mjs; it runs as the first step of the dispatch workflow.
  • Stale deployment text remains outside the writes (docs/provenance.md:25, :29; docs/dependency-policy.md:11), for a documentation follow-up.
  • Merge after fix8, with a merge commit.

@deku2026
deku2026 merged commit d3eef45 into main Oct 11, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant