Context
During the PR review of #10198 (which fixed #10191), we identified a tooling gap. A newly-wired consumer (PullRequestSyncer) referenced a config key (pullsDir) that the template did not provide. This caused a runtime crash in sync_all.
The Problem
There is no defensive guard ensuring that all sync services (IssueSyncer, PullRequestSyncer, DiscussionSyncer, ReleaseSyncer) have the necessary config keys defined in the baseline config.template.mjs.
The Architectural Reality
The template/copy-for-local-override pattern is powerful but fragile. Adding a regression test that verifies the template's completeness against all consumers will catch future drift cheaply.
The Fix
Add a regression test spec that:
- Mocks
aiConfig.issueSync without pullsDir, asserting it throws the specific path error (documenting the pre-fix failure mode).
- Mocks
aiConfig.issueSync with the full config.template.mjs structure and asserts that no undefined path references occur across any of the syncer instantiations.
Acceptance Criteria
Handoff Retrieval Hints
query_raw_memories(query="sync_all config template regression test missing key undefined")
Context
During the PR review of
#10198(which fixed#10191), we identified a tooling gap. A newly-wired consumer (PullRequestSyncer) referenced a config key (pullsDir) that the template did not provide. This caused a runtime crash insync_all.The Problem
There is no defensive guard ensuring that all sync services (
IssueSyncer,PullRequestSyncer,DiscussionSyncer,ReleaseSyncer) have the necessary config keys defined in the baselineconfig.template.mjs.The Architectural Reality
The template/copy-for-local-override pattern is powerful but fragile. Adding a regression test that verifies the template's completeness against all consumers will catch future drift cheaply.
The Fix
Add a regression test spec that:
aiConfig.issueSyncwithoutpullsDir, asserting it throws the specific path error (documenting the pre-fix failure mode).aiConfig.issueSyncwith the fullconfig.template.mjsstructure and asserts that noundefinedpath references occur across any of the syncer instantiations.Acceptance Criteria
Handoff Retrieval Hints
query_raw_memories(query="sync_all config template regression test missing key undefined")