opencode-swarm 7.164.3 → 7.164.5

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 (86) hide show
  1. package/dist/cli/{coder-settlement-m918n7qj.js → coder-settlement-x9wbqx46.js} +11 -11
  2. package/dist/cli/{config-doctor-5kytbwbx.js → config-doctor-axd9d6hs.js} +2 -2
  3. package/dist/cli/{core-anw5khk2.js → core-f1a1fk13.js} +1 -1
  4. package/dist/cli/{curation-policy-7pnmnfct.js → curation-policy-2cy7wejw.js} +6 -6
  5. package/dist/cli/{curator-yq6raqgs.js → curator-b104f7a7.js} +34 -34
  6. package/dist/cli/{curator-drift-ykrdf08r.js → curator-drift-3s3q4wsy.js} +4 -4
  7. package/dist/cli/curator-llm-factory-cv7ft0mb.js +66 -0
  8. package/dist/cli/{evidence-summary-service-8sbxvt2x.js → evidence-summary-service-5xsjs3x3.js} +15 -15
  9. package/dist/cli/{gate-evidence-53v7e938.js → gate-evidence-ypja4156.js} +7 -7
  10. package/dist/cli/guardrail-explain-cvha7b9p.js +67 -0
  11. package/dist/cli/{guardrail-log-q5sj7zby.js → guardrail-log-6t4e2j5f.js} +7 -7
  12. package/dist/cli/{guardrail-reset-dw45p5zc.js → guardrail-reset-es0bg976.js} +34 -34
  13. package/dist/cli/{hive-promoter-0axzw0h5.js → hive-promoter-yzv5g7jy.js} +34 -34
  14. package/dist/cli/{index-95hhrw1d.js → index-0trtcm9n.js} +9 -9
  15. package/dist/cli/{index-hcn69kp0.js → index-0zbze3n6.js} +1 -1
  16. package/dist/cli/{index-ac39znep.js → index-164m995b.js} +2 -2
  17. package/dist/cli/{index-bzd67m2j.js → index-1dz8hv7p.js} +4 -4
  18. package/dist/cli/{index-y2f5s2cf.js → index-1f4nandk.js} +1 -1
  19. package/dist/cli/{index-aty2dfmt.js → index-1q2dwv69.js} +1 -1
  20. package/dist/cli/{index-2xj34nkh.js → index-25jze7sf.js} +1 -1
  21. package/dist/cli/{index-5d7bzpfn.js → index-25z5qwkk.js} +1 -1
  22. package/dist/cli/{index-ehf0vjhx.js → index-3gb7bw7h.js} +88 -77
  23. package/dist/cli/{index-11st3tgy.js → index-3rrc5x4v.js} +2 -2
  24. package/dist/cli/{index-zs1jrsta.js → index-4emx8hhh.js} +2 -2
  25. package/dist/cli/{index-j98116cx.js → index-4jmtdtm9.js} +2 -2
  26. package/dist/cli/{index-w5jpjaqe.js → index-4krjn1gn.js} +2 -2
  27. package/dist/cli/{index-0145kpjr.js → index-50s9q4c1.js} +2 -2
  28. package/dist/cli/{index-4wneygfx.js → index-553veay1.js} +75 -23
  29. package/dist/cli/{index-88g6q52x.js → index-7rat6nyh.js} +4 -4
  30. package/dist/cli/{index-sn2vm710.js → index-8h9nng7f.js} +5 -5
  31. package/dist/cli/{index-xkqja15t.js → index-aaqbhn9h.js} +2 -2
  32. package/dist/cli/{index-5pxdtskj.js → index-aper29nf.js} +1 -1
  33. package/dist/cli/{index-8t11vcf5.js → index-ea7sehgy.js} +3 -3
  34. package/dist/cli/{index-kyayzfxp.js → index-er8ba9be.js} +4 -4
  35. package/dist/cli/{index-9pwa798m.js → index-fwebva1m.js} +7 -7
  36. package/dist/cli/{index-yep24wn4.js → index-fxxja498.js} +1 -1
  37. package/dist/cli/{index-sb4eanpv.js → index-hnjkpk57.js} +1 -1
  38. package/dist/cli/{index-kn0y788q.js → index-j9a4fsxg.js} +1 -1
  39. package/dist/cli/{index-493mxwj5.js → index-maxz22c1.js} +21 -21
  40. package/dist/cli/{index-0e34njnm.js → index-q0gtgwyr.js} +7 -7
  41. package/dist/cli/{index-fc153g7b.js → index-rc6hec4j.js} +4 -4
  42. package/dist/cli/{index-v56mhyhs.js → index-rz87mx1c.js} +1 -1
  43. package/dist/cli/{index-rhdwrfgc.js → index-s09b63xg.js} +5 -5
  44. package/dist/cli/{index-aaqzcnb9.js → index-ssb67ff6.js} +36 -36
  45. package/dist/cli/{index-f9nfknjg.js → index-tfa2p4y4.js} +3 -3
  46. package/dist/cli/{index-jwc2v92w.js → index-wbnyc50b.js} +5 -5
  47. package/dist/cli/{index-qbr05tbw.js → index-xj4kbtdw.js} +2 -2
  48. package/dist/cli/{index-yhpbcrdk.js → index-xm7dc14y.js} +13 -13
  49. package/dist/cli/{index-c8k4cs94.js → index-y42pra05.js} +5 -5
  50. package/dist/cli/{index-84qah5h6.js → index-yrsag0vs.js} +31 -52
  51. package/dist/cli/{index-3fpqmms2.js → index-ywtcznk2.js} +12 -4
  52. package/dist/cli/index.js +34 -34
  53. package/dist/cli/{knowledge-escalator-atn5tfy2.js → knowledge-escalator-evjd8g7y.js} +13 -13
  54. package/dist/cli/{knowledge-events-58ha93tx.js → knowledge-events-q46z1wy6.js} +11 -11
  55. package/dist/cli/{knowledge-link-2gh1cnk3.js → knowledge-link-ffmzf72f.js} +5 -5
  56. package/dist/cli/{knowledge-store-2vkn4qyy.js → knowledge-store-z82f5x9k.js} +6 -6
  57. package/dist/cli/{knowledge-validator-gcbfq9er.js → knowledge-validator-19gbnxx2.js} +8 -8
  58. package/dist/cli/{pending-delegations-esp3gpac.js → pending-delegations-t4cqk5ha.js} +6 -6
  59. package/dist/cli/{pr-subscriptions-sdv0n59c.js → pr-subscriptions-3enjtq0k.js} +6 -6
  60. package/dist/cli/{pr-workflow-gate-v5wh09wz.js → pr-workflow-gate-3ecgfsge.js} +34 -34
  61. package/dist/cli/{runner-m95v9d47.js → runner-wqy2hbxn.js} +6 -6
  62. package/dist/cli/{scan-cursor-6x0sqjer.js → scan-cursor-8wcy0dvf.js} +7 -7
  63. package/dist/cli/{schema-mgpsycrr.js → schema-hsw9r2tm.js} +5 -1
  64. package/dist/cli/{scope-persistence-pwqshfyr.js → scope-persistence-mbwt4grd.js} +9 -9
  65. package/dist/cli/{skill-generator-bywdfza0.js → skill-generator-kg32a5jy.js} +15 -15
  66. package/dist/cli/{telemetry-c4j18da8.js → telemetry-j14cj552.js} +1 -1
  67. package/dist/cli/{worktree-collision-ownership-71x5pqfz.js → worktree-collision-ownership-0rfw6kp3.js} +7 -7
  68. package/dist/cli/{worktree-isolation-e6tym281.js → worktree-isolation-qcwt09ve.js} +34 -34
  69. package/dist/config/index.d.ts +3 -3
  70. package/dist/config/loader.d.ts +34 -1
  71. package/dist/config/plan-schema.d.ts +1 -1
  72. package/dist/config/schema.d.ts +61 -7
  73. package/dist/council/council-review-identity.d.ts +1 -1
  74. package/dist/index.js +69 -69
  75. package/dist/plan/ledger.d.ts +56 -29
  76. package/dist/services/skill-optimizer/store.d.ts +1 -1
  77. package/dist/tools/build-check.d.ts +8 -0
  78. package/dist/tools/placeholder-scan.d.ts +10 -1
  79. package/dist/tools/pre-check-batch.d.ts +20 -8
  80. package/dist/tools/quality-budget.d.ts +2 -0
  81. package/dist/tools/sast-scan.d.ts +10 -2
  82. package/dist/tools/sbom-generate.d.ts +14 -0
  83. package/dist/tools/syntax-check.d.ts +11 -3
  84. package/package.json +1 -1
  85. package/dist/cli/curator-llm-factory-6swjnnb1.js +0 -66
  86. package/dist/cli/guardrail-explain-jhsqdzxr.js +0 -67
@@ -21,64 +21,64 @@ import {
21
21
  sanitizeWorktreeTaskId,
22
22
  standardWorktreeByCallID,
23
23
  standardWorktreeSerializationSessions
24
- } from "./index-ehf0vjhx.js";
25
- import"./index-2xj34nkh.js";
26
- import"./index-8t11vcf5.js";
27
- import"./index-aty2dfmt.js";
28
- import"./index-493mxwj5.js";
29
- import"./index-w5jpjaqe.js";
24
+ } from "./index-3gb7bw7h.js";
25
+ import"./index-25jze7sf.js";
26
+ import"./index-ea7sehgy.js";
27
+ import"./index-1q2dwv69.js";
28
+ import"./index-maxz22c1.js";
29
+ import"./index-4krjn1gn.js";
30
30
  import"./index-txdagbh7.js";
31
31
  import"./index-3146wmgv.js";
32
- import"./index-88g6q52x.js";
33
- import"./index-rhdwrfgc.js";
34
- import"./index-xkqja15t.js";
32
+ import"./index-7rat6nyh.js";
33
+ import"./index-s09b63xg.js";
34
+ import"./index-aaqbhn9h.js";
35
35
  import"./index-70ha9e09.js";
36
- import"./index-y2f5s2cf.js";
37
- import"./index-hcn69kp0.js";
36
+ import"./index-1f4nandk.js";
37
+ import"./index-0zbze3n6.js";
38
38
  import"./index-zaab1wz9.js";
39
- import"./index-c8k4cs94.js";
39
+ import"./index-y42pra05.js";
40
40
  import"./index-zsrtt42s.js";
41
- import"./index-9pwa798m.js";
41
+ import"./index-fwebva1m.js";
42
42
  import"./index-3f7hqtgg.js";
43
- import"./index-qbr05tbw.js";
44
- import"./index-fc153g7b.js";
45
- import"./index-sb4eanpv.js";
43
+ import"./index-xj4kbtdw.js";
44
+ import"./index-rc6hec4j.js";
45
+ import"./index-hnjkpk57.js";
46
46
  import"./index-rtry5xyf.js";
47
- import"./index-jwc2v92w.js";
48
- import"./index-kn0y788q.js";
49
- import"./index-kyayzfxp.js";
47
+ import"./index-wbnyc50b.js";
48
+ import"./index-j9a4fsxg.js";
49
+ import"./index-er8ba9be.js";
50
50
  import"./index-ddszzne4.js";
51
- import"./index-sn2vm710.js";
52
- import"./index-yhpbcrdk.js";
53
- import"./index-0145kpjr.js";
51
+ import"./index-8h9nng7f.js";
52
+ import"./index-xm7dc14y.js";
53
+ import"./index-50s9q4c1.js";
54
54
  import"./index-556ja8an.js";
55
55
  import"./index-4fwbbad3.js";
56
56
  import"./index-b43rt5ph.js";
57
57
  import"./index-q7sjgr1y.js";
58
- import"./index-0e34njnm.js";
59
- import"./index-95hhrw1d.js";
58
+ import"./index-q0gtgwyr.js";
59
+ import"./index-0trtcm9n.js";
60
60
  import {
61
61
  resolveWorktreeIsolationConfig
62
- } from "./index-j98116cx.js";
62
+ } from "./index-4jmtdtm9.js";
63
63
  import"./index-zg9d392c.js";
64
64
  import"./index-n832052r.js";
65
- import"./index-v56mhyhs.js";
65
+ import"./index-rz87mx1c.js";
66
66
  import"./index-z6xqpmqg.js";
67
67
  import"./index-r3mvsbtq.js";
68
- import"./index-4wneygfx.js";
69
- import"./index-84qah5h6.js";
68
+ import"./index-553veay1.js";
69
+ import"./index-yrsag0vs.js";
70
70
  import"./index-9e6fdz2h.js";
71
71
  import"./index-4rhhvd1a.js";
72
- import"./index-ac39znep.js";
72
+ import"./index-164m995b.js";
73
73
  import"./index-m1nrd3yd.js";
74
74
  import"./index-zjygnfay.js";
75
75
  import"./index-ae75rja9.js";
76
- import"./index-5d7bzpfn.js";
77
- import"./index-zs1jrsta.js";
76
+ import"./index-25z5qwkk.js";
77
+ import"./index-4emx8hhh.js";
78
78
  import"./index-bk5tah7q.js";
79
- import"./index-yep24wn4.js";
80
- import"./index-f9nfknjg.js";
81
- import"./index-bzd67m2j.js";
79
+ import"./index-fxxja498.js";
80
+ import"./index-tfa2p4y4.js";
81
+ import"./index-1dz8hv7p.js";
82
82
  import"./index-7g4c7s5r.js";
83
83
  import"./index-bpmtbmy9.js";
84
84
  import"./index-zgwm4ryv.js";
@@ -3,7 +3,7 @@ export { ALL_AGENT_NAMES, ALL_SUBAGENT_NAMES, DEFAULT_MODELS, isQAAgent, isSubag
3
3
  export type { ApprovalEvidence, BaseEvidence, DiffEvidence, Evidence, EvidenceBundle, EvidenceType, EvidenceVerdict, NoteEvidence, ReviewEvidence, TestEvidence, } from './evidence-schema';
4
4
  export { ApprovalEvidenceSchema, BaseEvidenceSchema, DiffEvidenceSchema, EVIDENCE_MAX_JSON_BYTES, EVIDENCE_MAX_PATCH_BYTES, EVIDENCE_MAX_TASK_BYTES, EvidenceBundleSchema, EvidenceSchema, EvidenceTypeSchema, EvidenceVerdictSchema, NoteEvidenceSchema, ReviewEvidenceSchema, TestEvidenceSchema, } from './evidence-schema';
5
5
  export type { ConfigBuildResult, ConfigLoadResult, ConfigRecovery, } from './loader';
6
- export { getSafeDefaultConfigLoadResult, loadAgentPrompt, loadPluginConfig, loadPluginConfigWithMeta, loadPluginConfigWithMetaAsync, } from './loader';
6
+ export { getSafeDefaultConfigLoadResult, loadAgentPrompt, loadGateOverrides, loadPluginConfig, loadPluginConfigWithMeta, loadPluginConfigWithMetaAsync, resetConfigAdvisoryDedup, } from './loader';
7
7
  import { loadPluginConfigWithMeta } from './loader';
8
8
  /**
9
9
  * Test-only dependency-injection seam — see `gitignore-warning.ts:_internals`
@@ -19,8 +19,8 @@ export declare const _internals: {
19
19
  };
20
20
  export type { ExecutionProfile, MigrationStatus, Phase, PhaseStatus, Plan, Task, TaskSize, TaskStatus, } from './plan-schema';
21
21
  export { ExecutionProfileSchema, MigrationStatusSchema, PhaseSchema, PhaseStatusSchema, PlanSchema, TaskSchema, TaskSizeSchema, TaskStatusSchema, } from './plan-schema';
22
- export type { AgentOverrideConfig, ApplyPatchConfig, AutomationCapabilities, AutomationConfig, AutomationMode, AutoReviewBurnInDecision, AutoReviewConfig, AutoReviewReleaseContext, LeanTurboConfig, MemoryConfig, ModelPricingConfig, PhaseCompleteConfig, PipelineConfig, PluginConfig, PricingConfig, RepoGraphConfig, SkillPropagationConfig, SwarmConfig, TurboConfig, WorktreeIsolationConfig, } from './schema';
23
- export { AgentOverrideConfigSchema, ApplyPatchConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, AutomationCapabilitiesSchema, AutomationConfigSchema, AutomationModeSchema, AutoReviewConfigSchema, LeanTurboConfigSchema, MemoryConfigSchema, ModelPricingConfigSchema, PhaseCompleteConfigSchema, PipelineConfigSchema, PluginConfigSchema, PricingConfigSchema, RepoGraphConfigSchema, resolveAutoReviewConfig, SkillPropagationConfigSchema, SwarmConfigSchema, TurboConfigSchema, WorktreeIsolationConfigSchema, } from './schema';
22
+ export type { AgentOverrideConfig, ApplyPatchConfig, AutomationCapabilities, AutomationConfig, AutomationMode, AutoReviewBurnInDecision, AutoReviewConfig, AutoReviewReleaseContext, GateConfig, GateConfigOverrides, GateSectionName, LeanTurboConfig, MemoryConfig, ModelPricingConfig, PhaseCompleteConfig, PipelineConfig, PluginConfig, PricingConfig, RepoGraphConfig, SkillPropagationConfig, SwarmConfig, TurboConfig, WorktreeIsolationConfig, } from './schema';
23
+ export { AgentOverrideConfigSchema, ApplyPatchConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, AutomationCapabilitiesSchema, AutomationConfigSchema, AutomationModeSchema, AutoReviewConfigSchema, GATE_CONFIG_READERS, GATE_SECTION_SCHEMAS, LeanTurboConfigSchema, MemoryConfigSchema, ModelPricingConfigSchema, PhaseCompleteConfigSchema, PipelineConfigSchema, PluginConfigSchema, PricingConfigSchema, RepoGraphConfigSchema, resolveAutoReviewConfig, SkillPropagationConfigSchema, SwarmConfigSchema, TurboConfigSchema, WorktreeIsolationConfigSchema, } from './schema';
24
24
  export type { DeltaSpec, Obligation, SpecDelta, SpecRequirement, SpecScenario, SpecSection, SwarmSpec, } from './spec-schema';
25
25
  export { DeltaSpecSchema, ObligationSchema, SpecDeltaSchema, SpecRequirementSchema, SpecScenarioSchema, SpecSectionSchema, SwarmSpecSchema, validateSpecContent, } from './spec-schema';
26
26
  export { resolveWorktreeIsolationConfig } from './worktree-isolation-config';
@@ -1,8 +1,9 @@
1
1
  import type { z } from 'zod';
2
- import { type PluginConfig } from './schema';
2
+ import { type GateConfigOverrides, type PluginConfig } from './schema';
3
3
  export declare const MAX_CONFIG_FILE_BYTES = 102400;
4
4
  export declare const _internals: {
5
5
  resetUnknownTopLevelKeyWarning(): void;
6
+ resetGatesAdvisoryDedup(): void;
6
7
  };
7
8
  export { deepMerge, MAX_MERGE_DEPTH } from '../utils/merge';
8
9
  /**
@@ -43,6 +44,14 @@ export type ConfigBuildResult = {
43
44
  removedKeys: string[];
44
45
  /** Human-readable summary messages about the recovery action. */
45
46
  warnings: string[];
47
+ /**
48
+ * Post-sanitize raw `gates` section — only the keys the user actually wrote,
49
+ * before Zod-default materialization. Gate tools consult this via
50
+ * `loadGateOverrides` so schema defaults never masquerade as user intent
51
+ * (issue #2524). Absent when no `gates` object survived sanitization or the
52
+ * whole config fell back to defaults.
53
+ */
54
+ rawGates?: Record<string, Record<string, unknown>>;
46
55
  };
47
56
  /**
48
57
  * Full result from `loadPluginConfigWithMeta` and `loadPluginConfigWithMetaAsync`.
@@ -78,6 +87,30 @@ export declare function loadPluginConfig(directory: string): PluginConfig;
78
87
  * exactly once, no double-read.
79
88
  */
80
89
  export declare function loadPluginConfigWithMeta(directory: string): ConfigLoadResult;
90
+ /**
91
+ * Gate configuration overrides a user actually wrote (issue #2524).
92
+ *
93
+ * Returns the post-sanitize RAW `gates` section — only keys present in the
94
+ * user's config files, with unknown keys stripped and NO Zod-default
95
+ * materialization. Gate tools consult this instead of the parsed
96
+ * `config.gates` because zod fills every `.default()` on parse: the parsed
97
+ * section always carries full default lists once any `gates` object exists,
98
+ * and placeholder_scan (among others) would treat such a list as an explicit
99
+ * user customization. `undefined` here means "no gates section" — callers
100
+ * fall back to their in-module defaults.
101
+ *
102
+ * Fail-open: any unexpected loader failure returns `undefined` (gates run
103
+ * with defaults) rather than throwing into the tool boundary.
104
+ */
105
+ export declare function loadGateOverrides(directory: string): GateConfigOverrides | undefined;
106
+ /**
107
+ * Reset the module-level config-advisory dedup state (gates-section
108
+ * signatures + the unknown-top-level-key slot). Called once at session start
109
+ * next to `clearDeferredWarnings()` so a config problem that is fixed and
110
+ * later re-introduced warns again in the new session instead of staying
111
+ * suppressed by a signature recorded before the fix.
112
+ */
113
+ export declare function resetConfigAdvisoryDedup(): void;
81
114
  /**
82
115
  * Safe-default `ConfigLoadResult` for init-path timeout / error fallback.
83
116
  *
@@ -204,7 +204,7 @@ export type Plan = z.infer<typeof PlanSchema>;
204
204
  * `PlanSchema` (see this file ~line 95 — a plain `z.object`, no `.passthrough()`,
205
205
  * so Zod strips unknown keys), so `savePlan`'s `JSON.stringify(PlanSchema.parse(...))`
206
206
  * can never write these to .swarm/plan.json. It is also excluded from plan hashing:
207
- * both `computePlanHash` (src/plan/ledger.ts) and `computePlanContentHash`
207
+ * both `computePlanLedgerHash` (src/plan/ledger.ts) and `computePlanContentHash`
208
208
  * (src/plan/manager.ts) hash an explicit allow-list of fields, never the whole
209
209
  * object. Because of this, AGENTS.md invariant-5's "six places" (ledger replay,
210
210
  * projection, checkpoint import/export, get_approved_plan, tests, docs) do NOT
@@ -322,14 +322,44 @@ export declare const QualityBudgetConfigSchema: z.ZodObject<{
322
322
  exclude_globs: z.ZodDefault<z.ZodArray<z.ZodString>>;
323
323
  }, z.core.$strip>;
324
324
  export type QualityBudgetConfig = z.infer<typeof QualityBudgetConfigSchema>;
325
- export declare const GATE_CONFIG_KNOWN_SECTION_KEYS: {
326
- readonly syntax_check: readonly ["enabled"];
327
- readonly placeholder_scan: readonly ["enabled", "deny_patterns", "allow_globs", "max_allowed_findings"];
328
- readonly sast_scan: readonly ["enabled"];
329
- readonly sbom_generate: readonly ["enabled"];
330
- readonly build_check: readonly ["enabled"];
331
- readonly quality_budget: readonly ["enabled", "max_complexity_delta", "max_public_api_delta", "max_duplication_ratio", "min_test_to_code_ratio", "enforce_on_globs", "exclude_globs"];
325
+ /**
326
+ * Single source of truth for gate sections (issue #2524): `GateConfigSchema` is
327
+ * built from this map and `GATE_CONFIG_KNOWN_SECTION_KEYS` is derived from it,
328
+ * so the loader's strip registry can never drift from the schema. The previous
329
+ * hand-maintained copy omitted `placeholder_scan.sentinel_allowlist`, which
330
+ * made the loader strip a real schema key as "unknown".
331
+ */
332
+ export declare const GATE_SECTION_SCHEMAS: {
333
+ readonly syntax_check: z.ZodObject<{
334
+ enabled: z.ZodDefault<z.ZodBoolean>;
335
+ }, z.core.$strip>;
336
+ readonly placeholder_scan: z.ZodObject<{
337
+ enabled: z.ZodDefault<z.ZodBoolean>;
338
+ deny_patterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
339
+ allow_globs: z.ZodDefault<z.ZodArray<z.ZodString>>;
340
+ max_allowed_findings: z.ZodDefault<z.ZodNumber>;
341
+ sentinel_allowlist: z.ZodDefault<z.ZodArray<z.ZodString>>;
342
+ }, z.core.$strip>;
343
+ readonly sast_scan: z.ZodObject<{
344
+ enabled: z.ZodDefault<z.ZodBoolean>;
345
+ }, z.core.$strip>;
346
+ readonly sbom_generate: z.ZodObject<{
347
+ enabled: z.ZodDefault<z.ZodBoolean>;
348
+ }, z.core.$strip>;
349
+ readonly build_check: z.ZodObject<{
350
+ enabled: z.ZodDefault<z.ZodBoolean>;
351
+ }, z.core.$strip>;
352
+ readonly quality_budget: z.ZodObject<{
353
+ enabled: z.ZodDefault<z.ZodBoolean>;
354
+ max_complexity_delta: z.ZodDefault<z.ZodNumber>;
355
+ max_public_api_delta: z.ZodDefault<z.ZodNumber>;
356
+ max_duplication_ratio: z.ZodDefault<z.ZodNumber>;
357
+ min_test_to_code_ratio: z.ZodDefault<z.ZodNumber>;
358
+ enforce_on_globs: z.ZodDefault<z.ZodArray<z.ZodString>>;
359
+ exclude_globs: z.ZodDefault<z.ZodArray<z.ZodString>>;
360
+ }, z.core.$strip>;
332
361
  };
362
+ export type GateSectionName = keyof typeof GATE_SECTION_SCHEMAS;
333
363
  export declare const GateConfigSchema: z.ZodObject<{
334
364
  syntax_check: z.ZodDefault<z.ZodObject<{
335
365
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -361,6 +391,30 @@ export declare const GateConfigSchema: z.ZodObject<{
361
391
  }, z.core.$strip>>;
362
392
  }, z.core.$strip>;
363
393
  export type GateConfig = z.infer<typeof GateConfigSchema>;
394
+ /**
395
+ * Per-section field keys, derived from `GATE_SECTION_SCHEMAS`. Consumed by
396
+ * `sanitizeGatesConfig` (config loader) and `collectRawGatesConfigFindings`
397
+ * (config doctor) to decide which `gates.*` keys are recognized.
398
+ */
399
+ export declare const GATE_CONFIG_KNOWN_SECTION_KEYS: Record<GateSectionName, readonly string[]>;
400
+ /**
401
+ * Only the gate keys a user actually wrote. Zod materializes every `.default()`
402
+ * on parse, so the parsed `config.gates` always carries full default lists once
403
+ * any `gates` object exists; tools must not mistake those for user intent
404
+ * (e.g. placeholder_scan treats any provided `deny_patterns` list as custom
405
+ * patterns and disables its built-in string/code scanning). The loader exposes
406
+ * the post-sanitize raw section as this shape — see `loadGateOverrides`.
407
+ */
408
+ export type GateConfigOverrides = {
409
+ [K in GateSectionName]?: Partial<z.infer<(typeof GATE_SECTION_SCHEMAS)[K]>>;
410
+ };
411
+ /**
412
+ * Drift-check contract (issue #2524): every `GateConfigSchema` section must
413
+ * list the production modules that read it. `scripts/drift-check-gates-docs.ts`
414
+ * enforces key parity with the schema; the gates-config-wiring tests prove the
415
+ * wiring dynamically through the registered tool objects.
416
+ */
417
+ export declare const GATE_CONFIG_READERS: Record<GateSectionName, readonly string[]>;
364
418
  export declare const PipelineConfigSchema: z.ZodObject<{
365
419
  parallel_precheck: z.ZodDefault<z.ZodBoolean>;
366
420
  }, z.core.$strip>;
@@ -20,7 +20,7 @@
20
20
  * - `identityDigest` — sha256 over the canonical identity object; this is
21
21
  * the round-store scope/generation key and the evidence binding.
22
22
  *
23
- * `computePlanHash` (ledger integrity) and `computePlanStructureHash`
23
+ * `computePlanLedgerHash` (ledger integrity) and `computePlanStructureHash`
24
24
  * (plan-critic execution gate) are intentionally NOT reused or modified:
25
25
  * the first is status-sensitive by design, and the second still hashes
26
26
  * progress-like fields (`blocked_reason`, `current_phase`) while dropping