@vegastack/skills 0.16.0 → 0.16.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/package.json +1 -1
- package/skill/dev-architect/references/conventions.md +4 -4
- package/skill/dev-chronicle/SKILL.md +1 -1
- package/skill/dev-chronicle/references/conventions.md +4 -4
- package/skill/dev-debug/references/conventions.md +4 -4
- package/skill/dev-implement/references/conventions.md +4 -4
- package/skill/dev-intake/SKILL.md +1 -1
- package/skill/dev-intake/references/conventions.md +4 -4
- package/skill/dev-plan/references/conventions.md +4 -4
- package/skill/dev-review/assets/review-known-patterns.md.template +1 -1
- package/skill/dev-review/references/conventions.md +4 -4
- package/skill/dev-setup/assets/dev-profile.md.template +1 -1
- package/skill/dev-setup/references/conventions.md +4 -4
- package/skill/dev-ship/references/conventions.md +4 -4
- package/skill/dev-status/references/conventions.md +4 -4
- package/skill/skill-maintainer/references/release-ops.md +3 -3
- package/skill/skillify/scripts/scaffold-skill.mjs +19 -13
- package/skill-integrity.json +16 -16
package/package.json
CHANGED
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -20,7 +20,7 @@ Nearest neighbors: `dev-implement` writes the entries at hand-back (the write ru
|
|
|
20
20
|
- **Changed:** <the user-visible changes, simple words — sub-bullets or one ·-separated line>
|
|
21
21
|
- **Decisions:** <register lines it produced, or "none">
|
|
22
22
|
|
|
23
|
-
— approved by
|
|
23
|
+
— approved by (<username>) · built by <agent> · branch <name>
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
- Titles name the outcome ("Invoice reminders now chase late payers"), never the mechanism ("add reminderAt column"). The issue reference is a full markdown link to `…/issues/<n>` (correct for PRs too — GitHub redirects); a bare `#N` never appears anywhere in an entry, because file views don't auto-link it.
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -55,7 +55,7 @@ Before posting any brief, run `node <path-to-this-skill>/scripts/brief-lint.mjs
|
|
|
55
55
|
|
|
56
56
|
- A new issue starts at `needs-operator`, plus its scope label; add `risky` when it touches security, money, user data, or production. (Names come from dev.md's `labels:` knob.)
|
|
57
57
|
- Approval is only the operator's explicit words, clearly tied to the issue. Labels, silence, or time never create approval.
|
|
58
|
-
- Record it as one approval marker comment per conventions — `scope=brief`, or `scope=brief+plan` when the inline plan was posted with it — quoting the operator's words in the
|
|
58
|
+
- Record it as one approval marker comment per conventions — `scope=brief`, or `scope=brief+plan` when the inline plan was posted with it — quoting the operator's words in the (username) format. That comment is what preflight verifies.
|
|
59
59
|
- Then flip the state: `research` and `quick-build` → `ready`; `full-plan` → `needs-plan` (dev-plan takes it from there).
|
|
60
60
|
- An issue with an unresolved Assumptions entry cannot leave `needs-operator` — resolve every entry (confirmed, corrected, or moved to a spike) first; the section is deleted once resolved.
|
|
61
61
|
- A directional decision this work settles — one passing the Decisions test in dev.md — is proposed as one register line on the operator's yes; `dev-ship` records at merge.
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -10,7 +10,7 @@ Format, one entry per pattern:
|
|
|
10
10
|
- **Pattern:** <what the reviewer keeps flagging, concretely — code shape, file area>
|
|
11
11
|
- **Why it's safe here:** <the project fact that makes it a false positive>
|
|
12
12
|
- **Still flag if:** <the exception that makes it a real finding after all>
|
|
13
|
-
- **Origin:** <date + issue where the dismissal happened —
|
|
13
|
+
- **Origin:** <date + issue where the dismissal happened — (<username>)>
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
The four fields are LIST ITEMS — this file is read in a repo's file view, where single newlines soft-wrap into one paragraph; bullets are what guarantee a line per field. Appended entries (dev-implement's corrections loop) keep the same shape.
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -68,7 +68,7 @@ mobile: {{no | flutter (separate repo)}}
|
|
|
68
68
|
|
|
69
69
|
Record a decision only when it is directional — it steers work beyond this issue: a real alternative was rejected; it constrains work not yet written; and no dev.md line, lint rule, or guard can enforce it instead (if one can, write the rule). Feature requests, one-off fixes, and routine implementation choices never qualify. Every entry needs the user's explicit yes. One line in the register (`decisions:` knob), append-only, no other metadata:
|
|
70
70
|
|
|
71
|
-
- DD-MM-YYYY
|
|
71
|
+
- DD-MM-YYYY (github-username) — the decision
|
|
72
72
|
|
|
73
73
|
## Stop and ask
|
|
74
74
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -25,14 +25,14 @@ Every workflow-generated issue comment opens with an invisible HTML marker follo
|
|
|
25
25
|
|
|
26
26
|
## Operator identity
|
|
27
27
|
|
|
28
|
-
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications —
|
|
28
|
+
Every human reference in every artifact — approvals, revisions, decisions, changelog attributions, review adjudications — names the operator by their GitHub username in parentheses, with no title before it — `(<github-username>)`:
|
|
29
29
|
|
|
30
|
-
- Approval: `Approved by
|
|
31
|
-
- Register line: `- DD-MM-YYYY
|
|
30
|
+
- Approval: `Approved by (<username>) on DD-MM-YYYY: "<their words>"`
|
|
31
|
+
- Register line: `- DD-MM-YYYY (<username>) — <decision>`
|
|
32
32
|
|
|
33
33
|
## Revision markers
|
|
34
34
|
|
|
35
|
-
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per
|
|
35
|
+
Any artifact edited after its first approval: the heading gains `(v2)`, the marker gains `rev=2`, and a `Revisions:` line is appended at the bottom — `v2 — DD-MM-YYYY: <what changed>, per (<username>) correction`. Existing revision lines are never rewritten.
|
|
36
36
|
|
|
37
37
|
## Scope classes
|
|
38
38
|
|
|
@@ -24,8 +24,8 @@ profile carries a schema version to validate against.
|
|
|
24
24
|
## Release flow (tag-driven)
|
|
25
25
|
|
|
26
26
|
1. Every PR that changes released behavior lands with a changeset — a `.changeset/<slug>.md` written directly, since the `changeset` add prompt is interactive (`bunx changeset version` at release time is the only CLI use) — whose bump follows the table above and whose shape follows dev-implement's changelog rule.
|
|
27
|
-
2. Maintainer, at release time: `bunx changeset version` (applies changesets to `packages/cli/package.json` and the changelog), then `bun install` so any dependency changes riding along reach the lockfile, commit. That install does **not** update the workspace's own version inside `bun.lock`: measured on the bun the root `packageManager` line pins, the recorded version is left unchanged by a plain install, by `--force`, and even by `--lockfile-only`, so it sits at an older number indefinitely. `bun install --frozen-lockfile`, which CI and the release workflow both run, passes with it, and nothing in this repo reads it: `packages/cli/package.json` is the single release identity. Never hand-edit the lockfile to "correct" it. The release record is `packages/cli/CHANGELOG.md`, changesets-written — never by hand; the root `CHANGELOG.md` is the frozen pre-0.3.0 record pointing there.
|
|
28
|
-
3.
|
|
27
|
+
2. Maintainer, at release time: `bunx changeset version` (applies changesets to `packages/cli/package.json` and the changelog), then `bun install` so any dependency changes riding along reach the lockfile, commit on a `chore/release-<version>` branch and open its PR — main is branch-protected with no admin exemption, so the bump reaches main by merge and never by direct push. That install does **not** update the workspace's own version inside `bun.lock`: measured on the bun the root `packageManager` line pins, the recorded version is left unchanged by a plain install, by `--force`, and even by `--lockfile-only`, so it sits at an older number indefinitely. `bun install --frozen-lockfile`, which CI and the release workflow both run, passes with it, and nothing in this repo reads it: `packages/cli/package.json` is the single release identity. Never hand-edit the lockfile to "correct" it. The release record is `packages/cli/CHANGELOG.md`, changesets-written — never by hand; the root `CHANGELOG.md` is the frozen pre-0.3.0 record pointing there.
|
|
28
|
+
3. Merge the release PR on the operator's word, pull main, then tag that merged commit `v<version>` and push the tag. Tags are not branch-protected, so the tag push is unaffected.
|
|
29
29
|
4. The release workflow runs on the tag: `bun run check`, tag↔version guard, `npm publish` via trusted publishing (OIDC, token-free, provenance by default; idempotently skipped if already on the registry), SBOM, GitHub release. Never pass `--provenance` explicitly — it conflicts with trusted-publishing config.
|
|
30
30
|
|
|
31
31
|
Contributors do not bump versions in PRs; releases are maintainer-driven.
|
|
@@ -34,7 +34,7 @@ Contributors do not bump versions in PRs; releases are maintainer-driven.
|
|
|
34
34
|
|
|
35
35
|
`npm unpublish` is limited to 72 hours and breaks pinned consumers — it is not the rollback mechanism.
|
|
36
36
|
|
|
37
|
-
1. **Roll forward:** revert the offending commits
|
|
37
|
+
1. **Roll forward:** revert the offending commits through a PR onto `main` (protection applies to reverts too), changeset, tag, release the previous known-good content as a **new patch version**.
|
|
38
38
|
2. **Deprecate the bad version:** `npm deprecate @vegastack/skills@<bad> "Broken — use <new>"`.
|
|
39
39
|
3. Unpublish only if the bad version leaked secrets or is actively harmful, still within 72 hours, and always *in addition to* steps 1–2, never instead.
|
|
40
40
|
|
|
@@ -222,20 +222,26 @@ export async function scaffoldSkill({ name, dir, group = null, write = false, no
|
|
|
222
222
|
// Every refusal belongs in this pre-flight. wireReadme runs after the tree is renamed into
|
|
223
223
|
// place and the packaging entry written, so anything discovered there would leave a half-wired
|
|
224
224
|
// skill on disk while reporting a refusal - or, worse, report success with no row at all.
|
|
225
|
-
//
|
|
226
|
-
//
|
|
227
|
-
//
|
|
228
|
-
//
|
|
225
|
+
// Both wiring targets a scaffolded skill cannot do without must therefore be resolvable BEFORE
|
|
226
|
+
// the tree is staged: an absent one is a refusal, not a `skipped:` status, because a skill with
|
|
227
|
+
// no README row or no packaging entry is exactly the state structure.mjs check blocks. Only
|
|
228
|
+
// `.changeset/` still degrades to `skipped:` - a missing changeset breaks no check.
|
|
229
229
|
const readmePath = join(repoRoot, 'README.md')
|
|
230
|
-
if ((await entryAt(readmePath))?.isFile()) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
230
|
+
if (!(await entryAt(readmePath))?.isFile()) {
|
|
231
|
+
throw new Error(`README.md not found at ${readmePath} - every skill needs its Skills-table row, so refusing rather than scaffolding a skill the structure check would block`)
|
|
232
|
+
}
|
|
233
|
+
const lines = (await readFile(readmePath, 'utf8')).split('\n')
|
|
234
|
+
const rowTarget = findRowInsertion(lines, group, groupHeading)
|
|
235
|
+
if (rowTarget?.missingSection) {
|
|
236
|
+
throw new Error(`README.md has no "### ${groupHeading}" section for group "${group}" - create it with structure.mjs create-group`)
|
|
237
|
+
}
|
|
238
|
+
if (!rowTarget) {
|
|
239
|
+
throw new Error(`README.md has no ${group ? `table under "### ${groupHeading}"` : 'ungrouped Skills table'} to add a row to - every skill needs its row, so refusing rather than scaffolding a skill the structure check would block`)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const packagingPath = join(repoRoot, 'packages/cli/packaging.json')
|
|
243
|
+
if (!(await entryAt(packagingPath))?.isFile()) {
|
|
244
|
+
throw new Error(`packages/cli/packaging.json not found at ${packagingPath} - every skill needs its packaging entry, so refusing rather than scaffolding a skill the structure check would block`)
|
|
239
245
|
}
|
|
240
246
|
|
|
241
247
|
// The generated test imports the repo validator by relative path, so its depth follows the
|
package/skill-integrity.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"SKILL.md": "74150dde2d3c83598769a4c9f8cd295a7496d9eb9a5e920a29cba8464eb58128",
|
|
9
9
|
"agents/openai.yaml": "99023b056d5c568ff3acc059e5bb7a4e6cfa5261cd0d35a525407f9e159de562",
|
|
10
10
|
"references/ai-agents.md": "565e5d480f7e342adf43f9b864ab4cb66b7e513f0ea676de66909fe0ccd95988",
|
|
11
|
-
"references/conventions.md": "
|
|
11
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
12
12
|
"references/data.md": "781d3ae7d3bca0b269c123a10013226f3878503dd1224ee526edd102bfc270f0",
|
|
13
13
|
"references/infra.md": "a6d07c5e9ea67788edac7b80742a5588a1f019e387163bfdab531314fb54d009",
|
|
14
14
|
"references/mobile.md": "b6ee481df810f3fd5466487848287ceeb33ac98bf6db0bc2d65c4d6fa397284f",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"group": "dev-skills",
|
|
26
26
|
"repoOnly": false,
|
|
27
27
|
"files": {
|
|
28
|
-
"SKILL.md": "
|
|
28
|
+
"SKILL.md": "2bd58c19cdb5a55d7fefdfcd1748054aba403ff9d5161030e36a65f3b2e69b05",
|
|
29
29
|
"agents/openai.yaml": "765b12e17b7fce88c53ca0fae735bf0efceb843cc3703b91bc1801ab5cac06b4",
|
|
30
|
-
"references/conventions.md": "
|
|
30
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
31
31
|
"refresh/REFRESH.md": "760e66642eec426cd5ab2319613e817adf5bbd7b64c8eaa22dd13497351bf9c1",
|
|
32
32
|
"refresh/sources.json": "a7ba2340964dc70410626087686145b5790a0e763a18ef2c4d9aa37e950f2e04"
|
|
33
33
|
}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"files": {
|
|
39
39
|
"SKILL.md": "38ba9e67c00925f4e4738be333dc398218008df929fcf17b61398966ce4deee1",
|
|
40
40
|
"agents/openai.yaml": "4aa52b5c620b0bf4de7f1609867956ce762d83dc4297ab5670a68c206ae63075",
|
|
41
|
-
"references/conventions.md": "
|
|
41
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
42
42
|
"references/loop-ladder.md": "ddcb45ec2241bc5dc25936348074cdcc8f9af848e90b363351a7faf97007c256",
|
|
43
43
|
"refresh/REFRESH.md": "70816e44c8d6a5d11b73eb40762e6d8931724517e0b4c138eb07bc8e91b45008",
|
|
44
44
|
"refresh/sources.json": "a7ba2340964dc70410626087686145b5790a0e763a18ef2c4d9aa37e950f2e04"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"files": {
|
|
51
51
|
"SKILL.md": "f79f4d312f6c03ffdcf2e2fd44169e48520445900389e2d469c0946811be3801",
|
|
52
52
|
"agents/openai.yaml": "1abab383deca54d32749fd9156f9a6211fe96e02e0166dc8a16ff8459ac31b74",
|
|
53
|
-
"references/conventions.md": "
|
|
53
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
54
54
|
"references/ledger-and-resume.md": "5e3deae2af67735940564e04adcbc23c0c0dc86da2f6c80d68b8c1207c8f5900",
|
|
55
55
|
"refresh/REFRESH.md": "7b854109d897b78b3055bf1ab89517afdca65c12eb65a4d009141e3ee11cf58f",
|
|
56
56
|
"refresh/sources.json": "7bd883e5b3512e236a909ad6ff20c97f3555785867c31fd728256c7c2c514c74",
|
|
@@ -63,10 +63,10 @@
|
|
|
63
63
|
"group": "dev-skills",
|
|
64
64
|
"repoOnly": false,
|
|
65
65
|
"files": {
|
|
66
|
-
"SKILL.md": "
|
|
66
|
+
"SKILL.md": "08126d2c631051bf92d400dd678b8f75af1ee7905b1c389e030e4ca435f2c548",
|
|
67
67
|
"agents/openai.yaml": "5473d2d3efffc518c07dfa8e6788c6535a5054ceca696119c5856ad265ef5581",
|
|
68
68
|
"references/brief-template.md": "906c6b805f9737755f4d4b34fd16d4296924b95039379ea86bc59973949d9823",
|
|
69
|
-
"references/conventions.md": "
|
|
69
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
70
70
|
"refresh/REFRESH.md": "bb5265cee98c243c775c3e5fbc59de4b84ab54e828f3290d7c19e47291d66f71",
|
|
71
71
|
"refresh/sources.json": "7bd883e5b3512e236a909ad6ff20c97f3555785867c31fd728256c7c2c514c74",
|
|
72
72
|
"scripts/brief-lint.mjs": "7202def7c3a8b0049e67d60602a4c652d3c99f5fa1711080fd46b94ff4dc3684"
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"files": {
|
|
79
79
|
"SKILL.md": "eb2ce1542b1769fa6e7d9dc7be9fc9c84df8b353ded16e39e1e578ee372c1aca",
|
|
80
80
|
"agents/openai.yaml": "4b9ccc9870b4eafb73c1bc4492a0b5a530097bbcbae11dbf3235160f4f05587b",
|
|
81
|
-
"references/conventions.md": "
|
|
81
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
82
82
|
"references/plan-format.md": "a915acce2fc447e685077756aeb94fdc3f84139800703034987b8409971493db",
|
|
83
83
|
"refresh/REFRESH.md": "e22830102db9cf7c6db1e8fea9e73b7845b77e59da0d44e186a6b26d6dc9ebe1",
|
|
84
84
|
"refresh/sources.json": "a7ba2340964dc70410626087686145b5790a0e763a18ef2c4d9aa37e950f2e04",
|
|
@@ -91,8 +91,8 @@
|
|
|
91
91
|
"files": {
|
|
92
92
|
"SKILL.md": "561e0232d20fc7e6893b38a4c3d7deb41862d60d7b545a98d3ce7ba1d3c7ac06",
|
|
93
93
|
"agents/openai.yaml": "3f35d3dc60f179d4ac2526997c4d10173ba3018d06f0dbe77e209ce2978fa702",
|
|
94
|
-
"assets/review-known-patterns.md.template": "
|
|
95
|
-
"references/conventions.md": "
|
|
94
|
+
"assets/review-known-patterns.md.template": "7747b807ed18c4c8bf8acdc6481b2f7f27914d932d757c7243a32a41a18d32c5",
|
|
95
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
96
96
|
"references/cross-agent.md": "3541715d0563703373ea3d93582119b80356d1cbdee19ce17f958c0f7c914884",
|
|
97
97
|
"references/dispatch-prompts.md": "cb8134a7b6ff9e20ec4db02d0af2f8767f71bf13fa9a21b28b7a586c2747ec1d",
|
|
98
98
|
"references/security-axis.md": "e207071fc48f761f2deb24c73ef4f5ebcf28c130264dab7c3061ae6c0eee6543",
|
|
@@ -108,8 +108,8 @@
|
|
|
108
108
|
"SKILL.md": "4b29049b8ce165fb03f554c8784e095cbe97cef16752b57b86321352a1017ce7",
|
|
109
109
|
"agents/openai.yaml": "be790c04fdf910e71642cfadf1a7c07c217bf7fad18581610feb4c31a79651f2",
|
|
110
110
|
"assets/agents-section.md.template": "6c9591d50f73e1e05e78c8969c7836767432cf32487af7205b2cb9f4a410440e",
|
|
111
|
-
"assets/dev-profile.md.template": "
|
|
112
|
-
"references/conventions.md": "
|
|
111
|
+
"assets/dev-profile.md.template": "26e244b488d181e23ff4b49addd9ab519c8f5d43e2d914638033648a7ca5bd3a",
|
|
112
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
113
113
|
"references/harness-facts.md": "2be1d81f6a616d40dc865aaeefaf53c61bc13ade4ba1de8fb406c520bf15be40",
|
|
114
114
|
"references/stack-playbooks.md": "8f457c3d0f96e3c99d745b04332590fdf8af53a9694541181d9c878ae0718ea2",
|
|
115
115
|
"refresh/REFRESH.md": "debda6ab96e899dd7e38309f714e9d65a3fbc53fd8ca68b8156f1348226c87b9",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"files": {
|
|
123
123
|
"SKILL.md": "aa3bd8b0a1ac076309190f2008896f24ebe1216352872ff428c1b88b55c06e65",
|
|
124
124
|
"agents/openai.yaml": "8f18cfd505131557eb4c9f7b7f54e9069f787be4c162403fc30253eed49a06ea",
|
|
125
|
-
"references/conventions.md": "
|
|
125
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
126
126
|
"references/runbook.md": "5cbf3f89b2fcad1a2873f729b6c1a027566344d5dffcb799ed1d039e76b3e679",
|
|
127
127
|
"refresh/REFRESH.md": "06894b54fcbde12d3b5804523f20d5544ba1a18bb5e36960caa4f98454c6203e",
|
|
128
128
|
"refresh/sources.json": "7bd883e5b3512e236a909ad6ff20c97f3555785867c31fd728256c7c2c514c74",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"files": {
|
|
136
136
|
"SKILL.md": "56415c2f69bb1a2fcb488b9846a20e632eb902b05c5b2b58ae9206d3eaffd77b",
|
|
137
137
|
"agents/openai.yaml": "72435947f5afef0c8a2c170e987b14fe6057b174318c16b6b538ae8d129791fb",
|
|
138
|
-
"references/conventions.md": "
|
|
138
|
+
"references/conventions.md": "95bf916cc11f95f3d5eefcb34db4fbc05d88ae1c8f08869800dfa417f8da17ed",
|
|
139
139
|
"refresh/REFRESH.md": "52aee9bae64d8342e127704d1db282e43ed57c101148727bf10172d6cb975bfa",
|
|
140
140
|
"refresh/sources.json": "a7ba2340964dc70410626087686145b5790a0e763a18ef2c4d9aa37e950f2e04",
|
|
141
141
|
"scripts/status.mjs": "bc56d0b5d996676cfccb752d9d77d0e9e7d64932741cd39d6a503e9761fbe34d"
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"files": {
|
|
148
148
|
"SKILL.md": "1733d2f1fa756cbb37c74ecee0d48ddd9abf31155c4dd72eba10af31c33d88ec",
|
|
149
149
|
"agents/openai.yaml": "0b89d4e6416cf20b448f5322f3d7433cfde333d2b4a05b42ed53db3759701fb4",
|
|
150
|
-
"references/release-ops.md": "
|
|
150
|
+
"references/release-ops.md": "d213f66976e24942560d611582d27409f8ba4392886b4663d7dfbc7d395ef2ef",
|
|
151
151
|
"references/standards.md": "b44122822a320a305728ee023ed8e3140bf87aaaef400a43d45b778e53ad2c02",
|
|
152
152
|
"refresh/REFRESH.md": "d3ba44be2c264b849d8a815111c049e782720428d5d0c5cea23998b05e50d58f",
|
|
153
153
|
"refresh/sources.json": "4977152381d53555196ac676f95e61b4eaa301309a17560da5cda722010eb80f"
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
"references/eval-playbook.md": "1f463dfea8d69b7022712776794369892643aa020186fe3a3707c493a6c2d4e9",
|
|
171
171
|
"refresh/REFRESH.md": "695f3283b27c14accf4095137898ce1f6dc40749483c5a5705e80aa9693f08c2",
|
|
172
172
|
"refresh/sources.json": "e554e80c72c16dc70587361804db9e0cf2716c128820b2612d5983a009b2b242",
|
|
173
|
-
"scripts/scaffold-skill.mjs": "
|
|
173
|
+
"scripts/scaffold-skill.mjs": "849370bd152e488c66753882928cdb18db356f21468647c8e0a51ee58a385183"
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
}
|