@csark0812/skeleton 1.5.7 → 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.
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Skeleton
2
2
 
3
- **Source of truth for** Package overview.
3
+ <!-- source-of-truth: Package overview -->
4
4
 
5
- <!-- doc-meta: owner=eng | last-reviewed=2026-07-17 -->
5
+ <!-- doc-meta: owner=eng | last-reviewed=2026-08-16 -->
6
6
 
7
7
  Agent repos get messy fast. Skills get copied around, docs disagree, links go stale, and nobody remembers which file is actually canonical.
8
8
 
9
- Skeleton is an SSOT linter for that layer. Define the contract once; Skeleton checks it locally and in CI. If a canonical doc disappears, a registry drifts, a skill index stops matching disk, or a generated reference gets edited by hand, the audit fails before merge.
9
+ Skeleton is an SSOT linter for that layer. Define the contract once; Skeleton checks it locally and in CI. If a canonical doc disappears, SSOT markers drift, a skill index stops matching disk, or a generated reference gets edited by hand, the audit fails before merge.
10
10
 
11
11
  Think ESLint — for the docs and skills your agents rely on.
12
12
 
@@ -20,7 +20,7 @@ That needs to be explicit — and stay true after the next 50 PRs. Skeleton turn
20
20
 
21
21
  | Code repos | Agent repos |
22
22
  | ------------------------------------------------------- | -------------------------------------------------------------------------------------- |
23
- | ESLint catches broken imports, unused vars, style drift | Skeleton catches broken links, missing registry rows, stale doc-meta, banned artifacts |
23
+ | ESLint catches broken imports, unused vars, style drift | Skeleton catches broken links, bad SSOT markers, stale doc-meta, deny.paths artifacts |
24
24
  | `eslint --fix` on changed files | `skeleton validate changed` on changed docs and skills |
25
25
  | Pre-commit + CI gate | `--staged` pre-commit + `--base` CI gate |
26
26
 
@@ -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
 
@@ -76,50 +76,59 @@ npm install -D @csark0812/skeleton
76
76
  npx skeleton init --skills
77
77
  ```
78
78
 
79
- That writes `.skeleton/`, adds the validation scripts, and wires customize hooks for Cursor, Claude Code, and Codex.
79
+ That writes `skeleton.toml`, ensures `.skeleton/customize/`, adds validation scripts, and may wire **optional** customize hooks for Cursor, Claude Code, and Codex.
80
80
 
81
- Edit `.skeleton/config.yaml` for your repo layout, then verify:
81
+ Edit `skeleton.toml` for your repo layout, then verify:
82
82
 
83
83
  ```bash
84
- npx skeleton audit self
84
+ npx skeleton catalog
85
+ npx skeleton audit docs
85
86
  ```
86
87
 
87
88
  Flag details: [install](docs/developer/install.md).
88
89
 
89
90
  ## What it checks
90
91
 
91
- - **Registry integrity** — `.skeleton/registry.md` topic canonical file pointers; banner format on registered docs
92
+ - **SSOT markers** — opt-in `source-of-truth` (comment or visible); dual/malformed forms fail; legacy banners accepted
93
+ - **Near-duplicate docs** — shingle overlap + duplicate SSOT summaries (warn / `--strict`)
94
+ - **SSOT summary fit** — heuristic overlap between the one-liner and the body (warn / `--strict`)
92
95
  - **Link audit** — broken refs, skill links, anchors in scanned markdown
93
96
  - **Skill index** — disk matches taxonomy READMEs in detected skill roots
94
- - **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`)
95
98
  - **Coverage gaps** — markdown outside the scan perimeter (warn-only)
96
- - **Doc meta + stale dates** — owner and `last-reviewed` on index and registry-listed files
99
+ - **Doc meta + stale dates** — owner and `last-reviewed` on indexes and SSOT-bearing files
97
100
  - **Prose policy** (optional plugins) — YAML pattern rules; idle with no plugins
98
101
  - **Shell / JSON syntax** — lightweight checks on changed `.sh` and `.json` files
99
102
 
103
+ Agents skim `.skeleton/catalog.md` (generated, gitignored) before opening full papers.
104
+
100
105
  Skeleton doesn't replace your code gates. Keep TypeScript, Python, Nx, pytest, and the rest in the repo that owns them.
101
106
 
102
- ## The `.skeleton/` contract
107
+ ## The contract
108
+
109
+ Config lives in **`skeleton.toml`** at the repo root (preferred). Optional under `.skeleton/`:
103
110
 
104
111
  ```
112
+ skeleton.toml # scan perimeter, deny.paths, docsLint, …
105
113
  .skeleton/
106
- ├── config.yaml # scan perimeter (required)
107
- ├── registry.md # topic canonical file (required)
108
- ├── plugins/ # optional consumer audit plugins (.ts + built .mjs)
109
- └── 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)
110
117
  └── code-review.md
111
118
  ```
112
119
 
113
- 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:
114
123
 
115
124
  ```markdown
116
- **Source of truth for** Backend API conventions.
125
+ <!-- source-of-truth: Backend API conventions -->
117
126
  ```
118
127
 
119
- Register it:
128
+ Then refresh the agent index:
120
129
 
121
130
  ```bash
122
- skeleton register docs/developer/api.md
131
+ skeleton catalog
123
132
  ```
124
133
 
125
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.
@@ -128,8 +137,8 @@ Synced skills stay pristine. Project overrides live in `.skeleton/customize/<slu
128
137
 
129
138
  ```bash
130
139
  skeleton init [--skills] [--force-hooks]
131
- skeleton register <path> [--topic=…]
132
- 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]
133
142
  skeleton build-plugin [path] [--check]
134
143
  skeleton validate changed [--staged | --base <ref>] [paths…]
135
144
  skeleton references sync|check