@supersuit/superskill 0.2.0 → 0.2.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/CHANGELOG.md +9 -0
- package/SPEC.md +1 -1
- package/package.json +1 -1
- package/src/frontmatter.mjs +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1 (2026-09-28)
|
|
4
|
+
|
|
5
|
+
- An unquoted value that is only a comment now reads as empty, which is what YAML means. Before
|
|
6
|
+
this, `source: # TODO` came back as the string "# TODO" and a list item written as `- # none
|
|
7
|
+
yet` came back as "# none yet", so a downstream linter counted a comment placeholder as a
|
|
8
|
+
filled-in field and passed specs it should have failed. A comment-only value followed by a
|
|
9
|
+
more-indented block still opens that nested map or list, exactly as it did with no comment.
|
|
10
|
+
Quoted values are untouched: `key: "# literal"` still reads as "# literal".
|
|
11
|
+
|
|
3
12
|
## 0.2.0 (2026-09-28)
|
|
4
13
|
|
|
5
14
|
- The frontmatter reader reads nesting: maps inside maps, lists of maps, lists inside maps, and
|
package/SPEC.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The superskill standard
|
|
2
2
|
|
|
3
|
-
**Version 0.2.
|
|
3
|
+
**Version 0.2.1** (2026-09-28). The reference checker is `@supersuit/superskill`; where this
|
|
4
4
|
document and the checker disagree, the checker has a bug.
|
|
5
5
|
|
|
6
6
|
A **superskill** runs on frontier intelligence, is checked against examples a person approved,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supersuit/superskill",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Score any agent skill folder as skill, tested, or superskill. An open standard and a zero-dependency CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": { "superskill": "bin/superskill.mjs" },
|
package/src/frontmatter.mjs
CHANGED
|
@@ -27,6 +27,10 @@ const indentOf = (l) => l.length - l.trimStart().length;
|
|
|
27
27
|
// at any depth, read by indentation. Until then the reader stopped at one level and IGNORED
|
|
28
28
|
// anything deeper, so a list of maps came back as nothing and no error said so. Values still
|
|
29
29
|
// stay strings. A stray indented line at the top level is still tolerated, as before.
|
|
30
|
+
// 0.2.1: an unquoted value or list item that is only a comment (`key: # TODO`, `- # none yet`)
|
|
31
|
+
// reads as empty, the same as no value at all, which is what YAML means. A comment-only value
|
|
32
|
+
// that is followed by a more-indented block still opens that nested map or list, exactly as
|
|
33
|
+
// `key:` with nothing after it does.
|
|
30
34
|
export function parseYamlSubset(lines) {
|
|
31
35
|
return parseMap(lines, 0, 0, true)[0];
|
|
32
36
|
}
|
|
@@ -62,7 +66,7 @@ function parseMap(lines, i, indent, top = false) {
|
|
|
62
66
|
const [v, next] = readBlock(lines, i, ind, rest[0]);
|
|
63
67
|
out[key] = v; i = next; continue;
|
|
64
68
|
}
|
|
65
|
-
if (rest === "") {
|
|
69
|
+
if (rest === "" || rest.startsWith("#")) {
|
|
66
70
|
const j = nextContent(lines, i);
|
|
67
71
|
if (j < lines.length) {
|
|
68
72
|
const ci = indentOf(lines[j]);
|
|
@@ -90,7 +94,7 @@ function parseList(lines, i, indent) {
|
|
|
90
94
|
const content = t === "-" ? "" : t.slice(1).trimStart();
|
|
91
95
|
const at = line.indexOf(content, ind + 1); // where the item's content starts on the line
|
|
92
96
|
i++;
|
|
93
|
-
if (content === "") {
|
|
97
|
+
if (content === "" || content.startsWith("#")) {
|
|
94
98
|
const j = nextContent(lines, i);
|
|
95
99
|
if (j < lines.length && indentOf(lines[j]) > ind) {
|
|
96
100
|
const ci = indentOf(lines[j]);
|