AT-5: agents.json becomes factory-image only #747

Closed
opened 2026-05-02 17:25:41 +00:00 by claude-desktop · 3 comments
Collaborator

As a platform engineer, I want the runtime loader path that merged agents.json::types{} into a runtime singleton removed, so that agents.json is read only by the boot-time builtin-sync passes (AT-1, AT-3, AT-4) and the file becomes the same kind of factory-image artifact as mcp-builtin.json.

Acceptance criteria

Loader

  • loadWebhookConfig no longer holds a parsed types{} map at runtime.
  • getConfig().types[…] access either throws or is removed entirely — every call site has migrated under AT-2/3/4.
  • apps/server/src/shared/config/agents-config-schema.ts documents each types[] field as // boot-time builtin sync only — runtime reads go through getAgentType().

Operator messaging

  • The deprecation warning that fires when an operator edits agents.json post-deploy points at the dashboard endpoint.
  • docs/agents-architecture.md and docs/modules.md updated to reflect the new boot flow.

Tests

  • Existing boot tests pass against the new path.
  • cfg.types[t] access outside builtin-sync.ts and tests is grep-clean.

Out of scope

  • Dropping agents.json from the repo entirely — Maximalist option in spec preamble; deferred.
  • Dashboard CRUD UI — AT-6.

References

  • Spec: specs/config-to-db.md § Story AT-5.
  • Blocked by: AT-2, AT-3, AT-4.
As a platform engineer, I want the runtime loader path that merged `agents.json::types{}` into a runtime singleton removed, so that `agents.json` is read **only** by the boot-time builtin-sync passes (AT-1, AT-3, AT-4) and the file becomes the same kind of factory-image artifact as `mcp-builtin.json`. ## Acceptance criteria ### Loader - [ ] `loadWebhookConfig` no longer holds a parsed `types{}` map at runtime. - [ ] `getConfig().types[…]` access either throws or is removed entirely — every call site has migrated under AT-2/3/4. - [ ] `apps/server/src/shared/config/agents-config-schema.ts` documents each `types[]` field as `// boot-time builtin sync only — runtime reads go through getAgentType()`. ### Operator messaging - [ ] The deprecation warning that fires when an operator edits `agents.json` post-deploy points at the dashboard endpoint. - [ ] `docs/agents-architecture.md` and `docs/modules.md` updated to reflect the new boot flow. ### Tests - [ ] Existing boot tests pass against the new path. - [ ] `cfg.types[t]` access outside builtin-sync.ts and tests is grep-clean. ## Out of scope - Dropping `agents.json` from the repo entirely — Maximalist option in spec preamble; deferred. - Dashboard CRUD UI — AT-6. ## References - Spec: `specs/config-to-db.md` § Story AT-5. - Blocked by: AT-2, AT-3, AT-4.
Collaborator

🧹 janitor: this ticket has been idle-assigned since 2026-05-03T14:14:28.000Z. Re-dispatching.

🧹 janitor: this ticket has been idle-assigned since 2026-05-03T14:14:28.000Z. Re-dispatching.
Collaborator

PR ready: #791

AT-5 completeWebhookConfig no longer carries types: Record<string, AgentTypeConfig>. All ~35 cfg.types[…] call sites migrated; getTypeConfig(name) + listAgentTypeNames() replace direct map access. Typecheck clean, biome clean.

PR ready: https://forge.jacquin.app/charles/claude-hooks/pulls/791 **AT-5 complete** — `WebhookConfig` no longer carries `types: Record<string, AgentTypeConfig>`. All ~35 `cfg.types[…]` call sites migrated; `getTypeConfig(name)` + `listAgentTypeNames()` replace direct map access. Typecheck clean, biome clean.
Author
Collaborator

Closing — work landed in PR #791 (merged 2026-05-03 16:11). PR body did not reference Closes #747, so Forgejo did not auto-close the issue.

Closing — work landed in PR #791 (merged 2026-05-03 16:11). PR body did not reference `Closes #747`, so Forgejo did not auto-close the issue.
Sign in to join this conversation.
No milestone
No project
No assignees
3 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
charles/claude-hooks#747
No description provided.