@csark0812/skeleton 1.6.0 → 1.6.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 (3) hide show
  1. package/README.md +19 -15
  2. package/dist/cli.js +3 -2
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Skeleton
2
2
 
3
- **Source of truth for** Package overview.
3
+ <!-- source-of-truth: Package overview -->
4
4
 
5
5
  <!-- doc-meta: owner=eng | last-reviewed=2026-08-16 -->
6
6
 
@@ -36,7 +36,7 @@ Does an intact Skeleton contract change agent behavior — grounding on the righ
36
36
 
37
37
  ### What we did
38
38
 
39
- We ran a paired live A/B harness with [`@post-print/agent-test`](https://www.npmjs.com/package/@post-print/agent-test): `skeleton-clean` vs `skeleton-messy`. Same prompts and scenario set; the only intentional difference was registry / conflict structure and context profile.
39
+ We ran a paired live A/B harness with [`@post-print/agent-test`](https://www.npmjs.com/package/@post-print/agent-test): `skeleton-clean` vs `skeleton-messy`. Same prompts and scenario set; the only intentional difference was SSOT / conflict structure and context profile.
40
40
 
41
41
  Scenarios covered contested grounding (conflicting docs), docs-only validation routing, canonical grounding, owned-skill routing, and customize ownership. Protocol: **N=10** sequential paired compares on 2026-07-17; McNemar on paired pass/fail; median token deltas with a bootstrap CI on the mean.
42
42
 
@@ -50,7 +50,7 @@ Full method: [refs/llm-harness.md](refs/llm-harness.md). Suites: [agent-suites/R
50
50
 
51
51
  On tasks that depend on an intact SSOT, the clean fixture was both more accurate and cheaper:
52
52
 
53
- - **Contested grounding** — In every paired run, clean settled on the registry canonical; messy never did (McNemar p = 0.002). Clean hops the registry; messy thrashes across conflicting docs.
53
+ - **Contested grounding** — In every paired run, clean settled on the SSOT canonical; messy never did (McNemar p = 0.002). Clean hops the catalog/SSOT path; messy thrashes across conflicting docs.
54
54
  - **Docs routing** — Clean consistently chose the correct audit lane; messy invented a non-existent `audit all` path (McNemar p = 0.002).
55
55
  - **Token cost** — Across grounding tasks, messy used a median **~312k** more tokens than clean (bootstrap 95% CI on the mean excludes 0). Pass rate alone understates the gap: messy can still luck into an answer while spending far more.
56
56
 
@@ -94,7 +94,7 @@ Flag details: [install](docs/developer/install.md).
94
94
  - **SSOT summary fit** — heuristic overlap between the one-liner and the body (warn / `--strict`)
95
95
  - **Link audit** — broken refs, skill links, anchors in scanned markdown
96
96
  - **Skill index** — disk matches taxonomy READMEs in detected skill roots
97
- - **Banned paths** — session artifacts and other files that must not exist
97
+ - **deny.paths** — globs for files that must not exist (often outside `scan.include`)
98
98
  - **Coverage gaps** — markdown outside the scan perimeter (warn-only)
99
99
  - **Doc meta + stale dates** — owner and `last-reviewed` on indexes and SSOT-bearing files
100
100
  - **Prose policy** (optional plugins) — YAML pattern rules; idle with no plugins
@@ -104,27 +104,31 @@ Agents skim `.skeleton/catalog.md` (generated, gitignored) before opening full p
104
104
 
105
105
  Skeleton doesn't replace your code gates. Keep TypeScript, Python, Nx, pytest, and the rest in the repo that owns them.
106
106
 
107
- ## The `.skeleton/` contract
107
+ ## The contract
108
+
109
+ Config lives in **`skeleton.toml`** at the repo root (preferred). Optional under `.skeleton/`:
108
110
 
109
111
  ```
112
+ skeleton.toml # scan perimeter, deny.paths, docsLint, …
110
113
  .skeleton/
111
- ├── config.yaml # scan perimeter (required)
112
- ├── registry.md # topic canonical file (required)
113
- ├── plugins/ # optional consumer audit plugins (.ts + built .mjs)
114
- └── customize/ # project-specific skill overrides (optional)
114
+ ├── catalog.md # generated by `skeleton catalog` (gitignored)
115
+ ├── plugins/ # optional consumer audit plugins (.ts + built .mjs)
116
+ └── customize/ # project-specific skill overrides (optional)
115
117
  └── code-review.md
116
118
  ```
117
119
 
118
- Every canonical doc carries a banner:
120
+ Legacy `.skeleton/config.yaml` still loads when no TOML is present.
121
+
122
+ Every canonical doc opts into the catalog with a marker:
119
123
 
120
124
  ```markdown
121
- **Source of truth for** Backend API conventions.
125
+ <!-- source-of-truth: Backend API conventions -->
122
126
  ```
123
127
 
124
- Register it:
128
+ Then refresh the agent index:
125
129
 
126
130
  ```bash
127
- skeleton register docs/developer/api.md
131
+ skeleton catalog
128
132
  ```
129
133
 
130
134
  Synced skills stay pristine. Project overrides live in `.skeleton/customize/<slug>.md` and inject when the skill is read — no editing copied `SKILL.md` files.
@@ -133,8 +137,8 @@ Synced skills stay pristine. Project overrides live in `.skeleton/customize/<slu
133
137
 
134
138
  ```bash
135
139
  skeleton init [--skills] [--force-hooks]
136
- skeleton register <path> [--topic=…]
137
- skeleton audit docs|skills|self [--strict] [--paths=a,b] [--fix[=doc-meta|anchors]] [--dry-run]
140
+ skeleton catalog [--check]
141
+ skeleton audit docs|skills|self [--strict] [--paths=a,b] [--fix[=doc-meta|anchors|ssot]] [--dry-run]
138
142
  skeleton build-plugin [path] [--check]
139
143
  skeleton validate changed [--staged | --base <ref>] [paths…]
140
144
  skeleton references sync|check
package/dist/cli.js CHANGED
@@ -18446,8 +18446,9 @@ import { relative as relative5 } from "node:path";
18446
18446
 
18447
18447
  // src/audit/core/ssot.ts
18448
18448
  var SSOT_COMMENT_RE = /<!--\s*source-of-truth:\s*([\s\S]*?)\s*-->/gi;
18449
- var SSOT_VISIBLE_LINE_RE = /^\s*source-of-truth:\s*(.+?)\s*$/gim;
18450
- var LEGACY_BANNER_LINE_RE = /^\s*\*\*Source of truth for\*\*\s*(.+?)\s*$/gim;
18449
+ var HWS = "[ \\t]*";
18450
+ var SSOT_VISIBLE_LINE_RE = new RegExp(`^${HWS}source-of-truth:${HWS}(.+?)${HWS}$`, "gim");
18451
+ var LEGACY_BANNER_LINE_RE = new RegExp(`^${HWS}\\*\\*Source of truth for\\*\\*${HWS}(.+?)${HWS}$`, "gim");
18451
18452
  function cleanSummary(raw) {
18452
18453
  return raw.replace(/\s+/g, " ").trim().replace(/\.$/, "").trim();
18453
18454
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csark0812/skeleton",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "SSOT audit CLI for agent harness repos",
5
5
  "type": "module",
6
6
  "bin": {