instar 1.3.479 → 1.3.480

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.
@@ -31,8 +31,39 @@ export interface DevGatedFeature {
31
31
  configPath: string;
32
32
  /** One-line description of what runs live on a dev agent. */
33
33
  description: string;
34
+ /**
35
+ * One-line "non-destructive, safe-to-run-live-on-dev" rationale. REQUIRED on
36
+ * every entry (DEV-AGENT-DARK-GATE-ENFORCEMENT Slice B): the human gate is the
37
+ * real backstop — dev-gating a feature live means it runs unattended on the dev
38
+ * agent, so each entry must carry an explicit justification a CODEOWNERS reviewer
39
+ * can check. A destructive/cost-bearing feature does NOT belong here.
40
+ */
41
+ justification: string;
34
42
  }
35
43
  export declare const DEV_GATED_FEATURES: DevGatedFeature[];
44
+ /**
45
+ * An `enabled: false` config default that is DELIBERATELY dark for EVERYONE (dev
46
+ * agents included) — the opposite of a DEV_GATED_FEATURES entry. The lint
47
+ * (scripts/lint-dev-agent-dark-gate.js, assertion C) requires every literal
48
+ * `enabled: false` in ConfigDefaults.ts to be EITHER dev-gated (registered above,
49
+ * with `enabled` omitted) OR classified here, so no dark default can ship by
50
+ * accident (the cartographer hole this spec closed).
51
+ *
52
+ * The registry's value is diffability + a category/reason quality bar — NOT
53
+ * prevention. It is a CODEOWNERS-reviewed path; the human gate is the real
54
+ * backstop. The lint REJECTS an entry with an unknown category or a reason
55
+ * shorter than 12 non-whitespace chars.
56
+ */
57
+ export type DarkGateCategory = 'destructive' | 'optional-integration' | 'cost-bearing' | 'structural-stub' | 'deliberate-fleet-default';
58
+ export interface DarkGateExclusion {
59
+ /** Dotted path to the feature's `enabled` flag in the agent config. */
60
+ configPath: string;
61
+ /** Why it is NOT dev-gated (closed enum). */
62
+ category: DarkGateCategory;
63
+ /** Human-readable rationale (≥12 non-whitespace chars; the lint enforces this). */
64
+ reason: string;
65
+ }
66
+ export declare const DARK_GATE_EXCLUSIONS: DarkGateExclusion[];
36
67
  /**
37
68
  * Read a dotted path off a config object, returning the value or undefined.
38
69
  * Used by the wiring test and the spec-intent cross-check (Slice 3).
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAoC/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
1
+ {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAuD/C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,sBAAsB,GACtB,cAAc,GACd,iBAAiB,GACjB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAqGnD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
@@ -28,36 +28,157 @@ export const DEV_GATED_FEATURES = [
28
28
  name: 'growthAnalyst',
29
29
  configPath: 'monitoring.growthAnalyst.enabled',
30
30
  description: 'Proactive growth & milestone analyst (/growth/*).',
31
+ justification: 'Read/observe analyst; sends nothing by default (digestDelivery off); no destructive action, no spend.',
31
32
  },
32
33
  {
33
34
  name: 'coherenceJournal',
34
35
  configPath: 'multiMachine.coherenceJournal.enabled',
35
36
  description: 'Cross-machine coherence journal.',
37
+ justification: 'Append-only local journal of content-free lifecycle events; no egress, no spend, no destructive action.',
36
38
  },
37
39
  {
38
40
  name: 'warmSessionA2A',
39
41
  configPath: 'threadline.warmSessionA2A.enabled',
40
42
  description: 'Warm-session pool for agent-to-agent delivery.',
43
+ justification: 'Bounded warm-session pool (global/per-peer caps + TTL); no destructive action, no third-party spend.',
41
44
  },
42
45
  {
43
46
  name: 'secretSync',
44
47
  configPath: 'multiMachine.secretSync.enabled',
45
48
  description: 'Cross-machine secret sync (receive side).',
49
+ justification: 'Receive-only by default (push needs pushEnabled); encrypted-per-peer; no destructive action, no spend.',
46
50
  },
47
51
  {
48
52
  name: 'geminiLoopDriver',
49
53
  configPath: 'autonomousSessions.geminiLoopDriver.enabled',
50
54
  description: 'Gemini autonomous-loop driver.',
55
+ justification: 'Drives the dev agent\'s own autonomous loop; bounded, no destructive action against the source tree.',
51
56
  },
52
57
  {
53
58
  name: 'respawnBuildContext',
54
59
  configPath: 'sessions.respawnBuildContext.enabled',
55
60
  description: 'Respawn build-context capture on session restart.',
61
+ justification: 'Captures build context on restart; read-only observability, no destructive action, no spend.',
56
62
  },
57
63
  {
58
64
  name: 'selfKnowledgeSessionContext',
59
65
  configPath: 'selfKnowledge.sessionContext.enabled',
60
66
  description: 'Session-boot self-knowledge context injection.',
67
+ justification: 'Injects vault secret NAMES (never values) + facts at boot; read-only, no egress, no destructive action.',
68
+ },
69
+ {
70
+ name: 'cartographer',
71
+ configPath: 'cartographer.enabled',
72
+ description: 'Cartographer doc-tree + navigation read surfaces (zero egress).',
73
+ justification: 'Read-only local-index surfaces; no egress, no spend.',
74
+ },
75
+ {
76
+ name: 'cartographerConformanceAudit',
77
+ configPath: 'cartographer.conformanceAudit.enabled',
78
+ description: 'Standards enforcement-coverage audit (deterministic, zero egress).',
79
+ justification: 'Deterministic local audit; no LLM, no egress, no spend.',
80
+ },
81
+ ];
82
+ export const DARK_GATE_EXCLUSIONS = [
83
+ // ── destructive — kills/deletes on a heuristic; off + dry-run for EVERYONE ──
84
+ {
85
+ configPath: 'monitoring.sessionReaper.enabled',
86
+ category: 'destructive',
87
+ reason: 'kills idle sessions; off+dry-run for everyone',
88
+ },
89
+ {
90
+ configPath: 'monitoring.agentWorktreeReaper.enabled',
91
+ category: 'destructive',
92
+ reason: 'deletes git worktrees; off+dry-run for everyone',
93
+ },
94
+ {
95
+ configPath: 'monitoring.mcpProcessReaper.enabled',
96
+ category: 'destructive',
97
+ reason: 'kills MCP processes; off+dry-run for everyone',
98
+ },
99
+ // ── cost-bearing — ongoing third-party / LLM spend; explicit opt-in ──
100
+ {
101
+ configPath: 'mentor.autonomousFix.enabled',
102
+ category: 'cost-bearing',
103
+ reason: 'spawns full-tool Opus fix sessions; ongoing spend',
104
+ },
105
+ {
106
+ configPath: 'cartographer.freshnessSweep.enabled',
107
+ category: 'cost-bearing',
108
+ reason: 'authors summaries via off-Claude codex; ongoing third-party spend; explicit opt-in even on dev',
109
+ },
110
+ // ── structural-stub — no runtime consumer wired; a gate would assert dead behavior ──
111
+ {
112
+ configPath: 'cartographer.conformanceAudit.llmEnrichment.enabled',
113
+ category: 'structural-stub',
114
+ reason: 'no LLM pipeline wired; dark stub',
115
+ },
116
+ {
117
+ configPath: 'cartographer.subtreeNav.llmRerank.enabled',
118
+ category: 'structural-stub',
119
+ reason: 'no LLM pipeline wired; dark stub',
120
+ },
121
+ {
122
+ configPath: 'monitoring.agentSleep.enabled',
123
+ category: 'structural-stub',
124
+ reason: 'sleep/respawn mechanism is a later slice; not wired',
125
+ },
126
+ // ── optional-integration — opt-in per deployment ──
127
+ {
128
+ configPath: 'multiMachine.sessionPool.enabled',
129
+ category: 'optional-integration',
130
+ reason: 'multi-machine pooling; opt-in per deployment',
131
+ },
132
+ // ── deliberate-fleet-default — off for everyone by design (incl. dev) ──
133
+ {
134
+ configPath: 'monitoring.bootHealthBeacon.enabled',
135
+ category: 'deliberate-fleet-default',
136
+ reason: 'minimal boot /health responder; deliberate fleet default, off until a supervisor needs it',
137
+ },
138
+ {
139
+ configPath: 'monitoring.parallelWorkSentinel.enabled',
140
+ category: 'deliberate-fleet-default',
141
+ reason: 'observe-only overlap councilor; candidate for dev-gating in a follow-up audit',
142
+ },
143
+ {
144
+ configPath: 'monitoring.failureLearning.enabled',
145
+ category: 'deliberate-fleet-default',
146
+ reason: 'observe-only failure-learning loop; candidate for dev-gating in a follow-up audit',
147
+ },
148
+ {
149
+ configPath: 'monitoring.correctionLearning.enabled',
150
+ category: 'deliberate-fleet-default',
151
+ reason: 'observe-only correction/preference sentinel; candidate for dev-gating in a follow-up audit',
152
+ },
153
+ {
154
+ configPath: 'monitoring.apprenticeshipCycleSla.enabled',
155
+ category: 'deliberate-fleet-default',
156
+ reason: 'observe-only overdue-cycle signal; candidate for dev-gating in a follow-up audit',
157
+ },
158
+ {
159
+ configPath: 'monitoring.geminiCapacityEscalation.enabled',
160
+ category: 'deliberate-fleet-default',
161
+ reason: 'observe-only capacity-block escalation; candidate for dev-gating in a follow-up audit',
162
+ },
163
+ {
164
+ configPath: 'monitoring.releaseReadiness.enabled',
165
+ category: 'deliberate-fleet-default',
166
+ reason: 'observe-only release-readiness sentinel; repo-gated; candidate for dev-gating in a follow-up audit',
167
+ },
168
+ {
169
+ configPath: 'threadline.a2aCheckIn.enabled',
170
+ category: 'deliberate-fleet-default',
171
+ reason: 'A2A check-in summarizer; deliberate fleet default, opt-in to keep the operator un-flooded',
172
+ },
173
+ {
174
+ configPath: 'mentor.enabled',
175
+ category: 'deliberate-fleet-default',
176
+ reason: 'framework-onboarding mentor system; deliberate fleet default, off until the human advances rollout',
177
+ },
178
+ {
179
+ configPath: 'mentee.enabled',
180
+ category: 'deliberate-fleet-default',
181
+ reason: 'mentee receiver wiring; deliberate fleet default, off until an allowlisted mentor is configured',
61
182
  },
62
183
  ];
63
184
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAYH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD;QACE,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,kCAAkC;QAC9C,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,uCAAuC;QACnD,WAAW,EAAE,kCAAkC;KAChD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE,mCAAmC;QAC/C,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,iCAAiC;QAC7C,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,6CAA6C;QACzD,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,sCAAsC;QAClD,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,UAAU,EAAE,sCAAsC;QAClD,WAAW,EAAE,gDAAgD;KAC9D;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,UAAkB;IACjE,IAAI,GAAG,GAAY,MAAM,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7D,GAAG,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
@@ -3646,7 +3646,7 @@ export function createRoutes(ctx) {
3646
3646
  }
3647
3647
  const cfg = ctx.config
3648
3648
  .cartographer?.conformanceAudit;
3649
- if (cfg?.enabled !== true) {
3649
+ if (!resolveDevAgentGate(cfg?.enabled, ctx.config)) {
3650
3650
  res.status(503).json({ error: 'Conformance audit not enabled' });
3651
3651
  return false;
3652
3652
  }