@event4u/agent-config 14.22.0 → 14.23.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 (111) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +159 -380
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/pr/merge.md +47 -38
  7. package/dist/agent-src/commands/roadmap/next.md +8 -0
  8. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +12 -0
  9. package/dist/agent-src/rules/notes-first-reasoning.md +36 -25
  10. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  11. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -1
  12. package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +9 -0
  13. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +52 -2
  14. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  15. package/dist/cli/registry.js +1 -1
  16. package/dist/cli-delegate/archive_completed_roadmaps.js +52 -4
  17. package/dist/cli-delegate/{chunk-TGIPZBCW.js → chunk-2KKXJW25.js} +22 -8
  18. package/dist/cli-delegate/{chunk-4FS4WRXP.js → chunk-IAI3XL43.js} +15 -3
  19. package/dist/cli-delegate/{chunk-BIXEDQPZ.js → chunk-KCNTUSPI.js} +1 -1
  20. package/dist/cli-delegate/cmd_export.js +2 -2
  21. package/dist/cli-delegate/cmd_handoff.js +20 -12
  22. package/dist/cli-delegate/cmd_prune.js +2 -2
  23. package/dist/cli-delegate/cmd_session_recycle.js +3 -13
  24. package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
  25. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  26. package/dist/cli-delegate/cmd_sync.js +2 -2
  27. package/dist/cli-delegate/cmd_uninstall.js +2 -2
  28. package/dist/cli-delegate/cmd_validate.js +2 -2
  29. package/dist/discovery/deprecation-report.md +1 -1
  30. package/dist/discovery/discovery-manifest.json +8 -8
  31. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  32. package/dist/discovery/discovery-manifest.summary.md +1 -1
  33. package/dist/discovery/dormancy-report.md +1 -1
  34. package/dist/discovery/orphan-report.md +1 -1
  35. package/dist/discovery/packs.json +2 -2
  36. package/dist/discovery/trust-report.md +1 -1
  37. package/dist/discovery/workspaces.json +2 -2
  38. package/dist/hooks/dispatch.js +880 -289
  39. package/dist/install/install.mjs +15 -3
  40. package/dist/mcp/registry-manifest.json +2 -2
  41. package/dist/mcp/server.json +2 -2
  42. package/dist/mcp/server.mjs +5458 -2453
  43. package/dist/scripts/_lib/lean_projection_mode.js +108 -0
  44. package/dist/scripts/_lib/router_match.js +243 -0
  45. package/dist/scripts/_lib/rule_injection.js +216 -0
  46. package/dist/scripts/condense.js +20 -20
  47. package/dist/scripts/project_thin_rules.js +139 -19
  48. package/dist/server/schemas/settings.js +16 -3
  49. package/docs/MIGRATION.md +56 -0
  50. package/docs/contracts/settings-classes.md +39 -7
  51. package/docs/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  52. package/llms.txt +1 -1
  53. package/package.json +1 -1
  54. package/src/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  55. package/src/config/agent-settings.template.yml +47 -1
  56. package/src/config/continuity-surface.json +7 -0
  57. package/src/config/evaluator-budgets.json +4 -4
  58. package/src/config/gate-violation-baselines.json +2 -2
  59. package/src/config/hook-token-budget.json +7 -6
  60. package/src/config/packed-binary-manifest.json +1 -1
  61. package/src/config/routing-coverage-seed.json +9 -2
  62. package/src/scripts/_cli/cmd_session_recycle.ts +2 -25
  63. package/src/scripts/_cli/handoff_sessions.ts +14 -44
  64. package/src/scripts/_lib/continuity_slot.ts +295 -0
  65. package/src/scripts/_lib/continuity_writer.ts +253 -0
  66. package/src/scripts/_lib/hook_settings.ts +85 -0
  67. package/src/scripts/_lib/lean_projection_mode.ts +127 -0
  68. package/src/scripts/_lib/packed_binary_predicate.ts +37 -0
  69. package/src/scripts/_lib/recycle_envelope_paths.ts +109 -21
  70. package/src/scripts/_lib/regression_neighbourhood.ts +159 -22
  71. package/src/scripts/_lib/session_eol.ts +44 -0
  72. package/src/scripts/_lib/session_index_trust.ts +346 -0
  73. package/src/scripts/_lib/standing_bound_ratchet.ts +154 -0
  74. package/src/scripts/_lib/vendored_grammar_upstream.ts +280 -0
  75. package/src/scripts/audit_mcp_tools.ts +69 -25
  76. package/src/scripts/build_mcp_catalog.ts +24 -1
  77. package/src/scripts/check_host_tree_parity.ts +291 -0
  78. package/src/scripts/check_preamble_payload_budget.ts +136 -7
  79. package/src/scripts/check_rule_projection_integrity.ts +102 -2
  80. package/src/scripts/ci_settle.ts +205 -5
  81. package/src/scripts/code_graph/build.ts +79 -0
  82. package/src/scripts/code_graph/cli.ts +258 -7
  83. package/src/scripts/code_graph/detect.ts +38 -0
  84. package/src/scripts/code_graph/query.ts +25 -2
  85. package/src/scripts/code_graph/sqlite_store.ts +16 -1
  86. package/src/scripts/code_graph/types.ts +52 -3
  87. package/src/scripts/code_graph/validate.ts +3 -1
  88. package/src/scripts/code_graph/verbs.ts +590 -0
  89. package/src/scripts/condense.ts +20 -20
  90. package/src/scripts/handoff_context_hook.ts +39 -1
  91. package/src/scripts/hook_manifest.json +1 -1
  92. package/src/scripts/hook_manifest.yaml +24 -1
  93. package/src/scripts/hooks/block_speaking_inbox_dir.ts +182 -16
  94. package/src/scripts/hooks/code_graph_context_hook.ts +7 -18
  95. package/src/scripts/hooks/push_settle_hook.ts +3 -2
  96. package/src/scripts/hooks/rule_inject_hook.ts +107 -20
  97. package/src/scripts/hooks/session_eol_hook.ts +120 -2
  98. package/src/scripts/hot_context_hook.ts +62 -7
  99. package/src/scripts/lint_roadmap_blockers.ts +164 -1
  100. package/src/scripts/mcp_server/consumer_tool_catalog.json +152 -2
  101. package/src/scripts/mcp_server/graph_tools.ts +294 -0
  102. package/src/scripts/mcp_server/path_util.ts +31 -0
  103. package/src/scripts/mcp_server/tool_catalog_source.ts +7 -1
  104. package/src/scripts/mcp_server/tools.ts +3 -13
  105. package/src/scripts/model_rule_injection.ts +61 -4
  106. package/src/scripts/project_thin_rules.ts +149 -16
  107. package/src/scripts/report_standing_payload_by_host.ts +650 -0
  108. package/src/scripts/schemas/agent-settings.schema.json +7 -1
  109. package/src/scripts/session_memory_index.ts +81 -8
  110. package/src/server/schemas/settings.ts +23 -4
  111. package/src/vendor/grammars/README.md +27 -2
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
3
3
  import {
4
- collect
4
+ blocker_is_resolved,
5
+ collect,
6
+ parse_blockers
5
7
  } from "./chunk-QAJS5YWY.js";
6
8
  import "./chunk-ULET4BYS.js";
7
9
  import {
@@ -132,6 +134,38 @@ function _git_mv(root, src_rel, dst_rel, dry_run) {
132
134
  return { ok: false, tracked: false };
133
135
  }
134
136
  }
137
+ function _blockerStatuses(text) {
138
+ const out = /* @__PURE__ */ new Map();
139
+ for (const b of parse_blockers(text)) {
140
+ out.set(b.id, blocker_is_resolved(b) ? "resolved" : "open");
141
+ }
142
+ return out;
143
+ }
144
+ function _indexContent(root, rel) {
145
+ const cp = _run(["git", "show", `:${rel}`], root);
146
+ return cp.returncode === 0 ? cp.stdout : null;
147
+ }
148
+ function _blockerDivergence(root, rel, workTreeText) {
149
+ const staged = _indexContent(root, rel);
150
+ if (staged === null) {
151
+ return [];
152
+ }
153
+ const wt = _blockerStatuses(workTreeText);
154
+ const idx = _blockerStatuses(staged);
155
+ const ids = [.../* @__PURE__ */ new Set([...wt.keys(), ...idx.keys()])].sort();
156
+ const out = [];
157
+ for (const id of ids) {
158
+ const a = idx.get(id);
159
+ const b = wt.get(id);
160
+ if (a === b) {
161
+ continue;
162
+ }
163
+ out.push(
164
+ `blocker '${id}': staged=${a ?? "absent"} vs working tree=${b ?? "absent"}`
165
+ );
166
+ }
167
+ return out;
168
+ }
135
169
  function _fs_grep_files(root, needle) {
136
170
  const SKIP = /* @__PURE__ */ new Set([".git", "node_modules", ".augment", "dist"]);
137
171
  const hits = [];
@@ -275,9 +309,8 @@ function archive_completed(root, opts) {
275
309
  );
276
310
  const archived = [];
277
311
  for (const stats of collect(roadmap_root)) {
278
- const guarded = parseGuardedBaselines(
279
- fs.readFileSync(path.join(roadmap_root, stats.rel), "utf-8")
280
- );
312
+ const roadmapText = fs.readFileSync(path.join(roadmap_root, stats.rel), "utf-8");
313
+ const guarded = parseGuardedBaselines(roadmapText);
281
314
  if (guarded.length > 0) {
282
315
  process.stderr.write(
283
316
  ` \u26A0\uFE0F ${stats.rel}: ${guarded.length} guarded-baseline step(s) \u2014 not archived. Verify against the real mechanism, then flip to \`[x]\`.
@@ -320,6 +353,18 @@ function archive_completed(root, opts) {
320
353
  if (changed_only && !touched.has(old_rel)) {
321
354
  continue;
322
355
  }
356
+ const divergence = _blockerDivergence(root, old_rel, roadmapText);
357
+ if (divergence.length > 0) {
358
+ process.stderr.write(
359
+ ` \u26A0\uFE0F ${stats.rel}: staged and working-tree blockers disagree (${divergence.length}) \u2014 not archived. \`git mv\` would commit the staged content, which this sweep never validated. Stage or discard the change, then re-run.
360
+ `
361
+ );
362
+ for (const d of divergence) {
363
+ process.stderr.write(` \xB7 ${d}
364
+ `);
365
+ }
366
+ continue;
367
+ }
323
368
  const new_rel = `agents/roadmaps/archive/${stats.rel}`;
324
369
  const mv = _git_mv(root, old_rel, new_rel, dry_run);
325
370
  if (!mv.ok) {
@@ -327,6 +372,9 @@ function archive_completed(root, opts) {
327
372
  `);
328
373
  continue;
329
374
  }
375
+ if (!dry_run && mv.tracked) {
376
+ _run(["git", "add", "--", new_rel], root);
377
+ }
330
378
  const refs = _inbound_ref_rewrite(root, old_rel, new_rel, dry_run, mv.tracked);
331
379
  if (!dry_run && refs.length && mv.tracked) {
332
380
  _run(["git", "add", "--", ...refs], root);
@@ -341,22 +341,35 @@ function listContinuityRecords(workspace_root) {
341
341
  }
342
342
  function resolveContinuityRecord(workspace_root, session_id) {
343
343
  const id = String(session_id ?? "").trim();
344
- if (id !== "") {
345
- const own = path3.join(workspace_root, recycle_envelope_rel(id));
346
- return fs3.existsSync(own) ? { file: own, reason: `continuity record for this session (${safe_stem(id)})` } : { file: null, reason: `no continuity record for this session (${safe_stem(id)})` };
347
- }
348
- const candidates = listContinuityRecords(workspace_root);
344
+ const own = id === "" ? null : path3.join(workspace_root, recycle_envelope_rel(id));
345
+ const candidates = listContinuityRecords(workspace_root).filter((f) => f !== own);
349
346
  if (candidates.length === 0) {
350
- return { file: null, reason: "no continuity record present" };
347
+ return {
348
+ file: null,
349
+ reason: id === "" ? "no continuity record present" : `no predecessor record in this workspace (own: ${safe_stem(id)})`
350
+ };
351
351
  }
352
352
  if (candidates.length === 1) {
353
- return { file: candidates[0], reason: "one continuity record, no session id to key on" };
353
+ return {
354
+ file: candidates[0],
355
+ reason: id === "" ? "one continuity record, no session id to key on" : `predecessor record, one candidate (own: ${safe_stem(id)})`
356
+ };
354
357
  }
355
358
  return {
356
359
  file: null,
357
- reason: `starting clean: ${candidates.length} continuity records in this workspace and no session id to tell them apart \u2014 resuming from the newest would resume a peer session, not this one`
360
+ reason: `starting clean: ${candidates.length} continuity records in this workspace and no way to tell which is the predecessor \u2014 resuming from the newest would resume a peer session, not this one`
358
361
  };
359
362
  }
363
+ function resolvePredecessor(projectRoot, sessionId) {
364
+ try {
365
+ const consumed = path3.join(projectRoot, recycle_consumed_rel(sessionId));
366
+ const raw = JSON.parse(fs3.readFileSync(consumed, "utf-8"));
367
+ const prior = String(raw.session_id ?? "").trim();
368
+ return prior === "" ? "none" : prior;
369
+ } catch {
370
+ return "none";
371
+ }
372
+ }
360
373
  function predecessorTracePresent(workspace_root, predecessor) {
361
374
  const id = String(predecessor ?? "").trim();
362
375
  if (id === "" || id === "none") {
@@ -1104,6 +1117,7 @@ export {
1104
1117
  recycle_envelope_rel,
1105
1118
  recycle_consumed_rel,
1106
1119
  resolveContinuityRecord,
1120
+ resolvePredecessor,
1107
1121
  predecessorTracePresent,
1108
1122
  env_session_id
1109
1123
  };
@@ -4063,7 +4063,8 @@ var confidenceBand = external_exports.enum(["off", "low", "medium", "high"]);
4063
4063
  var onBlock = external_exports.enum(["stop", "ask", "warn"]);
4064
4064
  var onBlockFallback = external_exports.enum(["stop", "warn"]);
4065
4065
  var modelAutoSwitch = external_exports.enum(["auto", "suggest", "off"]);
4066
- var leanProjectionMode = external_exports.enum(["eager-all", "thin"]);
4066
+ var leanProjectionMode = external_exports.enum(["eager-all", "thin", "delivery"]);
4067
+ var leanProjectionHost = external_exports.enum(["claude-code", "cursor", "cline"]);
4067
4068
  var projectionMode = external_exports.enum(["legacy-all", "scoped"]);
4068
4069
  var memoryCadence = external_exports.enum(["auto", "always", "never"]);
4069
4070
  var projectAudience = external_exports.enum(["self", "internal", "client", "public"]);
@@ -4095,9 +4096,12 @@ var settingsSchema = external_exports.object({
4095
4096
  ),
4096
4097
  lean_projection: external_exports.object({
4097
4098
  mode: leanProjectionMode.default("eager-all").describe(
4098
- "How the per-tool projector emits the rule layer. eager-all = every rule body inlined into every projection (default, safe). thin = kernel rules full-bodied + non-kernel rules as router-resolved pointers (~45k GPT-tok lighter per session). EXPERIMENTAL: validate with the live A/B before flipping; one-flip revert to eager-all."
4099
+ "How the per-tool projector emits the rule layer. eager-all = every rule body inlined into every projection (safe; what an ABSENT key still resolves to, per ADR-267 decision point 4). thin = kernel rules full-bodied + non-kernel rules as router-resolved pointers (~45k GPT-tok lighter per session), with no delivery mechanism. delivery = thin stubs PLUS the rule-inject hook concern, which delivers a body back on a trigger match; this is the value the SHIPPED TEMPLATE carries for Claude Code since ADR-267, and the activation charge for it is paid in src/config/hook-token-budget.json (user_prompt_submit slot sum 4,096 -> 16,384)."
4100
+ ),
4101
+ hosts: external_exports.array(leanProjectionHost).default(["claude-code"]).describe(
4102
+ "Which hosts a thinning mode may thin (ADR-267). Absent resolves to [claude-code]. Only the three hosts with a per-rule rule tree are accepted, and this enum is the AUTHORING layer: an id outside it is a hard validation FAILURE here and under validate_agent_settings, never a warning. resolveLeanProjectionHosts is the READ-TIME backstop for a hand-edited .agent-settings.yml that passed neither, and THERE the id is dropped with a warning (R2 finding 6 \u2014 the two layers answer differently and neither said so). Every host outside this list receives exactly what eager-all writes, asserted byte-for-byte by check_host_tree_parity."
4099
4103
  )
4100
- }).default({ mode: "eager-all" }),
4104
+ }).default({ mode: "eager-all", hosts: ["claude-code"] }),
4101
4105
  cost: external_exports.object({
4102
4106
  budgets: external_exports.object({
4103
4107
  daily: external_exports.number().min(0).default(0).describe(
@@ -4462,6 +4466,14 @@ var settingsSchema = external_exports.object({
4462
4466
  )
4463
4467
  })
4464
4468
  }),
4469
+ continuity: external_exports.object({
4470
+ auto_record: external_exports.enum(["on", "off"]).default("off").describe(
4471
+ "Deterministic continuity-record writer at session end (road-to-continuity-writer-activation Phase 1). on = the session-eol concern writes the continuity_record capsule variant on Stop for a substantive session that has claimed a roadmap; every field is computed from on-disk state, with no model spend and no subprocess. off (default) = no automatic record \u2014 while session:recycle is still the normal path, a second producer on it before the parity evidence is in would be unverified."
4472
+ ),
4473
+ run_checkpoints: external_exports.enum(["on", "off"]).default("on").describe(
4474
+ "Deterministic run-checkpoint production at session end (road-to-continuity-writer-activation Phase 1.4). on (default) = a session above the recycle threshold and inside a running roadmap contract leaves agents/runtime/state/checkpoints/<run>.json, so a killed run resumes from a derived checkpoint rather than from bookkeeping. off = no checkpoint; continuity writing, the recycle advisory and the context-fill surface are unaffected. Default ON because it is the behaviour the tree already had \u2014 the switch exists to make the three session-end handlers independently disableable, not to change what ships."
4475
+ )
4476
+ }),
4465
4477
  memory: external_exports.object({
4466
4478
  cadence: memoryCadence.default("always").describe(
4467
4479
  "Cadence of the \u{1F9E0} memory-visibility line after a memory-consulting step. always (default) = show whenever a memory type was asked; auto = show only when 3+ types were consulted (less noise); never = suppress. Distinct from rule_loading_tier \u2014 owns its own key since the 2026-06-01 untangle."
@@ -2,7 +2,7 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
2
2
  import {
3
3
  ZodFirstPartyTypeKind,
4
4
  settingsSchema
5
- } from "./chunk-4FS4WRXP.js";
5
+ } from "./chunk-IAI3XL43.js";
6
6
  import {
7
7
  main
8
8
  } from "./chunk-6RJA2F5A.js";
@@ -9,8 +9,8 @@ import {
9
9
  KIRO_MARKER,
10
10
  ROOCODE_MARKER,
11
11
  ZED_MARKER
12
- } from "./chunk-BIXEDQPZ.js";
13
- import "./chunk-4FS4WRXP.js";
12
+ } from "./chunk-KCNTUSPI.js";
13
+ import "./chunk-IAI3XL43.js";
14
14
  import "./chunk-6RJA2F5A.js";
15
15
  import "./chunk-WOKWX5PL.js";
16
16
  import "./chunk-523HCFYO.js";
@@ -13,7 +13,7 @@ import {
13
13
  predecessorTracePresent,
14
14
  recycle_consumed_rel,
15
15
  resolveContinuityRecord
16
- } from "./chunk-TGIPZBCW.js";
16
+ } from "./chunk-2KKXJW25.js";
17
17
  import "./chunk-I6RHFQEG.js";
18
18
  import {
19
19
  hasBoundaryMarker,
@@ -340,7 +340,15 @@ function consume_recycle_envelope(root, now = /* @__PURE__ */ new Date(), sessio
340
340
  reason: `recycle envelope names predecessor "${predecessor}", which has no trace in this workspace`
341
341
  };
342
342
  }
343
- const drift = describeDrift(envelope, collectRepoAnchor(root));
343
+ const anchor = collectRepoAnchor(root);
344
+ const envelopeBranch = String(envelope["branch"] ?? "").trim();
345
+ if (envelopeBranch !== "" && anchor.branch !== null && envelopeBranch !== anchor.branch) {
346
+ return {
347
+ action: "absent",
348
+ reason: `recycle envelope is for branch "${envelopeBranch}" and this tree is on "${anchor.branch}" \u2014 left unclaimed for a session on that branch rather than consumed`
349
+ };
350
+ }
351
+ const drift = describeDrift(envelope, anchor);
344
352
  const warnings = scanEnvelopeDirectives(envelope);
345
353
  const focus = (process2.env.AGENT_RESUME_FOCUS ?? "").trim();
346
354
  const block = wrapAsPriorSessionData(JSON.stringify(envelope, null, 2), {
@@ -792,12 +800,21 @@ function readEolCounters(workspaceRoot, sessionKey) {
792
800
  return null;
793
801
  }
794
802
  }
803
+ var SUBSTANTIVE_TOKEN_FLOOR = 1e4;
804
+ function is_substantive(counters) {
805
+ if (counters === null) return true;
806
+ if (!Number.isFinite(counters.assistant_records)) return true;
807
+ if (counters.assistant_records < 1) return false;
808
+ if (!Number.isFinite(counters.tool_calls)) return true;
809
+ if (counters.tool_calls >= 1) return true;
810
+ if (!Number.isFinite(counters.final_context_tokens)) return true;
811
+ return counters.final_context_tokens >= SUBSTANTIVE_TOKEN_FLOOR;
812
+ }
795
813
 
796
814
  // src/scripts/_cli/handoff_sessions.ts
797
815
  var DEFAULT_CAP = 15;
798
816
  var FETCH_OVERSHOOT = 3;
799
817
  var SUMMARY_SNIPPET_CHARS = 120;
800
- var SUBSTANTIVE_TOKEN_FLOOR = 1e4;
801
818
  function encode_project_path(cwd) {
802
819
  return projectStoreSlug(cwd);
803
820
  }
@@ -1060,15 +1077,6 @@ function _codex_sessions(opts, cap) {
1060
1077
  function _sort_key(s) {
1061
1078
  return s.endedAt ?? s.startedAt ?? "";
1062
1079
  }
1063
- function is_substantive(counters) {
1064
- if (counters === null) return true;
1065
- if (!Number.isFinite(counters.assistant_records)) return true;
1066
- if (counters.assistant_records < 1) return false;
1067
- if (!Number.isFinite(counters.tool_calls)) return true;
1068
- if (counters.tool_calls >= 1) return true;
1069
- if (!Number.isFinite(counters.final_context_tokens)) return true;
1070
- return counters.final_context_tokens >= SUBSTANTIVE_TOKEN_FLOOR;
1071
- }
1072
1080
  function _derive_tag(id) {
1073
1081
  try {
1074
1082
  return derive_session_tag(id);
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  PROJECT_BRIDGE_MARKERS
4
- } from "./chunk-BIXEDQPZ.js";
5
- import "./chunk-4FS4WRXP.js";
4
+ } from "./chunk-KCNTUSPI.js";
5
+ import "./chunk-IAI3XL43.js";
6
6
  import "./chunk-6RJA2F5A.js";
7
7
  import "./chunk-WOKWX5PL.js";
8
8
  import "./chunk-523HCFYO.js";
@@ -3,9 +3,9 @@ import {
3
3
  RECYCLE_ENVELOPE_MAX_BYTES,
4
4
  collectGrounding,
5
5
  env_session_id,
6
- recycle_consumed_rel,
7
- recycle_envelope_rel
8
- } from "./chunk-TGIPZBCW.js";
6
+ recycle_envelope_rel,
7
+ resolvePredecessor
8
+ } from "./chunk-2KKXJW25.js";
9
9
  import {
10
10
  CAPSULE_SCHEMA_VERSION,
11
11
  validateRecycleEnvelope
@@ -60,16 +60,6 @@ function templateEnvelope() {
60
60
  predecessor: "none"
61
61
  };
62
62
  }
63
- function resolvePredecessor(projectRoot, sessionId) {
64
- try {
65
- const consumed = path.join(projectRoot, recycle_consumed_rel(sessionId));
66
- const raw = JSON.parse(fs.readFileSync(consumed, "utf-8"));
67
- const prior = String(raw.session_id ?? "").trim();
68
- return prior === "" ? "none" : prior;
69
- } catch {
70
- return "none";
71
- }
72
- }
73
63
  function parseArgv(argv) {
74
64
  const parsed = { ok: true };
75
65
  for (let i = 0; i < argv.length; i += 1) {
@@ -3,8 +3,8 @@ import {
3
3
  GLOBAL_AGENT_SETTINGS_PATH,
4
4
  GLOBAL_USER_SETTINGS_PATH,
5
5
  SETTINGS_FILE
6
- } from "./chunk-BIXEDQPZ.js";
7
- import "./chunk-4FS4WRXP.js";
6
+ } from "./chunk-KCNTUSPI.js";
7
+ import "./chunk-IAI3XL43.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  external_exports,
13
13
  settingsSchema
14
- } from "./chunk-4FS4WRXP.js";
14
+ } from "./chunk-IAI3XL43.js";
15
15
  import {
16
16
  resolvePackageRoot
17
17
  } from "./chunk-MCJYCQPF.js";
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  main
4
- } from "./chunk-BIXEDQPZ.js";
5
- import "./chunk-4FS4WRXP.js";
4
+ } from "./chunk-KCNTUSPI.js";
5
+ import "./chunk-IAI3XL43.js";
6
6
  import "./chunk-6RJA2F5A.js";
7
7
  import "./chunk-WOKWX5PL.js";
8
8
  import "./chunk-523HCFYO.js";
@@ -3,8 +3,8 @@ import {
3
3
  PROJECT_BRIDGE_MARKERS,
4
4
  USER_SCOPE_PATHS,
5
5
  subtract_pointers
6
- } from "./chunk-BIXEDQPZ.js";
7
- import "./chunk-4FS4WRXP.js";
6
+ } from "./chunk-KCNTUSPI.js";
7
+ import "./chunk-IAI3XL43.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -3,8 +3,8 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
3
3
  import {
4
4
  PROJECT_BRIDGE_MARKERS,
5
5
  USER_SCOPE_PATHS
6
- } from "./chunk-BIXEDQPZ.js";
7
- import "./chunk-4FS4WRXP.js";
6
+ } from "./chunk-KCNTUSPI.js";
7
+ import "./chunk-IAI3XL43.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-09-08T10:35:58Z`
3
+ - Generated: `2026-09-09T13:37:07Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -2422,12 +2422,12 @@
2422
2422
  },
2423
2423
  {
2424
2424
  "category": "command",
2425
- "checksum": "sha256:74b20b35447065553ac5e40a22e0fda92e9191d3cd74350cae8895a4fac35337",
2425
+ "checksum": "sha256:21332b2ed898e38da738030ec3add5f2be4f7672ee72e531205dfdaef3d6a26b",
2426
2426
  "install": {
2427
2427
  "default": true,
2428
2428
  "removable": false
2429
2429
  },
2430
- "intent": "Prepare an open PR to mergeable — sync the base in, resolve conflicts semantically, drive required checks green — merging itself is gated and inert",
2430
+ "intent": "Prepare an open PR to mergeable — sync the base in, resolve conflicts semantically, drive required checks green — then merge what the invocation named",
2431
2431
  "lifecycle": "active",
2432
2432
  "name": "git-pr-merge",
2433
2433
  "pack": "git",
@@ -5113,7 +5113,7 @@
5113
5113
  },
5114
5114
  {
5115
5115
  "category": "command",
5116
- "checksum": "sha256:e8de5246b3d5b6631a7ad24e2bea091fe490e0552edacace5c3ac080e9271c12",
5116
+ "checksum": "sha256:5a10124143c2baa3fb481461ce0225f7eaece711ff688811ad66763654fee531",
5117
5117
  "install": {
5118
5118
  "default": true,
5119
5119
  "removable": false
@@ -7123,7 +7123,7 @@
7123
7123
  },
7124
7124
  {
7125
7125
  "category": "rule",
7126
- "checksum": "sha256:e89979656ebfee82c9ef2e929e663992c75d3c3115cdd46f209e9f4a426bc99d",
7126
+ "checksum": "sha256:185fe198df456bd7e3b0ed79e2665a29ea0352df338a20e98214c6d88825b4c2",
7127
7127
  "install": {
7128
7128
  "default": true,
7129
7129
  "removable": false
@@ -8987,7 +8987,7 @@
8987
8987
  },
8988
8988
  {
8989
8989
  "category": "skill",
8990
- "checksum": "sha256:1bf06753fad0ae6c847702ad357f52a03888f08252b8117413313ed17c7503cc",
8990
+ "checksum": "sha256:90de0462c11d94c41340447e32e4d5d004d540f3d6d9c02ded4634782d481753",
8991
8991
  "install": {
8992
8992
  "default": true,
8993
8993
  "removable": false
@@ -14141,7 +14141,7 @@
14141
14141
  },
14142
14142
  {
14143
14143
  "category": "skill",
14144
- "checksum": "sha256:6ebc9ffda0b1fd23d47c7606afd1595bbcf1a2cc653a1c83d235281c572c1522",
14144
+ "checksum": "sha256:ca9de1086258a23f5bcc3cd626434545f493f736a67f93eb52621746c136fca6",
14145
14145
  "install": {
14146
14146
  "default": true,
14147
14147
  "removable": false
@@ -14818,7 +14818,7 @@
14818
14818
  "workspaces": []
14819
14819
  }
14820
14820
  ],
14821
- "checksum": "sha256:5d8611228dab065a2602819fe244e651eeb530b373ea6a9b5c815de6ad88f626",
14821
+ "checksum": "sha256:aa82784e196e180afe8767be33e034fe331d62b7f2f1a257eee5e67a7f61ee89",
14822
14822
  "deprecations": [
14823
14823
  {
14824
14824
  "key": "tier",
@@ -14967,7 +14967,7 @@
14967
14967
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
14968
14968
  }
14969
14969
  ],
14970
- "generated_at": "2026-09-08T10:35:58Z",
14970
+ "generated_at": "2026-09-09T13:37:07Z",
14971
14971
  "packs": [
14972
14972
  {
14973
14973
  "artefact_count": 128,
@@ -1 +1 @@
1
- 26ab84aff5e8b9a65cb79765c60cfdf382aa45644237027187d847a37dbf9825 discovery-manifest.json
1
+ d129b3747c38a0ef013d82f0afa89a18a205d4fdb4294fd7b8b427b526d92c7d discovery-manifest.json
@@ -1,6 +1,6 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-09-08T10:35:58Z`
3
+ - Generated: `2026-09-09T13:37:07Z`
4
4
  - Scanner: `de0a22b4ac4c`
5
5
  - Artefacts: **625**
6
6
  - Unassigned: **0**
@@ -1,6 +1,6 @@
1
1
  # Discovery — Dormancy Report
2
2
 
3
- - Generated: `2026-09-08T10:35:58Z`
3
+ - Generated: `2026-09-09T13:37:07Z`
4
4
  - Window: **6 months** without a commit
5
5
 
6
6
  > Dormancy triggers **review, never auto-deprecation**
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-09-08T10:35:58Z`
3
+ - Generated: `2026-09-09T13:37:07Z`
4
4
  - Orphan artefacts: **0**
5
5
 
6
6
  > An orphan is an artefact whose declared pack has no other members.
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:5d8611228dab065a2602819fe244e651eeb530b373ea6a9b5c815de6ad88f626",
3
- "generated_at": "2026-09-08T10:35:58Z",
2
+ "checksum": "sha256:aa82784e196e180afe8767be33e034fe331d62b7f2f1a257eee5e67a7f61ee89",
3
+ "generated_at": "2026-09-09T13:37:07Z",
4
4
  "packs": [
5
5
  {
6
6
  "always_on": false,
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-09-08T10:35:58Z`
3
+ - Generated: `2026-09-09T13:37:07Z`
4
4
  - Workspaces tracked: **10**
5
5
  - Human-review-required artefacts: **3**
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:5d8611228dab065a2602819fe244e651eeb530b373ea6a9b5c815de6ad88f626",
3
- "generated_at": "2026-09-08T10:35:58Z",
2
+ "checksum": "sha256:aa82784e196e180afe8767be33e034fe331d62b7f2f1a257eee5e67a7f61ee89",
3
+ "generated_at": "2026-09-09T13:37:07Z",
4
4
  "scanner_version": "de0a22b4ac4c",
5
5
  "workspaces": [
6
6
  {