@event4u/agent-config 9.25.0 → 9.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +58 -143
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/conformance.md +21 -2
  5. package/dist/agent-src/commands/review/changes.md +6 -5
  6. package/dist/agent-src/commands/roadmap/next.md +256 -0
  7. package/dist/agent-src/commands/roadmap.md +12 -4
  8. package/dist/agent-src/contexts/execution/subagent-routing.md +4 -1
  9. package/dist/agent-src/rules/active-remediation.md +2 -0
  10. package/dist/agent-src/rules/analysis-skill-routing.md +2 -0
  11. package/dist/agent-src/rules/architecture.md +2 -0
  12. package/dist/agent-src/rules/artifact-drafting-protocol.md +2 -0
  13. package/dist/agent-src/rules/artifact-engagement-recording.md +2 -0
  14. package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
  15. package/dist/agent-src/rules/autonomous-execution.md +2 -0
  16. package/dist/agent-src/rules/brand-consistency.md +2 -0
  17. package/dist/agent-src/rules/brand-source-of-truth.md +2 -0
  18. package/dist/agent-src/rules/broken-access-control.md +2 -0
  19. package/dist/agent-src/rules/cli-output-handling.md +2 -0
  20. package/dist/agent-src/rules/code-comment-discipline.md +2 -0
  21. package/dist/agent-src/rules/code-provenance.md +2 -0
  22. package/dist/agent-src/rules/command-suggestion-policy.md +2 -0
  23. package/dist/agent-src/rules/commit-conventions.md +2 -0
  24. package/dist/agent-src/rules/communication-through-line.md +2 -0
  25. package/dist/agent-src/rules/content-quoting-floor.md +2 -0
  26. package/dist/agent-src/rules/context-hygiene.md +10 -0
  27. package/dist/agent-src/rules/copilot-routing.md +2 -0
  28. package/dist/agent-src/rules/cross-source-consistency.md +2 -0
  29. package/dist/agent-src/rules/decision-revisit-gate.md +2 -0
  30. package/dist/agent-src/rules/delegation-policy.md +5 -2
  31. package/dist/agent-src/rules/design-fidelity.md +19 -1
  32. package/dist/agent-src/rules/design-review-after-ui-write.md +120 -0
  33. package/dist/agent-src/rules/devcontainer-routing.md +2 -0
  34. package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
  35. package/dist/agent-src/rules/docker-commands.md +2 -0
  36. package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
  37. package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
  38. package/dist/agent-src/rules/domain-safety-pii.md +2 -0
  39. package/dist/agent-src/rules/domain-safety-retention.md +2 -0
  40. package/dist/agent-src/rules/downstream-changes.md +2 -0
  41. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  42. package/dist/agent-src/rules/evaluator-independence.md +19 -3
  43. package/dist/agent-src/rules/external-code-graph-interop.md +2 -0
  44. package/dist/agent-src/rules/external-reference-deep-dive.md +2 -0
  45. package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -0
  46. package/dist/agent-src/rules/finance-safety-floor.md +2 -0
  47. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  48. package/dist/agent-src/rules/git-history-discipline.md +3 -1
  49. package/dist/agent-src/rules/guidelines.md +2 -0
  50. package/dist/agent-src/rules/history-discipline.md +2 -0
  51. package/dist/agent-src/rules/icon-consistency.md +2 -0
  52. package/dist/agent-src/rules/image-likeness-and-rights.md +2 -0
  53. package/dist/agent-src/rules/improve-before-implement.md +2 -0
  54. package/dist/agent-src/rules/invite-challenge.md +2 -0
  55. package/dist/agent-src/rules/laravel-routing.md +2 -0
  56. package/dist/agent-src/rules/laravel-translations.md +2 -0
  57. package/dist/agent-src/rules/legal-safety-floor.md +2 -0
  58. package/dist/agent-src/rules/lethal-trifecta-guard.md +2 -0
  59. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +2 -0
  60. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +2 -0
  61. package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -0
  62. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  63. package/dist/agent-src/rules/media-sync-ground-truth.md +2 -0
  64. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  65. package/dist/agent-src/rules/missing-tool-handling.md +2 -0
  66. package/dist/agent-src/rules/model-recommendation.md +2 -0
  67. package/dist/agent-src/rules/no-attribution-footers.md +2 -0
  68. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +2 -0
  69. package/dist/agent-src/rules/no-pr-progress-comments.md +2 -0
  70. package/dist/agent-src/rules/no-roadmap-references.md +2 -0
  71. package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
  72. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  73. package/dist/agent-src/rules/output-discipline.md +2 -0
  74. package/dist/agent-src/rules/package-ci-checks.md +2 -0
  75. package/dist/agent-src/rules/persona-governance.md +2 -0
  76. package/dist/agent-src/rules/php-coding.md +2 -0
  77. package/dist/agent-src/rules/prefer-enums-over-literals.md +2 -0
  78. package/dist/agent-src/rules/preservation-guard.md +2 -0
  79. package/dist/agent-src/rules/provider-lifecycle-discipline.md +2 -0
  80. package/dist/agent-src/rules/question-not-instruction.md +2 -0
  81. package/dist/agent-src/rules/reviewer-awareness.md +2 -0
  82. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +2 -0
  83. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  84. package/dist/agent-src/rules/role-mode-adherence.md +2 -0
  85. package/dist/agent-src/rules/rule-type-governance.md +2 -0
  86. package/dist/agent-src/rules/runtime-safety.md +2 -0
  87. package/dist/agent-src/rules/scale-discipline.md +2 -0
  88. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  89. package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
  90. package/dist/agent-src/rules/senior-engineering-discipline.md +2 -0
  91. package/dist/agent-src/rules/session-canary.md +63 -19
  92. package/dist/agent-src/rules/settings-ask-protocol.md +180 -0
  93. package/dist/agent-src/rules/size-enforcement.md +2 -0
  94. package/dist/agent-src/rules/skill-improvement-trigger.md +2 -0
  95. package/dist/agent-src/rules/skill-quality.md +2 -0
  96. package/dist/agent-src/rules/slash-command-routing-policy.md +2 -0
  97. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  98. package/dist/agent-src/rules/source-discovery-gate.md +2 -0
  99. package/dist/agent-src/rules/source-of-truth.md +2 -0
  100. package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -0
  101. package/dist/agent-src/rules/strategy-safety-floor.md +2 -0
  102. package/dist/agent-src/rules/symfony-routing.md +2 -0
  103. package/dist/agent-src/rules/think-before-action.md +2 -0
  104. package/dist/agent-src/rules/token-budget-discipline.md +8 -3
  105. package/dist/agent-src/rules/token-efficiency.md +2 -0
  106. package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
  107. package/dist/agent-src/rules/tool-safety.md +2 -0
  108. package/dist/agent-src/rules/ui-audit-gate.md +7 -0
  109. package/dist/agent-src/rules/untrusted-input-defense.md +2 -0
  110. package/dist/agent-src/rules/upstream-proposal.md +2 -0
  111. package/dist/agent-src/rules/user-interaction.md +5 -2
  112. package/dist/agent-src/rules/user-interrupt-priority.md +2 -0
  113. package/dist/agent-src/skills/recursive-verification/SKILL.md +13 -0
  114. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  115. package/dist/cli/registry.js +2 -0
  116. package/dist/cli/registry.js.map +1 -1
  117. package/dist/cli-delegate/{chunk-SJQMJI7M.js → chunk-3KJIMFTB.js} +1 -1
  118. package/dist/cli-delegate/{chunk-BSLUHV2F.js → chunk-BCPIOAGV.js} +148 -133
  119. package/dist/cli-delegate/cmd_conformance.js +1 -1
  120. package/dist/cli-delegate/cmd_doctor.js +1 -1
  121. package/dist/cli-delegate/cmd_export.js +1 -1
  122. package/dist/cli-delegate/cmd_prune.js +1 -1
  123. package/dist/cli-delegate/cmd_route_audit.js +4 -1
  124. package/dist/cli-delegate/cmd_route_explain.js +4 -1
  125. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  126. package/dist/cli-delegate/cmd_sync.js +1 -1
  127. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  128. package/dist/cli-delegate/cmd_validate.js +1 -1
  129. package/dist/discovery/deprecation-report.md +1 -1
  130. package/dist/discovery/discovery-manifest.json +191 -120
  131. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  132. package/dist/discovery/discovery-manifest.summary.md +4 -4
  133. package/dist/discovery/orphan-report.md +1 -1
  134. package/dist/discovery/packs.json +11 -8
  135. package/dist/discovery/trust-report.md +3 -3
  136. package/dist/discovery/workspaces.json +9 -6
  137. package/dist/hooks/dispatch.js +1148 -349
  138. package/dist/install/install.mjs +1 -1
  139. package/dist/mcp/registry-manifest.json +3 -3
  140. package/dist/mcp/server.json +2 -2
  141. package/dist/mcp/server.mjs +571 -417
  142. package/dist/router.json +1 -1
  143. package/dist/scripts/condense.js +33 -2
  144. package/dist/scripts/condense.js.map +1 -1
  145. package/dist/server/io/yamlIO.js +85 -0
  146. package/dist/server/io/yamlIO.js.map +1 -1
  147. package/dist/server/nicknameResolver.js +116 -0
  148. package/dist/server/nicknameResolver.js.map +1 -0
  149. package/dist/server/routes/ping.js +29 -11
  150. package/dist/server/routes/ping.js.map +1 -1
  151. package/dist/server/routes/settings.js +1 -12
  152. package/dist/server/routes/settings.js.map +1 -1
  153. package/dist/server/routes/wizard.js +52 -2
  154. package/dist/server/routes/wizard.js.map +1 -1
  155. package/dist/shared/interactiveContext.js +73 -0
  156. package/dist/shared/interactiveContext.js.map +1 -0
  157. package/dist/shared/nicknamePrefill.js +59 -0
  158. package/dist/shared/nicknamePrefill.js.map +1 -0
  159. package/dist/shared/settingsAsks.js +128 -0
  160. package/dist/shared/settingsAsks.js.map +1 -0
  161. package/dist/shared/settingsCarveOut.js +118 -0
  162. package/dist/shared/settingsCarveOut.js.map +1 -0
  163. package/dist/shared/settingsConsent.js +93 -0
  164. package/dist/shared/settingsConsent.js.map +1 -0
  165. package/dist/shared/settingsSurface.js +7 -1
  166. package/dist/shared/settingsSurface.js.map +1 -1
  167. package/dist/ui/assets/index-DmR0mbk4.js.map +1 -1
  168. package/package.json +1 -1
  169. package/src/config/agents-paths.yml +15 -0
  170. package/src/config/evaluator-budgets.json +4 -4
  171. package/src/config/gate-coverage.yml +29 -1
  172. package/src/config/gate-violation-baselines.json +13 -7
  173. package/src/scripts/_cli/cmd_doctor.ts +6 -21
  174. package/src/scripts/_cli/cmd_route_audit.ts +4 -1
  175. package/src/scripts/_cli/cmd_route_explain.ts +9 -1
  176. package/src/scripts/_dispatch.bash +18 -0
  177. package/src/scripts/_lib/git_common_dir.ts +128 -0
  178. package/src/scripts/_lib/obligation_frequency.ts +391 -0
  179. package/src/scripts/_lib/session_register.ts +361 -0
  180. package/src/scripts/ai-video/stitch.sh +27 -9
  181. package/src/scripts/before_complete_hook.ts +23 -4
  182. package/src/scripts/bench_ab_v2_run.ts +272 -16
  183. package/src/scripts/bench_ab_v2_stats.ts +156 -3
  184. package/src/scripts/check_completion_review.ts +80 -3
  185. package/src/scripts/check_corpus_staleness.ts +692 -0
  186. package/src/scripts/check_enforcement_coverage.ts +192 -7
  187. package/src/scripts/check_gate_coverage.ts +67 -0
  188. package/src/scripts/check_hook_bundle_freshness.ts +183 -0
  189. package/src/scripts/check_rule_projection_integrity.ts +364 -0
  190. package/src/scripts/condense.ts +36 -2
  191. package/src/scripts/conformance_scan.ts +82 -17
  192. package/src/scripts/dispatch_r2_reviewer.ts +31 -2
  193. package/src/scripts/generate_settings_reference.ts +232 -0
  194. package/src/scripts/git_authorization_hook.ts +75 -10
  195. package/src/scripts/hook_manifest.yaml +87 -27
  196. package/src/scripts/hooks/block_no_verify.ts +59 -2
  197. package/src/scripts/hooks/block_unauthorized_git.ts +199 -16
  198. package/src/scripts/hooks/concern_registry.ts +2 -0
  199. package/src/scripts/hooks/design_slop_hook.ts +13 -1
  200. package/src/scripts/hooks/dispatch_hook.ts +97 -2
  201. package/src/scripts/hooks/evidence_independence.ts +40 -6
  202. package/src/scripts/language_mirror_hook.ts +256 -17
  203. package/src/scripts/lint_abstraction_thresholds.ts +41 -8
  204. package/src/scripts/lint_agents_layout.ts +2 -0
  205. package/src/scripts/lint_hook_manifest.ts +29 -0
  206. package/src/scripts/memory_learn_hook.ts +109 -6
  207. package/src/scripts/orchestration_backfill.ts +354 -0
  208. package/src/scripts/pr_url_reminder_hook.ts +17 -2
  209. package/src/scripts/release.ts +180 -37
  210. package/src/scripts/schemas/review-findings.schema.json +99 -0
  211. package/src/scripts/schemas/rule.schema.json +5 -0
  212. package/src/scripts/session_canary_hook.ts +35 -3
  213. package/src/scripts/session_register_hook.ts +288 -0
  214. package/src/scripts/sessions_cli.ts +140 -0
  215. package/src/scripts/validate_frontmatter.ts +68 -0
  216. package/src/server/io/yamlIO.ts +87 -0
  217. package/src/shared/interactiveContext.ts +98 -0
  218. package/src/shared/nicknamePrefill.ts +96 -0
  219. package/src/shared/settingsAsks.ts +176 -0
  220. package/src/shared/settingsCarveOut.ts +143 -0
  221. package/src/shared/settingsConsent.ts +136 -0
  222. package/src/shared/settingsSurface.ts +7 -1
@@ -0,0 +1,128 @@
1
+ /**
2
+ * The one-question budget, as a function rather than as a promise.
3
+ *
4
+ * Phase 5 of `road-to-zero-ceremony-settings`. The rule
5
+ * `src/rules/settings-ask-protocol.md` states the budget — at most ONE settings
6
+ * question per command execution, every further undecided key taking its
7
+ * conservative default silently and being named in the end-summary. Prose is
8
+ * where that obligation has to live, because no gate can count the questions in
9
+ * a chat turn.
10
+ *
11
+ * But the *split* is not a judgement call: given the keys an execution needs
12
+ * decided, which one is asked and what the others resolve to is fully
13
+ * determined. Leaving that determined part in prose too would mean the roadmap's
14
+ * own exit criterion — "a planted fixture needing three B decisions asks once,
15
+ * assumes two conservatively, and lists both in the summary" — had nothing to
16
+ * run against. So the split is computed here and the rule points at it.
17
+ *
18
+ * What this module does NOT do, stated so nobody mistakes it for the fence:
19
+ * it does not ask, it does not write, and it cannot stop an agent that ignores
20
+ * it. The write fence is one layer down and is real —
21
+ * `src/scripts/_cli/cmd_settings_set.ts` and the Fastify settings route both
22
+ * refuse every C-class key and fail closed on an unreadable class contract.
23
+ *
24
+ * Pure — no I/O, no clock, no environment.
25
+ *
26
+ * @see src/rules/settings-ask-protocol.md
27
+ * @see docs/contracts/settings-classes.md
28
+ */
29
+ import { classOfPath, isConservativeDefault } from './settingsClasses.js';
30
+ /**
31
+ * The end-summary line for a silently defaulted key.
32
+ *
33
+ * `--source manual` and not `jit-answer`: the user did not answer a question, so
34
+ * stamping the write as a just-in-time answer would record a consent nobody
35
+ * gave. The provenance vocabulary exists to keep exactly that distinction.
36
+ */
37
+ export function changeCommand(key) {
38
+ return `agent-config settings:set ${key} <value> --source manual`;
39
+ }
40
+ /**
41
+ * Plan one execution's settings asks.
42
+ *
43
+ * `needed` is the keys this execution genuinely cannot proceed without, in the
44
+ * order they became needed — the caller's own ordering is respected because the
45
+ * first key to actually block the run is the one that earned the question.
46
+ *
47
+ * `decided` is every key already settled on any resolution layer. A decided key
48
+ * is not a candidate: re-asking a settled question is the cheap question the
49
+ * ask-discipline rules forbid, and it is the single most likely way this budget
50
+ * gets spent on nothing.
51
+ *
52
+ * `defaultOf` supplies the template default. It returns `undefined` for a key
53
+ * the template does not carry, which is treated as unclassified rather than as
54
+ * a default of `undefined` — a missing template entry is a defect, not a value.
55
+ */
56
+ export function planSettingsAsks(needed, classes, defaultOf, decided = new Set(), options = {}) {
57
+ const plan = { ask: null, silent: [], skipped: [] };
58
+ const seen = new Set();
59
+ // Non-TTY / CI / headless: nobody can answer, so the budget is ZERO rather
60
+ // than one. Every candidate takes its conservative default and the plan
61
+ // carries no ask — "no questions, ever", as a computed fact rather than as a
62
+ // promise the caller has to remember. Nothing is written either: this
63
+ // function never persists, and with no ask there is no `jit-answer` write.
64
+ const interactive = options.interactive ?? true;
65
+ for (const key of needed) {
66
+ // A duplicate in the caller's list must not consume the budget twice.
67
+ if (seen.has(key)) {
68
+ continue;
69
+ }
70
+ seen.add(key);
71
+ if (decided.has(key)) {
72
+ plan.skipped.push({ key, reason: 'already-decided' });
73
+ continue;
74
+ }
75
+ const cls = classOfPath(classes, key);
76
+ if (cls === undefined) {
77
+ // Unclassified is guarded everywhere else in this system; it is
78
+ // guarded here too. Never fall back to "probably fine".
79
+ plan.skipped.push({ key, reason: 'unclassified' });
80
+ continue;
81
+ }
82
+ if (cls === 'A') {
83
+ plan.skipped.push({ key, reason: 'class-a-never-asked' });
84
+ continue;
85
+ }
86
+ if (cls === 'C') {
87
+ // A C key set to `ask` still produces a RUNTIME question, but that
88
+ // answer lasts one run and is never persisted, so it is not this
89
+ // budget's business. Persisting it stays on the human path.
90
+ plan.skipped.push({ key, reason: 'class-c-guarded' });
91
+ continue;
92
+ }
93
+ const fallback = defaultOf(key);
94
+ if (fallback === undefined) {
95
+ plan.skipped.push({ key, reason: 'unclassified' });
96
+ continue;
97
+ }
98
+ if (interactive && plan.ask === null) {
99
+ plan.ask = key;
100
+ continue;
101
+ }
102
+ if (!isConservativeDefault(fallback)) {
103
+ // Taking a permissive value silently would be a decision made in
104
+ // the user's name — the one outcome the Iron Law names outright.
105
+ // Surfacing it as skipped forces the caller to deal with it instead
106
+ // of inheriting a permission nobody granted.
107
+ plan.skipped.push({ key, reason: 'non-conservative-default' });
108
+ continue;
109
+ }
110
+ plan.silent.push({ key, value: fallback, command: changeCommand(key) });
111
+ }
112
+ return plan;
113
+ }
114
+ /**
115
+ * The end-summary block for a plan, or `null` when nothing was defaulted.
116
+ *
117
+ * `null` rather than an empty string so a caller cannot append a heading with no
118
+ * rows under it. This text rides INSIDE the single end-summary that
119
+ * `direct-answers` already requires — it is never a second summary.
120
+ */
121
+ export function silentDefaultsSummary(plan) {
122
+ if (plan.silent.length === 0) {
123
+ return null;
124
+ }
125
+ const lines = plan.silent.map((s) => `- \`${s.key}\` → ${JSON.stringify(s.value)} (default) · change: \`${s.command}\``);
126
+ return `Settings resolved without asking this run:\n${lines.join('\n')}`;
127
+ }
128
+ //# sourceMappingURL=settingsAsks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsAsks.js","sourceRoot":"","sources":["../../src/shared/settingsAsks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * The always-written carve-out set for the sparse settings file.
3
+ *
4
+ * `road-to-zero-ceremony-settings` Phase 3. The user's global settings file
5
+ * becomes a sparse record of decisions actually made, which is safe only while
6
+ * *key absent* resolves exactly like *key set to the template default*.
7
+ *
8
+ * An audit of every reader found that is NOT universally true. For the keys
9
+ * below a reader deliberately resolves an absent key to something other than
10
+ * the template's default, so omitting them from a fresh install's file would
11
+ * silently change behaviour. They are written explicitly instead, with their
12
+ * template value, and stamped `package-default` in the provenance sidecar so
13
+ * the file never claims the user decided them.
14
+ *
15
+ * This is the blocker's "carved out" branch. The alternative branch — "fixed at
16
+ * its reader" — was rejected for the `projection.*` family because the
17
+ * divergence there is the documented upgrade-safety contract
18
+ * (`agent-settings.template.yml`: *"a missing key also still means legacy-all,
19
+ * so only fresh installs get the scoped default"*). Changing those readers
20
+ * would flip existing 5.x installs from `legacy-all` to `scoped`, which is the
21
+ * silent narrowing the contract exists to prevent.
22
+ *
23
+ * Pure module — no I/O. The VALUES are not duplicated here; only the key paths
24
+ * and the reason. The emitter reads each value out of the template, so this
25
+ * list cannot drift from the defaults it is protecting.
26
+ *
27
+ * @see docs/contracts/settings-classes.md
28
+ */
29
+ export const SETTINGS_CARVE_OUT = [
30
+ {
31
+ key: 'projection.mode',
32
+ reader: 'src/scripts/install.ts:3409 _resolve_scoped_projection',
33
+ absentResolvesTo: 'legacy-all',
34
+ reason: 'The template fallback applies only when NO global settings file exists. '
35
+ + 'Once a file exists, an absent key means legacy-all by documented contract, '
36
+ + 'so an existing install is never silently narrowed on upgrade.',
37
+ },
38
+ {
39
+ key: 'projection.rule_workspaces',
40
+ reader: 'src/install/rule_scope.ts:96 ruleScopeFromSettings',
41
+ absentResolvesTo: 'null — LEGACY_ALL, i.e. every rule ships including maintainer-only ones',
42
+ reason: 'Same upgrade contract as projection.mode, and the failure is louder: '
43
+ + 'an absent list widens the projection instead of narrowing it.',
44
+ },
45
+ {
46
+ key: 'subagents.auto',
47
+ reader: 'src/scripts/routing_doctor.ts:206',
48
+ absentResolvesTo: 'ask',
49
+ reason: 'The reader falls back to `ask` while the template ships `on`. Carved out '
50
+ + 'rather than fixed at the reader because the doctor reports what the '
51
+ + 'RESOLVED configuration is; changing its fallback would make the report '
52
+ + 'disagree with what the other readers actually do.',
53
+ },
54
+ {
55
+ key: 'discipline_profile',
56
+ reader: 'work_engine/_lib/agent_settings.ts:1263',
57
+ absentResolvesTo: 'essential, unconditionally',
58
+ reason: 'The template ships `auto`, which resolves to `off` on any measured-null model, '
59
+ + 'any non-Claude host, and any host exposing no model id. Absent skips that '
60
+ + 'resolution entirely and loads the essential tier everywhere.',
61
+ },
62
+ {
63
+ key: 'chat_history.frequency',
64
+ reader: 'src/scripts/chat_history.ts:1140',
65
+ absentResolvesTo: 'per_phase',
66
+ reason: 'Canonical substitution is `per_turn`. Absent gives coarser capture than the '
67
+ + 'shipped default — an audit-thinning change, which the class contract\'s own '
68
+ + 'test 8 (what can the attacker HIDE) names as the severe direction.',
69
+ },
70
+ {
71
+ key: 'profile.id',
72
+ reader: 'src/scripts/config/profiles.ts:221 resolve_profile',
73
+ absentResolvesTo: 'the id `developer`, but a DEGRADED profile — packs: [], personas: [], hints: []',
74
+ reason: 'Exactly the projection.mode shape: the template default is honoured only when '
75
+ + 'no settings file exists. With a file present the id resolves but its profile '
76
+ + 'body does not load, so the install silently loses every pack and persona.',
77
+ },
78
+ {
79
+ key: 'quality.local_auto_run',
80
+ reader: 'src/scripts/lint_roadmap_ci_steps.ts:106',
81
+ absentResolvesTo: 'true — which DISABLES the CI-step gate',
82
+ reason: 'Inverted polarity, and the most dangerous row in the set: the template ships '
83
+ + '`false`, which ARMS the gate. Omitting the key would disarm a quality gate '
84
+ + 'for every fresh install while the reference page says it is on.',
85
+ },
86
+ {
87
+ key: 'onboarding.onboarded',
88
+ reader: 'src/scripts/onboarding_gate_hook.ts:99',
89
+ absentResolvesTo: 'gate skipped, as if onboarding had already completed',
90
+ reason: 'Absent behaves like `onboarded: true`, not like the template default `false`. '
91
+ + 'Omitting it would skip the onboarding gate on precisely the fresh installs '
92
+ + 'the gate exists for.',
93
+ },
94
+ {
95
+ key: 'chat_history.enabled',
96
+ reader: 'src/scripts/chat_history.ts:1025 _read_chat_history_enabled',
97
+ absentResolvesTo: 'false',
98
+ reason: 'The reader falls back to false while the template ships true. This one is '
99
+ + 'privacy-shaped: fixing the reader would start recording history for every '
100
+ + 'install whose file lacks the key. Writing it explicitly keeps the decision '
101
+ + 'visible in the file the user can read.',
102
+ },
103
+ ];
104
+ /** Just the paths — the emitter iterates these against the template. */
105
+ export function carveOutKeys() {
106
+ return SETTINGS_CARVE_OUT.map((c) => c.key);
107
+ }
108
+ /**
109
+ * `projection.*` is additionally stripped from the user-global layer by
110
+ * `load_agent_settings`'s `MERGEABLE_KEYS` whitelist, so `_globalRuleScope`
111
+ * (`src/server/routes/install.ts:234`) resolves LEGACY_ALL whether or not the
112
+ * key is written. That is a pre-existing defect, independent of sparseness —
113
+ * widening the whitelist requires an ADR, per its own comment — and the
114
+ * carve-out neither causes nor fixes it. Recorded so the next reader of this
115
+ * module does not mistake the carve-out for a fix.
116
+ */
117
+ export const KNOWN_UNFIXED_BY_CARVE_OUT = 'src/server/routes/install.ts:234 _globalRuleScope — MERGEABLE_KEYS strips projection.*; needs an ADR.';
118
+ //# sourceMappingURL=settingsCarveOut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsCarveOut.js","sourceRoot":"","sources":["../../src/shared/settingsCarveOut.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAcH,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACtD;QACI,GAAG,EAAE,iBAAiB;QACtB,MAAM,EAAE,wDAAwD;QAChE,gBAAgB,EAAE,YAAY;QAC9B,MAAM,EACF,0EAA0E;cACxE,6EAA6E;cAC7E,+DAA+D;KACxE;IACD;QACI,GAAG,EAAE,4BAA4B;QACjC,MAAM,EAAE,oDAAoD;QAC5D,gBAAgB,EAAE,yEAAyE;QAC3F,MAAM,EACF,uEAAuE;cACrE,+DAA+D;KACxE;IACD;QACI,GAAG,EAAE,gBAAgB;QACrB,MAAM,EAAE,mCAAmC;QAC3C,gBAAgB,EAAE,KAAK;QACvB,MAAM,EACF,2EAA2E;cACzE,sEAAsE;cACtE,yEAAyE;cACzE,mDAAmD;KAC5D;IACD;QACI,GAAG,EAAE,oBAAoB;QACzB,MAAM,EAAE,yCAAyC;QACjD,gBAAgB,EAAE,4BAA4B;QAC9C,MAAM,EACF,iFAAiF;cAC/E,4EAA4E;cAC5E,8DAA8D;KACvE;IACD;QACI,GAAG,EAAE,wBAAwB;QAC7B,MAAM,EAAE,kCAAkC;QAC1C,gBAAgB,EAAE,WAAW;QAC7B,MAAM,EACF,8EAA8E;cAC5E,8EAA8E;cAC9E,oEAAoE;KAC7E;IACD;QACI,GAAG,EAAE,YAAY;QACjB,MAAM,EAAE,oDAAoD;QAC5D,gBAAgB,EACZ,iFAAiF;QACrF,MAAM,EACF,gFAAgF;cAC9E,+EAA+E;cAC/E,2EAA2E;KACpF;IACD;QACI,GAAG,EAAE,wBAAwB;QAC7B,MAAM,EAAE,0CAA0C;QAClD,gBAAgB,EAAE,wCAAwC;QAC1D,MAAM,EACF,+EAA+E;cAC7E,6EAA6E;cAC7E,iEAAiE;KAC1E;IACD;QACI,GAAG,EAAE,sBAAsB;QAC3B,MAAM,EAAE,wCAAwC;QAChD,gBAAgB,EAAE,sDAAsD;QACxE,MAAM,EACF,gFAAgF;cAC9E,6EAA6E;cAC7E,sBAAsB;KAC/B;IACD;QACI,GAAG,EAAE,sBAAsB;QAC3B,MAAM,EAAE,6DAA6D;QACrE,gBAAgB,EAAE,OAAO;QACzB,MAAM,EACF,4EAA4E;cAC1E,4EAA4E;cAC5E,6EAA6E;cAC7E,wCAAwC;KACjD;CACJ,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,YAAY;IACxB,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACnC,uGAAuG,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Is a permissive B-class value a RECORDED CONSENT, or just a value?
3
+ *
4
+ * Phase 5 of `road-to-zero-ceremony-settings`, and the answer to that
5
+ * roadmap's Risk 3 — *"the provenance stamp becomes decoration; an unread stamp
6
+ * is cost with no return"*. Before this module the sidecar
7
+ * `settings/.agent-settings.provenance.json` was written by `settings:set` and
8
+ * read by exactly one caller, the GUI, to **display** it. Nothing decided
9
+ * anything on it. This is the reader that makes it load-bearing.
10
+ *
11
+ * The distinction it draws, which a bare value cannot: `true` that a human chose
12
+ * and `true` that the machine inferred are the same byte and are not the same
13
+ * permission. `auto-detected` is the provenance a machine writes about itself —
14
+ * a locale, an installed binary, a detected host. Letting it grant a consent
15
+ * would mean the agent could arrive at its own permission by observing the
16
+ * world, which is the confused-deputy shape in miniature.
17
+ *
18
+ * Modelled on `src/scripts/hooks/block_unauthorized_git.ts`: answer from a
19
+ * recorded fact rather than from the model's recollection, and treat a missing
20
+ * record as NOT granted rather than as probably-fine.
21
+ *
22
+ * WHAT THIS IS NOT. It is not a hook and it does not intercept anything. No
23
+ * B-class key currently gates an action through a guard — the two that gate
24
+ * behaviour at all (`personal.open_edited_files`, `memory.learn_on_session_end`)
25
+ * are read as values by the installer, the wizard and one session_end concern,
26
+ * and the *action* they govern is prose. So the enforcement gradient is honest
27
+ * and steep: this function is deterministic, the obligation to call it is
28
+ * model-carried, and on a prose-only host ask-once can degrade to ask-never.
29
+ *
30
+ * Pure — no I/O. Callers supply the value and the sidecar entry.
31
+ *
32
+ * @see src/rules/settings-ask-protocol.md
33
+ * @see docs/contracts/settings-classes.md
34
+ */
35
+ import { isConservativeDefault } from './settingsClasses.js';
36
+ /**
37
+ * The sources that can carry a human decision.
38
+ *
39
+ * `jit-answer` is a question the user answered. `gui` is a human at the settings
40
+ * editor. `manual` is a hand-edit or an explicit CLI write on the user's
41
+ * instruction. `auto-detected` is excluded on purpose — see the module header.
42
+ */
43
+ const HUMAN_SOURCES = ['jit-answer', 'gui', 'manual'];
44
+ /**
45
+ * The verdict for one consent-gated action.
46
+ *
47
+ * Order matters: class first (a C key never reaches a consent question at all),
48
+ * then the value (conservative means no, regardless of provenance), then the
49
+ * record.
50
+ */
51
+ export function consentVerdict(query) {
52
+ if (query.cls !== 'B') {
53
+ return 'not-a-consent-key';
54
+ }
55
+ if (isConservativeDefault(query.value)) {
56
+ return 'withheld-default';
57
+ }
58
+ if (query.handEdited === true) {
59
+ return 'granted';
60
+ }
61
+ if (query.source === undefined) {
62
+ return 'withheld-unrecorded';
63
+ }
64
+ if (!HUMAN_SOURCES.includes(query.source)) {
65
+ return 'withheld-machine-inferred';
66
+ }
67
+ return 'granted';
68
+ }
69
+ /** `true` only for `granted` — every other verdict withholds. */
70
+ export function consentGranted(query) {
71
+ return consentVerdict(query) === 'granted';
72
+ }
73
+ /**
74
+ * One line explaining a withheld verdict, for the surface that refused.
75
+ *
76
+ * `null` for `granted`, so a caller cannot accidentally print a refusal reason
77
+ * on the allow path.
78
+ */
79
+ export function withheldReason(verdict, key) {
80
+ switch (verdict) {
81
+ case 'granted':
82
+ return null;
83
+ case 'withheld-default':
84
+ return `${key} is at its conservative default — absent and no are the same answer.`;
85
+ case 'withheld-unrecorded':
86
+ return `${key} permits this, but nothing records who decided it. Ask, or set it via the GUI.`;
87
+ case 'withheld-machine-inferred':
88
+ return `${key} was auto-detected, not decided. A machine inference is not a consent.`;
89
+ case 'not-a-consent-key':
90
+ return `${key} is not a class-B consent key — this gate does not apply to it.`;
91
+ }
92
+ }
93
+ //# sourceMappingURL=settingsConsent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsConsent.js","sourceRoot":"","sources":["../../src/shared/settingsConsent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,qBAAqB,EAAsB,MAAM,sBAAsB,CAAC;AAKjF;;;;;;GAMG;AACH,MAAM,aAAa,GAA6B,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAsChF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAC9C,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,qBAAqB,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,2BAA2B,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,KAAmB;IAC9C,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,GAAW;IAC/D,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,SAAS;YACV,OAAO,IAAI,CAAC;QAChB,KAAK,kBAAkB;YACnB,OAAO,GAAG,GAAG,sEAAsE,CAAC;QACxF,KAAK,qBAAqB;YACtB,OAAO,GAAG,GAAG,gFAAgF,CAAC;QAClG,KAAK,2BAA2B;YAC5B,OAAO,GAAG,GAAG,wEAAwE,CAAC;QAC1F,KAAK,mBAAmB;YACpB,OAAO,GAAG,GAAG,iEAAiE,CAAC;IACvF,CAAC;AACL,CAAC"}
@@ -31,7 +31,13 @@ function unwrapRef(root) {
31
31
  export function flattenSurface(schema, version) {
32
32
  const entries = {};
33
33
  const walk = (node, prefix) => {
34
- if (node.type === 'object' && node.properties !== undefined) {
34
+ // `properties: {}` — a free-form map such as `z.object({}).passthrough()` —
35
+ // is a LEAF, per this function's own contract above. Recursing on the
36
+ // mere presence of the key walked zero children and emitted nothing, so
37
+ // the key vanished from the surface: `subagents.host_capabilities` was
38
+ // classified in the settings contract, present in the template, and
39
+ // absent from every snapshot and upgrade delta.
40
+ if (node.type === 'object' && node.properties !== undefined && Object.keys(node.properties).length > 0) {
35
41
  for (const key of Object.keys(node.properties).sort()) {
36
42
  const child = node.properties[key];
37
43
  walk(child, prefix === '' ? key : `${prefix}.${key}`);
@@ -1 +1 @@
1
- {"version":3,"file":"settingsSurface.js","sourceRoot":"","sources":["../../src/shared/settingsSurface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settingsSurface.js","sourceRoot":"","sources":["../../src/shared/settingsSurface.ts"],"names":[],"mappings":"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"}