@event4u/agent-config 14.14.0 → 14.14.1

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 (66) 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 +33 -0
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/pr/create.md +16 -1
  7. package/dist/agent-src/contexts/execution/terminal-states.md +25 -4
  8. package/dist/agent-src/rules/missing-skill-recovery.md +2 -2
  9. package/dist/agent-src/rules/token-budget-discipline.md +2 -2
  10. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  11. package/dist/cli/registry.js +1 -0
  12. package/dist/cli-delegate/{chunk-ILMUPLGW.js → chunk-7RXIKF62.js} +159 -86
  13. package/dist/cli-delegate/cmd_conformance.js +1 -1
  14. package/dist/cli-delegate/cmd_doctor.js +1 -1
  15. package/dist/discovery/deprecation-report.md +1 -1
  16. package/dist/discovery/discovery-manifest.json +5 -5
  17. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  18. package/dist/discovery/discovery-manifest.summary.md +1 -1
  19. package/dist/discovery/dormancy-report.md +1 -1
  20. package/dist/discovery/orphan-report.md +1 -1
  21. package/dist/discovery/packs.json +2 -2
  22. package/dist/discovery/trust-report.md +1 -1
  23. package/dist/discovery/workspaces.json +2 -2
  24. package/dist/hooks/dispatch.js +528 -371
  25. package/dist/mcp/registry-manifest.json +2 -2
  26. package/dist/mcp/server.json +2 -2
  27. package/dist/mcp/server.mjs +185 -98
  28. package/package.json +1 -1
  29. package/src/config/assurance-capability-registry.json +1 -1
  30. package/src/config/evaluator-budgets.json +4 -4
  31. package/src/config/gate-coverage.yml +62 -2
  32. package/src/config/gate-reachability-exemptions.json +1 -0
  33. package/src/config/gate-violation-baselines.json +4 -3
  34. package/src/config/web-launch-readiness.json +4 -2
  35. package/src/scripts/_cli/_doctor_emit.ts +71 -0
  36. package/src/scripts/_cli/_doctor_strict.ts +163 -0
  37. package/src/scripts/_cli/cmd_doctor.ts +16 -37
  38. package/src/scripts/_dispatch.bash +11 -0
  39. package/src/scripts/_lib/branch_convergence.ts +186 -0
  40. package/src/scripts/_lib/context_observation.ts +132 -0
  41. package/src/scripts/_lib/continuation_ladder.ts +188 -0
  42. package/src/scripts/_lib/experiment_binding.ts +95 -0
  43. package/src/scripts/_lib/ignored_blocker.ts +8 -1
  44. package/src/scripts/_lib/outcome_envelope.ts +6 -1
  45. package/src/scripts/_lib/outcome_vocabularies.ts +135 -5
  46. package/src/scripts/_lib/release_highlights.ts +12 -3
  47. package/src/scripts/_lib/repeated_failure.ts +19 -2
  48. package/src/scripts/_lib/runtime_journal.ts +11 -4
  49. package/src/scripts/check_agent_artifact_location.ts +337 -0
  50. package/src/scripts/check_artefact_count_messaging.ts +74 -8
  51. package/src/scripts/check_enforcement_coverage.ts +40 -1
  52. package/src/scripts/check_release_highlights.ts +17 -1
  53. package/src/scripts/check_web_launch_readiness.ts +310 -20
  54. package/src/scripts/evolution_lab.ts +53 -1
  55. package/src/scripts/generate_capability_matrix.ts +16 -9
  56. package/src/scripts/grade_target_readiness.ts +221 -2
  57. package/src/scripts/hook_effect_doctor.ts +47 -4
  58. package/src/scripts/hooks/run_continuation_hook.ts +78 -88
  59. package/src/scripts/hooks/session_eol_hook.ts +12 -1
  60. package/src/scripts/install-hooks.sh +18 -0
  61. package/src/scripts/lint_code_comments.ts +106 -1
  62. package/src/scripts/release_drill.ts +57 -1
  63. package/src/scripts/release_publication.ts +58 -0
  64. package/src/scripts/roadmap_context.ts +15 -0
  65. package/src/scripts/skill_scout.ts +633 -0
  66. package/src/scripts/sync_pr_branch.ts +521 -42
@@ -3425,6 +3425,103 @@ function review_gate_doctor_signal(project_root, gate_raw) {
3425
3425
  return { gate_str: "review-gate off", remedies: [] };
3426
3426
  }
3427
3427
 
3428
+ // src/scripts/_cli/_doctor_strict.ts
3429
+ function eprint(msg) {
3430
+ process.stderr.write(`${msg}
3431
+ `);
3432
+ }
3433
+ var StrictLevelError = class extends Error {
3434
+ };
3435
+ var STRICT_DEFAULT_LEVEL = "fail";
3436
+ var STRICT_LEVELS = /* @__PURE__ */ new Set(["fail", "warn"]);
3437
+ var STRICT_KILL_SWITCH = "AGENT_CONFIG_DOCTOR_NO_FAIL";
3438
+ function strictTripping(level) {
3439
+ return level === "warn" ? /* @__PURE__ */ new Set(["fail", "warn"]) : /* @__PURE__ */ new Set(["fail"]);
3440
+ }
3441
+ function canProceed(driftPresent, checks) {
3442
+ return !driftPresent && !checks.some((c) => c["status"] === "fail");
3443
+ }
3444
+ function validateStrictLevel(level) {
3445
+ if (!STRICT_LEVELS.has(level)) {
3446
+ throw new StrictLevelError(
3447
+ `argument --strict-level: invalid choice: '${level}' (choose from 'fail', 'warn')`
3448
+ );
3449
+ }
3450
+ }
3451
+ function strictExit(opts, checks, driftPresent) {
3452
+ if (!opts.strict) {
3453
+ return null;
3454
+ }
3455
+ const tripping = strictTripping(opts.strict_level);
3456
+ const tripped = checks.filter((c) => tripping.has(c["status"]));
3457
+ if (!driftPresent && tripped.length === 0) {
3458
+ return 0;
3459
+ }
3460
+ if (process.env[STRICT_KILL_SWITCH] === "1") {
3461
+ eprint(
3462
+ `\u26A0\uFE0F doctor --strict: ${String(tripped.length)} finding(s) at or above '${opts.strict_level}'` + (driftPresent ? " plus manifest drift" : "") + `, but ${STRICT_KILL_SWITCH}=1 suppressed the failing exit. The findings above still stand; unset it to restore the gate.`
3463
+ );
3464
+ return 0;
3465
+ }
3466
+ return 1;
3467
+ }
3468
+ function attachProceedFields(payload, driftPresent, checks) {
3469
+ const proceed = canProceed(driftPresent, checks);
3470
+ payload["can_proceed"] = proceed;
3471
+ payload["status"] = proceed ? checks.some((c) => c["status"] === "warn") ? "warn" : "ok" : "fail";
3472
+ }
3473
+ var STRICT_STORE_TRUE = { "--strict": "strict" };
3474
+ var STRICT_VALUE_FLAGS = { "--strict-level": "strict_level" };
3475
+ var STRICT_DEFAULTS = { strict: false, strict_level: STRICT_DEFAULT_LEVEL };
3476
+ var STRICT_USAGE = " [--strict] [--strict-level {fail,warn}]\n";
3477
+ function validateStrictLevelOr(level, onError) {
3478
+ try {
3479
+ validateStrictLevel(level);
3480
+ } catch (e) {
3481
+ if (e instanceof StrictLevelError) onError(e.message);
3482
+ throw e;
3483
+ }
3484
+ }
3485
+
3486
+ // src/scripts/_cli/_doctor_emit.ts
3487
+ var PACKAGE_TAG_ID = "event4u/agent-config";
3488
+ function print(line = "") {
3489
+ process.stdout.write(`${line}
3490
+ `);
3491
+ }
3492
+ function _emit_text(project_root, missing, modified, foreign, tag_drift) {
3493
+ const total = missing.length + modified.length + foreign.length + tag_drift.length;
3494
+ if (total === 0) {
3495
+ print(`\u2705 doctor: manifest matches filesystem under ${project_root}`);
3496
+ return;
3497
+ }
3498
+ print(`\u26A0\uFE0F doctor: ${total} drift item(s) under ${project_root}`);
3499
+ const groups = [
3500
+ ["missing", missing],
3501
+ ["modified", modified],
3502
+ ["foreign", foreign],
3503
+ ["tag-drift", tag_drift]
3504
+ ];
3505
+ for (const [label, items] of groups) {
3506
+ if (items.length === 0) {
3507
+ continue;
3508
+ }
3509
+ print(`
3510
+ ${label} (${items.length}):`);
3511
+ for (const it of items) {
3512
+ const tool = it["tool"] || "?";
3513
+ print(` \xB7 [${tool}] ${it["path"]}`);
3514
+ if (label === "tag-drift") {
3515
+ const found = it["found"] || "(missing)";
3516
+ const expected = "expected" in it ? it["expected"] : PACKAGE_TAG_ID;
3517
+ print(` expected: ${expected}`);
3518
+ print(` found: ${found}`);
3519
+ }
3520
+ print(` fix: ${it["fix"]}`);
3521
+ }
3522
+ }
3523
+ }
3524
+
3428
3525
  // src/scripts/_cli/cmd_doctor.ts
3429
3526
  var _HERE5 = fileURLToPath5(import.meta.url);
3430
3527
  var ArgparseExit = class extends Error {
@@ -3568,10 +3665,10 @@ function yamlSafeLoad(text) {
3568
3665
  return void 0;
3569
3666
  }
3570
3667
  }
3571
- function print(line = "") {
3668
+ function print2(line = "") {
3572
3669
  process3.stdout.write(line + "\n");
3573
3670
  }
3574
- function eprint(line = "") {
3671
+ function eprint2(line = "") {
3575
3672
  process3.stderr.write(line + "\n");
3576
3673
  }
3577
3674
  var _Sentinel = class {
@@ -3627,22 +3724,22 @@ function _detect_wrapper(project_root) {
3627
3724
  };
3628
3725
  }
3629
3726
  function _emit_trace_text(root, anchor, trace, origin) {
3630
- print(` \u{1F4CD} start: ${process3.cwd()}`);
3631
- print(` \u{1F4CD} origin: ${origin}`);
3727
+ print2(` \u{1F4CD} start: ${process3.cwd()}`);
3728
+ print2(` \u{1F4CD} origin: ${origin}`);
3632
3729
  if (trace.length > 0) {
3633
- print(" trace:");
3730
+ print2(" trace:");
3634
3731
  for (const record of trace) {
3635
3732
  const hit = record.hit;
3636
3733
  const symbol = hit ? "\u2705" : "\xB7";
3637
3734
  const tag = `[${record.pass}]`;
3638
3735
  const anchor_str = hit ? ` \u2192 ${hit}` : "";
3639
- print(` ${symbol} ${tag} ${record.ancestor}${anchor_str} (${record.reason})`);
3736
+ print2(` ${symbol} ${tag} ${record.ancestor}${anchor_str} (${record.reason})`);
3640
3737
  }
3641
3738
  }
3642
3739
  if (root !== null) {
3643
- print(` \u{1F4CD} resolved root: ${root} (anchor: ${anchor || "n/a"})`);
3740
+ print2(` \u{1F4CD} resolved root: ${root} (anchor: ${anchor || "n/a"})`);
3644
3741
  } else {
3645
- print(" \u26A0\uFE0F no anchor found in chain");
3742
+ print2(" \u26A0\uFE0F no anchor found in chain");
3646
3743
  }
3647
3744
  }
3648
3745
  function _emit_trace_json(root, anchor, trace, origin) {
@@ -3653,32 +3750,32 @@ function _emit_trace_json(root, anchor, trace, origin) {
3653
3750
  anchor,
3654
3751
  trace
3655
3752
  };
3656
- print(_jsonDumpsIndentAscii(payload, 2));
3753
+ print2(_jsonDumpsIndentAscii(payload, 2));
3657
3754
  }
3658
3755
  function _emit_context_text(ctx) {
3659
- print(` \u{1F4CD} project_root: ${ctx["project_root"]} (origin: ${ctx["origin"]})`);
3660
- print(` \u{1F4E6} install_mode: ${ctx["install_mode"]} (source: ${ctx["install_mode_source"]})`);
3756
+ print2(` \u{1F4CD} project_root: ${ctx["project_root"]} (origin: ${ctx["origin"]})`);
3757
+ print2(` \u{1F4E6} install_mode: ${ctx["install_mode"]} (source: ${ctx["install_mode_source"]})`);
3661
3758
  const env_pin = ctx["env_pin"];
3662
3759
  if (env_pin) {
3663
3760
  const marker = ctx["root_override"] ? " (--root override)" : "";
3664
- print(` \u{1F512} env_pin: ${env_pin}${marker}`);
3761
+ print2(` \u{1F512} env_pin: ${env_pin}${marker}`);
3665
3762
  } else {
3666
- print(" \u{1F512} env_pin: (unset)");
3763
+ print2(" \u{1F512} env_pin: (unset)");
3667
3764
  }
3668
3765
  const layers = ctx["settings_layers"] || [];
3669
3766
  if (layers.length > 0) {
3670
- print(` \u{1F4D1} settings layers (${layers.length}):`);
3767
+ print2(` \u{1F4D1} settings layers (${layers.length}):`);
3671
3768
  for (const layer of layers) {
3672
- print(` - ${layer}`);
3769
+ print2(` - ${layer}`);
3673
3770
  }
3674
3771
  } else {
3675
- print(" \u{1F4D1} settings layers: (none)");
3772
+ print2(" \u{1F4D1} settings layers: (none)");
3676
3773
  }
3677
3774
  const wrapper = ctx["wrapper"] || {};
3678
3775
  if (wrapper["exists"]) {
3679
- print(` \u{1F9E9} wrapper: ${wrapper["path"]} (embedded root: ${wrapper["embedded_root"]})`);
3776
+ print2(` \u{1F9E9} wrapper: ${wrapper["path"]} (embedded root: ${wrapper["embedded_root"]})`);
3680
3777
  } else {
3681
- print(` \u{1F9E9} wrapper: (not present at ${wrapper["path"]})`);
3778
+ print2(` \u{1F9E9} wrapper: (not present at ${wrapper["path"]})`);
3682
3779
  }
3683
3780
  }
3684
3781
  function _resolve_path(project_root, raw) {
@@ -3696,7 +3793,7 @@ function _sha256(p) {
3696
3793
  return null;
3697
3794
  }
3698
3795
  }
3699
- var PACKAGE_TAG_ID = "event4u/agent-config";
3796
+ var PACKAGE_TAG_ID2 = "event4u/agent-config";
3700
3797
  var _FRONTMATTER_PACKAGE_RE = /^package:\s*(.+?)\s*$/m;
3701
3798
  function _read_inline_package_tag(p) {
3702
3799
  if (path19.extname(p) !== ".md") {
@@ -3863,12 +3960,12 @@ function _classify(records) {
3863
3960
  continue;
3864
3961
  }
3865
3962
  const tag = _read_inline_package_tag(target);
3866
- if (!(tag instanceof _Sentinel) && tag !== PACKAGE_TAG_ID) {
3963
+ if (!(tag instanceof _Sentinel) && tag !== PACKAGE_TAG_ID2) {
3867
3964
  tag_drift.push({
3868
3965
  tool: tool_id,
3869
3966
  path: String(target),
3870
3967
  kind,
3871
- expected: PACKAGE_TAG_ID,
3968
+ expected: PACKAGE_TAG_ID2,
3872
3969
  found: tag === null ? "" : tag,
3873
3970
  fix: _fix_hint("tag-drift", kind)
3874
3971
  });
@@ -4556,7 +4653,7 @@ function _check_stale_orphans() {
4556
4653
  continue;
4557
4654
  }
4558
4655
  const tag = _read_inline_package_tag(md);
4559
- if (tag instanceof _Sentinel || tag !== PACKAGE_TAG_ID) {
4656
+ if (tag instanceof _Sentinel || tag !== PACKAGE_TAG_ID2) {
4560
4657
  continue;
4561
4658
  }
4562
4659
  orphan_count += 1;
@@ -5594,17 +5691,17 @@ function _run_no_manifest(opts, project_root, origin, bridge_present) {
5594
5691
  if (opts.json) {
5595
5692
  _emit_json(project_root, [], [], [], [], checks, origin);
5596
5693
  } else if (opts.check === null) {
5597
- print(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
5694
+ print2(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
5598
5695
  if (bridge_present) {
5599
- print(
5696
+ print2(
5600
5697
  " \u2139\uFE0F global-only consumer: install marker present, no project lockfile (expected under ADR-020)"
5601
5698
  );
5602
- print(
5699
+ print2(
5603
5700
  " project-manifest checks are skipped \u2014 they apply only to project-local distributed tools"
5604
5701
  );
5605
5702
  } else {
5606
- eprint(` \u26A0\uFE0F no project lockfile and no consumer install marker at ${project_root}`);
5607
- eprint(
5703
+ eprint2(` \u26A0\uFE0F no project lockfile and no consumer install marker at ${project_root}`);
5704
+ eprint2(
5608
5705
  " run `agent-config init` (project install) or `agent-config refresh --project` (global-only consumer)"
5609
5706
  );
5610
5707
  }
@@ -5620,6 +5717,8 @@ function _run_no_manifest(opts, project_root, origin, bridge_present) {
5620
5717
  }
5621
5718
  return fail_check ? 1 : 0;
5622
5719
  }
5720
+ const sx = strictExit(opts, checks, false);
5721
+ if (sx !== null) return bridge_present ? sx : 2;
5623
5722
  if (opts.ci && bridge_present) {
5624
5723
  return fail_check ? 1 : 0;
5625
5724
  }
@@ -5638,80 +5737,50 @@ function _emit_json(project_root, missing, modified, foreign, tag_drift, checks
5638
5737
  }
5639
5738
  if (checks !== null) {
5640
5739
  payload["checks"] = checks;
5740
+ const drift = missing.length + modified.length + foreign.length + tag_drift.length;
5741
+ attachProceedFields(payload, drift > 0, checks);
5641
5742
  if (checks.some((c) => c["id"] === "detection")) {
5642
5743
  payload["detection"] = detectionJson(_detection_report(project_root));
5643
5744
  }
5644
5745
  }
5645
- print(_jsonDumpsIndentAscii(payload, 2));
5746
+ print2(_jsonDumpsIndentAscii(payload, 2));
5646
5747
  }
5647
5748
  function _emit_checks_text(checks) {
5648
5749
  if (checks.length === 0) {
5649
5750
  return;
5650
5751
  }
5651
- print("checks:");
5752
+ print2("checks:");
5652
5753
  for (const c of checks) {
5653
5754
  const sym = STATUS_SYMBOLS[c["status"]] ?? "?";
5654
- print(` ${sym} ${c["id"]}: ${c["message"]}`);
5755
+ print2(` ${sym} ${c["id"]}: ${c["message"]}`);
5655
5756
  if (c["status"] !== "ok" && c["remedy"]) {
5656
- print(` fix: ${c["remedy"]}`);
5757
+ print2(` fix: ${c["remedy"]}`);
5657
5758
  }
5658
5759
  }
5659
- print("");
5760
+ print2("");
5660
5761
  }
5661
5762
  function _emit_detection_text(project_root, checks) {
5662
5763
  if (!checks.some((c) => c["id"] === "detection")) {
5663
5764
  return;
5664
5765
  }
5665
5766
  for (const line of renderDetectionLines(_detection_report(project_root))) {
5666
- print(line);
5667
- }
5668
- print("");
5669
- }
5670
- function _emit_text(project_root, missing, modified, foreign, tag_drift) {
5671
- const total = missing.length + modified.length + foreign.length + tag_drift.length;
5672
- if (total === 0) {
5673
- print(`\u2705 doctor: manifest matches filesystem under ${project_root}`);
5674
- return;
5675
- }
5676
- print(`\u26A0\uFE0F doctor: ${total} drift item(s) under ${project_root}`);
5677
- const groups = [
5678
- ["missing", missing],
5679
- ["modified", modified],
5680
- ["foreign", foreign],
5681
- ["tag-drift", tag_drift]
5682
- ];
5683
- for (const [label, items] of groups) {
5684
- if (items.length === 0) {
5685
- continue;
5686
- }
5687
- print(`
5688
- ${label} (${items.length}):`);
5689
- for (const it of items) {
5690
- const tool = it["tool"] || "?";
5691
- print(` \xB7 [${tool}] ${it["path"]}`);
5692
- if (label === "tag-drift") {
5693
- const found = it["found"] || "(missing)";
5694
- const expected = "expected" in it ? it["expected"] : PACKAGE_TAG_ID;
5695
- print(` expected: ${expected}`);
5696
- print(` found: ${found}`);
5697
- }
5698
- print(` fix: ${it["fix"]}`);
5699
- }
5767
+ print2(line);
5700
5768
  }
5769
+ print2("");
5701
5770
  }
5702
5771
  var PROG = "agent-config doctor";
5703
5772
  var USAGE = `usage: ${PROG} [-h] [--project PROJECT] [--json] [--ci] [--check ID]
5704
- [--trace-root] [--context] [--anatomy]
5705
- [--repair ID]
5706
- `;
5773
+ ` + STRICT_USAGE + " [--trace-root] [--context] [--anatomy]\n [--repair ID]\n";
5707
5774
  var _STORE_TRUE_FLAGS = {
5708
5775
  "--json": "json",
5709
5776
  "--ci": "ci",
5777
+ ...STRICT_STORE_TRUE,
5710
5778
  "--trace-root": "trace_root",
5711
5779
  "--context": "context",
5712
5780
  "--anatomy": "anatomy"
5713
5781
  };
5714
5782
  var _VALUE_FLAGS = {
5783
+ ...STRICT_VALUE_FLAGS,
5715
5784
  "--project": "project",
5716
5785
  "--check": "check",
5717
5786
  "--repair": "repair"
@@ -5727,6 +5796,7 @@ function _parse2(argv) {
5727
5796
  project: null,
5728
5797
  json: false,
5729
5798
  ci: false,
5799
+ ...STRICT_DEFAULTS,
5730
5800
  check: null,
5731
5801
  trace_root: false,
5732
5802
  context: false,
@@ -5824,7 +5894,7 @@ function _run_context(opts) {
5824
5894
  [project_root, origin] = _resolve_project_root(opts.project);
5825
5895
  } catch (exc) {
5826
5896
  if (exc instanceof ProjectRootError) {
5827
- eprint(`\u274C doctor: ${exc.message}`);
5897
+ eprint2(`\u274C doctor: ${exc.message}`);
5828
5898
  return 2;
5829
5899
  }
5830
5900
  throw exc;
@@ -5841,7 +5911,7 @@ function _run_context(opts) {
5841
5911
  wrapper: _detect_wrapper(project_root)
5842
5912
  };
5843
5913
  if (opts.json) {
5844
- print(_jsonDumpsIndentAscii(ctx, 2));
5914
+ print2(_jsonDumpsIndentAscii(ctx, 2));
5845
5915
  } else {
5846
5916
  _emit_context_text(ctx);
5847
5917
  }
@@ -5863,7 +5933,7 @@ function _run_anatomy(opts) {
5863
5933
  economyError = err instanceof Error ? err.message : String(err);
5864
5934
  }
5865
5935
  if (opts.json) {
5866
- print(
5936
+ print2(
5867
5937
  _jsonDumpsIndentAscii(
5868
5938
  {
5869
5939
  preamble_byte_census: byteCensus,
@@ -5875,10 +5945,10 @@ function _run_anatomy(opts) {
5875
5945
  );
5876
5946
  return 0;
5877
5947
  }
5878
- print("\u2500\u2500 injection anatomy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
5879
- print(census.renderText(byteCensus));
5880
- print("");
5881
- print(
5948
+ print2("\u2500\u2500 injection anatomy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
5949
+ print2(census.renderText(byteCensus));
5950
+ print2("");
5951
+ print2(
5882
5952
  economyReport !== null ? economy.renderText(economyReport) : `dispatch-economy report unavailable: ${economyError}`
5883
5953
  );
5884
5954
  return 0;
@@ -5900,29 +5970,30 @@ function _run_repair(opts) {
5900
5970
  payload["action"] = "error";
5901
5971
  payload["error"] = osErrorStr(exc);
5902
5972
  if (opts.json) {
5903
- print(_jsonDumpsIndentAscii(payload, 2));
5973
+ print2(_jsonDumpsIndentAscii(payload, 2));
5904
5974
  } else {
5905
- eprint(`\u274C doctor: could not remove ${state_pth}: ${osErrorStr(exc)}`);
5975
+ eprint2(`\u274C doctor: could not remove ${state_pth}: ${osErrorStr(exc)}`);
5906
5976
  }
5907
5977
  return 2;
5908
5978
  }
5909
5979
  }
5910
5980
  if (opts.json) {
5911
- print(_jsonDumpsIndentAscii(payload, 2));
5981
+ print2(_jsonDumpsIndentAscii(payload, 2));
5912
5982
  } else {
5913
5983
  if (payload["action"] === "remove") {
5914
- print(`\u2705 doctor: reset wizard-state (${state_pth})`);
5984
+ print2(`\u2705 doctor: reset wizard-state (${state_pth})`);
5915
5985
  } else {
5916
- print(`\u2705 doctor: nothing to repair (no wizard-state at ${state_pth})`);
5986
+ print2(`\u2705 doctor: nothing to repair (no wizard-state at ${state_pth})`);
5917
5987
  }
5918
5988
  }
5919
5989
  return 0;
5920
5990
  }
5921
- eprint(`\u274C doctor: unknown repair target ${pyRepr(target)}`);
5991
+ eprint2(`\u274C doctor: unknown repair target ${pyRepr(target)}`);
5922
5992
  return 2;
5923
5993
  }
5924
5994
  function main6(argv = null) {
5925
5995
  const opts = _parse2(argv !== null ? Array.from(argv) : process3.argv.slice(2));
5996
+ validateStrictLevelOr(opts.strict_level, _argError);
5926
5997
  if (opts.ci) {
5927
5998
  opts.json = true;
5928
5999
  }
@@ -5944,7 +6015,7 @@ function main6(argv = null) {
5944
6015
  [project_root, origin] = _resolve_project_root(opts.project);
5945
6016
  } catch (exc) {
5946
6017
  if (exc instanceof ProjectRootError) {
5947
- eprint(`\u274C doctor: ${exc.message}`);
6018
+ eprint2(`\u274C doctor: ${exc.message}`);
5948
6019
  return 2;
5949
6020
  }
5950
6021
  throw exc;
@@ -5970,7 +6041,7 @@ function main6(argv = null) {
5970
6041
  _emit_json(project_root, missing, modified, foreign, tag_drift, checks, origin);
5971
6042
  } else {
5972
6043
  if (opts.check === null) {
5973
- print(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
6044
+ print2(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
5974
6045
  }
5975
6046
  _emit_checks_text(checks);
5976
6047
  _emit_detection_text(project_root, checks);
@@ -5987,6 +6058,8 @@ function main6(argv = null) {
5987
6058
  if (opts.ci) {
5988
6059
  return drift_present || fail_check ? 1 : 0;
5989
6060
  }
6061
+ const strict = strictExit(opts, checks, drift_present);
6062
+ if (strict !== null) return strict;
5990
6063
  return drift_present ? 1 : 0;
5991
6064
  }
5992
6065
  function _isCliEntry2() {
@@ -6035,6 +6108,7 @@ export {
6035
6108
  censusRuleDir,
6036
6109
  INSTALL_MODE_MARKER_RELATIVE,
6037
6110
  _is_global_only_consumer,
6111
+ _emit_text,
6038
6112
  ArgparseExit,
6039
6113
  _jsonDumpsIndentAscii,
6040
6114
  NO_FRONTMATTER,
@@ -6042,7 +6116,7 @@ export {
6042
6116
  _detect_install_mode,
6043
6117
  _settings_layer_chain,
6044
6118
  _detect_wrapper,
6045
- PACKAGE_TAG_ID,
6119
+ PACKAGE_TAG_ID2 as PACKAGE_TAG_ID,
6046
6120
  _read_inline_package_tag,
6047
6121
  _fix_hint,
6048
6122
  _collect_manifest_entries,
@@ -6092,7 +6166,6 @@ export {
6092
6166
  _run_checks_no_manifest,
6093
6167
  _emit_json,
6094
6168
  _emit_checks_text,
6095
- _emit_text,
6096
6169
  _parse2 as _parse,
6097
6170
  _run_trace_root,
6098
6171
  _run_context,
@@ -33,7 +33,7 @@ import {
33
33
  frontmatterPaths,
34
34
  proseEqual,
35
35
  splitFrontmatter
36
- } from "./chunk-ILMUPLGW.js";
36
+ } from "./chunk-7RXIKF62.js";
37
37
  import "./chunk-FTAISGDQ.js";
38
38
  import "./chunk-M2DPGFZ4.js";
39
39
  import "./chunk-BTWUYDGN.js";
@@ -66,7 +66,7 @@ import {
66
66
  _wizard_state_path,
67
67
  main,
68
68
  shutilWhich
69
- } from "./chunk-ILMUPLGW.js";
69
+ } from "./chunk-7RXIKF62.js";
70
70
  import "./chunk-FTAISGDQ.js";
71
71
  import "./chunk-M2DPGFZ4.js";
72
72
  import "./chunk-BTWUYDGN.js";
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-09-02T14:21:19Z`
3
+ - Generated: `2026-09-03T10:46:46Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -2303,7 +2303,7 @@
2303
2303
  },
2304
2304
  {
2305
2305
  "category": "command",
2306
- "checksum": "sha256:2dfff038fdfc37015fabc6f8063217de150053de6d3dd119cf3a67c858c4c681",
2306
+ "checksum": "sha256:0596dd091380695690726466e5534881ae5e12e1f5b7fe985a56f7aeba056335",
2307
2307
  "install": {
2308
2308
  "default": true,
2309
2309
  "removable": false
@@ -6838,7 +6838,7 @@
6838
6838
  },
6839
6839
  {
6840
6840
  "category": "rule",
6841
- "checksum": "sha256:80cb292313eb97d1e907f1a86aaa0f7050db9f3c213ab25be9b4569f6983d43c",
6841
+ "checksum": "sha256:12432c57438309ac4ed25b0f65903bf6945885a72a472f08214358087780f4c1",
6842
6842
  "install": {
6843
6843
  "default": true,
6844
6844
  "removable": false
@@ -7919,7 +7919,7 @@
7919
7919
  },
7920
7920
  {
7921
7921
  "category": "rule",
7922
- "checksum": "sha256:456681607fb73123ab1ef7642655f4878078bd0a55376cb0870b4819cf761220",
7922
+ "checksum": "sha256:7b3e99b6d00d390e9048147e150bbbfddd332c0e18376d8b5f785908a053bc9a",
7923
7923
  "install": {
7924
7924
  "default": true,
7925
7925
  "removable": false
@@ -14760,7 +14760,7 @@
14760
14760
  "workspaces": []
14761
14761
  }
14762
14762
  ],
14763
- "checksum": "sha256:741fc18e76a73a2474604b840ac9c9431ad140c3c674cde381985e4b5eaad810",
14763
+ "checksum": "sha256:9aca1f614f7add7d67778fa6a96e9d0f003607832be5cd432d07759474a8d08f",
14764
14764
  "deprecations": [
14765
14765
  {
14766
14766
  "key": "tier",
@@ -14909,7 +14909,7 @@
14909
14909
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
14910
14910
  }
14911
14911
  ],
14912
- "generated_at": "2026-09-02T14:21:19Z",
14912
+ "generated_at": "2026-09-03T10:46:46Z",
14913
14913
  "packs": [
14914
14914
  {
14915
14915
  "artefact_count": 128,
@@ -1 +1 @@
1
- e89b20c3c1bb6136e6c752e18629851eb22679b0ae3f127bff36f17b3356a898 discovery-manifest.json
1
+ 7b5c5bfa78218abb0e4f052913e62b2aea86dd2e566a9ad201b3d2d583fdaf66 discovery-manifest.json
@@ -1,6 +1,6 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-09-02T14:21:19Z`
3
+ - Generated: `2026-09-03T10:46:46Z`
4
4
  - Scanner: `de0a22b4ac4c`
5
5
  - Artefacts: **623**
6
6
  - Unassigned: **0**
@@ -1,6 +1,6 @@
1
1
  # Discovery — Dormancy Report
2
2
 
3
- - Generated: `2026-09-02T14:21:19Z`
3
+ - Generated: `2026-09-03T10:46:46Z`
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-02T14:21:19Z`
3
+ - Generated: `2026-09-03T10:46:46Z`
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:741fc18e76a73a2474604b840ac9c9431ad140c3c674cde381985e4b5eaad810",
3
- "generated_at": "2026-09-02T14:21:19Z",
2
+ "checksum": "sha256:9aca1f614f7add7d67778fa6a96e9d0f003607832be5cd432d07759474a8d08f",
3
+ "generated_at": "2026-09-03T10:46:46Z",
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-02T14:21:19Z`
3
+ - Generated: `2026-09-03T10:46:46Z`
4
4
  - Workspaces tracked: **10**
5
5
  - Human-review-required artefacts: **3**
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:741fc18e76a73a2474604b840ac9c9431ad140c3c674cde381985e4b5eaad810",
3
- "generated_at": "2026-09-02T14:21:19Z",
2
+ "checksum": "sha256:9aca1f614f7add7d67778fa6a96e9d0f003607832be5cd432d07759474a8d08f",
3
+ "generated_at": "2026-09-03T10:46:46Z",
4
4
  "scanner_version": "de0a22b4ac4c",
5
5
  "workspaces": [
6
6
  {