@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.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +33 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/pr/create.md +16 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +25 -4
- package/dist/agent-src/rules/missing-skill-recovery.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli-delegate/{chunk-ILMUPLGW.js → chunk-7RXIKF62.js} +159 -86
- package/dist/cli-delegate/cmd_conformance.js +1 -1
- package/dist/cli-delegate/cmd_doctor.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +5 -5
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +528 -371
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +185 -98
- package/package.json +1 -1
- package/src/config/assurance-capability-registry.json +1 -1
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +62 -2
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +4 -3
- package/src/config/web-launch-readiness.json +4 -2
- package/src/scripts/_cli/_doctor_emit.ts +71 -0
- package/src/scripts/_cli/_doctor_strict.ts +163 -0
- package/src/scripts/_cli/cmd_doctor.ts +16 -37
- package/src/scripts/_dispatch.bash +11 -0
- package/src/scripts/_lib/branch_convergence.ts +186 -0
- package/src/scripts/_lib/context_observation.ts +132 -0
- package/src/scripts/_lib/continuation_ladder.ts +188 -0
- package/src/scripts/_lib/experiment_binding.ts +95 -0
- package/src/scripts/_lib/ignored_blocker.ts +8 -1
- package/src/scripts/_lib/outcome_envelope.ts +6 -1
- package/src/scripts/_lib/outcome_vocabularies.ts +135 -5
- package/src/scripts/_lib/release_highlights.ts +12 -3
- package/src/scripts/_lib/repeated_failure.ts +19 -2
- package/src/scripts/_lib/runtime_journal.ts +11 -4
- package/src/scripts/check_agent_artifact_location.ts +337 -0
- package/src/scripts/check_artefact_count_messaging.ts +74 -8
- package/src/scripts/check_enforcement_coverage.ts +40 -1
- package/src/scripts/check_release_highlights.ts +17 -1
- package/src/scripts/check_web_launch_readiness.ts +310 -20
- package/src/scripts/evolution_lab.ts +53 -1
- package/src/scripts/generate_capability_matrix.ts +16 -9
- package/src/scripts/grade_target_readiness.ts +221 -2
- package/src/scripts/hook_effect_doctor.ts +47 -4
- package/src/scripts/hooks/run_continuation_hook.ts +78 -88
- package/src/scripts/hooks/session_eol_hook.ts +12 -1
- package/src/scripts/install-hooks.sh +18 -0
- package/src/scripts/lint_code_comments.ts +106 -1
- package/src/scripts/release_drill.ts +57 -1
- package/src/scripts/release_publication.ts +58 -0
- package/src/scripts/roadmap_context.ts +15 -0
- package/src/scripts/skill_scout.ts +633 -0
- 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
|
|
3668
|
+
function print2(line = "") {
|
|
3572
3669
|
process3.stdout.write(line + "\n");
|
|
3573
3670
|
}
|
|
3574
|
-
function
|
|
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
|
-
|
|
3631
|
-
|
|
3727
|
+
print2(` \u{1F4CD} start: ${process3.cwd()}`);
|
|
3728
|
+
print2(` \u{1F4CD} origin: ${origin}`);
|
|
3632
3729
|
if (trace.length > 0) {
|
|
3633
|
-
|
|
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
|
-
|
|
3736
|
+
print2(` ${symbol} ${tag} ${record.ancestor}${anchor_str} (${record.reason})`);
|
|
3640
3737
|
}
|
|
3641
3738
|
}
|
|
3642
3739
|
if (root !== null) {
|
|
3643
|
-
|
|
3740
|
+
print2(` \u{1F4CD} resolved root: ${root} (anchor: ${anchor || "n/a"})`);
|
|
3644
3741
|
} else {
|
|
3645
|
-
|
|
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
|
-
|
|
3753
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
3657
3754
|
}
|
|
3658
3755
|
function _emit_context_text(ctx) {
|
|
3659
|
-
|
|
3660
|
-
|
|
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
|
-
|
|
3761
|
+
print2(` \u{1F512} env_pin: ${env_pin}${marker}`);
|
|
3665
3762
|
} else {
|
|
3666
|
-
|
|
3763
|
+
print2(" \u{1F512} env_pin: (unset)");
|
|
3667
3764
|
}
|
|
3668
3765
|
const layers = ctx["settings_layers"] || [];
|
|
3669
3766
|
if (layers.length > 0) {
|
|
3670
|
-
|
|
3767
|
+
print2(` \u{1F4D1} settings layers (${layers.length}):`);
|
|
3671
3768
|
for (const layer of layers) {
|
|
3672
|
-
|
|
3769
|
+
print2(` - ${layer}`);
|
|
3673
3770
|
}
|
|
3674
3771
|
} else {
|
|
3675
|
-
|
|
3772
|
+
print2(" \u{1F4D1} settings layers: (none)");
|
|
3676
3773
|
}
|
|
3677
3774
|
const wrapper = ctx["wrapper"] || {};
|
|
3678
3775
|
if (wrapper["exists"]) {
|
|
3679
|
-
|
|
3776
|
+
print2(` \u{1F9E9} wrapper: ${wrapper["path"]} (embedded root: ${wrapper["embedded_root"]})`);
|
|
3680
3777
|
} else {
|
|
3681
|
-
|
|
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
|
|
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 !==
|
|
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:
|
|
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 !==
|
|
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
|
-
|
|
5694
|
+
print2(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
|
|
5598
5695
|
if (bridge_present) {
|
|
5599
|
-
|
|
5696
|
+
print2(
|
|
5600
5697
|
" \u2139\uFE0F global-only consumer: install marker present, no project lockfile (expected under ADR-020)"
|
|
5601
5698
|
);
|
|
5602
|
-
|
|
5699
|
+
print2(
|
|
5603
5700
|
" project-manifest checks are skipped \u2014 they apply only to project-local distributed tools"
|
|
5604
5701
|
);
|
|
5605
5702
|
} else {
|
|
5606
|
-
|
|
5607
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5752
|
+
print2("checks:");
|
|
5652
5753
|
for (const c of checks) {
|
|
5653
5754
|
const sym = STATUS_SYMBOLS[c["status"]] ?? "?";
|
|
5654
|
-
|
|
5755
|
+
print2(` ${sym} ${c["id"]}: ${c["message"]}`);
|
|
5655
5756
|
if (c["status"] !== "ok" && c["remedy"]) {
|
|
5656
|
-
|
|
5757
|
+
print2(` fix: ${c["remedy"]}`);
|
|
5657
5758
|
}
|
|
5658
5759
|
}
|
|
5659
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
5881
|
-
|
|
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
|
-
|
|
5973
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
5904
5974
|
} else {
|
|
5905
|
-
|
|
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
|
-
|
|
5981
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
5912
5982
|
} else {
|
|
5913
5983
|
if (payload["action"] === "remove") {
|
|
5914
|
-
|
|
5984
|
+
print2(`\u2705 doctor: reset wizard-state (${state_pth})`);
|
|
5915
5985
|
} else {
|
|
5916
|
-
|
|
5986
|
+
print2(`\u2705 doctor: nothing to repair (no wizard-state at ${state_pth})`);
|
|
5917
5987
|
}
|
|
5918
5988
|
}
|
|
5919
5989
|
return 0;
|
|
5920
5990
|
}
|
|
5921
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
@@ -2303,7 +2303,7 @@
|
|
|
2303
2303
|
},
|
|
2304
2304
|
{
|
|
2305
2305
|
"category": "command",
|
|
2306
|
-
"checksum": "sha256:
|
|
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:
|
|
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:
|
|
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:
|
|
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-
|
|
14912
|
+
"generated_at": "2026-09-03T10:46:46Z",
|
|
14913
14913
|
"packs": [
|
|
14914
14914
|
{
|
|
14915
14915
|
"artefact_count": 128,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
7b5c5bfa78218abb0e4f052913e62b2aea86dd2e566a9ad201b3d2d583fdaf66 discovery-manifest.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-09-
|
|
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
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-09-
|
|
2
|
+
"checksum": "sha256:9aca1f614f7add7d67778fa6a96e9d0f003607832be5cd432d07759474a8d08f",
|
|
3
|
+
"generated_at": "2026-09-03T10:46:46Z",
|
|
4
4
|
"scanner_version": "de0a22b4ac4c",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
{
|