diff --git a/.changeset/action-self-projected-buttons.md b/.changeset/action-self-projected-buttons.md deleted file mode 100644 index 3a7804cc..00000000 --- a/.changeset/action-self-projected-buttons.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": minor -"@skill-map/spec": minor ---- - -Inspector action buttons are now self-projected by the dispatching Action instead of a sibling projector Analyzer: an Action may declare a `ui` button plus an optional deterministic scan-time `project(ctx)` (read-only graph) that emits its own `inspector.action.button` per node. The pure projector analyzers `core/supersede` and `core/tags` were removed and `core/annotation-stale` trimmed to its badge + issue (the Bump button moved to `core/node-bump`). - -## User-facing - -No change to how the inspector behaves: the Supersede, Edit tags, and Bump buttons look and work exactly as before, they are just now produced by the action they trigger rather than a separate analyzer. diff --git a/.changeset/backtick-path-bare-filenames.md b/.changeset/backtick-path-bare-filenames.md deleted file mode 100644 index 70a6075d..00000000 --- a/.changeset/backtick-path-bare-filenames.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": patch -"@skill-map/spec": patch ---- - -`core/backtick-path` now matches bare `.md` filenames inside code spans, not only slashed paths: a backticked `` `algo4.md` `` becomes a `points` edge the way the runtime follows it. The `/` separator is now optional, with the first path segment anchored to a word char so globs and placeholders (`{PROJECT}-x.md`, `*-S.md`) stay rejected. Slashless names like `SKILL.md` match too; a self-reference becomes a self-loop, other misses flag via `core/reference-broken`. - -## User-facing - -Backticked filenames now become links even without a folder: writing `` `algo4.md` `` inside code formatting (not just `` `docs/algo4.md` ``) draws an arrow to that file in the graph, matching how an agent actually follows the reference. diff --git a/.changeset/broken-link-confidence.md b/.changeset/broken-link-confidence.md deleted file mode 100644 index a6bc8515..00000000 --- a/.changeset/broken-link-confidence.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": patch -"@skill-map/spec": patch ---- - -Broken graph edges now render fainter than resolved ones. `core/markdown-link` emits the spec's `0.95` (unambiguous syntax) instead of a hardcoded `1.0`, and the post-walk confidence-lift transform adds a `BROKEN_TARGET_CONFIDENCE = 0.5` downgrade for links that resolve to nothing (no path and no name-index match, like `core/reference-broken`). A dangling `[x](missing.md)`, `@missing.md`, or `/no-such-command` now sits at `0.5`, below a resolved `1.0` and above a reserved `0.1`. - -## User-facing - -Broken links in the graph now appear fainter than working ones: a markdown link, `@file`, or `/command` pointing at something that does not exist renders at low opacity, so dangling references stand out at a glance instead of looking like solid edges. diff --git a/.changeset/deprecated-disabled-by-default.md b/.changeset/deprecated-disabled-by-default.md deleted file mode 100644 index 80067121..00000000 --- a/.changeset/deprecated-disabled-by-default.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": minor -"@skill-map/spec": minor ---- - -Extensions declaring `stability: 'deprecated'` now also ship DISABLED by default, joining `experimental` in the ships-disabled set: a deprecated extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override), the same opt-in `experimental` uses. `beta` / `stable` keep running. No built-in is deprecated today, so the default scan is unchanged until one is marked. - -## User-facing - -Deprecated plugin extensions now start **disabled**, like experimental ones: they show an off toggle (with the deprecated badge) in Settings and `sm plugins list`, and don't run until you enable them. Enabling one keeps it working while you migrate off it. diff --git a/.changeset/experimental-disabled-by-default.md b/.changeset/experimental-disabled-by-default.md deleted file mode 100644 index 8fe3b2e2..00000000 --- a/.changeset/experimental-disabled-by-default.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": minor -"@skill-map/spec": minor ---- - -Extensions declaring `stability: 'experimental'` now ship DISABLED by default: their installed default flips from enabled to disabled, so the extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override). `beta` / `deprecated` / `stable` keep running. Built-ins flipped to experimental: `core/mcp-tools` and the Supersede declarer (`core/supersede` button + `core/node-supersede` action). - -## User-facing - -Experimental plugin extensions now start **disabled**: an off toggle (with the experimental badge) in Settings and `sm plugins list`, not running until you enable them. The MCP tools extractor and the Supersede button are experimental, so both are off until you turn them on. diff --git a/.changeset/extractor-description-examples.md b/.changeset/extractor-description-examples.md deleted file mode 100644 index 7ece45b6..00000000 --- a/.changeset/extractor-description-examples.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@skill-map/cli": patch ---- - -Every built-in extractor description now ends with a concrete usage example. The `markdown-link`, `external-url-counter`, `annotations`, `mcp-tools`, `backtick-path`, `tools-counter`, and `slash-command` manifests keep their existing leading sentence and append a short `Example: ...` clause, so the text shown in `sm plugins list`, `sm plugins show`, and the Settings plugins panel illustrates what each extractor matches. - -## User-facing - -Extractor descriptions in `sm plugins list` and Settings now include a usage example. diff --git a/.changeset/files-modified-column.md b/.changeset/files-modified-column.md deleted file mode 100644 index 850814dc..00000000 --- a/.changeset/files-modified-column.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/cli": minor -"@skill-map/spec": minor ---- - -The scan now captures each file's modification time (`mtime`) from the walker's existing `lstat`, persisted on `scan_nodes.modified_at_ms` and surfaced on the node wire shape as `modifiedAtMs` (nullable for virtual / derived nodes). The files table gains a sortable "Modified" column at the end, rendered as an ISO short date with a full date+time tooltip; sorting orders by the raw timestamp and sinks fileless nodes to the bottom. The value never participates in `bodyHash` / `frontmatterHash`. - -## User-facing - -The files table has a new **Modified** column showing when each file was last edited (for example `2026-06-13`). Click the header to sort newest or oldest first, and hover a cell to see the exact date and time. diff --git a/.changeset/node-superseded-experimental.md b/.changeset/node-superseded-experimental.md deleted file mode 100644 index e31daaaa..00000000 --- a/.changeset/node-superseded-experimental.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@skill-map/cli": minor ---- - -The `core/node-superseded` analyzer (surfaces a node's `supersededBy` declaration as an `info` finding) is now `experimental`, joining the rest of the supersession family (`core/supersede`, `core/node-supersede`) which already shipped experimental. As an experimental extension it ships disabled by default, so the "node is superseded by X" finding no longer appears until the operator enables the family with `sm plugins enable core/node-superseded` (or the Settings toggle). - -## User-facing - -The supersession info finding ("this node is superseded by X") no longer shows by default: `core/node-superseded` is now experimental, so the whole supersession family (declare button + this finding) is off until you enable it in Settings or with `sm plugins enable`. diff --git a/.changeset/plugins-list-show-split.md b/.changeset/plugins-list-show-split.md deleted file mode 100644 index d7fe10f8..00000000 --- a/.changeset/plugins-list-show-split.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@skill-map/spec": minor -"@skill-map/cli": minor ---- - -`sm plugins show` is now extension-only: it takes a qualified `/` id and renders one extension's detail. The whole-plugin view (manifest plus extension rows) moves to `sm plugins list `, and the top-level `sm plugins list` index drops the per-extension name sub-lines. A bare `show ` id and a qualified `list /` id are each rejected with a directed redirect to the other verb. - -## User-facing - -**Plugin commands split by altitude.** `sm plugins list ` now shows a whole plugin's extensions (kinds, versions, status); `sm plugins show` is for a single `/` extension. The plain `sm plugins list` stays a clean index, one row per plugin. diff --git a/.changeset/tutorial-daily-loop.md b/.changeset/tutorial-daily-loop.md deleted file mode 100644 index 75092608..00000000 --- a/.changeset/tutorial-daily-loop.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@skill-map/cli": minor ---- - -The `sm tutorial` campaign's second half is now a single "daily loop" part (add, improve, publish) that operates the harness for real instead of by hand: the content-editor, check-links, and publish steps actually run, the maintenance analyzers (broken reference, orphan, reserved name, `.sm` sidecar) surface from real work, and the portfolio it builds ships with a styled, personalized site. MCP is parked out of the menu pending its own iteration. - -## User-facing - -The interactive tutorial's second half is now a single "daily loop": you add a page with your agent, improve it, and publish, running the harness for real. The portfolio it builds ships with a clean, personalized site you can serve and deploy. diff --git a/.changeset/virtual-target-confidence.md b/.changeset/virtual-target-confidence.md deleted file mode 100644 index da4c7cd7..00000000 --- a/.changeset/virtual-target-confidence.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@skill-map/cli": patch -"@skill-map/spec": patch ---- - -The post-walk confidence-lift transform no longer bumps a link to `1.0` when its resolved target is a `virtual: true` node (today only `core/mcp-tools`' `mcp://` nodes, reconstructed from frontmatter, never verified on disk). The edge still resolves (`resolvedTarget` set, navigable) but keeps its extractor emit confidence, so an MCP edge stays `0.85`: an unverified entity is not full certainty, like the reserved-target downgrade. diff --git a/CHANGELOG.md b/CHANGELOG.md index f38a933d..1114b712 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,38 @@ > Forward-looking plan: [`ROADMAP.md`](./ROADMAP.md).
+0.55.0 · 2026-06-13 + +### CLI Minor +- Inspector action buttons are now self-projected by the dispatching Action instead of a sibling projector Analyzer: an Action may declare a `ui` button plus an optional deterministic scan-time `project(ctx)` (read-only graph) that emits its own `inspector.action.button` per node. The pure projector analyzers `core/supersede` and `core/tags` were removed and `core/annotation-stale` trimmed to its badge + issue (the Bump button moved to `core/node-bump`). +- Extensions declaring `stability: 'deprecated'` now also ship DISABLED by default, joining `experimental` in the ships-disabled set: a deprecated extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override), the same opt-in `experimental` uses. `beta` / `stable` keep running. No built-in is deprecated today, so the default scan is unchanged until one is marked. +- Extensions declaring `stability: 'experimental'` now ship DISABLED by default: their installed default flips from enabled to disabled, so the extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override). `beta` / `deprecated` / `stable` keep running. Built-ins flipped to experimental: `core/mcp-tools` and the Supersede declarer (`core/supersede` button + `core/node-supersede` action). +- The scan now captures each file's modification time (`mtime`) from the walker's existing `lstat`, persisted on `scan_nodes.modified_at_ms` and surfaced on the node wire shape as `modifiedAtMs` (nullable for virtual / derived nodes). The files table gains a sortable "Modified" column at the end, rendered as an ISO short date with a full date+time tooltip; sorting orders by the raw timestamp and sinks fileless nodes to the bottom. The value never participates in `bodyHash` / `frontmatterHash`. +- The `core/node-superseded` analyzer (surfaces a node's `supersededBy` declaration as an `info` finding) is now `experimental`, joining the rest of the supersession family (`core/supersede`, `core/node-supersede`) which already shipped experimental. As an experimental extension it ships disabled by default, so the "node is superseded by X" finding no longer appears until the operator enables the family with `sm plugins enable core/node-superseded` (or the Settings toggle). +- `sm plugins show` is now extension-only: it takes a qualified `/` id and renders one extension's detail. The whole-plugin view (manifest plus extension rows) moves to `sm plugins list `, and the top-level `sm plugins list` index drops the per-extension name sub-lines. A bare `show ` id and a qualified `list /` id are each rejected with a directed redirect to the other verb. +- The `sm tutorial` campaign's second half is now a single "daily loop" part (add, improve, publish) that operates the harness for real instead of by hand: the content-editor, check-links, and publish steps actually run, the maintenance analyzers (broken reference, orphan, reserved name, `.sm` sidecar) surface from real work, and the portfolio it builds ships with a styled, personalized site. MCP is parked out of the menu pending its own iteration. + +### CLI Patch +- `core/backtick-path` now matches bare `.md` filenames inside code spans, not only slashed paths: a backticked `` `algo4.md` `` becomes a `points` edge the way the runtime follows it. The `/` separator is now optional, with the first path segment anchored to a word char so globs and placeholders (`{PROJECT}-x.md`, `*-S.md`) stay rejected. Slashless names like `SKILL.md` match too; a self-reference becomes a self-loop, other misses flag via `core/reference-broken`. +- Broken graph edges now render fainter than resolved ones. `core/markdown-link` emits the spec's `0.95` (unambiguous syntax) instead of a hardcoded `1.0`, and the post-walk confidence-lift transform adds a `BROKEN_TARGET_CONFIDENCE = 0.5` downgrade for links that resolve to nothing (no path and no name-index match, like `core/reference-broken`). A dangling `[x](missing.md)`, `@missing.md`, or `/no-such-command` now sits at `0.5`, below a resolved `1.0` and above a reserved `0.1`. +- Every built-in extractor description now ends with a concrete usage example. The `markdown-link`, `external-url-counter`, `annotations`, `mcp-tools`, `backtick-path`, `tools-counter`, and `slash-command` manifests keep their existing leading sentence and append a short `Example: ...` clause, so the text shown in `sm plugins list`, `sm plugins show`, and the Settings plugins panel illustrates what each extractor matches. +- The post-walk confidence-lift transform no longer bumps a link to `1.0` when its resolved target is a `virtual: true` node (today only `core/mcp-tools`' `mcp://` nodes, reconstructed from frontmatter, never verified on disk). The edge still resolves (`resolvedTarget` set, navigable) but keeps its extractor emit confidence, so an MCP edge stays `0.85`: an unverified entity is not full certainty, like the reserved-target downgrade. + +### Spec Minor (0.49.0) +- Inspector action buttons are now self-projected by the dispatching Action instead of a sibling projector Analyzer: an Action may declare a `ui` button plus an optional deterministic scan-time `project(ctx)` (read-only graph) that emits its own `inspector.action.button` per node. The pure projector analyzers `core/supersede` and `core/tags` were removed and `core/annotation-stale` trimmed to its badge + issue (the Bump button moved to `core/node-bump`). +- Extensions declaring `stability: 'deprecated'` now also ship DISABLED by default, joining `experimental` in the ships-disabled set: a deprecated extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override), the same opt-in `experimental` uses. `beta` / `stable` keep running. No built-in is deprecated today, so the default scan is unchanged until one is marked. +- Extensions declaring `stability: 'experimental'` now ship DISABLED by default: their installed default flips from enabled to disabled, so the extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override). `beta` / `deprecated` / `stable` keep running. Built-ins flipped to experimental: `core/mcp-tools` and the Supersede declarer (`core/supersede` button + `core/node-supersede` action). +- The scan now captures each file's modification time (`mtime`) from the walker's existing `lstat`, persisted on `scan_nodes.modified_at_ms` and surfaced on the node wire shape as `modifiedAtMs` (nullable for virtual / derived nodes). The files table gains a sortable "Modified" column at the end, rendered as an ISO short date with a full date+time tooltip; sorting orders by the raw timestamp and sinks fileless nodes to the bottom. The value never participates in `bodyHash` / `frontmatterHash`. +- `sm plugins show` is now extension-only: it takes a qualified `/` id and renders one extension's detail. The whole-plugin view (manifest plus extension rows) moves to `sm plugins list `, and the top-level `sm plugins list` index drops the per-extension name sub-lines. A bare `show ` id and a qualified `list /` id are each rejected with a directed redirect to the other verb. + +### Spec Patch (0.49.0) +- `core/backtick-path` now matches bare `.md` filenames inside code spans, not only slashed paths: a backticked `` `algo4.md` `` becomes a `points` edge the way the runtime follows it. The `/` separator is now optional, with the first path segment anchored to a word char so globs and placeholders (`{PROJECT}-x.md`, `*-S.md`) stay rejected. Slashless names like `SKILL.md` match too; a self-reference becomes a self-loop, other misses flag via `core/reference-broken`. +- Broken graph edges now render fainter than resolved ones. `core/markdown-link` emits the spec's `0.95` (unambiguous syntax) instead of a hardcoded `1.0`, and the post-walk confidence-lift transform adds a `BROKEN_TARGET_CONFIDENCE = 0.5` downgrade for links that resolve to nothing (no path and no name-index match, like `core/reference-broken`). A dangling `[x](missing.md)`, `@missing.md`, or `/no-such-command` now sits at `0.5`, below a resolved `1.0` and above a reserved `0.1`. +- The post-walk confidence-lift transform no longer bumps a link to `1.0` when its resolved target is a `virtual: true` node (today only `core/mcp-tools`' `mcp://` nodes, reconstructed from frontmatter, never verified on disk). The edge still resolves (`resolvedTarget` set, navigable) but keeps its extractor emit confidence, so an MCP edge stays `0.85`: an unverified entity is not full certainty, like the reserved-target downgrade. + +
+ +
0.54.0 · 2026-06-12 ### CLI Minor diff --git a/spec/CHANGELOG.md b/spec/CHANGELOG.md index 91b5669b..4ffcb25b 100644 --- a/spec/CHANGELOG.md +++ b/spec/CHANGELOG.md @@ -1,5 +1,55 @@ # Spec changelog +## 0.49.0 + +### Minor Changes + +- Inspector action buttons are now self-projected by the dispatching Action instead of a sibling projector Analyzer: an Action may declare a `ui` button plus an optional deterministic scan-time `project(ctx)` (read-only graph) that emits its own `inspector.action.button` per node. The pure projector analyzers `core/supersede` and `core/tags` were removed and `core/annotation-stale` trimmed to its badge + issue (the Bump button moved to `core/node-bump`). + + ## User-facing + + No change to how the inspector behaves: the Supersede, Edit tags, and Bump buttons look and work exactly as before, they are just now produced by the action they trigger rather than a separate analyzer. + +- Extensions declaring `stability: 'deprecated'` now also ship DISABLED by default, joining `experimental` in the ships-disabled set: a deprecated extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override), the same opt-in `experimental` uses. `beta` / `stable` keep running. No built-in is deprecated today, so the default scan is unchanged until one is marked. + + ## User-facing + + Deprecated plugin extensions now start **disabled**, like experimental ones: they show an off toggle (with the deprecated badge) in Settings and `sm plugins list`, and don't run until you enable them. Enabling one keeps it working while you migrate off it. + +- Extensions declaring `stability: 'experimental'` now ship DISABLED by default: their installed default flips from enabled to disabled, so the extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override). `beta` / `deprecated` / `stable` keep running. Built-ins flipped to experimental: `core/mcp-tools` and the Supersede declarer (`core/supersede` button + `core/node-supersede` action). + + ## User-facing + + Experimental plugin extensions now start **disabled**: an off toggle (with the experimental badge) in Settings and `sm plugins list`, not running until you enable them. The MCP tools extractor and the Supersede button are experimental, so both are off until you turn them on. + +- The scan now captures each file's modification time (`mtime`) from the walker's existing `lstat`, persisted on `scan_nodes.modified_at_ms` and surfaced on the node wire shape as `modifiedAtMs` (nullable for virtual / derived nodes). The files table gains a sortable "Modified" column at the end, rendered as an ISO short date with a full date+time tooltip; sorting orders by the raw timestamp and sinks fileless nodes to the bottom. The value never participates in `bodyHash` / `frontmatterHash`. + + ## User-facing + + The files table has a new **Modified** column showing when each file was last edited (for example `2026-06-13`). Click the header to sort newest or oldest first, and hover a cell to see the exact date and time. + +- `sm plugins show` is now extension-only: it takes a qualified `/` id and renders one extension's detail. The whole-plugin view (manifest plus extension rows) moves to `sm plugins list `, and the top-level `sm plugins list` index drops the per-extension name sub-lines. A bare `show ` id and a qualified `list /` id are each rejected with a directed redirect to the other verb. + + ## User-facing + + **Plugin commands split by altitude.** `sm plugins list ` now shows a whole plugin's extensions (kinds, versions, status); `sm plugins show` is for a single `/` extension. The plain `sm plugins list` stays a clean index, one row per plugin. + +### Patch Changes + +- `core/backtick-path` now matches bare `.md` filenames inside code spans, not only slashed paths: a backticked `` `algo4.md` `` becomes a `points` edge the way the runtime follows it. The `/` separator is now optional, with the first path segment anchored to a word char so globs and placeholders (`{PROJECT}-x.md`, `*-S.md`) stay rejected. Slashless names like `SKILL.md` match too; a self-reference becomes a self-loop, other misses flag via `core/reference-broken`. + + ## User-facing + + Backticked filenames now become links even without a folder: writing `` `algo4.md` `` inside code formatting (not just `` `docs/algo4.md` ``) draws an arrow to that file in the graph, matching how an agent actually follows the reference. + +- Broken graph edges now render fainter than resolved ones. `core/markdown-link` emits the spec's `0.95` (unambiguous syntax) instead of a hardcoded `1.0`, and the post-walk confidence-lift transform adds a `BROKEN_TARGET_CONFIDENCE = 0.5` downgrade for links that resolve to nothing (no path and no name-index match, like `core/reference-broken`). A dangling `[x](missing.md)`, `@missing.md`, or `/no-such-command` now sits at `0.5`, below a resolved `1.0` and above a reserved `0.1`. + + ## User-facing + + Broken links in the graph now appear fainter than working ones: a markdown link, `@file`, or `/command` pointing at something that does not exist renders at low opacity, so dangling references stand out at a glance instead of looking like solid edges. + +- The post-walk confidence-lift transform no longer bumps a link to `1.0` when its resolved target is a `virtual: true` node (today only `core/mcp-tools`' `mcp://` nodes, reconstructed from frontmatter, never verified on disk). The edge still resolves (`resolvedTarget` set, navigable) but keeps its extractor emit confidence, so an MCP edge stays `0.85`: an unverified entity is not full certainty, like the reserved-target downgrade. + ## 0.48.0 ### Minor Changes diff --git a/spec/index.json b/spec/index.json index 605faf39..69e822f9 100644 --- a/spec/index.json +++ b/spec/index.json @@ -174,11 +174,11 @@ } ] }, - "specPackageVersion": "0.48.0", + "specPackageVersion": "0.49.0", "integrity": { "algorithm": "sha256", "files": { - "CHANGELOG.md": "e7fc58aaced4c555405dd1e41a860b016cfb4fca7da6dbb29dfa6b39fddcba79", + "CHANGELOG.md": "eca40db149822d5d6871576bdf371064f627d1cdf668f4d630b68bb8774fdbcb", "README.md": "a7505a7b0672c39a8b011e3c5e7d41826306476ee63768249bba4bdb3c03d4d1", "architecture.md": "828fff198d457db9bed5ee610252d5a21c6d3d87d25df48de8cfdae0ce13b88b", "cli-contract.md": "d1825d66bac8ebcb7bd903728f3f8eeb865a87aaf9b996585ce428366c6a3068", diff --git a/spec/package.json b/spec/package.json index 6eb4b538..f7f100ff 100644 --- a/spec/package.json +++ b/spec/package.json @@ -1,6 +1,6 @@ { "name": "@skill-map/spec", - "version": "0.48.0", + "version": "0.49.0", "description": "JSON Schemas, prose contracts, and conformance suite for the skill-map specification.", "license": "MIT", "type": "module", diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md index 64cdb227..2a9cbd7c 100644 --- a/src/CHANGELOG.md +++ b/src/CHANGELOG.md @@ -1,5 +1,73 @@ # skill-map +## 0.55.0 + +### Minor Changes + +- Inspector action buttons are now self-projected by the dispatching Action instead of a sibling projector Analyzer: an Action may declare a `ui` button plus an optional deterministic scan-time `project(ctx)` (read-only graph) that emits its own `inspector.action.button` per node. The pure projector analyzers `core/supersede` and `core/tags` were removed and `core/annotation-stale` trimmed to its badge + issue (the Bump button moved to `core/node-bump`). + + ## User-facing + + No change to how the inspector behaves: the Supersede, Edit tags, and Bump buttons look and work exactly as before, they are just now produced by the action they trigger rather than a separate analyzer. + +- Extensions declaring `stability: 'deprecated'` now also ship DISABLED by default, joining `experimental` in the ships-disabled set: a deprecated extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override), the same opt-in `experimental` uses. `beta` / `stable` keep running. No built-in is deprecated today, so the default scan is unchanged until one is marked. + + ## User-facing + + Deprecated plugin extensions now start **disabled**, like experimental ones: they show an off toggle (with the deprecated badge) in Settings and `sm plugins list`, and don't run until you enable them. Enabling one keeps it working while you migrate off it. + +- Extensions declaring `stability: 'experimental'` now ship DISABLED by default: their installed default flips from enabled to disabled, so the extension does not run or register until the operator opts in (`sm plugins enable /`, the Settings toggle, or a `settings.json` / `config_plugins` override). `beta` / `deprecated` / `stable` keep running. Built-ins flipped to experimental: `core/mcp-tools` and the Supersede declarer (`core/supersede` button + `core/node-supersede` action). + + ## User-facing + + Experimental plugin extensions now start **disabled**: an off toggle (with the experimental badge) in Settings and `sm plugins list`, not running until you enable them. The MCP tools extractor and the Supersede button are experimental, so both are off until you turn them on. + +- The scan now captures each file's modification time (`mtime`) from the walker's existing `lstat`, persisted on `scan_nodes.modified_at_ms` and surfaced on the node wire shape as `modifiedAtMs` (nullable for virtual / derived nodes). The files table gains a sortable "Modified" column at the end, rendered as an ISO short date with a full date+time tooltip; sorting orders by the raw timestamp and sinks fileless nodes to the bottom. The value never participates in `bodyHash` / `frontmatterHash`. + + ## User-facing + + The files table has a new **Modified** column showing when each file was last edited (for example `2026-06-13`). Click the header to sort newest or oldest first, and hover a cell to see the exact date and time. + +- The `core/node-superseded` analyzer (surfaces a node's `supersededBy` declaration as an `info` finding) is now `experimental`, joining the rest of the supersession family (`core/supersede`, `core/node-supersede`) which already shipped experimental. As an experimental extension it ships disabled by default, so the "node is superseded by X" finding no longer appears until the operator enables the family with `sm plugins enable core/node-superseded` (or the Settings toggle). + + ## User-facing + + The supersession info finding ("this node is superseded by X") no longer shows by default: `core/node-superseded` is now experimental, so the whole supersession family (declare button + this finding) is off until you enable it in Settings or with `sm plugins enable`. + +- `sm plugins show` is now extension-only: it takes a qualified `/` id and renders one extension's detail. The whole-plugin view (manifest plus extension rows) moves to `sm plugins list `, and the top-level `sm plugins list` index drops the per-extension name sub-lines. A bare `show ` id and a qualified `list /` id are each rejected with a directed redirect to the other verb. + + ## User-facing + + **Plugin commands split by altitude.** `sm plugins list ` now shows a whole plugin's extensions (kinds, versions, status); `sm plugins show` is for a single `/` extension. The plain `sm plugins list` stays a clean index, one row per plugin. + +- The `sm tutorial` campaign's second half is now a single "daily loop" part (add, improve, publish) that operates the harness for real instead of by hand: the content-editor, check-links, and publish steps actually run, the maintenance analyzers (broken reference, orphan, reserved name, `.sm` sidecar) surface from real work, and the portfolio it builds ships with a styled, personalized site. MCP is parked out of the menu pending its own iteration. + + ## User-facing + + The interactive tutorial's second half is now a single "daily loop": you add a page with your agent, improve it, and publish, running the harness for real. The portfolio it builds ships with a clean, personalized site you can serve and deploy. + +### Patch Changes + +- `core/backtick-path` now matches bare `.md` filenames inside code spans, not only slashed paths: a backticked `` `algo4.md` `` becomes a `points` edge the way the runtime follows it. The `/` separator is now optional, with the first path segment anchored to a word char so globs and placeholders (`{PROJECT}-x.md`, `*-S.md`) stay rejected. Slashless names like `SKILL.md` match too; a self-reference becomes a self-loop, other misses flag via `core/reference-broken`. + + ## User-facing + + Backticked filenames now become links even without a folder: writing `` `algo4.md` `` inside code formatting (not just `` `docs/algo4.md` ``) draws an arrow to that file in the graph, matching how an agent actually follows the reference. + +- Broken graph edges now render fainter than resolved ones. `core/markdown-link` emits the spec's `0.95` (unambiguous syntax) instead of a hardcoded `1.0`, and the post-walk confidence-lift transform adds a `BROKEN_TARGET_CONFIDENCE = 0.5` downgrade for links that resolve to nothing (no path and no name-index match, like `core/reference-broken`). A dangling `[x](missing.md)`, `@missing.md`, or `/no-such-command` now sits at `0.5`, below a resolved `1.0` and above a reserved `0.1`. + + ## User-facing + + Broken links in the graph now appear fainter than working ones: a markdown link, `@file`, or `/command` pointing at something that does not exist renders at low opacity, so dangling references stand out at a glance instead of looking like solid edges. + +- Every built-in extractor description now ends with a concrete usage example. The `markdown-link`, `external-url-counter`, `annotations`, `mcp-tools`, `backtick-path`, `tools-counter`, and `slash-command` manifests keep their existing leading sentence and append a short `Example: ...` clause, so the text shown in `sm plugins list`, `sm plugins show`, and the Settings plugins panel illustrates what each extractor matches. + + ## User-facing + + Extractor descriptions in `sm plugins list` and Settings now include a usage example. + +- The post-walk confidence-lift transform no longer bumps a link to `1.0` when its resolved target is a `virtual: true` node (today only `core/mcp-tools`' `mcp://` nodes, reconstructed from frontmatter, never verified on disk). The edge still resolves (`resolvedTarget` set, navigable) but keeps its extractor emit confidence, so an MCP edge stays `0.85`: an unverified entity is not full certainty, like the reserved-target downgrade. + ## 0.54.0 ### Minor Changes diff --git a/src/package.json b/src/package.json index df409f9e..73635bc0 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "@skill-map/cli", - "version": "0.54.0", + "version": "0.55.0", "description": "skill-map reference implementation — kernel + CLI + adapters.", "license": "MIT", "type": "module", diff --git a/ui/src/data/user-changelog.json b/ui/src/data/user-changelog.json index 8867f884..d7fc4bb7 100644 --- a/ui/src/data/user-changelog.json +++ b/ui/src/data/user-changelog.json @@ -1,6 +1,80 @@ { "schemaVersion": 1, "entries": [ + { + "version": "0.55.0", + "date": "2026-06-13", + "kind": "user-facing", + "highlights": [ + { + "body": "No change to how the inspector behaves: the Supersede, Edit tags, and Bump buttons look and work exactly as before, they are just now produced by the action they trigger rather than a separate analyzer.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "Backticked filenames now become links even without a folder: writing `` `algo4.md` `` inside code formatting (not just `` `docs/algo4.md` ``) draws an arrow to that file in the graph, matching how an agent actually follows the reference.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "Broken links in the graph now appear fainter than working ones: a markdown link, `@file`, or `/command` pointing at something that does not exist renders at low opacity, so dangling references stand out at a glance instead of looking like solid edges.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "Deprecated plugin extensions now start **disabled**, like experimental ones: they show an off toggle (with the deprecated badge) in Settings and `sm plugins list`, and don't run until you enable them. Enabling one keeps it working while you migrate off it.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "Experimental plugin extensions now start **disabled**: an off toggle (with the experimental badge) in Settings and `sm plugins list`, not running until you enable them. The MCP tools extractor and the Supersede button are experimental, so both are off until you turn them on.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "Extractor descriptions in `sm plugins list` and Settings now include a usage example.", + "packages": [ + "@skill-map/cli" + ] + }, + { + "body": "The files table has a new **Modified** column showing when each file was last edited (for example `2026-06-13`). Click the header to sort newest or oldest first, and hover a cell to see the exact date and time.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "The supersession info finding (\"this node is superseded by X\") no longer shows by default: `core/node-superseded` is now experimental, so the whole supersession family (declare button + this finding) is off until you enable it in Settings or with `sm plugins enable`.", + "packages": [ + "@skill-map/cli" + ] + }, + { + "body": "**Plugin commands split by altitude.** `sm plugins list ` now shows a whole plugin's extensions (kinds, versions, status); `sm plugins show` is for a single `/` extension. The plain `sm plugins list` stays a clean index, one row per plugin.", + "packages": [ + "@skill-map/cli", + "@skill-map/spec" + ] + }, + { + "body": "The interactive tutorial's second half is now a single \"daily loop\": you add a page with your agent, improve it, and publish, running the harness for real. The portfolio it builds ships with a clean, personalized site you can serve and deploy.", + "packages": [ + "@skill-map/cli" + ] + } + ] + }, { "version": "0.54.0", "date": "2026-06-12",