chore(config): service.json becomes factory-image only (SVC-4, #753) #792
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!792
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/753"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #753
Summary
loadWebhookConfigno longer readsservice.jsonat runtime; all service-infra fields now come fromgetServiceConfig()(DB) — the DB row is seeded at boot bysyncServiceConfigBuiltinWEBHOOK_SECRETenv var →svcDb.webhook_secret_refsecret table entry (viadecryptSync)syncBuiltinsFromRepo()moved to run beforeloadWebhookConfig()inmain.tsso theservice_configbuiltin row exists when the loader callsgetServiceConfig()agents.jsonservice-infra fields now point to/api/service-configinstead ofservice.jsonservice-config-schema.tsfields annotated with boot-time only commentsbuiltin-sync.ts: emits a warning whenservice.jsonchanges, directing to the dashboarddocs/configuration.mdanddocs/modules.mdTest plan
bun test apps/server/src/shared/config/webhook-config.test.ts— all tests passbun test apps/server/src/http/webhook.test.ts— all 42 tests passbun test apps/server/src/— 3241 pass, 0 failjust qa(typecheck + lint + format) — clean🤖 Generated with Claude Code
All AC met.
syncBuiltinsFromRepocorrectly moved beforeloadWebhookConfig;webhook-config.tsreads fromgetServiceConfig()not file; secret resolution chain (env → DB ref) is sound; schema comments match spec wording.Nit: per-field inline comments in
service-config-schema.tsare identical repetitions of the class-level jsdoc — harmless.PR has conflicts — please rebase on main before merging.
c7e4ea819088dda6a150