skillwiki 0.10.62 → 0.10.64
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/dist/{chunk-NG72ZD4C.js → chunk-BPJ5KWIT.js} +1 -1
- package/dist/{chunk-KZZUTQEA.js → chunk-CKDF4DWU.js} +12 -5
- package/dist/{chunk-MHGUYPGE.js → chunk-HJ4ALQG6.js} +45 -2
- package/dist/{chunk-NHRRYAXT.js → chunk-KFEOMMWK.js} +2 -2
- package/dist/{chunk-JMV7YBQN.js → chunk-NPTIYO2S.js} +2 -2
- package/dist/{chunk-6AMXNODT.js → chunk-OMO45AHI.js} +1 -1
- package/dist/{chunk-EK7SNIU3.js → chunk-SNHTWLGF.js} +7 -7
- package/dist/cli.js +10 -10
- package/dist/{index-projection-IICN2TUG.js → index-projection-J5IV7NH3.js} +3 -3
- package/dist/{managed-write-preflight-GJP4RN26.js → managed-write-preflight-2MMVUXD3.js} +4 -4
- package/dist/skillwiki-mcp.js +7 -7
- package/dist/sources-C4LUWNET.js +9 -0
- package/package.json +1 -1
- package/skills/.claude-plugin/plugin.json +1 -1
- package/skills/.codex-plugin/plugin.json +1 -1
- package/skills/package.json +1 -1
- package/skills/proj-work/SKILL.md +16 -0
- package/skills/skills/proj-work/SKILL.md +16 -0
- package/dist/sources-JABI35OW.js +0 -9
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
atomicWriteText,
|
|
4
4
|
buildRootIndexUniverse
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BPJ5KWIT.js";
|
|
6
6
|
import {
|
|
7
7
|
authorizeRawOperation,
|
|
8
8
|
buildSourceReferenceIndex,
|
|
@@ -22,12 +22,13 @@ import {
|
|
|
22
22
|
resolveExistingRegularFileInsideVault,
|
|
23
23
|
stripFencedBlocks,
|
|
24
24
|
writeLogEvent
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-OMO45AHI.js";
|
|
26
26
|
import {
|
|
27
27
|
ExitCode,
|
|
28
28
|
FleetManifestSchema,
|
|
29
29
|
err,
|
|
30
30
|
extractFrontmatter,
|
|
31
|
+
filterGitIgnoredRelativePaths,
|
|
31
32
|
getErrorMessage,
|
|
32
33
|
isVaultSyncKey,
|
|
33
34
|
mapWithConcurrency,
|
|
@@ -40,7 +41,7 @@ import {
|
|
|
40
41
|
scanVault,
|
|
41
42
|
splitFrontmatter,
|
|
42
43
|
vaultIoConcurrency
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-HJ4ALQG6.js";
|
|
44
45
|
|
|
45
46
|
// src/utils/managed-write-preflight.ts
|
|
46
47
|
import { existsSync as existsSync11 } from "fs";
|
|
@@ -874,20 +875,26 @@ function outputForOnlyBucket(input, match, fixed, unresolved, readVault = lintRe
|
|
|
874
875
|
result: ok(input.summary ? summarizeLintOutput(output, input.examplesLimit) : output)
|
|
875
876
|
};
|
|
876
877
|
}
|
|
877
|
-
async function
|
|
878
|
+
async function walkMarkdownFilesInternal(absDir, vaultRoot) {
|
|
878
879
|
const entries = await readdir(absDir, { withFileTypes: true });
|
|
879
880
|
const pages = [];
|
|
880
881
|
for (const entry of entries) {
|
|
881
882
|
const absPath = join3(absDir, entry.name);
|
|
882
883
|
if (entry.isDirectory()) {
|
|
883
884
|
if (entry.name === ".git" || entry.name === "node_modules") continue;
|
|
884
|
-
pages.push(...await
|
|
885
|
+
pages.push(...await walkMarkdownFilesInternal(absPath, vaultRoot));
|
|
885
886
|
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
886
887
|
pages.push({ absPath, relPath: relative(vaultRoot, absPath).split(sep).join("/") });
|
|
887
888
|
}
|
|
888
889
|
}
|
|
889
890
|
return pages;
|
|
890
891
|
}
|
|
892
|
+
async function walkMarkdownFiles(absDir, vaultRoot) {
|
|
893
|
+
const rawPages = await walkMarkdownFilesInternal(absDir, vaultRoot);
|
|
894
|
+
const ignored = filterGitIgnoredRelativePaths(vaultRoot, rawPages.map((p) => p.relPath));
|
|
895
|
+
if (ignored.size === 0) return rawPages;
|
|
896
|
+
return rawPages.filter((p) => !ignored.has(p.relPath));
|
|
897
|
+
}
|
|
891
898
|
|
|
892
899
|
// src/lint/fingerprints.ts
|
|
893
900
|
function lintIssueFingerprint(bucket, item) {
|
|
@@ -176,6 +176,16 @@ var RawSourceSchema = z.object({
|
|
|
176
176
|
ctx.addIssue({ code: z.ZodIssueCode.custom, message: "project and kind are required when work_item is set" });
|
|
177
177
|
}
|
|
178
178
|
});
|
|
179
|
+
var PostReleaseVerificationSchema = z.object({
|
|
180
|
+
posture: z.literal("opt-in"),
|
|
181
|
+
triggers: z.array(z.enum([
|
|
182
|
+
"matching-regression-report",
|
|
183
|
+
"explicit-user-request",
|
|
184
|
+
"relevant-code-or-release-change"
|
|
185
|
+
])).min(1),
|
|
186
|
+
last_proven: isoDate.optional(),
|
|
187
|
+
evidence: z.array(z.string().min(1)).optional()
|
|
188
|
+
}).strict();
|
|
179
189
|
var WorkItemSchema = z.object({
|
|
180
190
|
title: z.string().min(1),
|
|
181
191
|
aliases: z.array(z.string()).optional(),
|
|
@@ -190,11 +200,19 @@ var WorkItemSchema = z.object({
|
|
|
190
200
|
owner: wikilink.optional(),
|
|
191
201
|
parent: wikilink.optional(),
|
|
192
202
|
related: z.array(wikilink).optional(),
|
|
193
|
-
sources: z.array(z.string()).optional()
|
|
203
|
+
sources: z.array(z.string()).optional(),
|
|
204
|
+
post_release_verification: PostReleaseVerificationSchema.optional()
|
|
194
205
|
}).superRefine((v, ctx) => {
|
|
195
206
|
if (v.status === "completed" && !v.completed) {
|
|
196
207
|
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["completed"], message: "required when status is completed" });
|
|
197
208
|
}
|
|
209
|
+
if (v.post_release_verification && v.status !== "completed") {
|
|
210
|
+
ctx.addIssue({
|
|
211
|
+
code: z.ZodIssueCode.custom,
|
|
212
|
+
path: ["post_release_verification"],
|
|
213
|
+
message: "post-release verification requires status completed"
|
|
214
|
+
});
|
|
215
|
+
}
|
|
198
216
|
});
|
|
199
217
|
var CompoundSchema = z.object({
|
|
200
218
|
title: z.string().min(1),
|
|
@@ -649,6 +667,7 @@ function redactSensitiveContent(text, opts = {}) {
|
|
|
649
667
|
import { existsSync, readFileSync } from "fs";
|
|
650
668
|
import { readFile, readdir, stat } from "fs/promises";
|
|
651
669
|
import { join, relative, sep } from "path";
|
|
670
|
+
import { execFileSync } from "child_process";
|
|
652
671
|
var TYPED_DIRS = ["entities", "concepts", "comparisons", "queries", "meta"];
|
|
653
672
|
var SKIP_DIRS = /* @__PURE__ */ new Set([".git", "node_modules"]);
|
|
654
673
|
var DEFAULT_IO_CONCURRENCY = 1;
|
|
@@ -703,6 +722,27 @@ async function mapWithConcurrency(items, limit, mapper) {
|
|
|
703
722
|
await Promise.all(workers);
|
|
704
723
|
return out;
|
|
705
724
|
}
|
|
725
|
+
function filterGitIgnoredRelativePaths(root, relPaths) {
|
|
726
|
+
if (relPaths.length === 0 || !existsSync(join(root, ".git"))) {
|
|
727
|
+
return /* @__PURE__ */ new Set();
|
|
728
|
+
}
|
|
729
|
+
try {
|
|
730
|
+
const input = relPaths.join("\0") + "\0";
|
|
731
|
+
const stdout = execFileSync("git", ["check-ignore", "-z", "--stdin"], {
|
|
732
|
+
cwd: root,
|
|
733
|
+
input,
|
|
734
|
+
encoding: "utf8",
|
|
735
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
736
|
+
});
|
|
737
|
+
const ignored = stdout.split("\0").filter(Boolean);
|
|
738
|
+
return new Set(ignored);
|
|
739
|
+
} catch (error) {
|
|
740
|
+
if (error && typeof error === "object" && error.status === 1) {
|
|
741
|
+
return /* @__PURE__ */ new Set();
|
|
742
|
+
}
|
|
743
|
+
return /* @__PURE__ */ new Set();
|
|
744
|
+
}
|
|
745
|
+
}
|
|
706
746
|
async function scanVault(root) {
|
|
707
747
|
try {
|
|
708
748
|
await stat(join(root, "SCHEMA.md"));
|
|
@@ -710,7 +750,9 @@ async function scanVault(root) {
|
|
|
710
750
|
return err("VAULT_PATH_INVALID", { root, reason: "SCHEMA.md missing" });
|
|
711
751
|
}
|
|
712
752
|
const all = await walk(root);
|
|
713
|
-
const
|
|
753
|
+
const rawRels = all.map((p) => ({ absPath: p, relPath: relative(root, p).split(sep).join("/") }));
|
|
754
|
+
const ignored = filterGitIgnoredRelativePaths(root, rawRels.map((p) => p.relPath));
|
|
755
|
+
const rels = ignored.size > 0 ? rawRels.filter((p) => !ignored.has(p.relPath)) : rawRels;
|
|
714
756
|
return ok({
|
|
715
757
|
root,
|
|
716
758
|
allMarkdown: rels,
|
|
@@ -771,6 +813,7 @@ export {
|
|
|
771
813
|
vaultIoConcurrency,
|
|
772
814
|
resolveReadOnlyVaultRoot,
|
|
773
815
|
mapWithConcurrency,
|
|
816
|
+
filterGitIgnoredRelativePaths,
|
|
774
817
|
scanVault,
|
|
775
818
|
readPage,
|
|
776
819
|
readPageCached
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
ROOT_INDEX_SECTION_ORDER,
|
|
4
4
|
atomicWriteText,
|
|
5
5
|
buildRootIndexUniverse
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BPJ5KWIT.js";
|
|
7
7
|
import {
|
|
8
8
|
err,
|
|
9
9
|
ok
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HJ4ALQG6.js";
|
|
11
11
|
|
|
12
12
|
// src/utils/index-projection.ts
|
|
13
13
|
import { readFile } from "fs/promises";
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
readLogEvents,
|
|
9
9
|
resolveExistingRegularFileInsideVault,
|
|
10
10
|
writeLogEvent
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-OMO45AHI.js";
|
|
12
12
|
import {
|
|
13
13
|
ExitCode,
|
|
14
14
|
RawSourceSchema,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
scanSensitiveContent,
|
|
20
20
|
scanVault,
|
|
21
21
|
splitFrontmatter
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HJ4ALQG6.js";
|
|
23
23
|
|
|
24
24
|
// src/commands/sources.ts
|
|
25
25
|
import { readFile as readFile4 } from "fs/promises";
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
renderRootIndex,
|
|
8
8
|
writeRootIndexProjection
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KFEOMMWK.js";
|
|
10
10
|
import {
|
|
11
11
|
CONFIG_KEYS,
|
|
12
12
|
VAULT_HYGIENE_GENERATED_COMMIT_PATHS,
|
|
@@ -40,11 +40,11 @@ import {
|
|
|
40
40
|
snapshotterAliasForLocalHost,
|
|
41
41
|
toUndirectedWeighted,
|
|
42
42
|
writeDotenv
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-CKDF4DWU.js";
|
|
44
44
|
import {
|
|
45
45
|
atomicWriteText,
|
|
46
46
|
prepareTypedPage
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-BPJ5KWIT.js";
|
|
48
48
|
import {
|
|
49
49
|
applySourceCompileClaim,
|
|
50
50
|
applySourceCompilePublished,
|
|
@@ -57,11 +57,11 @@ import {
|
|
|
57
57
|
planSourceCompileRelease,
|
|
58
58
|
planSourceReview,
|
|
59
59
|
runSourcesPending
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-NPTIYO2S.js";
|
|
61
61
|
import {
|
|
62
62
|
eventPathFor,
|
|
63
63
|
writeLogEvent
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-OMO45AHI.js";
|
|
65
65
|
import {
|
|
66
66
|
CompoundSchema,
|
|
67
67
|
ExitCode,
|
|
@@ -82,7 +82,7 @@ import {
|
|
|
82
82
|
scanVault,
|
|
83
83
|
splitFrontmatter,
|
|
84
84
|
systemdPropertyFor
|
|
85
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-HJ4ALQG6.js";
|
|
86
86
|
|
|
87
87
|
// src/commands/log-append.ts
|
|
88
88
|
import { readFile, stat } from "fs/promises";
|
|
@@ -6096,7 +6096,7 @@ async function runQuery(input) {
|
|
|
6096
6096
|
}
|
|
6097
6097
|
let pendingSources;
|
|
6098
6098
|
if (input.includePending) {
|
|
6099
|
-
const { runSourcesPending: runSourcesPending2 } = await import("./sources-
|
|
6099
|
+
const { runSourcesPending: runSourcesPending2 } = await import("./sources-C4LUWNET.js");
|
|
6100
6100
|
const pending = await runSourcesPending2({
|
|
6101
6101
|
vault: input.vault,
|
|
6102
6102
|
match: input.text,
|
package/dist/cli.js
CHANGED
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
snapshotterHealthChecks,
|
|
51
51
|
upsertIndexEntry,
|
|
52
52
|
vectorIndexStatus
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-SNHTWLGF.js";
|
|
54
54
|
import {
|
|
55
55
|
normalizeDistTag,
|
|
56
56
|
readCache,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
UNMANAGED_START,
|
|
64
64
|
renderRootIndex,
|
|
65
65
|
writeRootIndexProjection
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-KFEOMMWK.js";
|
|
67
67
|
import {
|
|
68
68
|
FLEET_REL_PATH,
|
|
69
69
|
REDACTED_MALFORMED_REFERENCE,
|
|
@@ -151,12 +151,12 @@ import {
|
|
|
151
151
|
supersedeStaleReviewRequiredJournals,
|
|
152
152
|
taxonomyCommentForPage,
|
|
153
153
|
writeDotenv
|
|
154
|
-
} from "./chunk-
|
|
154
|
+
} from "./chunk-CKDF4DWU.js";
|
|
155
155
|
import {
|
|
156
156
|
assertTargetInsideVault,
|
|
157
157
|
atomicWriteText,
|
|
158
158
|
prepareTypedPage
|
|
159
|
-
} from "./chunk-
|
|
159
|
+
} from "./chunk-BPJ5KWIT.js";
|
|
160
160
|
import {
|
|
161
161
|
applySourceDisposition,
|
|
162
162
|
decodeSourceActionApproval,
|
|
@@ -164,7 +164,7 @@ import {
|
|
|
164
164
|
inventorySources,
|
|
165
165
|
planSourceDisposition,
|
|
166
166
|
runSourcesPending
|
|
167
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-NPTIYO2S.js";
|
|
168
168
|
import {
|
|
169
169
|
authorizeRawOperation,
|
|
170
170
|
buildSourceReferenceIndex,
|
|
@@ -181,7 +181,7 @@ import {
|
|
|
181
181
|
resolveExistingRegularFileInsideVault,
|
|
182
182
|
validateLogEvent,
|
|
183
183
|
writeLogEvent
|
|
184
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-OMO45AHI.js";
|
|
185
185
|
import {
|
|
186
186
|
ExitCode,
|
|
187
187
|
MetaSchema,
|
|
@@ -202,7 +202,7 @@ import {
|
|
|
202
202
|
scanVault,
|
|
203
203
|
splitFrontmatter,
|
|
204
204
|
vaultIoConcurrency
|
|
205
|
-
} from "./chunk-
|
|
205
|
+
} from "./chunk-HJ4ALQG6.js";
|
|
206
206
|
|
|
207
207
|
// src/cli.ts
|
|
208
208
|
import { join as join42 } from "path";
|
|
@@ -3767,7 +3767,7 @@ ${fmRewritten}
|
|
|
3767
3767
|
}
|
|
3768
3768
|
let indexUpdated = false;
|
|
3769
3769
|
if (!isRaw) {
|
|
3770
|
-
const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-
|
|
3770
|
+
const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-J5IV7NH3.js");
|
|
3771
3771
|
const before = await readFile7(join19(input.vault, "index.md"), "utf8").catch(() => "");
|
|
3772
3772
|
const fullTarget = relPath.replace(/\.md$/, "");
|
|
3773
3773
|
const bare = fullTarget.split("/").pop() ?? fullTarget;
|
|
@@ -3890,7 +3890,7 @@ async function runRemove(input) {
|
|
|
3890
3890
|
if (relPath.endsWith(".md") && !relPath.startsWith("raw/")) {
|
|
3891
3891
|
const { readFile: readFile22 } = await import("fs/promises");
|
|
3892
3892
|
const { join: pathJoin } = await import("path");
|
|
3893
|
-
const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-
|
|
3893
|
+
const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-J5IV7NH3.js");
|
|
3894
3894
|
const before = await readFile22(pathJoin(input.vault, "index.md"), "utf8").catch(() => "");
|
|
3895
3895
|
const fullTarget = relPath.replace(/\.md$/, "");
|
|
3896
3896
|
const bare = fullTarget.split("/").pop() ?? fullTarget;
|
|
@@ -10410,7 +10410,7 @@ async function emitManagedVaultWrite(vault, command, mutate, opts) {
|
|
|
10410
10410
|
if (dirty) {
|
|
10411
10411
|
return emit(dirty, void 0, { postCommit: false });
|
|
10412
10412
|
}
|
|
10413
|
-
const { runManagedWriteTransaction: runManagedWriteTransaction2 } = await import("./managed-write-preflight-
|
|
10413
|
+
const { runManagedWriteTransaction: runManagedWriteTransaction2 } = await import("./managed-write-preflight-2MMVUXD3.js");
|
|
10414
10414
|
const run = await runManagedWriteTransaction2({
|
|
10415
10415
|
vault,
|
|
10416
10416
|
command,
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
UNMANAGED_START,
|
|
5
5
|
renderRootIndex,
|
|
6
6
|
writeRootIndexProjection
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-KFEOMMWK.js";
|
|
8
|
+
import "./chunk-BPJ5KWIT.js";
|
|
9
|
+
import "./chunk-HJ4ALQG6.js";
|
|
10
10
|
export {
|
|
11
11
|
UNMANAGED_END,
|
|
12
12
|
UNMANAGED_START,
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
runManagedWritePeerGate,
|
|
7
7
|
runManagedWritePreflight,
|
|
8
8
|
runManagedWriteTransaction
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-CKDF4DWU.js";
|
|
10
|
+
import "./chunk-BPJ5KWIT.js";
|
|
11
|
+
import "./chunk-OMO45AHI.js";
|
|
12
|
+
import "./chunk-HJ4ALQG6.js";
|
|
13
13
|
export {
|
|
14
14
|
DEFAULT_MANAGED_WRITE_WAIT_MS,
|
|
15
15
|
MANAGED_WRITE_POLL_INTERVAL_MS,
|
package/dist/skillwiki-mcp.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runSkillwikiMcpStdio
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SNHTWLGF.js";
|
|
5
5
|
import "./chunk-7I2TPIV5.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-KFEOMMWK.js";
|
|
7
|
+
import "./chunk-CKDF4DWU.js";
|
|
8
|
+
import "./chunk-BPJ5KWIT.js";
|
|
9
|
+
import "./chunk-NPTIYO2S.js";
|
|
10
|
+
import "./chunk-OMO45AHI.js";
|
|
11
|
+
import "./chunk-HJ4ALQG6.js";
|
|
12
12
|
|
|
13
13
|
// src/mcp-entry.ts
|
|
14
14
|
runSkillwikiMcpStdio().catch((error) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillwiki",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.64",
|
|
4
4
|
"skills": "./",
|
|
5
5
|
"description": "Project-aware Karpathy-style knowledge base for Claude Code: 20 prompt-only skills (wiki-*, proj-*, using-skillwiki) backed by the deterministic `skillwiki` CLI.",
|
|
6
6
|
"author": {
|
package/skills/package.json
CHANGED
|
@@ -49,6 +49,22 @@ When the user asks to "get work of X" or "run work item Y" for review, you are i
|
|
|
49
49
|
5. Manage status transitions: `planned` → `in-progress` → `completed` (set `completed:` date) or `abandoned`.
|
|
50
50
|
6. Append vault `log.md` entry on creation and on each status transition.
|
|
51
51
|
|
|
52
|
+
### Completion and post-release verification
|
|
53
|
+
|
|
54
|
+
- Work-item status represents delivery lifecycle. Mark delivery complete when
|
|
55
|
+
the approved code, required acceptance checks, release/deployment scope, and
|
|
56
|
+
completion evidence are finished.
|
|
57
|
+
- Required acceptance verification remains part of the completion checklist and
|
|
58
|
+
must pass before `status: completed`.
|
|
59
|
+
- Optional verification after delivery uses typed frontmatter:
|
|
60
|
+
`post_release_verification.posture: opt-in`, plus one or more approved
|
|
61
|
+
`triggers` (`matching-regression-report`, `explicit-user-request`, or
|
|
62
|
+
`relevant-code-or-release-change`).
|
|
63
|
+
- Record opt-in post-release checks as prose evidence, not as unchecked completion tasks.
|
|
64
|
+
Completed opt-in work stays out of ordinary active rankings until a trigger
|
|
65
|
+
occurs; a trigger creates new evidence or a follow-up decision rather than
|
|
66
|
+
silently keeping delivered work `in-progress`.
|
|
67
|
+
|
|
52
68
|
## Redirect Output
|
|
53
69
|
|
|
54
70
|
After step 3 (output path override), emit redirect paths for the active PRD skill:
|
|
@@ -49,6 +49,22 @@ When the user asks to "get work of X" or "run work item Y" for review, you are i
|
|
|
49
49
|
5. Manage status transitions: `planned` → `in-progress` → `completed` (set `completed:` date) or `abandoned`.
|
|
50
50
|
6. Append vault `log.md` entry on creation and on each status transition.
|
|
51
51
|
|
|
52
|
+
### Completion and post-release verification
|
|
53
|
+
|
|
54
|
+
- Work-item status represents delivery lifecycle. Mark delivery complete when
|
|
55
|
+
the approved code, required acceptance checks, release/deployment scope, and
|
|
56
|
+
completion evidence are finished.
|
|
57
|
+
- Required acceptance verification remains part of the completion checklist and
|
|
58
|
+
must pass before `status: completed`.
|
|
59
|
+
- Optional verification after delivery uses typed frontmatter:
|
|
60
|
+
`post_release_verification.posture: opt-in`, plus one or more approved
|
|
61
|
+
`triggers` (`matching-regression-report`, `explicit-user-request`, or
|
|
62
|
+
`relevant-code-or-release-change`).
|
|
63
|
+
- Record opt-in post-release checks as prose evidence, not as unchecked completion tasks.
|
|
64
|
+
Completed opt-in work stays out of ordinary active rankings until a trigger
|
|
65
|
+
occurs; a trigger creates new evidence or a follow-up decision rather than
|
|
66
|
+
silently keeping delivered work `in-progress`.
|
|
67
|
+
|
|
52
68
|
## Redirect Output
|
|
53
69
|
|
|
54
70
|
After step 3 (output path override), emit redirect paths for the active PRD skill:
|