@skill-map/spec 0.52.0 → 0.54.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/CHANGELOG.md +32 -0
- package/README.md +12 -10
- package/architecture.md +154 -150
- package/cli-contract.md +138 -141
- package/conformance/README.md +9 -9
- package/conformance/cases/sidecar-end-to-end.json +3 -5
- package/conformance/coverage.md +5 -5
- package/db-schema.md +72 -72
- package/index.json +20 -19
- package/interfaces/security-scanner.md +25 -25
- package/job-events.md +43 -43
- package/job-lifecycle.md +32 -36
- package/package.json +2 -1
- package/plugin-author-guide.md +97 -125
- package/plugin-kv-api.md +22 -23
- package/plugin-quickstart.md +96 -0
- package/prompt-preamble.md +6 -6
- package/schemas/extensions/action.schema.json +6 -0
- package/schemas/project-config.schema.json +4 -0
- package/telemetry.md +120 -136
- package/versioning.md +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Spec changelog
|
|
2
2
|
|
|
3
|
+
## 0.54.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- New committed project setting `allowSidecarWriters` (default `true`) lets shared projects forbid every extension that writes `.sm` annotation sidecars. Actions declare the capability via `writes: ['sidecar']` on their manifest; when the policy is `false` the scan composer drops those actions (buttons never render) and the sidecar store refuses the write (BFF 403 `sidecar-writers-forbidden`), a hard gate that wins over the per-machine `allowEditSmFiles` consent.
|
|
8
|
+
|
|
9
|
+
## User-facing
|
|
10
|
+
|
|
11
|
+
Shared projects can now turn off sidecar writers: a new Project setting stops actions from creating or editing the `.sm` files next to your notes. It is saved in the committed settings.json so it applies to the whole team and cannot be overridden locally.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- The inspector tag row (`<sm-node-tags>`) is now an inline editor: `core/node-set-tags` no longer self-projects an `inspector.action.button`; a pencil opens an add / remove editor (shown even with no tags) that offers the tags already present in the graph as click-to-add chips, derived live from the loaded scan; typing a brand-new tag still works. The author guide's self-projection example switched from Edit tags to Set stability.
|
|
16
|
+
|
|
17
|
+
## User-facing
|
|
18
|
+
|
|
19
|
+
Edit a node's tags right where they are shown: click the pencil in the inspector's tag row to add or remove them inline, with one-click chips for tags already used in your graph (you can still type new ones). The separate Edit tags button is gone.
|
|
20
|
+
|
|
21
|
+
- Add a standalone plugin quickstart doc (a short scaffold then fill then run path with the plugin-lifecycle diagram and links into the full author guide), indexed in the spec README and published in the package. The now-redundant Quick start section was removed from the author guide and its unique co-located-files note (text.ts, the colocated test) folded into the Manifest section as a "Files by convention" paragraph.
|
|
22
|
+
|
|
23
|
+
- Editorial pass tightening the spec prose docs for concision (lossless, no normative change: no schema, field, enum, exit code, or MUST/SHOULD touched, and the verbatim prompt preamble still matches the conformance fixture), plus a new non-normative "Plugin lifecycle at a glance" overview atop the plugin author guide with an ASCII diagram of the deterministic flow (Provider, Extractor, Analyzer, Action, Formatter) and Hook off to the side, each with a one-line purpose and short example.
|
|
24
|
+
|
|
25
|
+
## 0.53.0
|
|
26
|
+
|
|
27
|
+
### Minor Changes
|
|
28
|
+
|
|
29
|
+
- Ship the `core/node-bump` action and the `core/annotation-stale` analyzer as `experimental`, so the sidecar bump/drift surface is disabled by default (Decision #128). Gated as a unit: with the action disabled no Bump button projects, and with the drift analyzer disabled no stale finding fires. The `sidecar-end-to-end` conformance case drops its `annotation-stale` assertion accordingly (a default scan now surfaces only `annotation-orphan`; the node still carries the derived `sidecar.status`).
|
|
30
|
+
|
|
31
|
+
## User-facing
|
|
32
|
+
|
|
33
|
+
The Bump button and the sidecar drift ("stale") finding are off by default now. Staleness still shows on the node's status; re-enable with `sm plugins enable core/node-bump core/annotation-stale` or the Settings toggles.
|
|
34
|
+
|
|
3
35
|
## 0.52.0
|
|
4
36
|
|
|
5
37
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The **skill-map specification** defines a vendor-neutral standard for mapping, inspecting, and managing collections of interrelated Markdown files, skills, agents, commands, hooks, and notes that compose AI-agent ecosystems (Claude Code, Codex, Antigravity, docs sites, and any future platform).
|
|
4
4
|
|
|
5
|
-
This document is the **source of truth**. The reference implementation under `../src/` conforms to
|
|
5
|
+
This document is the **source of truth**. The reference implementation under `../src/` conforms to it. Third parties can build alternative implementations (any language, any UI, any CLI) using only `spec/`, without reading the reference source.
|
|
6
6
|
|
|
7
7
|
## What this spec defines
|
|
8
8
|
|
|
@@ -24,11 +24,11 @@ This document is the **source of truth**. The reference implementation under `..
|
|
|
24
24
|
- Logging format, telemetry, or distribution channels.
|
|
25
25
|
- Plugin marketplace mechanics.
|
|
26
26
|
|
|
27
|
-
These are implementation decisions. The reference impl picks them (see [`../AGENTS.md`](../AGENTS.md) and [`../ROADMAP.md`](../ROADMAP.md));
|
|
27
|
+
These are implementation decisions. The reference impl picks them (see [`../AGENTS.md`](../AGENTS.md) and [`../ROADMAP.md`](../ROADMAP.md)); others may pick differently and still conform.
|
|
28
28
|
|
|
29
29
|
## Properties
|
|
30
30
|
|
|
31
|
-
- **Machine-readable**: all domain shapes are JSON Schemas. Validate from any language
|
|
31
|
+
- **Machine-readable**: all domain shapes are JSON Schemas. Validate from any language with a JSON Schema validator.
|
|
32
32
|
- **Human-readable**: prose documents for each subsystem, with examples.
|
|
33
33
|
- **Independently versioned**: spec `v1.0.0` can be implemented by CLI `v0.3.2`. See [`versioning.md`](./versioning.md).
|
|
34
34
|
- **Platform-neutral**: no platform is privileged. Each is expressed as an adapter extension.
|
|
@@ -36,10 +36,10 @@ These are implementation decisions. The reference impl picks them (see [`../AGEN
|
|
|
36
36
|
|
|
37
37
|
## Naming conventions
|
|
38
38
|
|
|
39
|
-
Two analyzers govern every identifier in the spec.
|
|
39
|
+
Two analyzers govern every identifier in the spec. Both are **normative**.
|
|
40
40
|
|
|
41
|
-
- **Filesystem artefacts use kebab-case.** Every file and directory in `spec/` (and in any conforming implementation), `scan-result.schema.json`, `job-lifecycle.md`, `report-base.schema.json`, `auto-rename-medium` (as an `issue.analyzerId` value), `direct-override` (as a `safety.injectionType` enum value), and so on, is kebab-case lowercase. Enum values and issue analyzer ids follow the same convention so they
|
|
42
|
-
- **JSON content uses camelCase.** Every key inside a JSON Schema, frontmatter block, config file, plugin manifest, action manifest, job record, report, event payload, or API response is camelCase: `whatItDoes`, `injectionDetected`, `expectedTools`, `sourceVersion`, `docsUrl`, `examplesUrl`, `ttlSeconds`, `runId`, `jobId`. This matches the JS/TS ecosystem the reference impl ships in and the Kysely `CamelCasePlugin` that bridges to the `snake_case` SQL layer, but the analyzer is spec-level
|
|
41
|
+
- **Filesystem artefacts use kebab-case.** Every file and directory in `spec/` (and in any conforming implementation), `scan-result.schema.json`, `job-lifecycle.md`, `report-base.schema.json`, `auto-rename-medium` (as an `issue.analyzerId` value), `direct-override` (as a `safety.injectionType` enum value), and so on, is kebab-case lowercase. Enum values and issue analyzer ids follow the same convention so they echo into URLs, filenames, and log keys without escaping.
|
|
42
|
+
- **JSON content uses camelCase.** Every key inside a JSON Schema, frontmatter block, config file, plugin manifest, action manifest, job record, report, event payload, or API response is camelCase: `whatItDoes`, `injectionDetected`, `expectedTools`, `sourceVersion`, `docsUrl`, `examplesUrl`, `ttlSeconds`, `runId`, `jobId`. This matches the JS/TS ecosystem the reference impl ships in and the Kysely `CamelCasePlugin` that bridges to the `snake_case` SQL layer, but the analyzer is spec-level: an alternative implementation in any language still exposes camelCase JSON keys.
|
|
43
43
|
|
|
44
44
|
The SQL persistence layer is the sole exception: tables, columns, and migration filenames use `snake_case` (see `db-schema.md`). That boundary is crossed only inside a storage adapter; nothing that leaves the kernel should ever be `snake_case`.
|
|
45
45
|
|
|
@@ -61,6 +61,8 @@ spec/ ← published as @skill-map/spec
|
|
|
61
61
|
├── [plugin-kv-api.md](./plugin-kv-api.md) ← ctx.store contract for storage mode A
|
|
62
62
|
├── [job-lifecycle.md](./job-lifecycle.md) ← queued → running → completed | failed
|
|
63
63
|
├── [telemetry.md](./telemetry.md) ← opt-in error reporting (default OFF)
|
|
64
|
+
├── [plugin-quickstart.md](./plugin-quickstart.md) ← 3-step path to a working plugin
|
|
65
|
+
├── [plugin-author-guide.md](./plugin-author-guide.md) ← full plugin author guide (descriptive)
|
|
64
66
|
│
|
|
65
67
|
├── schemas/ ← JSON Schemas, draft 2020-12, camelCase keys (authoritative list + sha256 in index.json)
|
|
66
68
|
│ ├── node.schema.json ┐
|
|
@@ -114,7 +116,7 @@ spec/ ← published as @skill-map/spec
|
|
|
114
116
|
|
|
115
117
|
The reference implementation ([`../src/`](../src/README.md)) is one conforming consumer of this spec. It ships the CLI binary `sm`, a built-in SQLite storage adapter, and a set of default extensions.
|
|
116
118
|
|
|
117
|
-
The reference impl has no privileged access
|
|
119
|
+
The reference impl has no privileged access. Breaking changes to the spec must follow [`versioning.md`](./versioning.md) regardless of reference-impl convenience.
|
|
118
120
|
|
|
119
121
|
When spec and reference impl disagree, the spec wins. File an issue; one of them is wrong.
|
|
120
122
|
|
|
@@ -140,11 +142,11 @@ console.log(specIndex.integrity.algorithm); // → "sha256"
|
|
|
140
142
|
console.log(nodeSchema.$id); // → "https://skill-map.ai/spec/v0/node.schema.json"
|
|
141
143
|
```
|
|
142
144
|
|
|
143
|
-
Every JSON Schema is exported individually via `@skill-map/spec/schemas/*.json`. Prose documents ship in the tarball
|
|
145
|
+
Every JSON Schema is exported individually via `@skill-map/spec/schemas/*.json`. Prose documents ship in the tarball but are not `exports`-surfaced.
|
|
144
146
|
|
|
145
147
|
### Verify integrity
|
|
146
148
|
|
|
147
|
-
The package ships `index.json` with a sha256 per file. To verify a local
|
|
149
|
+
The package ships `index.json` with a sha256 per file. To verify a local install matches what was published:
|
|
148
150
|
|
|
149
151
|
```js
|
|
150
152
|
import { readFileSync } from 'node:fs';
|
|
@@ -158,7 +160,7 @@ console.log(actual === index.integrity.files[file] ? 'ok' : 'drift');
|
|
|
158
160
|
|
|
159
161
|
### JSON Schema Store
|
|
160
162
|
|
|
161
|
-
The schemas
|
|
163
|
+
The schemas register on JSON Schema Store once the canonical URLs under `skill-map.ai/spec/v0/` are stable (Step 14).
|
|
162
164
|
|
|
163
165
|
## License
|
|
164
166
|
|