@event4u/agent-config 9.33.0 → 9.34.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +85 -167
- package/dist/agent-src/commands/agent-handoff.md +15 -3
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +21 -12
- package/dist/agent-src/skills/design-tokens/SKILL.md +15 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +24 -0
- package/dist/agent-src/skills/rule-writing/SKILL.md +23 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +80 -2
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +24 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli-delegate/{chunk-2WELHO3P.js → chunk-I5EAFRII.js} +35 -0
- package/dist/cli-delegate/{chunk-PMQ6Z3T3.js → chunk-REMEZSVP.js} +9 -2
- package/dist/cli-delegate/{chunk-3EWYC3YK.js → chunk-UEZ7D35A.js} +4 -3
- package/dist/cli-delegate/cmd_conformance.js +1 -1
- package/dist/cli-delegate/cmd_doctor.js +1 -1
- package/dist/cli-delegate/cmd_handoff.js +2 -2
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_route_audit.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +7 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +11 -11
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/dormancy-report.md +17 -0
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/hooks/dispatch.js +96 -7
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +118 -10
- package/docs/guidelines/agent-infra/failure-signatures.md +47 -12
- package/package.json +2 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/src/config/quorum-attendance-budget.json +1 -1
- package/src/scripts/_cli/cmd_session_recycle.ts +6 -1
- package/src/scripts/_lib/env_kill_switch.ts +37 -0
- package/src/scripts/_lib/security_lint.ts +18 -4
- package/src/scripts/_lib/self_repair.ts +60 -0
- package/src/scripts/_lib/self_repair_store.ts +65 -5
- package/src/scripts/_lib/subagent_capsule.ts +78 -1
- package/src/scripts/ai_council/events_log.ts +2 -2
- package/src/scripts/ai_council/orchestrator.ts +38 -0
- package/src/scripts/ai_council/prompts.ts +165 -3
- package/src/scripts/ai_council/quorum.ts +10 -0
- package/src/scripts/ai_team/review_gate.ts +2 -2
- package/src/scripts/build_discovery_manifest.ts +165 -0
- package/src/scripts/check_claims.ts +51 -2
- package/src/scripts/ci_time_ratio.ts +3 -1
- package/src/scripts/discovery_graph.ts +201 -27
- package/src/scripts/dispatch_r2_reviewer.ts +102 -1
- package/src/scripts/lint_handoffs.ts +92 -2
- package/src/scripts/lint_hedge_words.ts +317 -0
- package/src/scripts/lint_mcp_config_security.ts +1 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +1 -1
- package/src/scripts/self_repair_cli.ts +26 -1
- package/src/scripts/skill_linter.ts +58 -2
|
@@ -530,7 +530,7 @@ tool skill*, **never** a new skill per pitfall and never a generated grid (see
|
|
|
530
530
|
[`size-enforcement`](../../rules/size-enforcement.md) § Per-tool pitfall
|
|
531
531
|
content).
|
|
532
532
|
|
|
533
|
-
## Rationalizations-to-reject section (
|
|
533
|
+
## Rationalizations-to-reject section (recommended pattern, security-stop-routed skills)
|
|
534
534
|
|
|
535
535
|
A skill routed by `security-sensitive-stop` already carries a forbidden-moves or
|
|
536
536
|
failure-mode list. Those describe **what is wrong**. They do not answer the
|
|
@@ -553,7 +553,7 @@ the skip actually happens.
|
|
|
553
553
|
Keep it to the arguments that have really been made. An invented rationalization
|
|
554
554
|
teaches nothing and dilutes the ones that recur.
|
|
555
555
|
|
|
556
|
-
## Non-negotiable-deliverable section (
|
|
556
|
+
## Non-negotiable-deliverable section (recommended pattern, adjacent-technology clusters)
|
|
557
557
|
|
|
558
558
|
Some skills sit next to a technology that is a *tempting wrong answer* — close
|
|
559
559
|
enough to look interchangeable, different enough that picking it silently loses
|
|
@@ -644,6 +644,84 @@ This duplicates the rules on purpose, and the duplication is the point: the
|
|
|
644
644
|
rules are the enforcement, the section is what survives the artifact leaving
|
|
645
645
|
their reach.
|
|
646
646
|
|
|
647
|
+
## Mechanism-teaching section (optional pattern, skills whose subject has one)
|
|
648
|
+
|
|
649
|
+
A procedure tells the agent what to do in the cases you thought of. A
|
|
650
|
+
**mechanism** tells it why those steps work, which is the only thing that
|
|
651
|
+
transfers to the case you did not. Where a skill's subject has a mechanism worth
|
|
652
|
+
one screen — how the cascade resolves, why the queue drops the message, what the
|
|
653
|
+
scheduler actually orders — state it in a `## How it works` section, ahead of the
|
|
654
|
+
procedure that depends on it.
|
|
655
|
+
|
|
656
|
+
Keep it to one screen and to mechanisms only: no history, no alternatives-considered,
|
|
657
|
+
no restating the procedure in prose. If it takes more than a screen, the skill is
|
|
658
|
+
carrying a guideline's worth of material and should point at one instead.
|
|
659
|
+
|
|
660
|
+
The test for whether it earns its place: name a plausible situation the procedure
|
|
661
|
+
does not cover, and check whether this section is enough to answer it. If the
|
|
662
|
+
answer is still "read the source", the section is decoration.
|
|
663
|
+
|
|
664
|
+
Optional, and it gets no gate: "teaches a mechanism" is a prose judgement, and a
|
|
665
|
+
predicate over prose is the false-positive class this file's other patterns avoid.
|
|
666
|
+
|
|
667
|
+
## Illustrative-not-verbatim marker (optional pattern, reference code)
|
|
668
|
+
|
|
669
|
+
A code block in a skill is read as copy-me by default. When a block is teaching a
|
|
670
|
+
*shape* — a signature to mirror, a structure to follow, pseudocode standing in for
|
|
671
|
+
the real call — say so on the line above it:
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
<!-- illustrative: shape only, not a working snippet -->
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
One line, immediately above the fence, in the skill's own words if you prefer.
|
|
678
|
+
What matters is that the reader can tell shape-teaching code from code that runs,
|
|
679
|
+
because the failure mode is silent: an agent pastes the illustration, it almost
|
|
680
|
+
works, and the debugging starts from the wrong premise.
|
|
681
|
+
|
|
682
|
+
The inverse deserves the same care — a block that IS meant to be run verbatim,
|
|
683
|
+
where a reader might assume otherwise, says so too. See also `### 4. Add
|
|
684
|
+
safe/unsafe example`, which governs a different axis: safe-vs-unsafe, not
|
|
685
|
+
runnable-vs-illustrative.
|
|
686
|
+
|
|
687
|
+
## Headline metric + closing report (optional pattern, optimization skills)
|
|
688
|
+
|
|
689
|
+
A skill whose job is to make something better — smaller, faster, cheaper, quieter
|
|
690
|
+
— has to say **which single number it moves**. Without one, "optimized" is a
|
|
691
|
+
claim nobody can check and every run reports success.
|
|
692
|
+
|
|
693
|
+
So an optimization skill names, up front:
|
|
694
|
+
|
|
695
|
+
1. **The headline metric.** One number, with its unit and how it is measured.
|
|
696
|
+
"Initial-context tokens, measured by `audit-tokens`" — not "context cost".
|
|
697
|
+
2. **The closing report shape.** Before, after, delta, and the command that
|
|
698
|
+
produced both. The same command for both readings, or the delta is not a delta.
|
|
699
|
+
|
|
700
|
+
State what the metric does **not** capture, in one line. An optimization that
|
|
701
|
+
moves the headline number by degrading something it does not measure is the
|
|
702
|
+
failure this pattern exists to make visible, and only the author knows where that
|
|
703
|
+
edge is.
|
|
704
|
+
|
|
705
|
+
## Contrastive-example slot (optional pattern, authoring and behaviour skills)
|
|
706
|
+
|
|
707
|
+
Where a skill's guidance is easy to agree with and hard to apply — tone, phrasing,
|
|
708
|
+
question shape, what counts as evidence — a wrong/right pair does what prose
|
|
709
|
+
cannot: it shows the near-miss. Six live corpora already carry them:
|
|
710
|
+
[`direct-answers-demos`](../../../docs/guidelines/agent-infra/direct-answers-demos.md),
|
|
711
|
+
[`asking-and-brevity-examples`](../../../docs/guidelines/agent-infra/asking-and-brevity-examples.md),
|
|
712
|
+
[`language-and-tone-examples`](../../../docs/guidelines/agent-infra/language-and-tone-examples.md),
|
|
713
|
+
and `autonomy-examples` / `interrupt-examples` / `cheap-question-mechanics` under
|
|
714
|
+
`src/agent-src/contexts/execution/`.
|
|
715
|
+
|
|
716
|
+
Follow one of those rather than inventing a format. The shape they share: the
|
|
717
|
+
**wrong** version first, in the form it actually gets written; the **right**
|
|
718
|
+
version second; and one line of **why** — which is the load-bearing part, because
|
|
719
|
+
a pair without it teaches the specific case and not the rule.
|
|
720
|
+
|
|
721
|
+
Put the corpus in a guideline or context file and point at it from the skill when
|
|
722
|
+
it outgrows a section. A near-miss corpus is reference material read on demand,
|
|
723
|
+
not always-loaded prose.
|
|
724
|
+
|
|
647
725
|
## Do NOT
|
|
648
726
|
|
|
649
727
|
* Write documentation-style, pointer-only, or too-broad skills ("Laravel skill", "Django skill")
|
|
@@ -222,10 +222,12 @@ right line beats five minutes of IDE breakpoints.
|
|
|
222
222
|
|
|
223
223
|
**Known failure signature?** If the symptom has a recognisable shape — a
|
|
224
224
|
tool/agent loop, HTTP 429, `ECONNREFUSED`, `ENOENT`, timeout/hang, OOM, flaky
|
|
225
|
-
test,
|
|
225
|
+
test, works-locally-fails-in-CI, or repeated attempts at a tool that is not
|
|
226
|
+
available — consult the symptom → cause → first-check
|
|
226
227
|
lookup in [`failure-signatures`](../../../docs/guidelines/agent-infra/failure-signatures.md)
|
|
227
|
-
to shortcut Phase 2 (Isolate) with the highest-probability first check.
|
|
228
|
-
|
|
228
|
+
to shortcut Phase 2 (Isolate) with the highest-probability first check. Each row
|
|
229
|
+
carries a stable id you can cite, and a discrimination drill that produces its
|
|
230
|
+
documented symptom. It supplements the loop; it does not replace it.
|
|
229
231
|
|
|
230
232
|
## Condition-based waiting (intermittent bugs)
|
|
231
233
|
|
|
@@ -157,8 +157,32 @@ Risks: <arbitrary values, !important, dark-mode gaps>
|
|
|
157
157
|
|
|
158
158
|
When `DESIGN.md` declares `## Taste Dials`, honour them: Variance → layout-family spread + asymmetry tolerance; Motion → animation budget + reduced-motion posture; Density → spacing scale + information-per-viewport. Absent → follow the design brief's inferred dials.
|
|
159
159
|
|
|
160
|
+
## Security constraints
|
|
161
|
+
|
|
162
|
+
`scripts/tailwind_config_gen.ts` is the only shipped script.
|
|
163
|
+
|
|
164
|
+
- **What it may touch** — exactly one file: `--output PATH`, or
|
|
165
|
+
`tailwind.config.ts` / `.js` in the current working directory when no
|
|
166
|
+
`--output` is given. It reads nothing from the project.
|
|
167
|
+
- **What it must never do** — write anywhere other than that one path,
|
|
168
|
+
reach the network, or spawn a subprocess. It does none of these.
|
|
169
|
+
- **Default invocation** — **mutating**, and stated here because it is a
|
|
170
|
+
real exception rather than a comfortable one: a bare invocation writes
|
|
171
|
+
`tailwind.config.ts` into `cwd`, overwriting an existing config without
|
|
172
|
+
prompting. `--validate-only` is the read-only path — it prints the
|
|
173
|
+
generated config to stdout and writes nothing. Run `--validate-only`
|
|
174
|
+
first, and pass `--output` when the target is not the cwd default.
|
|
175
|
+
This default contradicts `skill-writing`'s "never mutate on a bare
|
|
176
|
+
invocation" line; it is recorded rather than silently tolerated, and
|
|
177
|
+
changing the script's default is a caller-visible behaviour change that
|
|
178
|
+
belongs in its own change, not here.
|
|
179
|
+
- **Outbound** — nothing. No network access.
|
|
180
|
+
|
|
160
181
|
## Do NOT
|
|
161
182
|
|
|
183
|
+
- Do NOT run `tailwind_config_gen` bare in a project that already has a
|
|
184
|
+
`tailwind.config.*` — it overwrites without asking. Use
|
|
185
|
+
`--validate-only` first, then `--output` at the intended path.
|
|
162
186
|
- Do NOT add `!important` to win a specificity fight; restructure
|
|
163
187
|
the cascade or extract the conflicting style.
|
|
164
188
|
- Do NOT introduce a new colour outside `tailwind.config` without
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "9.
|
|
42
|
+
agent_config_version: "9.34.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -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);
|
|
@@ -1622,6 +1622,14 @@ import * as crypto from "node:crypto";
|
|
|
1622
1622
|
import * as fs7 from "node:fs";
|
|
1623
1623
|
import * as path10 from "node:path";
|
|
1624
1624
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
1625
|
+
|
|
1626
|
+
// src/scripts/_lib/env_kill_switch.ts
|
|
1627
|
+
var _OFF_VALUES = /* @__PURE__ */ new Set(["", "0", "false", "False"]);
|
|
1628
|
+
function isEnvKillSwitchActive(name) {
|
|
1629
|
+
return !_OFF_VALUES.has(process.env[name] ?? "");
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
// src/scripts/ai_council/events_log.ts
|
|
1625
1633
|
var SCHEMA_VERSION = 2;
|
|
1626
1634
|
var _VALID_ACTIONS = /* @__PURE__ */ new Set([
|
|
1627
1635
|
"proceed",
|
|
@@ -1690,8 +1698,7 @@ function _utf8Bytes(cp) {
|
|
|
1690
1698
|
);
|
|
1691
1699
|
}
|
|
1692
1700
|
function _kill_switch_active() {
|
|
1693
|
-
|
|
1694
|
-
return !(value === "" || value === "0" || value === "false" || value === "False");
|
|
1701
|
+
return isEnvKillSwitchActive(_KILL_SWITCH_ENV);
|
|
1695
1702
|
}
|
|
1696
1703
|
function appendEvent(event, opts = {}) {
|
|
1697
1704
|
if (_kill_switch_active()) {
|
|
@@ -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
|
-
|
|
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) {
|
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
scanEnvelopeDirectives,
|
|
16
16
|
validateRecycleEnvelope,
|
|
17
17
|
wrapAsPriorSessionData
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-I5EAFRII.js";
|
|
19
|
+
import "./chunk-UEZ7D35A.js";
|
|
20
20
|
import {
|
|
21
21
|
readHookStdin
|
|
22
22
|
} from "./chunk-MMJL4TIX.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-
|
|
5
|
+
} from "./chunk-UEZ7D35A.js";
|
|
6
6
|
import "./chunk-OY53J6II.js";
|
|
7
7
|
import "./chunk-J55WI3RR.js";
|
|
8
8
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
RECYCLE_ENVELOPE_REL,
|
|
6
6
|
collectGrounding,
|
|
7
7
|
validateRecycleEnvelope
|
|
8
|
-
} from "./chunk-
|
|
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: [],
|
|
@@ -2573,7 +2573,7 @@
|
|
|
2573
2573
|
},
|
|
2574
2574
|
{
|
|
2575
2575
|
"category": "command",
|
|
2576
|
-
"checksum": "sha256:
|
|
2576
|
+
"checksum": "sha256:0181143b6ba9ee8ed18fc3069d175e1702a5a8b36bf9694fa4a07f7c98f52ca5",
|
|
2577
2577
|
"install": {
|
|
2578
2578
|
"default": true,
|
|
2579
2579
|
"removable": false
|
|
@@ -9271,7 +9271,7 @@
|
|
|
9271
9271
|
},
|
|
9272
9272
|
{
|
|
9273
9273
|
"category": "skill",
|
|
9274
|
-
"checksum": "sha256:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
13834
|
+
"checksum": "sha256:89e099d1d527ed2000dd3bbe43dddac623487b6f75b08f4fb0a6b9c3ec39dfb8",
|
|
13835
13835
|
"install": {
|
|
13836
13836
|
"default": true,
|
|
13837
13837
|
"removable": false
|
|
@@ -14486,7 +14486,7 @@
|
|
|
14486
14486
|
"workspaces": []
|
|
14487
14487
|
}
|
|
14488
14488
|
],
|
|
14489
|
-
"checksum": "sha256:
|
|
14489
|
+
"checksum": "sha256:578a1ff7f0b187812c772bce1b731880d7bca27d0f84a864a00b493e857fa21e",
|
|
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-
|
|
14632
|
+
"generated_at": "2026-08-11T20:26:09Z",
|
|
14633
14633
|
"packs": [
|
|
14634
14634
|
{
|
|
14635
14635
|
"artefact_count": 118,
|
|
@@ -15482,7 +15482,7 @@
|
|
|
15482
15482
|
]
|
|
15483
15483
|
}
|
|
15484
15484
|
],
|
|
15485
|
-
"scanner_version": "
|
|
15485
|
+
"scanner_version": "1eaf68b6e9c9",
|
|
15486
15486
|
"stats": {
|
|
15487
15487
|
"by_category": {
|
|
15488
15488
|
"command": 196,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
82fbc2b79bb7b97c663111542bbfdd08c3c798e17c6f992e19689a71c4d7403c discovery-manifest.json
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Discovery — Dormancy Report
|
|
2
|
+
|
|
3
|
+
- Generated: `2026-08-11T20:26:09Z`
|
|
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
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-08-
|
|
2
|
+
"checksum": "sha256:578a1ff7f0b187812c772bce1b731880d7bca27d0f84a864a00b493e857fa21e",
|
|
3
|
+
"generated_at": "2026-08-11T20:26:09Z",
|
|
4
4
|
"packs": [
|
|
5
5
|
{
|
|
6
6
|
"always_on": false,
|
|
@@ -1814,5 +1814,5 @@
|
|
|
1814
1814
|
]
|
|
1815
1815
|
}
|
|
1816
1816
|
],
|
|
1817
|
-
"scanner_version": "
|
|
1817
|
+
"scanner_version": "1eaf68b6e9c9"
|
|
1818
1818
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-08-
|
|
4
|
-
"scanner_version": "
|
|
2
|
+
"checksum": "sha256:578a1ff7f0b187812c772bce1b731880d7bca27d0f84a864a00b493e857fa21e",
|
|
3
|
+
"generated_at": "2026-08-11T20:26:09Z",
|
|
4
|
+
"scanner_version": "1eaf68b6e9c9",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
{
|
|
7
7
|
"artefact_count": 202,
|