@event4u/agent-config 9.33.0 → 9.35.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 (105) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +154 -145
  3. package/CONTRIBUTING.md +23 -14
  4. package/dist/agent-src/commands/agent-handoff.md +15 -3
  5. package/dist/agent-src/commands/roadmap/next.md +37 -5
  6. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
  7. package/dist/agent-src/scripts/roadmap_gates.ts +119 -4
  8. package/dist/agent-src/skills/corpus-grounding/SKILL.md +21 -12
  9. package/dist/agent-src/skills/design-tokens/SKILL.md +15 -0
  10. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +24 -0
  11. package/dist/agent-src/skills/rule-writing/SKILL.md +23 -0
  12. package/dist/agent-src/skills/skill-writing/SKILL.md +80 -2
  13. package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -3
  14. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +24 -0
  15. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +25 -0
  16. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  17. package/dist/agent-src/templates/scripts/memory_lookup.ts +1 -2
  18. package/dist/agent-src/templates/scripts/memory_signal.ts +2 -4
  19. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +35 -5
  20. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/staged_confirmation.ts +252 -0
  21. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/staged_confirmation_store.ts +307 -0
  22. package/dist/cli/registry.js +2 -2
  23. package/dist/cli/registry.js.map +1 -1
  24. package/dist/cli-delegate/{chunk-PMQ6Z3T3.js → chunk-2TGMGLBL.js} +11 -4
  25. package/dist/cli-delegate/{chunk-YPAWXXXR.js → chunk-55RI5UXK.js} +17 -0
  26. package/dist/cli-delegate/{chunk-MA4GFWDY.js → chunk-H6F2CQFI.js} +1 -1
  27. package/dist/cli-delegate/{chunk-2WELHO3P.js → chunk-I5EAFRII.js} +35 -0
  28. package/dist/cli-delegate/{chunk-3EWYC3YK.js → chunk-UEZ7D35A.js} +4 -3
  29. package/dist/cli-delegate/{chunk-UVKNIJH2.js → chunk-ZAXH3ZWU.js} +3 -0
  30. package/dist/cli-delegate/cmd_conformance.js +2 -2
  31. package/dist/cli-delegate/cmd_doctor.js +2 -2
  32. package/dist/cli-delegate/cmd_export.js +2 -2
  33. package/dist/cli-delegate/cmd_handoff.js +3 -3
  34. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  35. package/dist/cli-delegate/cmd_prune.js +2 -2
  36. package/dist/cli-delegate/cmd_route_audit.js +1 -1
  37. package/dist/cli-delegate/cmd_session_recycle.js +7 -2
  38. package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
  39. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  40. package/dist/cli-delegate/cmd_sync.js +2 -2
  41. package/dist/cli-delegate/cmd_uninstall.js +2 -2
  42. package/dist/cli-delegate/cmd_validate.js +2 -2
  43. package/dist/discovery/deprecation-report.md +1 -1
  44. package/dist/discovery/discovery-manifest.json +13 -13
  45. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  46. package/dist/discovery/discovery-manifest.summary.md +2 -2
  47. package/dist/discovery/dormancy-report.md +17 -0
  48. package/dist/discovery/orphan-report.md +1 -1
  49. package/dist/discovery/packs.json +3 -3
  50. package/dist/discovery/trust-report.md +1 -1
  51. package/dist/discovery/workspaces.json +3 -3
  52. package/dist/hooks/dispatch.js +355 -85
  53. package/dist/install/install.mjs +3 -0
  54. package/dist/mcp/registry-manifest.json +3 -3
  55. package/dist/mcp/server.json +2 -2
  56. package/dist/mcp/server.mjs +192 -12
  57. package/dist/server/schemas/settings.js +1 -0
  58. package/dist/server/schemas/settings.js.map +1 -1
  59. package/docs/contracts/settings-classes.md +3 -2
  60. package/docs/guidelines/agent-infra/failure-signatures.md +47 -12
  61. package/package.json +2 -2
  62. package/src/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
  63. package/src/agent-src/scripts/roadmap_gates.ts +119 -4
  64. package/src/agent-src/templates/scripts/memory_lookup.ts +1 -2
  65. package/src/agent-src/templates/scripts/memory_signal.ts +2 -4
  66. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +35 -5
  67. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/staged_confirmation.ts +252 -0
  68. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/staged_confirmation_store.ts +307 -0
  69. package/src/config/agent-settings.template.yml +11 -2
  70. package/src/config/quorum-attendance-budget.json +11 -3
  71. package/src/scripts/_cli/cmd_session_recycle.ts +6 -1
  72. package/src/scripts/_dispatch.bash +6 -2
  73. package/src/scripts/_lib/env_kill_switch.ts +37 -0
  74. package/src/scripts/_lib/security_lint.ts +18 -4
  75. package/src/scripts/_lib/self_repair.ts +60 -0
  76. package/src/scripts/_lib/self_repair_store.ts +65 -5
  77. package/src/scripts/_lib/session_register.ts +67 -1
  78. package/src/scripts/_lib/subagent_capsule.ts +78 -1
  79. package/src/scripts/ai_council/config.ts +60 -0
  80. package/src/scripts/ai_council/events_log.ts +105 -6
  81. package/src/scripts/ai_council/orchestrator.ts +38 -0
  82. package/src/scripts/ai_council/prompts.ts +165 -3
  83. package/src/scripts/ai_council/quorum.ts +87 -0
  84. package/src/scripts/ai_team/review_gate.ts +2 -2
  85. package/src/scripts/build_discovery_manifest.ts +165 -0
  86. package/src/scripts/check_claims.ts +51 -2
  87. package/src/scripts/ci_time_ratio.ts +3 -1
  88. package/src/scripts/council_cli.ts +36 -1
  89. package/src/scripts/discovery_graph.ts +201 -27
  90. package/src/scripts/dispatch_r2_reviewer.ts +102 -1
  91. package/src/scripts/hooks/turn_end_gate_hook.ts +172 -11
  92. package/src/scripts/lint_framework_leakage.ts +195 -28
  93. package/src/scripts/lint_framework_leakage_allowlist.json +94 -86
  94. package/src/scripts/lint_handoffs.ts +92 -2
  95. package/src/scripts/lint_hedge_words.ts +317 -0
  96. package/src/scripts/lint_mcp_config_security.ts +1 -1
  97. package/src/scripts/lint_skill_frontmatter_safety.ts +1 -1
  98. package/src/scripts/memory_lookup.ts +1 -2
  99. package/src/scripts/schemas/command.schema.json +4 -0
  100. package/src/scripts/schemas/skill.schema.json +4 -0
  101. package/src/scripts/self_repair_cli.ts +26 -1
  102. package/src/scripts/session_register_hook.ts +238 -18
  103. package/src/scripts/sessions_cli.ts +377 -12
  104. package/src/scripts/skill_linter.ts +58 -2
  105. package/src/server/schemas/settings.ts +3 -0
@@ -28,6 +28,11 @@ var import_yaml = __toESM(require_dist(), 1);
28
28
  import * as fs from "node:fs";
29
29
  import * as os from "node:os";
30
30
  import * as path from "node:path";
31
+
32
+ // src/scripts/ai_council/quorum.ts
33
+ var SOLO_FLOOR_MIN_PRESENT = 2;
34
+
35
+ // src/scripts/ai_council/config.ts
31
36
  var _VALID_PROVIDERS = /* @__PURE__ */ new Set([
32
37
  "anthropic",
33
38
  "openai",
@@ -344,6 +349,9 @@ function _build_config(raw, source_path) {
344
349
  _asDict(_getOr(raw, "cli_call_budget", {}))
345
350
  );
346
351
  const quorum = _build_quorum(_get(raw, "quorum", "majority"));
352
+ const quorum_min_present = _build_quorum_min_present(
353
+ _get(raw, "quorum_min_present", SOLO_FLOOR_MIN_PRESENT)
354
+ );
347
355
  const necessity_classifier = _build_necessity_classifier(
348
356
  _asDict(_getOr(raw, "necessity_classifier", {}))
349
357
  );
@@ -392,6 +400,7 @@ function _build_config(raw, source_path) {
392
400
  consensus_scoring: consensus,
393
401
  cli_call_budget,
394
402
  quorum,
403
+ quorum_min_present,
395
404
  necessity_classifier,
396
405
  model_downgrade,
397
406
  debate,
@@ -1219,6 +1228,14 @@ function _build_quorum(raw) {
1219
1228
  `\`quorum\`=${_pyRepr(raw)} must be 'majority' or an integer >= 1 (got ${_pyTypeName(raw)}).`
1220
1229
  );
1221
1230
  }
1231
+ function _build_quorum_min_present(raw) {
1232
+ if (_isInt(raw) && raw >= 1) {
1233
+ return raw;
1234
+ }
1235
+ throw new CouncilConfigError(
1236
+ `\`quorum_min_present\`=${_pyRepr(raw)} must be an integer >= 1 (got ${_pyTypeName(raw)}).`
1237
+ );
1238
+ }
1222
1239
  function _build_advisor(name, cfg) {
1223
1240
  if (!_isDict(cfg)) {
1224
1241
  throw new CouncilConfigError(`advisors.${name}: must be a mapping.`);
@@ -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-UVKNIJH2.js";
5
+ } from "./chunk-ZAXH3ZWU.js";
6
6
  import {
7
7
  main
8
8
  } from "./chunk-DS6BLDMG.js";
@@ -449,6 +449,38 @@ function hasBoundaryMarker(block) {
449
449
  // outside the datamarking while still riding in the same block.
450
450
  block.trimEnd().endsWith(ENVELOPE_BOUNDARY_CLOSE);
451
451
  }
452
+ var DECISION_REVERSIBILITY_TAGS = ["reversible", "irreversible"];
453
+ function decisionTagErrors(decisions) {
454
+ if (!Array.isArray(decisions)) {
455
+ return [];
456
+ }
457
+ const errors = [];
458
+ for (const line of decisions) {
459
+ if (typeof line !== "string") {
460
+ continue;
461
+ }
462
+ const m = /\[([^\]]*)\]\s*$/.exec(line.trimEnd());
463
+ if (m === null) {
464
+ continue;
465
+ }
466
+ const inner = (m[1] ?? "").trim();
467
+ const lowered = inner.toLowerCase();
468
+ if (DECISION_REVERSIBILITY_TAGS.includes(lowered)) {
469
+ if (inner !== lowered) {
470
+ errors.push(
471
+ `decisions: reversibility tag must be lower-case \u2014 got \`[${inner}]\`, expected \`[${lowered}]\``
472
+ );
473
+ }
474
+ continue;
475
+ }
476
+ if (/^i?rr?ever[a-z]*[^a-z]*$/i.test(lowered)) {
477
+ errors.push(
478
+ `decisions: \`[${inner}]\` is not a reversibility tag \u2014 use exactly ` + DECISION_REVERSIBILITY_TAGS.map((t) => `\`[${t}]\``).join(" or ") + ", or drop the bracket"
479
+ );
480
+ }
481
+ }
482
+ return errors;
483
+ }
452
484
  var RECYCLE_ENVELOPE_KEYS = /* @__PURE__ */ new Set([
453
485
  "capsule_version",
454
486
  "variant",
@@ -461,6 +493,7 @@ var RECYCLE_ENVELOPE_KEYS = /* @__PURE__ */ new Set([
461
493
  "not_carried_forward",
462
494
  "decisions",
463
495
  "constraints",
496
+ "do_not_touch",
464
497
  "open_worker_envelopes",
465
498
  "artifact_paths",
466
499
  "assumptions",
@@ -513,7 +546,9 @@ function validateRecycleEnvelope(input) {
513
546
  checkList(errors, "remaining", e["remaining"], MAX_LINE_CHARS, true);
514
547
  checkList(errors, "not_carried_forward", e["not_carried_forward"], MAX_LINE_CHARS, true);
515
548
  checkList(errors, "decisions", e["decisions"], MAX_LINE_CHARS, false);
549
+ errors.push(...decisionTagErrors(e["decisions"]));
516
550
  checkList(errors, "constraints", e["constraints"], MAX_LINE_CHARS, false);
551
+ checkList(errors, "do_not_touch", e["do_not_touch"], MAX_REF_CHARS, false);
517
552
  checkList(errors, "open_worker_envelopes", e["open_worker_envelopes"], MAX_REF_CHARS, false);
518
553
  checkList(errors, "artifact_paths", e["artifact_paths"], MAX_REF_CHARS, false);
519
554
  checkList(errors, "suggested_skills", e["suggested_skills"], MAX_REF_CHARS, false);
@@ -271,7 +271,7 @@ function* iter_corpus(roots = DEFAULT_SCAN_ROOTS, exts = [".md"]) {
271
271
  function report(findings, opts) {
272
272
  const check_label = opts.check_label;
273
273
  if (findings.length === 0) {
274
- process.stdout.write(`\u2705 ${check_label}: clean (${_corpus_note()}).
274
+ process.stdout.write(`\u2705 ${check_label}: clean (${_corpus_note(opts.scanned_roots)}).
275
275
  `);
276
276
  return 0;
277
277
  }
@@ -311,8 +311,9 @@ function _pyG(n) {
311
311
  }
312
312
  return s;
313
313
  }
314
- function _corpus_note() {
315
- return "scanned " + DEFAULT_SCAN_ROOTS.join(", ");
314
+ function _corpus_note(scanned_roots) {
315
+ const roots = scanned_roots && scanned_roots.length > 0 ? scanned_roots : DEFAULT_SCAN_ROOTS;
316
+ return "scanned " + roots.join(", ");
316
317
  }
317
318
  var PyFloat = class {
318
319
  constructor(value) {
@@ -4553,6 +4553,9 @@ var settingsSchema = external_exports.object({
4553
4553
  ),
4554
4554
  language: external_exports.boolean().default(true).describe(
4555
4555
  "Detector B of the turn-end gate: refuse a turn whose reply is not in the pinned language (19 measured occurrences). Fenced code, inline code, quoted tool output, tables, URLs and paths are stripped first, and the remainder is then scored LEAD-FIRST by the same classifier that sets the pin \u2014 so the verdict usually comes from the reply opening, not from all of it. Sharing that classifier is deliberate: it stops the pin and the detector disagreeing about a turn. Accepted opt-in spellings for the switches below include YAML true/false and yes/no/on/off. Inert while hooks.turn_end_gate.enabled is false."
4556
+ ),
4557
+ verification: external_exports.boolean().default(true).describe(
4558
+ "Detector C of the turn-end gate: refuse a turn that changed a file and then ran nothing that could have checked it \u2014 no test, type-check, lint or build call follows the LAST edit. Ordering is the point: a run before the final edit did not exercise it, which is the freshness clause verify-before-complete states. Read off the turn tool calls, not the prose, because a reply cannot say whether an edit was verified. Deliberately narrow on what counts as verification \u2014 a missed detection costs one unguarded turn, a false refusal teaches you to switch the gate off. No fire rate is quoted: none has been measured yet. Inert while hooks.turn_end_gate.enabled is false."
4556
4559
  )
4557
4560
  }).default({})
4558
4561
  }),
@@ -19,7 +19,7 @@ import {
19
19
  frontmatterPaths,
20
20
  proseEqual,
21
21
  splitFrontmatter
22
- } from "./chunk-PMQ6Z3T3.js";
22
+ } from "./chunk-2TGMGLBL.js";
23
23
  import "./chunk-FTAISGDQ.js";
24
24
  import {
25
25
  atomic_write_json,
@@ -27,7 +27,7 @@ import {
27
27
  is_replay_mode
28
28
  } from "./chunk-EJITJBJX.js";
29
29
  import "./chunk-Q26HT4QT.js";
30
- import "./chunk-YPAWXXXR.js";
30
+ import "./chunk-55RI5UXK.js";
31
31
  import "./chunk-PZWRPRWP.js";
32
32
  import "./chunk-736JCWLM.js";
33
33
  import {
@@ -66,11 +66,11 @@ import {
66
66
  _wizard_state_path,
67
67
  main,
68
68
  shutilWhich
69
- } from "./chunk-PMQ6Z3T3.js";
69
+ } from "./chunk-2TGMGLBL.js";
70
70
  import "./chunk-FTAISGDQ.js";
71
71
  import "./chunk-EJITJBJX.js";
72
72
  import "./chunk-Q26HT4QT.js";
73
- import "./chunk-YPAWXXXR.js";
73
+ import "./chunk-55RI5UXK.js";
74
74
  import "./chunk-PZWRPRWP.js";
75
75
  import "./chunk-736JCWLM.js";
76
76
  import "./chunk-63WSP6YZ.js";
@@ -9,8 +9,8 @@ import {
9
9
  KIRO_MARKER,
10
10
  ROOCODE_MARKER,
11
11
  ZED_MARKER
12
- } from "./chunk-MA4GFWDY.js";
13
- import "./chunk-UVKNIJH2.js";
12
+ } from "./chunk-H6F2CQFI.js";
13
+ import "./chunk-ZAXH3ZWU.js";
14
14
  import "./chunk-DS6BLDMG.js";
15
15
  import "./chunk-BKO2AZ7Z.js";
16
16
  import "./chunk-63WSP6YZ.js";
@@ -15,15 +15,15 @@ import {
15
15
  scanEnvelopeDirectives,
16
16
  validateRecycleEnvelope,
17
17
  wrapAsPriorSessionData
18
- } from "./chunk-2WELHO3P.js";
19
- import "./chunk-3EWYC3YK.js";
18
+ } from "./chunk-I5EAFRII.js";
19
+ import "./chunk-UEZ7D35A.js";
20
20
  import {
21
21
  readHookStdin
22
22
  } from "./chunk-MMJL4TIX.js";
23
23
  import {
24
24
  _RAW_KEY_PREFIXES,
25
25
  hardenedSpawnEnv
26
- } from "./chunk-YPAWXXXR.js";
26
+ } from "./chunk-55RI5UXK.js";
27
27
  import "./chunk-PZWRPRWP.js";
28
28
  import "./chunk-JEJABGKB.js";
29
29
  import "./chunk-NDJLNC6Q.js";
@@ -2,7 +2,7 @@
2
2
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
3
3
  import {
4
4
  memory_get_v1
5
- } from "./chunk-3EWYC3YK.js";
5
+ } from "./chunk-UEZ7D35A.js";
6
6
  import "./chunk-OY53J6II.js";
7
7
  import "./chunk-J55WI3RR.js";
8
8
 
@@ -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-MA4GFWDY.js";
5
- import "./chunk-UVKNIJH2.js";
4
+ } from "./chunk-H6F2CQFI.js";
5
+ import "./chunk-ZAXH3ZWU.js";
6
6
  import "./chunk-DS6BLDMG.js";
7
7
  import "./chunk-BKO2AZ7Z.js";
8
8
  import {
@@ -3,7 +3,7 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
3
3
  import {
4
4
  read_entries
5
5
  } from "./chunk-QEEB4LHO.js";
6
- import "./chunk-3EWYC3YK.js";
6
+ import "./chunk-UEZ7D35A.js";
7
7
  import "./chunk-MMJL4TIX.js";
8
8
  import {
9
9
  match_prompt
@@ -5,7 +5,7 @@ import {
5
5
  RECYCLE_ENVELOPE_REL,
6
6
  collectGrounding,
7
7
  validateRecycleEnvelope
8
- } from "./chunk-2WELHO3P.js";
8
+ } from "./chunk-I5EAFRII.js";
9
9
  import {
10
10
  atomic_write_json
11
11
  } from "./chunk-EJITJBJX.js";
@@ -30,8 +30,13 @@ function templateEnvelope() {
30
30
  acceptance_criteria: ["<what done means, one line each>"],
31
31
  remaining: ["<open work, one line each>"],
32
32
  not_carried_forward: ["<what the successor must re-derive from source>"],
33
- decisions: ["<decision \u2014 one-line rationale>"],
33
+ decisions: ["<decision \u2014 one-line rationale> [reversible]"],
34
34
  constraints: ["<binding constraint>"],
35
+ // Ships EMPTY, unlike the prose lists above: the entries are path refs,
36
+ // and a `<placeholder>` left in by a hurried writer would be a fake path
37
+ // rather than obvious filler. An empty list is also the honest default —
38
+ // nothing off limits is the common case.
39
+ do_not_touch: [],
35
40
  open_worker_envelopes: [],
36
41
  artifact_paths: ["<path to a deliverable / note / evidence file>"],
37
42
  assumptions: [],
@@ -3,8 +3,8 @@ import {
3
3
  GLOBAL_AGENT_SETTINGS_PATH,
4
4
  GLOBAL_USER_SETTINGS_PATH,
5
5
  SETTINGS_FILE
6
- } from "./chunk-MA4GFWDY.js";
7
- import "./chunk-UVKNIJH2.js";
6
+ } from "./chunk-H6F2CQFI.js";
7
+ import "./chunk-ZAXH3ZWU.js";
8
8
  import "./chunk-DS6BLDMG.js";
9
9
  import "./chunk-BKO2AZ7Z.js";
10
10
  import "./chunk-63WSP6YZ.js";
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  external_exports,
13
13
  settingsSchema
14
- } from "./chunk-UVKNIJH2.js";
14
+ } from "./chunk-ZAXH3ZWU.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-MA4GFWDY.js";
5
- import "./chunk-UVKNIJH2.js";
4
+ } from "./chunk-H6F2CQFI.js";
5
+ import "./chunk-ZAXH3ZWU.js";
6
6
  import "./chunk-DS6BLDMG.js";
7
7
  import "./chunk-BKO2AZ7Z.js";
8
8
  import {
@@ -3,8 +3,8 @@ import {
3
3
  PROJECT_BRIDGE_MARKERS,
4
4
  USER_SCOPE_PATHS,
5
5
  subtract_pointers
6
- } from "./chunk-MA4GFWDY.js";
7
- import "./chunk-UVKNIJH2.js";
6
+ } from "./chunk-H6F2CQFI.js";
7
+ import "./chunk-ZAXH3ZWU.js";
8
8
  import "./chunk-DS6BLDMG.js";
9
9
  import "./chunk-BKO2AZ7Z.js";
10
10
  import {
@@ -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-MA4GFWDY.js";
7
- import "./chunk-UVKNIJH2.js";
6
+ } from "./chunk-H6F2CQFI.js";
7
+ import "./chunk-ZAXH3ZWU.js";
8
8
  import "./chunk-DS6BLDMG.js";
9
9
  import "./chunk-BKO2AZ7Z.js";
10
10
  import {
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-08-11T05:16:25Z`
3
+ - Generated: `2026-08-12T02:34:16Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -2573,7 +2573,7 @@
2573
2573
  },
2574
2574
  {
2575
2575
  "category": "command",
2576
- "checksum": "sha256:b718faefe3c50937e0b4851d26086d9aa8a9573c74e3e9fd371d2d0935acaa02",
2576
+ "checksum": "sha256:0181143b6ba9ee8ed18fc3069d175e1702a5a8b36bf9694fa4a07f7c98f52ca5",
2577
2577
  "install": {
2578
2578
  "default": true,
2579
2579
  "removable": false
@@ -5074,7 +5074,7 @@
5074
5074
  },
5075
5075
  {
5076
5076
  "category": "command",
5077
- "checksum": "sha256:bd252744a469710ff1d290166c93b5a1b2a4a3086605937007a260020784976e",
5077
+ "checksum": "sha256:7b6df8d87fc17588e344606cd47d081c8058a32f8ff9a2ecc0ce6d918a05d756",
5078
5078
  "install": {
5079
5079
  "default": true,
5080
5080
  "removable": false
@@ -9271,7 +9271,7 @@
9271
9271
  },
9272
9272
  {
9273
9273
  "category": "skill",
9274
- "checksum": "sha256:bae8a558172e50ef861a1e8e0132d24e2c52c4ac136b3c7562735b92c4d6d04d",
9274
+ "checksum": "sha256:f7a67c0b8382e292ed0e98d36e683644c66b8291f404f75d321a89aed7574ae3",
9275
9275
  "install": {
9276
9276
  "default": true,
9277
9277
  "removable": true
@@ -9645,7 +9645,7 @@
9645
9645
  },
9646
9646
  {
9647
9647
  "category": "skill",
9648
- "checksum": "sha256:169fed9cc69e866501e9f8e4423aa7226cb92c0c0380a20a6f4d5a4f32ec6925",
9648
+ "checksum": "sha256:7d2f4b3b162943305cf64778e2e63b67331f7861bf0e2eec392293e9579445d8",
9649
9649
  "install": {
9650
9650
  "default": true,
9651
9651
  "removable": true
@@ -12775,7 +12775,7 @@
12775
12775
  },
12776
12776
  {
12777
12777
  "category": "skill",
12778
- "checksum": "sha256:085ad155c77608b45ad63c5ebcfb3e08b2d7d6e69bd0d938860fe2f19eb245f0",
12778
+ "checksum": "sha256:d547a77483a8022c0a61d7efcb254e287e966ff4bf942e0155ca41824859a130",
12779
12779
  "install": {
12780
12780
  "default": false,
12781
12781
  "removable": true
@@ -13237,7 +13237,7 @@
13237
13237
  },
13238
13238
  {
13239
13239
  "category": "skill",
13240
- "checksum": "sha256:671eb67f32df15e5a7a8e937ca694da71fd325a62e1303b57fdcc05899458514",
13240
+ "checksum": "sha256:e0d38b712e69fa5f9bb8fe0ec9d8ba1020c2a45e0502e32a915259091e612a82",
13241
13241
  "install": {
13242
13242
  "default": true,
13243
13243
  "removable": false
@@ -13589,7 +13589,7 @@
13589
13589
  },
13590
13590
  {
13591
13591
  "category": "skill",
13592
- "checksum": "sha256:b2e8847e0acb03cad8c71f095d29d311ee76b4a11760ab9b21c5b07797b955df",
13592
+ "checksum": "sha256:1a3c1965abf5ebfbeac3b17142c0bc84a955156ea8fa2928c048aeb540ce8ff1",
13593
13593
  "install": {
13594
13594
  "default": true,
13595
13595
  "removable": false
@@ -13809,7 +13809,7 @@
13809
13809
  },
13810
13810
  {
13811
13811
  "category": "skill",
13812
- "checksum": "sha256:c8b5af3f19e2c2de1b88a7ce140aa681f09006a2f44290303f709eb7bc1ba9cc",
13812
+ "checksum": "sha256:1d7259677165ad794e4f16d652830d937ce21f56dbfc0aa440869163f3259792",
13813
13813
  "install": {
13814
13814
  "default": true,
13815
13815
  "removable": false
@@ -13831,7 +13831,7 @@
13831
13831
  },
13832
13832
  {
13833
13833
  "category": "skill",
13834
- "checksum": "sha256:47ca9fbe052b2046cc1897cf20cd52352de7ad557f7f1eed4d842f9291c53963",
13834
+ "checksum": "sha256:89e099d1d527ed2000dd3bbe43dddac623487b6f75b08f4fb0a6b9c3ec39dfb8",
13835
13835
  "install": {
13836
13836
  "default": true,
13837
13837
  "removable": false
@@ -14007,7 +14007,7 @@
14007
14007
  },
14008
14008
  {
14009
14009
  "category": "skill",
14010
- "checksum": "sha256:47bed1da74e33acf5abfdfa20cfc0fd1b893f8aacf49873300a06de8eea77d0b",
14010
+ "checksum": "sha256:73d3092545218a3814d37acef1f07f0e555eeae28916d222cc17a8c286db5b11",
14011
14011
  "install": {
14012
14012
  "default": true,
14013
14013
  "removable": false
@@ -14486,7 +14486,7 @@
14486
14486
  "workspaces": []
14487
14487
  }
14488
14488
  ],
14489
- "checksum": "sha256:1a5894344548cfa9a3a79726d9063c47af89da73892e847856ca4748dad6550f",
14489
+ "checksum": "sha256:159444bbd668e7d4b686aca94807c2d7ad5d8c64353bf1fd6e823aafce085ef2",
14490
14490
  "deprecations": [
14491
14491
  {
14492
14492
  "key": "tier",
@@ -14629,7 +14629,7 @@
14629
14629
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
14630
14630
  }
14631
14631
  ],
14632
- "generated_at": "2026-08-11T05:16:25Z",
14632
+ "generated_at": "2026-08-12T02:34:16Z",
14633
14633
  "packs": [
14634
14634
  {
14635
14635
  "artefact_count": 118,
@@ -15482,7 +15482,7 @@
15482
15482
  ]
15483
15483
  }
15484
15484
  ],
15485
- "scanner_version": "c24312e116f8",
15485
+ "scanner_version": "1eaf68b6e9c9",
15486
15486
  "stats": {
15487
15487
  "by_category": {
15488
15488
  "command": 196,
@@ -1 +1 @@
1
- efd249af793682a1fa9969433c123c923e08e1eee8394865bb93a7c875c7cbec discovery-manifest.json
1
+ 7963b6e4307019790a7885f66bc48862b8965626d54a905bb3e6f81c35ab8690 discovery-manifest.json
@@ -1,7 +1,7 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-08-11T05:16:25Z`
4
- - Scanner: `c24312e116f8`
3
+ - Generated: `2026-08-12T02:34:16Z`
4
+ - Scanner: `1eaf68b6e9c9`
5
5
  - Artefacts: **603**
6
6
  - Unassigned: **0**
7
7
 
@@ -0,0 +1,17 @@
1
+ # Discovery — Dormancy Report
2
+
3
+ - Generated: `2026-08-12T02:34:16Z`
4
+ - Window: **6 months** without a commit
5
+
6
+ > Dormancy triggers **review, never auto-deprecation**
7
+ > (`docs/governance.md` § Skill lifecycle policy). A finished artefact and an
8
+ > abandoned one look identical from commit dates, so this is a prompt to ask
9
+ > "still earning its slot?" — never a removal list, and never a gate.
10
+
11
+ ## Signal unavailable
12
+
13
+ **No dormancy list is published**: shallow clone — a truncated history is indistinguishable from a dormant artefact. Re-run after `git fetch --unshallow`.
14
+
15
+ An empty section here would read as "nothing is dormant", which is a
16
+ different claim from "the signal could not be computed".
17
+
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-08-11T05:16:25Z`
3
+ - Generated: `2026-08-12T02:34:16Z`
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:1a5894344548cfa9a3a79726d9063c47af89da73892e847856ca4748dad6550f",
3
- "generated_at": "2026-08-11T05:16:25Z",
2
+ "checksum": "sha256:159444bbd668e7d4b686aca94807c2d7ad5d8c64353bf1fd6e823aafce085ef2",
3
+ "generated_at": "2026-08-12T02:34:16Z",
4
4
  "packs": [
5
5
  {
6
6
  "always_on": false,
@@ -1814,5 +1814,5 @@
1814
1814
  ]
1815
1815
  }
1816
1816
  ],
1817
- "scanner_version": "c24312e116f8"
1817
+ "scanner_version": "1eaf68b6e9c9"
1818
1818
  }
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-08-11T05:16:25Z`
3
+ - Generated: `2026-08-12T02:34:16Z`
4
4
  - Workspaces tracked: **10**
5
5
  - Human-review-required artefacts: **3**
6
6
 
@@ -1,7 +1,7 @@
1
1
  {
2
- "checksum": "sha256:1a5894344548cfa9a3a79726d9063c47af89da73892e847856ca4748dad6550f",
3
- "generated_at": "2026-08-11T05:16:25Z",
4
- "scanner_version": "c24312e116f8",
2
+ "checksum": "sha256:159444bbd668e7d4b686aca94807c2d7ad5d8c64353bf1fd6e823aafce085ef2",
3
+ "generated_at": "2026-08-12T02:34:16Z",
4
+ "scanner_version": "1eaf68b6e9c9",
5
5
  "workspaces": [
6
6
  {
7
7
  "artefact_count": 202,