@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.
@@ -75,19 +75,32 @@ export type MatchedPolicyEntry = CompiledPolicyEntry & { policyName: string };
75
75
  export interface ScanConfig {
76
76
  include: string[];
77
77
  exclude: string[];
78
- banned: string[];
79
- retiredSkills?: string[];
80
78
  nonPublicSkills?: string[];
81
79
  }
82
80
 
81
+ export interface DenyConfig {
82
+ paths?: string[];
83
+ }
84
+
83
85
  export interface CustomizeConfig {
84
86
  alwaysInclude?: string[];
85
87
  }
86
88
 
89
+ export interface DocsLintConfig {
90
+ nearDuplicateThreshold?: number;
91
+ ssotOverlapMin?: number;
92
+ ssotBetterMatchMargin?: number;
93
+ ssotPhraseCheck?: boolean;
94
+ ignorePairs?: [string, string][];
95
+ ignoreGlobs?: string[];
96
+ }
97
+
87
98
  export interface SkeletonConfig {
88
99
  scan: ScanConfig;
89
100
  daysUntilStale: number;
101
+ deny?: DenyConfig;
90
102
  customize?: CustomizeConfig;
103
+ docsLint?: DocsLintConfig;
91
104
  plugins?: string[];
92
105
  draftPathPrefixes?: string[];
93
106
  }
@@ -107,9 +120,12 @@ export interface AuditContext {
107
120
  config: SkeletonConfig;
108
121
  files: string[];
109
122
  docMetaPaths: string[];
123
+ ssotEntries: Array<{ path: string; summary: string; form: string }>;
124
+ ssotErrors: Array<{ path: string; kind: string; detail: string }>;
125
+ /** @deprecated Prefer ssotEntries */
110
126
  registryPaths: string[];
127
+ /** @deprecated Always false */
111
128
  registryHasTableHeader: boolean;
112
- retiredSkills: Set<string>;
113
129
  skillIndex: SkillIndex;
114
130
  policies: PolicyFile[];
115
131
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csark0812/skeleton",
3
- "version": "1.5.7",
3
+ "version": "1.6.1",
4
4
  "description": "SSOT audit CLI for agent harness repos",
5
5
  "type": "module",
6
6
  "bin": {
@@ -63,20 +63,17 @@
63
63
  "github-slugger": "^2.0.0",
64
64
  "remark": "^15.0.1",
65
65
  "remark-gfm": "^4.0.1",
66
+ "smol-toml": "^1.8.0",
66
67
  "tinyglobby": "^0.2.14",
67
68
  "unist-util-visit": "^5.0.0",
68
69
  "yaml": "^2.8.0"
69
70
  },
70
71
  "devDependencies": {
71
- "@biomejs/biome": "2.5.6",
72
+ "@biomejs/biome": "^2.5.3",
72
73
  "@cursor/sdk": "^1.0.23",
73
74
  "@post-print/agent-test": "^0.2.7",
74
75
  "@types/bun": "^1.3.8",
75
76
  "@types/github-slugger": "^2.0.0",
76
77
  "typescript": "~7.0.2"
77
- },
78
- "overrides": {
79
- "undici": ">=6.23.0",
80
- "fast-uri": ">=3.1.4"
81
78
  }
82
79
  }
@@ -9,7 +9,7 @@
9
9
  "scan": {
10
10
  "type": "object",
11
11
  "additionalProperties": false,
12
- "required": ["include", "exclude", "banned"],
12
+ "required": ["include", "exclude"],
13
13
  "properties": {
14
14
  "include": {
15
15
  "type": "array",
@@ -20,14 +20,6 @@
20
20
  "type": "array",
21
21
  "items": { "type": "string" }
22
22
  },
23
- "banned": {
24
- "type": "array",
25
- "items": { "type": "string" }
26
- },
27
- "retiredSkills": {
28
- "type": "array",
29
- "items": { "type": "string", "pattern": "^[a-z0-9-]+$" }
30
- },
31
23
  "nonPublicSkills": {
32
24
  "type": "array",
33
25
  "items": { "type": "string", "pattern": "^[a-z0-9-]+$" },
@@ -35,10 +27,66 @@
35
27
  }
36
28
  }
37
29
  },
30
+ "deny": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "description": "Path denylist — matching files must not exist in the repo",
34
+ "properties": {
35
+ "paths": {
36
+ "type": "array",
37
+ "items": { "type": "string" },
38
+ "description": "Repo-wide globs that must not exist (often outside scan.include)"
39
+ }
40
+ }
41
+ },
38
42
  "daysUntilStale": {
39
43
  "type": "integer",
40
44
  "minimum": 1
41
45
  },
46
+ "docsLint": {
47
+ "type": "object",
48
+ "additionalProperties": false,
49
+ "description": "Near-duplicate and SSOT-summary lint tunables",
50
+ "properties": {
51
+ "nearDuplicateThreshold": {
52
+ "type": "number",
53
+ "minimum": 0,
54
+ "maximum": 1,
55
+ "description": "Jaccard threshold on word shingles (default 0.72)"
56
+ },
57
+ "ssotOverlapMin": {
58
+ "type": "number",
59
+ "minimum": 0,
60
+ "maximum": 1,
61
+ "description": "Min fraction of SSOT tokens that must appear in H1/lead/body evidence (default 0.35)"
62
+ },
63
+ "ssotBetterMatchMargin": {
64
+ "type": "number",
65
+ "minimum": 0,
66
+ "maximum": 1,
67
+ "description": "Margin by which another file must beat own overlap for better-match warn (default 0.15)"
68
+ },
69
+ "ssotPhraseCheck": {
70
+ "type": "boolean",
71
+ "description": "When overlap fails, mention missing SSOT phrase in the message (default true)"
72
+ },
73
+ "ignorePairs": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "array",
77
+ "items": { "type": "string", "minLength": 1 },
78
+ "minItems": 2,
79
+ "maxItems": 2
80
+ },
81
+ "description": "Repo-relative path pairs skipped by near-dupe / duplicate-SSOT checks"
82
+ },
83
+ "ignoreGlobs": {
84
+ "type": "array",
85
+ "items": { "type": "string", "minLength": 1 },
86
+ "description": "Globs excluded from near-dupe / duplicate-SSOT"
87
+ }
88
+ }
89
+ },
42
90
  "customize": {
43
91
  "type": "object",
44
92
  "additionalProperties": false,
@@ -1,17 +1,18 @@
1
1
  # yaml-language-server: $schema=node_modules/@csark0812/skeleton/schemas/config.schema.json
2
+ # Legacy path — prefer skeleton.toml at repo root.
2
3
 
3
4
  scan:
4
5
  include:
5
6
  - "docs/**"
6
7
  - "README.md"
7
- - ".skeleton/registry.md"
8
8
  - "AGENTS.md"
9
9
  exclude:
10
10
  - "refs/**"
11
- banned: []
12
- retiredSkills: []
13
11
 
14
- daysUntilStale: 180
12
+ deny:
13
+ paths: []
14
+
15
+ daysUntilStale: 365
15
16
 
16
17
  # Optional: basenames under .skeleton/customize/ appended on every skill inject
17
18
  # customize:
@@ -0,0 +1,37 @@
1
+ # https://github.com/csark0812/skeleton — root config (preferred over .skeleton/config.yaml)
2
+
3
+ daysUntilStale = 365
4
+
5
+ [scan]
6
+ include = [
7
+ "docs/**",
8
+ "README.md",
9
+ "AGENTS.md",
10
+ ]
11
+ exclude = [
12
+ "refs/**",
13
+ ]
14
+
15
+ [deny]
16
+ paths = []
17
+
18
+ # Optional: basenames under .skeleton/customize/ appended on every skill inject
19
+ # [customize]
20
+ # alwaysInclude = ["shared-agent-references.md"]
21
+
22
+ # Optional: near-dupe / SSOT-summary tunables
23
+ # [docsLint]
24
+ # nearDuplicateThreshold = 0.72
25
+ # ssotOverlapMin = 0.35
26
+ # ignoreGlobs = ["docs/changelog/**"]
27
+
28
+ # Optional: skill body ownership (skills-lock.json github entries are foreign by default)
29
+ # [skillOwnership]
30
+ # lockfile = "skills-lock.json"
31
+ # ownedSlugs = []
32
+ # foreignSlugs = []
33
+
34
+ # Optional: plugin `.ts` entries relative to .skeleton/ (built sibling `.mjs` required)
35
+ # plugins = []
36
+ # Optional: draft-marker allow-list prefixes (plus `_draft-*.md` filenames)
37
+ # draftPathPrefixes = []
@@ -1,10 +0,0 @@
1
- # Registry
2
-
3
- <!-- doc-meta: owner=eng | last-reviewed=2026-07-11 -->
4
-
5
- **Source of truth for** topic routing in this repo. Edit rows here; edit content in canonical files only.
6
-
7
- ## Documentation
8
-
9
- | Topic | Canonical file |
10
- |-------|------------------|