Retire code-fleet-watch #830

Open
opened 2026-08-14 06:40:45 +00:00 by coilyco-ops · 2 comments
Member

Outcome

Retire the code-fleet-watch observer completely. Kai selected full teardown: live workload, credentials, SSM parameters, registry package, repository surface, and the managed public issues all go.

Reopened after #831 merged. That PR carried Closes #830 but covered only the repository half, so the auto-close was premature. The live and credential teardown below is still outstanding.

Live

  • Suspend the code-fleet-watch CronJob in namespace forgejo.
  • Delete the CronJob, the code-fleet-watch-runtime, code-fleet-watch-reporter, and code-fleet-watch-registry ExternalSecrets. The workload is applied through a tracked Ward verb rather than Flux, so deletion is not reconciled back. Each ExternalSecret uses creationPolicy: Owner, so its projected Secret is garbage-collected with it.

kubectl delete is absent from the guarded aosguard ops kubectl surface and was denied to the agent, so this step is operator-only:

kubectl delete cronjob code-fleet-watch -n forgejo
kubectl delete externalsecret code-fleet-watch-runtime code-fleet-watch-reporter code-fleet-watch-registry -n forgejo

Credentials

  • Revoke the coilyco-ops PAT code-fleet-watch-issues. No guarded verb exists. The next ward exec coilyco-ops-provision revokes it regardless, because the revoke stage enumerates the bot's live PATs from the API rather than the spec list.
  • Delete SSM /forgejo/coilyco-ops/code-fleet-watch-issue-token.
  • Delete SSM /coilysiren/code-fleet-watch/denylist.
  • Delete the private registry package coilyco-flight-deck/code-fleet-watch. No guarded verb exists.
  • Remove the code-fleet-watch-issue-token row from the coilyco-ops credential-family rotation script.

Both SSM deletions wait on the live step above. Deleting the parameters while their ExternalSecrets exist leaves those ExternalSecrets failing to sync hourly against a missing source. The agent can run these once the cluster resources are gone:

aosguard ops aws ssm delete-parameter --name /forgejo/coilyco-ops/code-fleet-watch-issue-token
aosguard ops aws ssm delete-parameter --name /coilysiren/code-fleet-watch/denylist

The shared /forgejo/coilyco-ops/read-token stays. Flux and ward-mcp consume it. The registry ExternalSecret read the shared registry-read-token, which also stays.

Repository

  • Delete deploy/code-fleet-watch/, the three docs pages, the five scripts/ entries, the five .ward/ward.yaml verbs, and .forgejo/workflows/code-fleet-watch-image.yml.
  • Remove the docs/FEATURES.md entry and the docs/k3s-deploy-notes-ssm-inventory.md denylist line.
  • Remove the two code-fleet-watch entries from coilyco-bridge/agentic-os-kai SSM.md and data/ssm-descriptions.yaml. SSM.md is generated from that YAML joined with the live AWS inventory, so this follows the SSM deletions rather than preceding them.

Landed in #831, which also removed the now-dead issue verification kind and corrected the credential-family size from 15 to 14 in the two places that state it. Git history is the archive. No stub doc remains.

Public surface

Each was commented and closed. The listed findings are unreviewed. Closing records that the scanner is gone, not that the findings were resolved.

Superseded

  • Close #668, the deployment issue.
  • Close #700, the denylist correction. Retirement removes the denylist entirely.

Acceptance

  • No code-fleet-watch resource exists in the cluster.
  • Neither SSM parameter resolves and the PAT no longer authorizes.
  • No tracked file in either repository references code-fleet-watch outside this issue and its PRs.
  • The five managed issues are closed with the retirement note.
## Outcome Retire the `code-fleet-watch` observer completely. Kai selected full teardown: live workload, credentials, SSM parameters, registry package, repository surface, and the managed public issues all go. Reopened after #831 merged. That PR carried `Closes #830` but covered only the repository half, so the auto-close was premature. The live and credential teardown below is still outstanding. ## Live * [x] Suspend the `code-fleet-watch` CronJob in namespace `forgejo`. * [ ] Delete the CronJob, the `code-fleet-watch-runtime`, `code-fleet-watch-reporter`, and `code-fleet-watch-registry` ExternalSecrets. The workload is applied through a tracked Ward verb rather than Flux, so deletion is not reconciled back. Each ExternalSecret uses `creationPolicy: Owner`, so its projected Secret is garbage-collected with it. `kubectl delete` is absent from the guarded `aosguard ops kubectl` surface and was denied to the agent, so this step is operator-only: ```text kubectl delete cronjob code-fleet-watch -n forgejo kubectl delete externalsecret code-fleet-watch-runtime code-fleet-watch-reporter code-fleet-watch-registry -n forgejo ``` ## Credentials * [ ] Revoke the `coilyco-ops` PAT `code-fleet-watch-issues`. No guarded verb exists. The next `ward exec coilyco-ops-provision` revokes it regardless, because the revoke stage enumerates the bot's live PATs from the API rather than the spec list. * [ ] Delete SSM `/forgejo/coilyco-ops/code-fleet-watch-issue-token`. * [ ] Delete SSM `/coilysiren/code-fleet-watch/denylist`. * [ ] Delete the private registry package `coilyco-flight-deck/code-fleet-watch`. No guarded verb exists. * [x] Remove the `code-fleet-watch-issue-token` row from the `coilyco-ops` credential-family rotation script. Both SSM deletions wait on the live step above. Deleting the parameters while their ExternalSecrets exist leaves those ExternalSecrets failing to sync hourly against a missing source. The agent can run these once the cluster resources are gone: ```text aosguard ops aws ssm delete-parameter --name /forgejo/coilyco-ops/code-fleet-watch-issue-token aosguard ops aws ssm delete-parameter --name /coilysiren/code-fleet-watch/denylist ``` The shared `/forgejo/coilyco-ops/read-token` stays. Flux and ward-mcp consume it. The registry ExternalSecret read the shared `registry-read-token`, which also stays. ## Repository * [x] Delete `deploy/code-fleet-watch/`, the three docs pages, the five `scripts/` entries, the five `.ward/ward.yaml` verbs, and `.forgejo/workflows/code-fleet-watch-image.yml`. * [x] Remove the `docs/FEATURES.md` entry and the `docs/k3s-deploy-notes-ssm-inventory.md` denylist line. * [ ] Remove the two `code-fleet-watch` entries from `coilyco-bridge/agentic-os-kai` `SSM.md` and `data/ssm-descriptions.yaml`. `SSM.md` is generated from that YAML joined with the live AWS inventory, so this follows the SSM deletions rather than preceding them. Landed in #831, which also removed the now-dead `issue` verification kind and corrected the credential-family size from 15 to 14 in the two places that state it. Git history is the archive. No stub doc remains. ## Public surface * [x] coilyco-flight-deck/ward#1616 * [x] coilyco-flight-deck/umbra#266 * [x] coilyco-flight-deck/mcp-beaver#37 * [x] coilyco-flight-deck/lunch-money-k8s#35 * [x] coilyco-flight-deck/agent-proxy#65 Each was commented and closed. The listed findings are unreviewed. Closing records that the scanner is gone, not that the findings were resolved. ## Superseded * [x] Close #668, the deployment issue. * [x] Close #700, the denylist correction. Retirement removes the denylist entirely. ## Acceptance * No `code-fleet-watch` resource exists in the cluster. * Neither SSM parameter resolves and the PAT no longer authorizes. * No tracked file in either repository references `code-fleet-watch` outside this issue and its PRs. * The five managed issues are closed with the retirement note.
Author
Member

Agent progress

Done:

  • CronJob suspended.
  • All five managed rolling issues commented and closed: ward#1616, umbra#266, mcp-beaver#37, lunch-money-k8s#35, agent-proxy#65.
  • #668 and #700 closed.
  • Repository removal in #831. pre-commit run --all-files and ward doctor pass, and no tracked file references code-fleet-watch after it.

Operator steps

kubectl delete is not in the guarded aosguard ops kubectl surface and was denied to the agent, so the live teardown needs an operator:

kubectl delete cronjob code-fleet-watch -n forgejo
kubectl delete externalsecret code-fleet-watch-runtime code-fleet-watch-reporter code-fleet-watch-registry -n forgejo

Each ExternalSecret uses creationPolicy: Owner, so its projected Secret is garbage-collected with it. No separate Secret deletion is needed.

Also operator-only, with no guarded verb available:

  • Revoke the code-fleet-watch-issues PAT. The next ward exec coilyco-ops-provision run does this on its own, because the revoke stage enumerates the bot's live PATs from the API rather than the spec list, so removing the spec row in #831 does not orphan it. Revoke sooner if the credential should not stay live until the next rotation.
  • Delete the private registry package coilyco-flight-deck/code-fleet-watch.

Deliberately deferred

The two SSM parameters are still present. Deleting them while the three ExternalSecrets exist would leave those ExternalSecrets failing to sync every hour against a missing source. They come out after the cluster resources are gone:

aosguard ops aws ssm delete-parameter --name /forgejo/coilyco-ops/code-fleet-watch-issue-token
aosguard ops aws ssm delete-parameter --name /coilysiren/code-fleet-watch/denylist

coilyco-bridge/agentic-os-kai still carries both entries in SSM.md and data/ssm-descriptions.yaml. SSM.md is generated from that YAML joined with the live AWS inventory, so that cleanup runs after the parameters are actually deleted, not before.

## Agent progress Done: * CronJob suspended. * All five managed rolling issues commented and closed: ward#1616, umbra#266, mcp-beaver#37, lunch-money-k8s#35, agent-proxy#65. * #668 and #700 closed. * Repository removal in #831. `pre-commit run --all-files` and `ward doctor` pass, and no tracked file references `code-fleet-watch` after it. ## Operator steps `kubectl delete` is not in the guarded `aosguard ops kubectl` surface and was denied to the agent, so the live teardown needs an operator: ```text kubectl delete cronjob code-fleet-watch -n forgejo kubectl delete externalsecret code-fleet-watch-runtime code-fleet-watch-reporter code-fleet-watch-registry -n forgejo ``` Each ExternalSecret uses `creationPolicy: Owner`, so its projected Secret is garbage-collected with it. No separate Secret deletion is needed. Also operator-only, with no guarded verb available: * Revoke the `code-fleet-watch-issues` PAT. The next `ward exec coilyco-ops-provision` run does this on its own, because the revoke stage enumerates the bot's live PATs from the API rather than the spec list, so removing the spec row in #831 does not orphan it. Revoke sooner if the credential should not stay live until the next rotation. * Delete the private registry package `coilyco-flight-deck/code-fleet-watch`. ## Deliberately deferred The two SSM parameters are still present. Deleting them while the three ExternalSecrets exist would leave those ExternalSecrets failing to sync every hour against a missing source. They come out after the cluster resources are gone: ```text aosguard ops aws ssm delete-parameter --name /forgejo/coilyco-ops/code-fleet-watch-issue-token aosguard ops aws ssm delete-parameter --name /coilysiren/code-fleet-watch/denylist ``` `coilyco-bridge/agentic-os-kai` still carries both entries in `SSM.md` and `data/ssm-descriptions.yaml`. `SSM.md` is generated from that YAML joined with the live AWS inventory, so that cleanup runs after the parameters are actually deleted, not before.
Author
Member

Teardown complete

Kai ran the two kubectl delete commands. Verified afterwards: no CronJob, ExternalSecret, Secret, or Job named code-fleet-watch remains in the forgejo namespace. The projected Secrets were garbage-collected by their owning ExternalSecrets as expected, so no separate cleanup was needed.

Both SSM parameters are deleted and confirmed ParameterNotFound:

  • /coilysiren/code-fleet-watch/denylist
  • /forgejo/coilyco-ops/code-fleet-watch-issue-token

The inventory cleanup is coilyco-bridge/agentic-os-kai#873. Regenerating SSM.md also swept in seven unrelated parameters that had appeared in AWS since the last run. The file is generator-owned, so they came along rather than being hand-trimmed. They land undocumented and want descriptions from whoever owns them.

Remaining

Two items, neither blocking and neither with a guarded verb:

  • Revoke the code-fleet-watch-issues PAT. Still live. The next ward exec coilyco-ops-provision revokes it on its own.
  • Delete the private registry package coilyco-flight-deck/code-fleet-watch. Storage only, no credential exposure.

The merged branch retire-code-fleet-watch-830 is also still on the remote, since the repository does not delete branches after merge.

This issue can close once the PAT is revoked and the package is gone, or sooner if those are acceptable to leave to the next rotation.

## Teardown complete Kai ran the two `kubectl delete` commands. Verified afterwards: no CronJob, ExternalSecret, Secret, or Job named `code-fleet-watch` remains in the `forgejo` namespace. The projected Secrets were garbage-collected by their owning ExternalSecrets as expected, so no separate cleanup was needed. Both SSM parameters are deleted and confirmed `ParameterNotFound`: * `/coilysiren/code-fleet-watch/denylist` * `/forgejo/coilyco-ops/code-fleet-watch-issue-token` The inventory cleanup is coilyco-bridge/agentic-os-kai#873. Regenerating `SSM.md` also swept in seven unrelated parameters that had appeared in AWS since the last run. The file is generator-owned, so they came along rather than being hand-trimmed. They land undocumented and want descriptions from whoever owns them. ## Remaining Two items, neither blocking and neither with a guarded verb: * Revoke the `code-fleet-watch-issues` PAT. Still live. The next `ward exec coilyco-ops-provision` revokes it on its own. * Delete the private registry package `coilyco-flight-deck/code-fleet-watch`. Storage only, no credential exposure. The merged branch `retire-code-fleet-watch-830` is also still on the remote, since the repository does not delete branches after merge. This issue can close once the PAT is revoked and the package is gone, or sooner if those are acceptable to leave to the next rotation.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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
coilyco-flight-deck/infrastructure#830
No description provided.