@oevery/rsp 3.1.1 → 3.2.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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/{chunk-3Z4IO2TD.mjs → chunk-JYDEJEM4.mjs} +2 -2
- package/dist/{chunk-WJXKLLIF.mjs → chunk-SEGJLWRE.mjs} +1 -1
- package/dist/{chunk-MUNLLVVH.mjs → chunk-ZORUJTVS.mjs} +43 -14
- package/dist/cli.mjs +11 -5
- package/dist/{entry-IPHJBI53.mjs → entry-I22OUIW5.mjs} +13 -7
- package/dist/{entry-KAWA2AS4.mjs → entry-RG6HREUN.mjs} +4 -4
- package/package.json +1 -1
- package/rules/rsp-rules.md +29 -58
- package/skills/rsp/SKILL.md +30 -16
- package/skills/rsp/references/durable-review.md +5 -3
- package/skills/rsp/references/managed-routing.md +19 -15
- package/skills/rsp-commit/SKILL.md +2 -0
- package/skills/rsp-diagnose/SKILL.md +1 -1
- package/skills/rsp-implement/SKILL.md +3 -1
- package/skills/rsp-manage/SKILL.md +51 -32
- package/skills/rsp-manage/references/closeout.md +11 -0
- package/skills/rsp-manage/references/interruption-recovery.md +7 -0
- package/skills/rsp-manage/references/review-convergence.md +7 -0
- package/skills/rsp-release-docs/SKILL.md +2 -0
- package/skills/rsp-resolve-findings/SKILL.md +1 -1
- package/skills/rsp-review/SKILL.md +4 -27
- package/skills/rsp-review/references/code-review.md +14 -0
- package/skills/rsp-review/references/document-review.md +15 -0
- package/skills/rsp-shape/SKILL.md +13 -3
- package/skills/rsp-shape/references/deep-clarification.md +2 -0
- package/skills/rsp-structural-audit/SKILL.md +1 -1
- package/skills/rsp-tdd/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ A Change is one Markdown file with canonical Proposal, Spec, Design, Tasks, Veri
|
|
|
64
64
|
- [Configuration reference](./docs/site/en/reference/configuration.md)
|
|
65
65
|
- [CLI reference](./docs/site/en/reference/cli.md)
|
|
66
66
|
- [3.0 migration guide](./docs/migrations/3.0.md) and [3.1 migration guide](./docs/migrations/3.1.md)
|
|
67
|
-
- [Release notes](./docs/releases/3.
|
|
67
|
+
- [Release notes](./docs/releases/3.2.0.md)
|
|
68
68
|
- [Design philosophy](./docs/maintainers/design-philosophy.md) and [maintainer upstream research](./docs/maintainers/upstreams.md)
|
|
69
69
|
|
|
70
70
|
Run the documentation locally:
|
package/README.zh-CN.md
CHANGED
|
@@ -64,7 +64,7 @@ rsp show --focused
|
|
|
64
64
|
- [配置参考](./docs/site/zh-CN/reference/configuration.md)
|
|
65
65
|
- [CLI 参考](./docs/site/zh-CN/reference/cli.md)
|
|
66
66
|
- [3.0 迁移指南](./docs/migrations/3.0.md)与 [3.1 迁移指南](./docs/migrations/3.1.md)
|
|
67
|
-
- [发布说明](./docs/releases/3.
|
|
67
|
+
- [发布说明](./docs/releases/3.2.0.md)
|
|
68
68
|
- [设计哲学](./docs/maintainers/design-philosophy.md)与[维护者上游研究](./docs/maintainers/upstreams.md)
|
|
69
69
|
|
|
70
70
|
在本地运行文档:
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
inspectManagedDirectory,
|
|
6
6
|
inspectManagedFileTree,
|
|
7
7
|
resolveManagedDirectoryChain
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SEGJLWRE.mjs";
|
|
9
9
|
|
|
10
10
|
// src/commands/skills.ts
|
|
11
11
|
import { randomUUID } from "crypto";
|
|
@@ -165,7 +165,7 @@ function printPackagedSkillInventory(inventory) {
|
|
|
165
165
|
console.log(` ${inventory.package.name}@${inventory.package.version}`);
|
|
166
166
|
console.log(` target: ${inventory.target}`);
|
|
167
167
|
for (const group of [
|
|
168
|
-
{ heading: "Default
|
|
168
|
+
{ heading: "Default suite Skills", kind: "default" },
|
|
169
169
|
{ heading: "Optional project Skills", kind: "optional" }
|
|
170
170
|
]) {
|
|
171
171
|
console.log("");
|
|
@@ -679,7 +679,7 @@ RSP tracks current work, stable specs, and archives under \`.rsp/\`.
|
|
|
679
679
|
Read in order:
|
|
680
680
|
1. Nearest \`AGENTS.md\` for project or module instructions.
|
|
681
681
|
2. Root \`CONTEXT-MAP.md\` if present, then the relevant nearest \`CONTEXT.md\`.
|
|
682
|
-
3.
|
|
682
|
+
3. Use the project \`rsp\` Skill at \`.agents/skills/rsp/SKILL.md\`; hosts may load it through Skill discovery or read it directly. Only when it is absent or cannot be used, read \`.rsp/rsp-rules.md\` as the fallback protocol.
|
|
683
683
|
4. \`.rsp/focus.d/\`; for grouped work read the sibling Group Brief, then the explicitly selected focused Change.
|
|
684
684
|
5. Only the relevant Specs and Decision Records under the configured authoritative path.
|
|
685
685
|
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
resolveLanguagePolicy,
|
|
30
30
|
resolveManagePolicy,
|
|
31
31
|
toErrorMessage
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-SEGJLWRE.mjs";
|
|
33
33
|
|
|
34
34
|
// src/status/inspect.ts
|
|
35
35
|
import { readFile as readFile5, stat } from "fs/promises";
|
|
@@ -664,6 +664,43 @@ function normalizeLogicalPath2(path) {
|
|
|
664
664
|
return path.split("\\").join("/");
|
|
665
665
|
}
|
|
666
666
|
|
|
667
|
+
// src/core/work-summary.ts
|
|
668
|
+
var PLACEHOLDER_SUMMARY = "<\u2026>";
|
|
669
|
+
function extractChangeSummary(content, document = parseRspDocument(content, CHANGE_DOCUMENT_SCHEMA), options = {}) {
|
|
670
|
+
try {
|
|
671
|
+
const frontmatter = parseFrontmatter(content);
|
|
672
|
+
const frontmatterSummary = meaningfulSummary(frontmatter?.summary, options);
|
|
673
|
+
if (frontmatterSummary)
|
|
674
|
+
return frontmatterSummary;
|
|
675
|
+
} catch {
|
|
676
|
+
}
|
|
677
|
+
const proposalLines = getDocumentSectionBody(document, "proposal").split("\n").map((line) => line.trim());
|
|
678
|
+
for (const field of ["Outcome", "Summary"]) {
|
|
679
|
+
const prefix = `- ${field}:`;
|
|
680
|
+
for (const line of proposalLines) {
|
|
681
|
+
const summary = line.startsWith(prefix) ? meaningfulSummary(line.slice(prefix.length), options) : null;
|
|
682
|
+
if (summary)
|
|
683
|
+
return summary;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return null;
|
|
687
|
+
}
|
|
688
|
+
function extractGroupSummary(content, document = parseRspDocument(content, GROUP_BRIEF_DOCUMENT_SCHEMA)) {
|
|
689
|
+
for (const line of getDocumentSectionBody(document, "goal").split("\n")) {
|
|
690
|
+
const trimmed = line.trim();
|
|
691
|
+
const summary = trimmed.startsWith("- ") || trimmed.startsWith("* ") ? meaningfulSummary(trimmed.slice(2)) : null;
|
|
692
|
+
if (summary)
|
|
693
|
+
return summary;
|
|
694
|
+
}
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
function meaningfulSummary(value, options = {}) {
|
|
698
|
+
if (typeof value !== "string")
|
|
699
|
+
return null;
|
|
700
|
+
const summary = value.trim();
|
|
701
|
+
return summary && (options.preservePlaceholder || summary !== PLACEHOLDER_SUMMARY) ? summary : null;
|
|
702
|
+
}
|
|
703
|
+
|
|
667
704
|
// src/core/change-group.ts
|
|
668
705
|
var GROUP_BRIEF_SECTIONS = getCanonicalSectionHeadings(GROUP_BRIEF_DOCUMENT_SCHEMA);
|
|
669
706
|
var GROUP_REOPEN_COMPLETION_PREFIX = "Resolve reopened concern from";
|
|
@@ -859,6 +896,7 @@ async function inspectChangeGroups(options = {}) {
|
|
|
859
896
|
const readyToClose = diagnostics.every((diagnostic) => diagnostic.change !== brief.group || diagnostic.severity !== "error") && slices.length >= 2 && slices.every((slice) => slice.state === "archived") && parsed.completion.total > 0 && parsed.completion.done === parsed.completion.total && !parsed.blockers;
|
|
860
897
|
groups.push({
|
|
861
898
|
name: brief.group,
|
|
899
|
+
summary: extractGroupSummary(content),
|
|
862
900
|
path: normalizeLogicalPath(brief.path),
|
|
863
901
|
slices,
|
|
864
902
|
completion: parsed.completion,
|
|
@@ -1195,7 +1233,7 @@ function parseArchiveEntry(sourcePath, path, archivesDir, content) {
|
|
|
1195
1233
|
if (!isCanonicalExecutableWorkRef(workRef) || expectedGroup !== archiveGroup || !matchesArchiveStem(archiveStem, expectedBase)) {
|
|
1196
1234
|
return { diagnostic: errorDiagnostic("archive_identity_mismatch", path, `archived Change identity ${workRef} does not match its archive path`) };
|
|
1197
1235
|
}
|
|
1198
|
-
const rawSummary =
|
|
1236
|
+
const rawSummary = extractChangeSummary(content, changeDocument, { preservePlaceholder: true });
|
|
1199
1237
|
if (!rawSummary)
|
|
1200
1238
|
return { diagnostic: errorDiagnostic("archive_summary_missing", path, "archived Change must contain frontmatter summary, Proposal Outcome, or Proposal Summary") };
|
|
1201
1239
|
const summary = boundText(rawSummary);
|
|
@@ -1214,18 +1252,6 @@ function parseArchiveEntry(sourcePath, path, archivesDir, content) {
|
|
|
1214
1252
|
}
|
|
1215
1253
|
};
|
|
1216
1254
|
}
|
|
1217
|
-
function extractSummary(content, document = parseRspDocument(content, CHANGE_DOCUMENT_SCHEMA)) {
|
|
1218
|
-
const frontmatter = parseFrontmatter(content);
|
|
1219
|
-
if (typeof frontmatter?.summary === "string" && frontmatter.summary.trim())
|
|
1220
|
-
return frontmatter.summary.trim();
|
|
1221
|
-
const proposalLines = getDocumentSectionBody(document, "proposal").split("\n").map((line) => line.trim());
|
|
1222
|
-
for (const prefix of ["- Outcome:", "- Summary:"]) {
|
|
1223
|
-
const line = proposalLines.find((candidate) => candidate.startsWith(prefix));
|
|
1224
|
-
if (line && line.slice(prefix.length).trim())
|
|
1225
|
-
return line.slice(prefix.length).trim();
|
|
1226
|
-
}
|
|
1227
|
-
return "";
|
|
1228
|
-
}
|
|
1229
1255
|
function boundText(value) {
|
|
1230
1256
|
const codePoints = [...value];
|
|
1231
1257
|
return codePoints.length > HISTORY_MAX_TEXT_CODE_POINTS ? { value: codePoints.slice(0, HISTORY_MAX_TEXT_CODE_POINTS).join(""), truncated: true } : { value, truncated: false };
|
|
@@ -1707,6 +1733,7 @@ async function inspectProjectStatus(options = {}) {
|
|
|
1707
1733
|
for (const name of allNames) {
|
|
1708
1734
|
const path = changeMap.get(name);
|
|
1709
1735
|
let kind = "\u2014";
|
|
1736
|
+
let summary = null;
|
|
1710
1737
|
let title = name;
|
|
1711
1738
|
let blockerEntries = [];
|
|
1712
1739
|
let readiness = emptyReadiness(false);
|
|
@@ -1721,6 +1748,7 @@ async function inspectProjectStatus(options = {}) {
|
|
|
1721
1748
|
try {
|
|
1722
1749
|
const content = await readFile5(path, "utf-8");
|
|
1723
1750
|
title = extractChangeTitle(content) ?? name;
|
|
1751
|
+
summary = extractChangeSummary(content);
|
|
1724
1752
|
blockerEntries = extractBlockerEntries(content);
|
|
1725
1753
|
try {
|
|
1726
1754
|
const frontmatter = parseFrontmatter(content);
|
|
@@ -1815,6 +1843,7 @@ async function inspectProjectStatus(options = {}) {
|
|
|
1815
1843
|
records.push({
|
|
1816
1844
|
output: {
|
|
1817
1845
|
name,
|
|
1846
|
+
summary,
|
|
1818
1847
|
kind,
|
|
1819
1848
|
progress: { done, total },
|
|
1820
1849
|
ageDays,
|
package/dist/cli.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
installPackagedSkills,
|
|
5
5
|
printPackagedSkillInventory,
|
|
6
6
|
printSkillInstallResult
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JYDEJEM4.mjs";
|
|
8
8
|
import {
|
|
9
9
|
ArchiveHistoryError,
|
|
10
10
|
GROUP_BRIEF_FILENAME,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
resolveWorkRef,
|
|
38
38
|
selectArchiveHistoryRecord,
|
|
39
39
|
selectArchivedGroupBrief
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-ZORUJTVS.mjs";
|
|
41
41
|
import {
|
|
42
42
|
ARCHIVES_DIR,
|
|
43
43
|
CHANGES_DIR,
|
|
@@ -101,7 +101,7 @@ import {
|
|
|
101
101
|
validateDecisionRecordsFilesystemPath,
|
|
102
102
|
walkMarkdownFiles,
|
|
103
103
|
writeManagedFile
|
|
104
|
-
} from "./chunk-
|
|
104
|
+
} from "./chunk-SEGJLWRE.mjs";
|
|
105
105
|
|
|
106
106
|
// src/cli.ts
|
|
107
107
|
import { resolve } from "path";
|
|
@@ -2836,6 +2836,8 @@ function printStatusPlain(view) {
|
|
|
2836
2836
|
for (const { output: record, progressKnown } of view.records) {
|
|
2837
2837
|
const state = [record.isFocused ? "focused" : "open", record.isBlocked ? "blocked" : null].filter(Boolean).join(" \xB7 ");
|
|
2838
2838
|
console.log(` ${pc.bold("Change:")} ${record.isBlocked ? pc.yellow(record.name) : record.name}`);
|
|
2839
|
+
if (record.summary)
|
|
2840
|
+
console.log(` ${pc.dim(`Summary: ${record.summary}`)}`);
|
|
2839
2841
|
console.log(` ${state} \xB7 ${record.kind} \xB7 age ${record.ageDays ?? "\u2014"}d \xB7 progress ${progressKnown ? `${record.progress.done}/${record.progress.total}` : "\u2014"}`);
|
|
2840
2842
|
}
|
|
2841
2843
|
} else {
|
|
@@ -2851,6 +2853,8 @@ function printStatusPlain(view) {
|
|
|
2851
2853
|
const nameDisplay = record.isBlocked ? pc.yellow(namePadded) : namePadded;
|
|
2852
2854
|
const ageDisplay = record.isFocused ? pc.cyan(agePadded) : agePadded;
|
|
2853
2855
|
console.log(` ${marker}${nameDisplay} ${kindPadded} ${ageDisplay} ${progressPadded}`);
|
|
2856
|
+
if (record.summary)
|
|
2857
|
+
console.log(` ${pc.dim(`Summary: ${record.summary}`)}`);
|
|
2854
2858
|
}
|
|
2855
2859
|
}
|
|
2856
2860
|
console.log();
|
|
@@ -2867,6 +2871,8 @@ function printChangeGroups(groups) {
|
|
|
2867
2871
|
const readiness = group.readyToClose ? pc.green("ready to close") : pc.dim("not ready");
|
|
2868
2872
|
const blocked = group.blockers ? ` ${pc.yellow("blocked")}` : "";
|
|
2869
2873
|
console.log(` ${group.name}: ${archived}/${group.slices.length} archived, completion ${group.completion.done}/${group.completion.total}, ${readiness}${blocked}`);
|
|
2874
|
+
if (group.summary)
|
|
2875
|
+
console.log(` ${pc.dim(`Summary: ${group.summary}`)}`);
|
|
2870
2876
|
}
|
|
2871
2877
|
console.log();
|
|
2872
2878
|
}
|
|
@@ -3607,7 +3613,7 @@ async function runCli(rawArgs = process.argv.slice(2)) {
|
|
|
3607
3613
|
if (shouldLaunchSkillsUi(rawArgs, terminalEnvironment)) {
|
|
3608
3614
|
const { resolveUiLocale } = await import("./locale-HT44UIUP.mjs");
|
|
3609
3615
|
const locale = resolveUiLocale("auto", process.env.RSP_UI_LANG, process.env.LC_ALL ?? process.env.LC_MESSAGES ?? process.env.LANG ?? new Intl.DateTimeFormat().resolvedOptions().locale);
|
|
3610
|
-
const { runSkillsTui } = await import("./entry-
|
|
3616
|
+
const { runSkillsTui } = await import("./entry-RG6HREUN.mjs");
|
|
3611
3617
|
const selection = await runSkillsTui(locale);
|
|
3612
3618
|
if (selection.kind === "confirmed") {
|
|
3613
3619
|
const result = await installPackagedSkills({ names: selection.names, force: selection.force });
|
|
@@ -3625,7 +3631,7 @@ async function runCli(rawArgs = process.argv.slice(2)) {
|
|
|
3625
3631
|
} else {
|
|
3626
3632
|
const { resolveUiLocale } = await import("./locale-HT44UIUP.mjs");
|
|
3627
3633
|
const locale = resolveUiLocale(lang, process.env.RSP_UI_LANG, process.env.LC_ALL ?? process.env.LC_MESSAGES ?? process.env.LANG ?? new Intl.DateTimeFormat().resolvedOptions().locale);
|
|
3628
|
-
const { runTui } = await import("./entry-
|
|
3634
|
+
const { runTui } = await import("./entry-I22OUIW5.mjs");
|
|
3629
3635
|
const exitCode = await runTui(locale);
|
|
3630
3636
|
if (exitCode !== 0)
|
|
3631
3637
|
process.exitCode = exitCode;
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
projectDependencyForest,
|
|
8
8
|
queryArchiveHistory,
|
|
9
9
|
readArchiveHistoryDetail
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ZORUJTVS.mjs";
|
|
11
11
|
import {
|
|
12
12
|
displayWidth,
|
|
13
13
|
openTerminalSession,
|
|
14
14
|
truncateDisplay,
|
|
15
15
|
wrapDisplay
|
|
16
16
|
} from "./chunk-JOMFFQRG.mjs";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-SEGJLWRE.mjs";
|
|
18
18
|
|
|
19
19
|
// src/tui/entry.tsx
|
|
20
20
|
import process from "process";
|
|
@@ -168,8 +168,8 @@ function unfilteredItems(state, scope = state.scope) {
|
|
|
168
168
|
type: "change",
|
|
169
169
|
key: record.output.name,
|
|
170
170
|
workRef: record.output.name,
|
|
171
|
-
title: record.title,
|
|
172
|
-
searchable: `${record.output.name} ${record.title}`,
|
|
171
|
+
title: record.output.summary ?? record.title,
|
|
172
|
+
searchable: `${record.output.name} ${record.output.summary ?? ""} ${record.title}`,
|
|
173
173
|
record
|
|
174
174
|
}));
|
|
175
175
|
}
|
|
@@ -178,8 +178,8 @@ function unfilteredItems(state, scope = state.scope) {
|
|
|
178
178
|
type: "group",
|
|
179
179
|
key: group.name,
|
|
180
180
|
workRef: group.name,
|
|
181
|
-
title: group.name,
|
|
182
|
-
searchable: `${group.name} ${group.slices.map((slice) => slice.name).join(" ")}`,
|
|
181
|
+
title: group.summary ?? group.name,
|
|
182
|
+
searchable: `${group.name} ${group.summary ?? ""} ${group.slices.map((slice) => slice.name).join(" ")}`,
|
|
183
183
|
group
|
|
184
184
|
}));
|
|
185
185
|
}
|
|
@@ -381,6 +381,12 @@ function CurrentDetail({ expanded, item, messages, snapshot, width }) {
|
|
|
381
381
|
" ",
|
|
382
382
|
item.workRef
|
|
383
383
|
] }),
|
|
384
|
+
item.title !== item.workRef && /* @__PURE__ */ jsxs(Text, { children: [
|
|
385
|
+
messages.summary,
|
|
386
|
+
":",
|
|
387
|
+
" ",
|
|
388
|
+
truncateDisplay(item.title, Math.max(8, width - displayWidth(messages.summary) - 3))
|
|
389
|
+
] }),
|
|
384
390
|
/* @__PURE__ */ jsxs(Text, { children: [
|
|
385
391
|
messages.progress,
|
|
386
392
|
":",
|
|
@@ -623,7 +629,7 @@ function DashboardApp({ initialDimensions, initialSnapshot, inspectHistory, insp
|
|
|
623
629
|
] }, item.key);
|
|
624
630
|
}
|
|
625
631
|
const label = stateLabel(item, state.snapshot, messages);
|
|
626
|
-
const identity = item.type === "group" && item.group.slices.length ? `${item.workRef}: ${item.group.slices.map((slice) => slice.name).join(", ")}` : item.workRef;
|
|
632
|
+
const identity = item.title !== item.workRef ? `${item.workRef} \u2014 ${item.title}` : item.type === "group" && item.group.slices.length ? `${item.workRef}: ${item.group.slices.map((slice) => slice.name).join(", ")}` : item.workRef;
|
|
627
633
|
return /* @__PURE__ */ jsxs(Text, { inverse: selectedItem, children: [
|
|
628
634
|
selectedItem ? "\u203A" : " ",
|
|
629
635
|
" ",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
inspectPackagedSkillInventory
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JYDEJEM4.mjs";
|
|
5
5
|
import {
|
|
6
6
|
openTerminalSession,
|
|
7
7
|
truncateDisplay
|
|
8
8
|
} from "./chunk-JOMFFQRG.mjs";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-SEGJLWRE.mjs";
|
|
10
10
|
|
|
11
11
|
// src/skills-tui/entry.tsx
|
|
12
12
|
import process from "process";
|
|
@@ -90,7 +90,7 @@ var skillsCatalogs = {
|
|
|
90
90
|
"en": {
|
|
91
91
|
title: "RSP Skill manager",
|
|
92
92
|
target: "Target",
|
|
93
|
-
defaultHeading: "Default
|
|
93
|
+
defaultHeading: "Default suite Skills",
|
|
94
94
|
optionalHeading: "Optional project Skills",
|
|
95
95
|
missing: "missing",
|
|
96
96
|
unchanged: "unchanged",
|
|
@@ -104,7 +104,7 @@ var skillsCatalogs = {
|
|
|
104
104
|
"zh-CN": {
|
|
105
105
|
title: "RSP Skill \u7BA1\u7406\u5668",
|
|
106
106
|
target: "\u76EE\u6807",
|
|
107
|
-
defaultHeading: "\u9ED8\u8BA4\
|
|
107
|
+
defaultHeading: "\u9ED8\u8BA4\u5957\u4EF6 Skills",
|
|
108
108
|
optionalHeading: "\u53EF\u9009\u9879\u76EE Skills",
|
|
109
109
|
missing: "\u672A\u5B89\u88C5",
|
|
110
110
|
unchanged: "\u4E00\u81F4",
|
package/package.json
CHANGED
package/rules/rsp-rules.md
CHANGED
|
@@ -5,72 +5,43 @@ description: Minimal fallback protocol for Rules, Specs, and Plans driven develo
|
|
|
5
5
|
|
|
6
6
|
# RSP fallback protocol
|
|
7
7
|
|
|
8
|
-
This file is the minimal fallback protocol for agents that cannot load the `rsp`
|
|
8
|
+
This file is the minimal fallback protocol for agents that cannot load the `rsp` Skill. It is a compatibility and safety kernel, not a replacement for project instructions, installed Skills, or durable design documentation.
|
|
9
9
|
|
|
10
10
|
## Entry
|
|
11
11
|
|
|
12
|
-
- Read nearest `AGENTS.md` and relevant `CONTEXT.md` before RSP work. Use root `CONTEXT-MAP.md` when present.
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
- If `focus.d/` is empty and the user has not provided a concrete task, ask what to work on or suggest `npx -y @oevery/rsp create <name>`.
|
|
17
|
-
- For grouped work, read the sibling Group Brief before the focused child Change. Then read only the relevant Specs and Decision Records under the configured authoritative path.
|
|
12
|
+
- Read the nearest `AGENTS.md` and relevant `CONTEXT.md` before RSP work. Use the root `CONTEXT-MAP.md` when present.
|
|
13
|
+
- Apply this fallback before operating `.rsp/` only after the Core Skill is absent or cannot be used.
|
|
14
|
+
- Treat `focus.d/` as the only current-focus source. For grouped work, read the sibling Group Brief before the explicitly focused child Change. Then read only the relevant Specs and Decision Records under the configured authoritative path.
|
|
15
|
+
- If `focus.d/` is empty and the user has not provided a concrete task, ask what to work on or suggest `npx -y @oevery/rsp create <name>`. Do not infer current work from open Changes or filenames.
|
|
18
16
|
|
|
19
|
-
##
|
|
17
|
+
## Ownership
|
|
20
18
|
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- In a Change `Blockers` section, `- requires \`<change-work-ref>\`: <reason>` declares an exact dependency on another executable Change. Other meaningful blocker prose remains external and is never inferred as a dependency.
|
|
28
|
-
- Executable Change identities are either `<change>` or `<group>/<change>`. Recursive work paths are unsupported.
|
|
29
|
-
- A Change Group is the only composite shape and requires at least two independent direct children. Its non-executable, non-focusable `<group>/brief` at `<group>/00-brief.md` owns shared scope, constraints, declared Slices, completion, durable outcomes, and blockers. Read it before a child; archive children independently and close only a derived-complete Group.
|
|
30
|
-
- A file and directory cannot claim the same work identity.
|
|
31
|
-
- Managed roots, Group prefixes, recursive Spec paths, and final managed files must be real directories or regular files as applicable. Initialization, repair, inspection, Spec-index work, and mutations use shared no-follow checks; symlinks, special entries, missing roots, and incomplete inspection fail closed.
|
|
32
|
-
- `status`, `check`, and `doctor` share work-tree, Change Group, and dependency inspection. They fail visibly on unsupported structure, membership mismatches, malformed or missing dependency targets, self-dependencies, and cycles. With no focus, status uses Group Brief declaration order and derived blockers to recommend the first executable slice.
|
|
33
|
-
- `status` derives blockers, exact edges and reasons, ready Changes, and stable waves without persisted graph or delivery state. Filtered views retain prerequisite context. Archived prerequisites resolve; invalid or incompletely inspected graphs fail closed.
|
|
34
|
-
- Parallel Changes in one Group follow the Brief `Slices` declaration order in plan output; unrelated work uses stable lexical ordering.
|
|
35
|
-
- A Group Brief blocker is inherited by its direct child Changes as an external blocker; it does not create inferred dependency edges.
|
|
36
|
-
- Persist only `open` and `archived`; readiness, blockers, verification, and next actions are derived.
|
|
37
|
-
- When fresh evidence shows that archived acceptance was incomplete, restore the same owner explicitly. `rsp reopen <work-ref> --reason <text>` retains the selected archive, focuses the executable Change, and adds unfinished Task and Verify evidence. If the enclosing Group is closed, first run `rsp group reopen <group> --reason <text>` to restore only its retained Brief as unfocused work with unfinished completion evidence, then separately reopen only the incomplete child. Multiple matching Change or Group archives require exact `--from .rsp/archives/...` selection. Neither command cascades into children or dependents, and `rsp group create` never reuses archived identity. Open work wins over same-identity history in current state; genuinely new or independently delivered scope uses a new owner.
|
|
38
|
-
- Ordinary implementation is the default after unexplained failures are ruled out. Use test-first only when authority requires it or a concrete risk makes pre-mutation failure materially safer. Retain a new test only when it protects observable behavior or a real boundary with distinct proportionate value; otherwise remove the temporary probe and use decisive final verification.
|
|
39
|
-
- Before later-turn mutation under a direct report, design, tiny, or small route, rederive from the newly authorized objective and prospective work. Cross-module implementation, multiple acceptance surfaces, repeated production-path correction, real-host validation, bounded review convergence, lifecycle delivery, or a clear ready successor requires the smallest sufficient WorkRef and fresh qualification before mutation; unchanged tiny/small follow-ups stay direct. Elapsed time and message count alone never escalate work.
|
|
40
|
-
- Before focusing or mutating a different WorkRef, compare dirty product or durable-truth paths with the prior owner's declared or observed paths. Overlap requires continuation of the same open WorkRef, an authorized reopen, an explicitly authorized integration owner, or a stop for boundary resolution. Disjoint authorized work may proceed without staging or forcing a commit; insufficient ownership evidence stops the transition.
|
|
41
|
-
- This fallback does not emulate `rsp-manage`, even when project configuration selects automatic activation or local closeout. Invalid configuration grants nothing and remains visible. Every `manage.closeout` preset stays advisory because fallback Core never selects or qualifies Manage. For an explicit managed request or an automatically eligible completion/continuation, resolve the smallest owner using ordinary Core rules: reuse one unambiguous selected ready Change, send tiny settled work direct without a synthetic Change, and shape only independently authorized planning artifacts for clear non-trivial work. Automatic eligibility includes independent slices, interruption recovery, or prospective execution spanning implementation plus integration/review/lifecycle, cross-module or cross-process mutation, real-host/provider/hardware verification, bounded finding convergence, or a clear ready successor. Decline as direct one-step work only when one owner, one local seam, one mutation pass, one decisive check, no managed lifecycle coordination, and no ready successor all hold; a selected ready completion or continuation that fails any one condition is non-small and requires loaded Manage rather than an unclassified fallback. Report that Manage is unavailable rather than selected, the decisive eligibility or exclusion, the exact direct action, and any applicable serial/parallel overlap reason; do not persist that reasoning. Configuration grants no planning or product-mutation authority. Stop for material product, acceptance, interface, scope, mutation, or external-action decisions. Perform at most one ordinary Core or Discipline action, return its WorkRef and next action, and never dispatch, auto-continue successors, loop review corrections, archive, stage, commit, push, or persist controller state. Load the `rsp` and `rsp-manage` Skills when controller behavior is required.
|
|
42
|
-
- Route one explicit isolated domain, module/seam, or evidence-seeking question to installed `rsp-design`; use a compact manual design pass only when that Skill is unavailable. Without a selected Change, use report-only Pre-Change Design without inventing a WorkRef only when the question is already bounded; when outcome, scope, non-goals, acceptance, or decomposition remains materially unclear, route to Shape. With a selected Change, return evidence, alternatives, owner decisions, and any authorized planned-design update to the same WorkRef. Do not implement or write durable current truth from either mode.
|
|
43
|
-
- Route release documentation only for an explicit release operation with a confirmed identity or range and unfinished surfaces; no Release Change is required. Confirm identity only from explicit instruction or authoritative configuration. Until then stay version-neutral and do not mutate versioned surfaces. Keep ledgers transient; use an optional Release Change only for material decisions, coordination, recovery, blockers, or acceptance. This route grants no Git, publication, deployment, or approval authority.
|
|
44
|
-
- Do not infer current work from open Changes or filenames.
|
|
45
|
-
- Prefer RSP commands for deterministic setup, status, validation, repair, focus, Specs-index, history, archive, and reopen operations.
|
|
19
|
+
- `changes/` owns open work, `archives/` owns completed history, `specs/` owns stable current facts, and the configured Decision Record path owns lasting rationale and tradeoffs.
|
|
20
|
+
- A Change owns one executable outcome and its acceptance, Tasks, verification, and blockers. Executable WorkRefs are `<change>` or one direct `<group>/<change>` child. A Group Brief provides shared context but is not executable or focusable.
|
|
21
|
+
- For a new inferred WorkRef, preserve explicit valid user input first, otherwise follow an explicit nearest project or domain naming convention, otherwise use ASCII lowercase kebab-case from stable domain or technical vocabulary. Language or locale settings never select or translate WorkRef language. Valid Unicode remains available through explicit input or project/domain convention, and existing identities are never renamed by later guidance.
|
|
22
|
+
- Persist only `open` and `archived` lifecycle state. Readiness, blockers, routes, verification freshness, progress, and next actions are derived from current artifacts and evidence.
|
|
23
|
+
- Project-owned `AGENTS.md` and `CONTEXT.md` retain their own instruction and context authority. RSP does not replace them.
|
|
24
|
+
- Prefer RSP commands for deterministic setup, status, validation, repair, focus, Spec-index, history, archive, and reopen operations. Invalid identity, structure, dependency, managed path, symlink, or incomplete inspection fails closed.
|
|
46
25
|
|
|
47
|
-
##
|
|
26
|
+
## One bounded action
|
|
48
27
|
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
- Before
|
|
53
|
-
-
|
|
54
|
-
- When loaded Core or qualified Manage has already derived one authorized RSP-owned commit boundary, prefer the `rsp-commit` Skill for exact staging, repository-consistent structured message construction, one local commit, and complete post-commit observation. If that Skill alone is unavailable, loaded Core may provide its equivalent bounded manual action against the same owner; this minimal fallback still grants and executes no Git action.
|
|
55
|
-
- Decision Records are for hard-to-reverse choices with real tradeoffs; they do not duplicate current facts.
|
|
56
|
-
- Change Spec deltas are planning aids and are never promoted automatically into Specs or Decision Records.
|
|
57
|
-
- Keep task history, debugging notes, and transient execution state out of Specs and Decision Records.
|
|
58
|
-
- Generated local Specs `00-index.md` files and archives are not current-truth owners. Use each index only to discover direct child Specs and child Spec directories; authoritative Archive Markdown is queried directly without a generated Archive Index.
|
|
28
|
+
- Derive the next action from user intent, explicit authority, the selected WorkRef, its current Change and Group Brief when any, relevant durable facts, the worktree, and fresh status or verification evidence.
|
|
29
|
+
- Perform at most one bounded ordinary Core action or one optional Discipline action against the same owner. A mutation requires one ready owner, an explicit boundary, settled acceptance criteria, and one decisive verification. Do not auto-continue a successor or widen the boundary because more work is visible.
|
|
30
|
+
- When an optional Discipline Skill is unavailable, a compact manual fallback may cover only the same bounded owner and action. It never substitutes for a required managed worker, independent verification, unresolved product or authority decision, or missing acceptance.
|
|
31
|
+
- Before later mutation or a different WorkRef, rederive authority and inspect dirty product and durable-truth paths. Continue the same owner, use an explicitly authorized reopen or integration owner, or stop for boundary resolution when ownership overlaps or remains uncertain.
|
|
32
|
+
- If the action becomes multi-owner, cross-boundary, dependent on managed coordination, or unsafe without an unavailable capability, stop. Return the missing capability or input, decisive evidence, next owner, and the condition for safe resumption.
|
|
59
33
|
|
|
60
|
-
##
|
|
34
|
+
## Durable routing
|
|
61
35
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
- If an active merge, rebase, or cherry-pick conflict intersects authorized implementation, inspect the exact operation and conflicted paths, then compare base/ours/theirs semantics in that operation. Resolve only evidenced in-scope content while preserving unrelated work.
|
|
67
|
-
- Stop on unrelated user work, an unresolved product decision, incomplete side/base evidence, or scope beyond the WorkRef. Name the exact conflict and required owner input; do not choose a side, stage a resolution, continue or abort the Git operation, commit, or infer any Git authority.
|
|
68
|
-
- After an authorized working-tree resolution, rerun affected checks and return the continuation. Conflict-resolution authority alone does not grant Git continuation or delivery.
|
|
36
|
+
- Route planned future design to the selected Change; stable implemented facts to the smallest authoritative Spec or explicitly authorized project context; lasting rationale to the configured Decision Record path when warranted; and temporary execution or continuation state to the response.
|
|
37
|
+
- Keep a Change as a convergent current-plan and final-evidence snapshot, not an append-only execution log. Replace superseded plans and evidence; keep routine attempts, transcripts, and temporary probes out of durable artifacts.
|
|
38
|
+
- Before archive, judge current-fact and rationale updates independently, then compress the Change to the delivered outcome, current design, completed Tasks, decisive final verification, unresolved blockers, and remaining risk. Change Spec deltas are never promoted automatically.
|
|
39
|
+
- Use the response language for user-visible narration while preserving exact WorkRefs, paths, commands, headings, and machine values. Preserve each existing artifact's established language unless translation is explicitly authorized.
|
|
69
40
|
|
|
70
|
-
## Safety
|
|
41
|
+
## Safety ceiling
|
|
71
42
|
|
|
72
|
-
-
|
|
73
|
-
- Do not create
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
43
|
+
- This fallback does not emulate `rsp-manage`, ready-owner qualification, worker dispatch, convergence loops, managed resume, or configured closeout. Configuration selects no capability and grants no planning, product-mutation, lifecycle, Git, publication, deployment, approval, or human-acceptance authority.
|
|
44
|
+
- Do not create or repair command-owned RSP files directly. Do not create archives or restore archived content by editing files; use the owning RSP command only with explicit lifecycle authority.
|
|
45
|
+
- This fallback never archives, closes a Group, stages, commits, tags, pushes, publishes, deploys, deletes unrelated work, or records external approval. Those actions require their own explicit authority and available owning capability.
|
|
46
|
+
- On malformed or incomplete evidence, ambiguous focus or ownership, unresolved decisions, unavailable required capability, failed verification, or out-of-scope work, fail closed without mutation. State what was inspected, what is missing, who owns the next decision or action, and what evidence or authority permits resumption.
|
|
47
|
+
- Return the selected `WorkRef`, effective authority, changed artifacts, fresh verification, blockers, and next action. This response is not durable truth or a second state store.
|
package/skills/rsp/SKILL.md
CHANGED
|
@@ -4,14 +4,14 @@ description: Use this skill when initializing RSP, operating an existing .rsp pr
|
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: oevery
|
|
7
|
-
version: "2026.
|
|
7
|
+
version: "2026.08.05.2"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# RSP Skill
|
|
11
11
|
|
|
12
12
|
Use RSP to derive one current action from project authority and durable work artifacts. This Skill is the preferred operational guide; `.rsp/rsp-rules.md` is the runtime fallback when the Skill is unavailable.
|
|
13
13
|
|
|
14
|
-
Nearest project instructions and relevant `CONTEXT.md` remain authoritative. Keep response language user/session-owned and durable project language repository-owned. Response prose follows an explicit current response language, user/host personal instructions, then conversation language; project `.rsp/config.yaml` never selects it. A new authorized artifact follows an explicit artifact language, then the configured effective artifact language, artifact-scoped project instructions, and conversation language; an existing artifact keeps its established language unless translation is explicitly authorized. Configuration changes never rewrite existing artifacts. Commit-message prose follows an explicit current commit-language instruction, configured effective commit language, nearest repository commit authority, then clear recent non-merge history. Preserve canonical headings, paths, commands, identifiers, Conventional Commit types/scopes, trailers, and machine values
|
|
14
|
+
Nearest project instructions and relevant `CONTEXT.md` remain authoritative. Keep response language user/session-owned and durable project language repository-owned. Response prose follows an explicit current response language, user/host personal instructions, then conversation language; project `.rsp/config.yaml` never selects it. Every user-visible RSP progress update, phase or stage description, control result, worker receipt, stop reason, and handoff uses natural-language narration selected by that precedence. When exact identity matters, retain a canonical technical value unchanged in parentheses or code formatting; when its language differs from the response language, it must not stand alone as the human-facing label. This response-only rule does not change persisted artifact language or host-owned hidden reasoning summaries. A new authorized artifact follows an explicit artifact language, then the configured effective artifact language, artifact-scoped project instructions, and conversation language; an existing artifact keeps its established language unless translation is explicitly authorized. Configuration changes never rewrite existing artifacts. Commit-message prose follows an explicit current commit-language instruction, configured effective commit language, nearest repository commit authority, then clear recent non-merge history. Preserve canonical headings, paths, commands, identifiers, Conventional Commit types/scopes, trailers, and machine values. WorkRefs are stable identities independent from artifact, commit, response, host locale, and TUI language settings. Existing identities are never renamed by later language or naming guidance; when a new WorkRef must be inferred, Shape owns its naming policy. Write persistent artifacts in domain, system, user, or operator language; mention AI or agents only when they are actual product actors or constraints.
|
|
15
15
|
|
|
16
16
|
## Scope
|
|
17
17
|
|
|
@@ -21,21 +21,35 @@ Use this Skill for RSP setup or repair, focused `.rsp/` work, and the durable-up
|
|
|
21
21
|
|
|
22
22
|
Read user intent, nearest authority, `rsp status --json`, the selected Change and its readiness, fresh verification evidence, and blockers. Stages are derived guidance, never persisted state.
|
|
23
23
|
|
|
24
|
+
Represent each current decision as one response-only transient `ControlOutcome`: phase, phase-specific disposition, decisive evidence, next owner, required input when any, and the rule for resuming or rederiving. Never persist it in a Change, Group Brief, Spec, Decision Record, archive, registry, or generated projection.
|
|
25
|
+
|
|
26
|
+
Core's `RouteDisposition` is exactly `specialist`, `direct`, `managed`, `shape`, or `stop`:
|
|
27
|
+
|
|
28
|
+
- `specialist`: one bounded Discipline result; the Discipline does not become a completion controller.
|
|
29
|
+
- `direct`: one non-managed completion or continuation, one decisive verification, no WorkerEnvelope, and at most one Discipline executor.
|
|
30
|
+
- `managed`: one selected shape-ready owner and bounded goal handed to Manage; only this route composes worker lanes and review convergence.
|
|
31
|
+
- `shape`: unclear owned work returned to Shape.
|
|
32
|
+
- `stop`: no further action until one `StopDisposition` resume contract succeeds.
|
|
33
|
+
|
|
34
|
+
Core may directly mutate only RSP control-plane state; product mutation belongs to Implement or the same bounded manual Discipline action. `StopDisposition` is exactly `ask-owner`, `return-to-shape`, `reroute`, `retry-with-evidence`, `environment-blocked`, `verification-blocked`, or `capability-unavailable`. No stop disposition permits worker dispatch, product mutation, lifecycle closeout, or Git action before its resume contract succeeds.
|
|
35
|
+
|
|
24
36
|
Apply these routes in order:
|
|
25
37
|
|
|
26
|
-
Before later-turn mutation under a direct report, design, tiny, or small route, rederive
|
|
38
|
+
Before later-turn mutation under a direct report, design, tiny, or small route, rederive from the newly authorized objective and prospective work. Cross-module implementation, multiple acceptance surfaces, repeated production-path correction, real-host validation, bounded review convergence, lifecycle delivery, or a clear ready successor requires the smallest sufficient WorkRef plus fresh owner preflight and Manage qualification before mutation. Unchanged tiny/small follow-ups remain direct. Elapsed time and message count alone never escalate work.
|
|
39
|
+
|
|
40
|
+
1. Route an explicit report-only review with fixed scope to `rsp-review` when available, otherwise perform the same read-only review manually.
|
|
41
|
+
2. Route an explicit release-documentation, finalization, publication, or reconciliation operation to `rsp-release-docs` when available; otherwise read [release operations](references/release-operations.md) for the manual fallback. Do this before ordinary Change routing.
|
|
42
|
+
3. Route one explicit isolated material domain, module/seam, or evidence-seeking design question to installed `rsp-design`; never manually emulate it. Without a selected Change, use report-only Pre-Change Design for an already bounded question without inventing a WorkRef or artifact. Tracked Design returns to its selected WorkRef. Only when unavailable, its manual fallback stays with the same question and performs no implementation or durable-truth mutation.
|
|
43
|
+
4. Return tiny settled work directly only when it satisfies the complete small-work exclusion: one owner, one local seam, one mutation pass, one decisive check, no managed lifecycle coordination, and no ready successor. Report `RouteDisposition: direct`. Perform no Manage handoff or WorkerEnvelope, and rederive before further mutation if prospective work expands beyond any condition.
|
|
44
|
+
5. For every other requested completion or continuation, Core resolves whether one unambiguous shape-ready Change or shallow Group is the `WorkOwner`. Missing or non-ready ownership reports `RouteDisposition: shape`; Core invokes Shape only with independently granted planning-artifact authority, then re-reads status and freshly derives ownership and routing from the returned ready WorkOwner. Material product or authority questions stop for their `DecisionOwner`; invalid WorkOwner, topology, dirty-path, route, scope, or authority stops with `StopDisposition: reroute`.
|
|
45
|
+
6. With one ready owner, read [managed routing](references/managed-routing.md). It solely owns initial qualification and the `selected | declined` result: under `auto`, consider non-small completion or continuation; under `explicit`, qualify only an explicitly managed request. On selection, hand `rsp-manage` the goal, WorkRef, authority envelope, decisive qualification evidence, closeout ceiling, and return boundaries. Manage validates current handoff evidence without repeating eligibility. Once selected, Manage solely owns same-goal revalidation, interruption and resume, review convergence, acceptance, lifecycle closeout, and commit eligibility and orchestration; `rsp-commit` retains exact Git execution. Return to Core only for changed owner identity, topology, requested route, behavior, acceptance, public interface, scope, mutation authority, or external-action authority. Automatic activation selects a controller but grants no planning, product mutation, lifecycle, Git, or external authority.
|
|
46
|
+
7. If Manage is not selected, stop only when authority or selection is actually ambiguous, then return the one required input and its `DecisionOwner`. With no selected Change, name one ready WorkRef and direct focus action. Otherwise preserve ordinary routing under the clear ready WorkOwner and continue to Implementation evidence or the durable decision as applicable; `manage.activation: explicit` without an explicitly managed request is not itself a stop signal.
|
|
47
|
+
8. For incomplete implementation or stale, missing, or failed verification, use [Implementation evidence](#implementation-evidence). This is implementation verification.
|
|
48
|
+
9. When Tasks and required verification pass without blockers, perform the durable writeback decision. A fixed-scope change review remains a separate report-only gate: require it only when explicitly requested, required by nearer authority or risk, or needed for managed `review-clean`; do not impose it automatically on every tiny direct action. Do not infer a release operation from Change completion.
|
|
27
49
|
|
|
28
|
-
|
|
29
|
-
2. For a requested completion or continuation that is not a report-only review or release operation, read [managed routing](references/managed-routing.md) when the request is explicitly managed or the effective status policy has `manage.activation: auto`. It owns owner preflight, qualification, later requalification, and the dormant-closeout fail-safe. Select `rsp-manage` only after that preflight for an eligible selected ready Change or shallow Group; once selected, that Skill solely owns interruption and resume, convergence, lifecycle and commit execution detail. Otherwise return the ordinary Core or Discipline action. Automatic activation grants controller selection only; planning, product mutation, lifecycle, Git, and external authority remain separately derived.
|
|
30
|
-
3. Route an explicit report-only review with fixed scope to `rsp-review` when available, otherwise perform the same read-only review manually.
|
|
31
|
-
4. Route an explicit release-documentation, finalization, publication, or reconciliation operation to `rsp-release-docs` when available; otherwise read [release operations](references/release-operations.md) for the manual fallback. Do this before ordinary Change routing.
|
|
32
|
-
5. Route one explicit isolated material domain, module/seam, or evidence-seeking design question to installed `rsp-design`; never manually emulate it. Without a selected Change, use report-only Pre-Change Design only for an already bounded question; return its result without inventing a WorkRef or artifact. With a selected Change, return to that WorkRef. Only when unavailable, its manual fallback inspects authority and the live path, compares credible alternatives, and separates evidence from owner choice without implementation or durable-truth mutation.
|
|
33
|
-
6. With no selected Change, name one ready WorkRef and direct focus action. For tiny settled work, return the direct engineering action. When outcome, scope, non-goals, acceptance, or decomposition is materially unclear, use `rsp-shape` when available and Change mutation is authorized; otherwise manually create or refine one Change to the same ready boundary.
|
|
34
|
-
7. If the Change is not shape-ready, route to Shape under the same authority rule.
|
|
35
|
-
8. For incomplete implementation or stale, missing, or failed verification, use [Implementation evidence](#implementation-evidence).
|
|
36
|
-
9. When Tasks and required verification pass without blockers, perform the durable decision. Do not infer a release operation from Change completion.
|
|
50
|
+
State the `ControlOutcome`, derived stage, one next action, required input, returned owner, decisive evidence, and resume or rederivation rule. `ask-owner` asks one highest-impact owner question and resumes through fresh Core derivation after the answer; `return-to-shape` resumes only after Shape confirms a ready owner; `reroute` requires a valid owner or authority boundary. Other stops name the evidence, environment, verification, or capability condition that must change.
|
|
37
51
|
|
|
38
|
-
|
|
52
|
+
For managed evaluation, state `selected` or `declined` with the decisive qualification signal or complete direct-work exclusion; when dispatch applies, state why it is parallel or sequential. Name at most one optional Discipline Skill, only when it is the next action and appears in the host's loaded Skill inventory. A missing optional Discipline Skill does not invalidate RSP: use its bounded manual fallback against the same owner. This fallback never substitutes for a required managed worker or required independent Verify: keep acceptance incomplete and stop with `capability-unavailable` or the more specific evidenced `StopDisposition`. For an authorized exact local commit boundary, route exact staging, structured message construction, local commit execution, and post-commit observation to `rsp-commit`; if unavailable, use the durable-decision manual fallback. Do not preload, enumerate, or recursively invoke optional capabilities.
|
|
39
53
|
|
|
40
54
|
### Implementation evidence
|
|
41
55
|
|
|
@@ -62,19 +76,19 @@ Load detailed procedures only when their path is active:
|
|
|
62
76
|
- Read [setup and repair](references/setup-repair.md) before initializing, auditing, migrating, or repairing RSP state.
|
|
63
77
|
- Read [groups and dependencies](references/groups-dependencies.md) before creating, focusing, planning, or closing grouped/dependent work.
|
|
64
78
|
- Read [conflict handling](references/conflict-handling.md) only when an active merge, rebase, or cherry-pick conflict intersects authorized work.
|
|
65
|
-
- Read [durable
|
|
79
|
+
- Read [durable writeback decision](references/durable-review.md) only after required Tasks and implementation verification pass, or when auditing archive readiness.
|
|
66
80
|
|
|
67
81
|
## Ownership and safety
|
|
68
82
|
|
|
69
83
|
Route planned design to the selected Change; stable implemented facts to the smallest relevant Spec or authorized scoped instruction; lasting rationale to one exact Decision Record; stable navigation to project-owned `CONTEXT.md`; stable operating rules to project-owned `AGENTS.md`; and temporary continuation to the response. Never write planned state as current truth or duplicate facts into rationale.
|
|
70
84
|
|
|
71
|
-
Use RSP commands for managed setup, focus, repair, indexes, archive, and reopen. Do not directly create command-owned files, edit generated indexes or `.rsp/rsp-rules.md` as durable truth, or modify the managed RSP block. Preserve unrelated work. Core recommends explicit archive only after the durable decision; it does not execute archive or grant staging, commit, push, publication, deletion, deployment, approval, or human-acceptance authority. A configured `manage.closeout` preset remains dormant unless Core selected and qualified Manage for the current continuation; declined, unavailable, or unselected Manage leaves Core advisory even under `lifecycle` or `local`. Core also does not execute reopen without explicit lifecycle authority. During a qualified managed run, `rsp-manage` solely owns interruption and resume, convergence, lifecycle and commit
|
|
85
|
+
Use RSP commands for managed setup, focus, repair, indexes, archive, and reopen. Do not directly create command-owned files, edit generated indexes or `.rsp/rsp-rules.md` as durable truth, or modify the managed RSP block. Preserve unrelated work. Core recommends explicit archive only after the durable decision; it does not execute archive or grant staging, commit, push, publication, deletion, deployment, approval, or human-acceptance authority. A configured `manage.closeout` preset remains dormant unless Core selected and qualified Manage for the current continuation; declined, unavailable, or unselected Manage leaves Core advisory even under `lifecycle` or `local`. Core also does not execute reopen without explicit lifecycle authority. During a qualified managed run, `rsp-manage` solely owns interruption and resume, convergence, lifecycle closeout, and commit eligibility and orchestration; `rsp-commit` owns exact Git execution. Those procedures create no persisted controller state or additional authority.
|
|
72
86
|
|
|
73
87
|
When accepted work remains, return a localized continuation with these semantic fields in order: `WorkRef`, `Authority`, `Current state`, `Changed artifacts`, `Fresh verification`, `Blockers`, `Next action`. Preserve technical values. The continuation points to existing owners, is not a second state store, and must not be persisted without explicit path authority. On resume, reopen its pointers, inspect drift, and refresh decisive evidence.
|
|
74
88
|
|
|
75
89
|
## Durable decision output
|
|
76
90
|
|
|
77
|
-
After loading [durable
|
|
91
|
+
After loading [durable writeback decision](references/durable-review.md), choose current facts and rationale independently. Localize headings and labels, but preserve the canonical values below:
|
|
78
92
|
|
|
79
93
|
```md
|
|
80
94
|
## <localized Durable Decision heading>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# Durable
|
|
1
|
+
# Durable writeback decision
|
|
2
2
|
|
|
3
|
-
Load this reference only after required Tasks and verification pass, or when auditing archive readiness.
|
|
3
|
+
Load this reference only after required Tasks and implementation verification pass, or when auditing archive readiness.
|
|
4
|
+
|
|
5
|
+
This operation is the durable writeback decision, not implementation verification and not fixed-scope change review. Implementation verification supplies fresh evidence after mutation. Fixed-scope change review is a report-only comparison owned by Review and is required only when explicitly requested, required by nearer authority or risk, or needed to derive managed `review-clean`; it is not automatically required for every tiny direct action. The durable writeback decision is always required before archive and independently decides current-fact and Decision Record updates. It never substitutes for fixed-scope change review.
|
|
4
6
|
|
|
5
7
|
Run `rsp check --focused` and `rsp show --focused --json`, or `rsp ready <name> --json` for an explicit Change. Treat `durableReview.factCandidateTargets` and `decisionRecordsPath` as routing advice, not permission. Spec delta markers are planning aids and are never promoted automatically.
|
|
6
8
|
|
|
@@ -12,6 +14,6 @@ Create or update a Decision Record only for a hard-to-reverse or surprising choi
|
|
|
12
14
|
|
|
13
15
|
Never use generated indexes, archives, `.rsp/rsp-rules.md`, or the managed RSP block as ordinary writeback targets. Keep narrative history, debugging notes, task chronology, and transient evidence out of Specs and Decisions.
|
|
14
16
|
|
|
15
|
-
Before archive, compress the Change to current design, completed outcomes, decisive evidence, omissions, remaining risks, and blockers. Archive only after required
|
|
17
|
+
Before archive, compress the Change to current design, completed outcomes, decisive evidence, omissions, remaining risks, and blockers. Archive only after required writeback is complete or explicitly unnecessary and every separately required fixed-scope change review is clean. Ordinary work needs later explicit Git authority for one independently reviewable logical commit. A `manage.closeout` preset applies only when Core selected and qualified Manage for the current continuation; declined, unavailable, or unselected Manage leaves Core advisory and configuration executes neither archive nor commit. In a qualified managed continuation, lifecycle closeout is independent from Git and follows the effective ceiling: `manual` leaves archive advisory, while `lifecycle` or `local` permits `rsp archive <change-work-ref>` after the durable writeback decision unless nearer authority narrows it. For a shallow Group with lifecycle closeout, make the durable writeback decision and archive each child independently, re-derive completion, and run `rsp group close <group>` only after every child and Group gate passes. Inspect each complete lifecycle diff before deciding Git separately. `manual` and `lifecycle` grant no commit; `local` may justify recovery checkpoints and, after lifecycle closeout, requires one `rsp-commit` invocation for a terminal non-small Change or Group when owner, paths, fresh decisive verification, and a clean exact boundary are known and no nearer denial exists. Terminal small work defaults to no commit; ambiguous, mixed, stale, or denied boundaries stop without staging. A separately authorized release operation may use a dedicated release commit. Push remains separate and requires the user to mention it explicitly.
|
|
16
18
|
|
|
17
19
|
When commit eligibility and authority exist, give `rsp-commit` one envelope containing the Change, Group/wave, or confirmed release owner, exact allowed paths, decisive evidence, lifecycle state, and current authority. If that Skill is unavailable, perform the same bounded manual action: reread nearest authority and owner; inspect staged, unstaged, and untracked paths, the cached diff, and recent non-merge messages; stop without staging on ambiguity or stale evidence; stage only allowed paths; re-inspect the complete cached boundary; derive a repository-consistent Conventional subject plus a proportionate body and truthful RSP trailers; create one local commit; then observe its complete message, paths, remaining worktree, and remote safety without amending or performing any external action.
|
|
@@ -2,39 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
Load this reference only for a requested completion or continuation that is not a report-only review or release operation and is either explicitly managed or has effective `manage.activation: auto` in status. Missing configuration preserves `explicit` activation with `local` closeout compatibility. Invalid configuration fails closed as `explicit` plus `manual` and must remain visible.
|
|
4
4
|
|
|
5
|
-
## PREFLIGHT —
|
|
5
|
+
## OWNER PREFLIGHT — Core resolves the owner without execution
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Use this route after Core has preserved the fixed-scope Review, release, isolated Design, and tiny settled-work exceptions. Here fixed-scope Review means the explicit report-only fixed-scope change review. Under `manage.activation: explicit`, consider Manage only for an explicitly managed request. Under `manage.activation: auto`, consider it for every other requested completion or continuation that does not satisfy the complete small-work exclusion: one owner, one local seam, one mutation pass, one decisive check, no managed lifecycle coordination, and no ready successor.
|
|
8
|
+
|
|
9
|
+
Treat the requested goal and independently allowed planning and product mutations as a transient authority envelope. Automatic activation grants controller selection only and never adds planning or product-mutation authority. Core resolves the smallest sufficient owner before testing Manage eligibility, without dispatching work or mutating product state.
|
|
8
10
|
|
|
9
11
|
Before focusing, dispatching, or mutating a different WorkRef, inspect dirty paths and the diff against the prior owner's declared and observed product or durable-truth paths. Overlap never changes owner implicitly: continue the same open WorkRef, explicitly reopen its archived acceptance when authorized and applicable, use an explicitly authorized integration owner, or stop for boundary resolution. Disjoint authorized work may proceed without staging or a forced commit; insufficient ownership evidence stops the transition.
|
|
10
12
|
|
|
11
|
-
-
|
|
12
|
-
- Return tiny settled work to direct engineering without a synthetic Change or controller artifact.
|
|
13
|
-
- For clear non-trivial work with no sufficient ready owner, an explicit managed request authorizes only in-scope RSP planning artifacts unless the user requests no edits. Under automatic activation, route to Shape only when the current request or nearer authority independently permits those artifacts; configuration alone never does. Then re-read status/readiness and re-evaluate without another authorization round.
|
|
14
|
-
- If repository evidence leaves a material product, acceptance, public-interface, scope, mutation-authority, external-action, or human choice, Shape returns the single highest-impact owner decision and creates no implementation or controller artifact.
|
|
13
|
+
Core derives one ownership `ControlOutcome`. `WorkOwner` means the selected shape-ready Change or shallow Group. When one unambiguous ready WorkOwner exists, Core proceeds to QUALIFY. Missing or non-ready ownership uses `RouteDisposition: shape` only when the current request or nearer authority independently permits in-scope RSP planning artifacts; configuration alone never does. Shape returns the ready WorkOwner to Core, which re-reads status and freshly derives ownership, route, and qualification without another authorization round. A material product or authority decision stops with `StopDisposition: ask-owner` and names its `DecisionOwner`. An invalid WorkRef, topology, dirty-path, route, scope, or authority boundary stops with `StopDisposition: reroute` rather than converting it into a product question.
|
|
15
14
|
|
|
16
|
-
A prior direct report, design, tiny, or small route is not sticky. Before later-turn mutation, rederive from the now-authorized objective and prospective work. Material expansion into cross-module implementation, multiple acceptance surfaces, repeated production-path correction, real-host validation, bounded review convergence, lifecycle delivery, or a clear ready successor requires Core to establish or reuse the smallest sufficient WorkRef and rerun
|
|
15
|
+
A prior direct report, design, tiny, or small route is not sticky. Before later-turn mutation, rederive from the now-authorized objective and prospective work. Material expansion into cross-module implementation, multiple acceptance surfaces, repeated production-path correction, real-host validation, bounded review convergence, lifecycle delivery, or a clear ready successor requires Core to establish or reuse the smallest sufficient WorkRef and rerun owner preflight plus fresh Manage qualification before mutation. Unchanged tiny/small follow-ups remain direct; elapsed time and message count alone never trigger escalation.
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
Owner preflight creates no Task, Blocker, worker envelope, frontier, ticket, run record, or synthetic WorkRef. Manage has no pre-owner Intake and never creates, focuses, or reshapes the durable owner.
|
|
19
18
|
|
|
20
19
|
## QUALIFY — select or decline Manage
|
|
21
20
|
|
|
22
21
|
Select `rsp-manage` only for one selected ready Change or shallow Group that qualifies through at least one independent path: genuinely independent slices, interruption recovery, or prospective execution signals showing more than one bounded phase or authority surface. Prospective signals are implementation followed by integration verification, managed review, or lifecycle work; cross-module or cross-process mutation; real-host, provider, or hardware verification; bounded finding convergence; or a clear ready successor. A Change with prospective or recovery work does not also need independent or parallelizable slices. Derive these signals before dispatch from the authorized objective and expected phases; elapsed wall-clock minutes are never qualification evidence.
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
A Group qualifies when it has at least two ready children, or when the continuation qualifies through prospective signals or recovery.
|
|
24
|
+
|
|
25
|
+
Under automatic activation, bias non-small continuation toward Manage. A tracked completion spanning authoritative Specs, product presentation, public documentation, and multiple verification surfaces is multi-surface non-small work and reports `selected` even when one writer owns all mutations and dispatch must remain sequential. Writer count and lack of parallelism do not collapse multiple acceptance or authority surfaces into one local seam.
|
|
26
|
+
|
|
27
|
+
Decline as direct one-step work only when all of these are true: one owner, one local seam, one mutation pass, one decisive check, no managed lifecycle coordination, and no ready successor. A selected ready completion or continuation that fails any one of these conditions qualifies as non-small through this automatic path even when no separate prospective signal is obvious; do not leave the middle case unclassified. Worker-only work remains ineligible. Readiness alone does not qualify work without a requested completion or continuation, and automatic routing remains bounded by the requested goal.
|
|
25
28
|
|
|
26
29
|
Make the route observable: report `selected` with the decisive qualification signal, or `declined` with the complete direct-work exclusion and exact Core or Discipline action. If dispatch applies, report the concrete overlap/isolation evidence that makes it sequential or parallel. Selection, decline, and dispatch reasoning remain transient and create no controller state.
|
|
27
30
|
|
|
28
|
-
##
|
|
31
|
+
## HANDOFF AND RETURN — bound selected execution
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
Core and this reference solely own initial qualification and the `selected | declined` route result. Core hands selected Manage the goal, WorkRef, authority envelope, decisive qualification evidence, closeout ceiling, and exact return boundaries as transient control data. Manage validates handoff completeness and current owner, authority, and diff drift, but never repeats direct-versus-managed eligibility. Selected execution remains wholly owned by `rsp-manage`.
|
|
31
34
|
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
+
- Ordinary Fix, Verify, Review, or Resolve Findings receipts remain inside Manage for fresh same-goal revalidation.
|
|
36
|
+
- A clear in-scope ready successor under the unchanged owner topology and authority may continue inside the same managed goal.
|
|
37
|
+
- Owner identity, topology, requested route, behavior, acceptance, public interface, scope, mutation authority, or external-action authority changes return evidence to Core for fresh ownership and routing.
|
|
38
|
+
- Shape is entered only through Core when durable owner refinement is independently authorized.
|
|
35
39
|
|
|
36
40
|
Never persist the goal envelope, WorkSet, waves, discovery classification, or transition chronology.
|
|
37
41
|
|
|
38
42
|
## Dormant closeout fail-safe
|
|
39
43
|
|
|
40
|
-
If Manage was declined, unavailable, or unselected, every `manage.closeout` preset is dormant: ordinary Core may report readiness and the explicit next lifecycle or Git action, but configuration executes neither archive nor commit. Readiness, an earlier managed run, or project policy never substitutes for current selection and qualification. After selection, stop using this reference for execution detail; `rsp-manage` solely owns interruption and resume, convergence
|
|
44
|
+
If Manage was declined, unavailable, or unselected, every `manage.closeout` preset is dormant: ordinary Core may report readiness and the explicit next lifecycle or Git action, but configuration executes neither archive nor commit. Readiness, an earlier managed run, or project policy never substitutes for current selection and qualification. After selection, stop using this reference for execution detail; `rsp-manage` solely owns same-goal revalidation, interruption and resume, review convergence, acceptance, lifecycle closeout, commit eligibility and orchestration, and all corresponding authority stops. Exact staging, message construction, local commit execution, and post-commit observation remain owned by `rsp-commit`.
|
|
@@ -11,6 +11,8 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Create one reviewable local commit after Core or qualified Manage has already derived the owner, allowed paths, decisive verification, lifecycle state, and commit authority. Skill availability grants none of those facts. Accept only one Change, one integration-coupled Group wave, one Group closeout, or one confirmed release commit boundary.
|
|
13
13
|
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
|
+
|
|
14
16
|
## Audit the envelope
|
|
15
17
|
|
|
16
18
|
Read nearest project authority, the relevant open Change, Group Brief and children, archive, or confirmed release owner, then inspect `git status`, staged, unstaged, and untracked paths, the cached diff, and recent non-merge commit messages. Recheck the supplied verification and lifecycle facts against current repository state.
|
|
@@ -11,7 +11,7 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Establish a confirmed cause before correction. Keep the selected Change as owner and return investigation evidence to it.
|
|
13
13
|
|
|
14
|
-
Follow Core's response-versus-artifact language boundary.
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
15
|
|
|
16
16
|
## Establish bounds
|
|
17
17
|
|
|
@@ -11,6 +11,8 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Implement one selected Change and return facts.
|
|
13
13
|
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
|
+
|
|
14
16
|
## Select and inspect
|
|
15
17
|
|
|
16
18
|
Require an explicit WorkRef or one unambiguous focus marker. A Group Brief is context, not executable work. Stop when selection, readiness, product authority, acceptance, or required decisions are unresolved.
|
|
@@ -47,6 +49,6 @@ Record concise fresh evidence when Change Verify owns it. Do not create a receip
|
|
|
47
49
|
|
|
48
50
|
Report whether the Change is completed, partial, blocked before implementation, verification-failed, verification-unavailable, or verification-blocked. Use failed for an exercised defect; use unavailable when a missing tool, dependency, service, credential, or environment prevents execution. Use blocked only when scoped checks pass but a required gate fails solely from a confirmed pre-existing or out-of-scope baseline defect; never waive affected gates.
|
|
49
51
|
|
|
50
|
-
When work remains,
|
|
52
|
+
When work remains, return `WorkRef`, `Authority`, `Current state`, `Changed artifacts`, `Fresh verification`, `Blockers`, and `Next action`. They are not durable truth; persistence requires explicit path authority.
|
|
51
53
|
|
|
52
54
|
Claim completion only when required Tasks and checks pass and no blocker remains. Do not claim review, archive, Git delivery, or release unless separately performed with explicit authority.
|
|
@@ -4,39 +4,70 @@ description: Coordinate one eligible long-running, recovery, or multi-slice RSP
|
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: oevery
|
|
7
|
-
version: "2026.
|
|
7
|
+
version: "2026.08.05.2"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# RSP Manage
|
|
11
11
|
|
|
12
|
-
Manage one
|
|
12
|
+
Manage one requested goal selected by Core from an explicit request or effective `manage.activation: auto`. Enter only with one selected shape-ready Change or shallow Group plus a transient handoff containing the goal, WorkRef, authority envelope, decisive qualification evidence, closeout ceiling, and return boundaries. Once selected, this Skill solely owns same-goal revalidation, interruption and resume, review convergence, acceptance, lifecycle closeout, and commit eligibility and orchestration. Exact staging, message construction, local commit execution, and post-commit observation remain owned by `rsp-commit`. Keep artifacts durable and process data transient. The goal defines authority; automatic activation grants selection, not mutation.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
## Selected-goal entry
|
|
17
17
|
|
|
18
|
-
-
|
|
18
|
+
Core resolves ownership before this Skill is entered. Manage has no pre-owner Intake and never creates, focuses, or reshapes a durable owner. Reject an incomplete handoff without mutation and return to Core with the missing owner, authority, qualification, closeout, or return-boundary evidence.
|
|
19
|
+
|
|
20
|
+
## Validate the selected handoff before mutation
|
|
21
|
+
|
|
22
|
+
Core and its managed-routing reference solely own initial Manage qualification and the `selected | declined` route result. Manage never repeats the direct-versus-managed eligibility test or declines a valid selected handoff back to an ordinary Core or Discipline action.
|
|
23
|
+
|
|
24
|
+
Before dispatch, validate the handoff against current evidence by re-reading all of the following:
|
|
25
|
+
|
|
26
|
+
- every selected WorkRef, including clear in-scope successors;
|
|
19
27
|
- the complete owning Change, or the Group Brief and its children;
|
|
20
28
|
- relevant Specs and Decisions;
|
|
21
29
|
- the authority envelope, `rsp status --json`, and the current worktree.
|
|
22
30
|
|
|
23
|
-
|
|
31
|
+
Validate only handoff completeness and current drift: the selected owner and topology still match, the requested goal and route are unchanged, the authority envelope still permits the next action, owned paths remain exact and unmixed, and the decisive qualification evidence has not been invalidated. If the handoff is incomplete, evidence has drifted, or a true owner, topology, route, behavior, acceptance, interface, scope, mutation-authority, or external-action-authority boundary changed, stop without mutation and return the decisive evidence to Core. Otherwise continue the selected managed goal without repeating qualification. When dispatch applies, report only the concrete reason for sequential or parallel execution. Keep validation and dispatch reasoning transient.
|
|
24
32
|
|
|
25
|
-
|
|
33
|
+
Preserve unrelated work and require an explicit release identity. Allow four worker dispatches and one worker corrective retry across the whole managed run. Owner transitions do not reset either limit.
|
|
26
34
|
|
|
27
|
-
|
|
28
|
-
- prospective execution signals show more than one bounded phase or authority surface; or
|
|
29
|
-
- the continuation is interruption recovery.
|
|
35
|
+
## Resolve the execution frontier
|
|
30
36
|
|
|
31
|
-
|
|
37
|
+
After the selected handoff remains valid, classify every newly surfaced unknown before selecting work, in this fail-closed compatibility order: `out-of-goal` → `owner-decision` → `fog` → `evidence-needed` → `ready-to-execute`. The canonical `FrontierDisposition` is exactly `out-of-goal`, `owner-decision`, `fog`, `evidence-needed`, or `executable`; public `ready-to-execute` maps only to canonical `executable`.
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
- `out-of-goal` stops for topology or authority resolution with `StopDisposition: reroute`.
|
|
40
|
+
- `owner-decision` stops with the single highest-impact question for its `DecisionOwner` when behavior, acceptance, public interface, scope, mutation authority, external action, or human acceptance is unresolved. Return `StopDisposition: ask-owner` to Core for fresh routing after the answer.
|
|
41
|
+
- `fog` is not yet a precise question. Create no synthetic Task, Change, Blocker, or worker dispatch; return `StopDisposition: return-to-shape` to Core and halt the current managed control phase. Only Core may route authorized Shape. Do not continue an independently ready slice, dispatch another worker, or mutate product state. Resume only after Shape confirms a ready owner and Core freshly rederives the route.
|
|
42
|
+
- `evidence-needed` is one precise factual question answerable without choosing any owner decision above. If evidence would cross one of those boundaries, take the applicable stop instead of selecting Fix.
|
|
43
|
+
- Canonical `executable` permits lane selection only after ownership, authority, and required evidence are settled.
|
|
34
44
|
|
|
35
|
-
|
|
45
|
+
`StopDisposition` is exactly `ask-owner`, `return-to-shape`, `reroute`, `retry-with-evidence`, `environment-blocked`, `verification-blocked`, or `capability-unavailable`. No stop disposition permits another worker dispatch, product mutation, lifecycle closeout, or Git action until its stated resume contract succeeds.
|
|
46
|
+
|
|
47
|
+
Every lane receives one transient `WorkerEnvelope` with these common fields: `WorkRef`, `lane`, `objective`, `current hypothesis` when one exists, `known evidence`, `allowed paths`, `allowed actions and commands`, `prohibited actions`, `comparison baseline`, `expected result schema`, `response language`, `localized control-narration rule`, and `stop conditions`. The narration rule requires human-facing receipt prose in the response language and preserves the exact result only as a secondary parenthesized or code-formatted token; it applies equally to private Inspect and Verify lanes that have no standalone Skill. Never include token counts or context-size targets; they do not influence dispatch, authority, continuation, completion, or acceptance.
|
|
48
|
+
|
|
49
|
+
- Diagnose reuses `rsp-diagnose` and remains read-only until it returns a discriminating cause or an explicit no-cause result. Its result is exactly one of `confirmed-same-scope`, `unresolved-same-scope`, or `boundary-changed`; the receipt also gives decisive evidence and the next safe discriminating check when one exists.
|
|
50
|
+
- Inspect is a private Manager-only read-only lane. It gathers one independent evidence packet and may run alongside another read-only lane only when paths and verification resources are demonstrably isolated; otherwise keep it sequential. Its result is exactly one of `confirmed-same-scope`, `unresolved-same-scope`, or `boundary-changed`; the receipt also gives decisive evidence and the next safe discriminating check when one exists.
|
|
51
|
+
- Fix reuses `rsp-implement`, receives explicit in-scope mutation authority, and is the sole product writer at its mutation boundary. Separate Group child mutation boundaries may overlap only under the existing isolated workspace and verification rule. Its result is exactly one of `changed-same-scope`, `no-change`, or `boundary-changed`; the receipt also gives `worker identity` when the host exposes it, changed paths, and fresh verification evidence.
|
|
52
|
+
- Verify is a private Manager-only read-only lane and runs only for the Change-declared risk or after a failed correction. Its result is exactly one of `pass`, `failed-with-new-evidence`, `failed-without-new-evidence`, `unavailable`, or `boundary-changed`; the receipt also gives named checks, the observed diff boundary, `worker identity` when the host exposes it, and `independence: established | unavailable`. Fixed-scope review remains owned by `rsp-review`; Inspect and Verify are not public Skills.
|
|
53
|
+
|
|
54
|
+
Every receipt contains these common fields: `WorkRef`, `lane objective`, `effective authority`, `result`, `decisive evidence`, and `stop boundary`, plus the lane-specific fields above. Its human-facing narration follows the envelope's response language; when that differs from a canonical result value, localize the primary result explanation and retain the exact result only as a secondary parenthesized or code-formatted token. Inspect the actual diff and fresh verification before acceptance. After every ordinary same-goal Fix, Verify, Review, or Resolve Findings receipt, re-read status, owner, authority, diff, blockers, and decisive evidence internally before any later mutation or dispatch. Do not return to Core merely to repeat route selection or qualification.
|
|
55
|
+
|
|
56
|
+
Independent Verify is established only when its worker identity and the accepted Fix worker identity are both available and different. If the host cannot establish that identity boundary, record `independence: unavailable`; ordinary read-only Verify may still run, but Manager must not claim independent verification.
|
|
57
|
+
|
|
58
|
+
Derive `AcceptanceDisposition` independently from execution; it is exactly `incomplete`, `evidence-complete`, or `review-clean`. Implementation verification, fixed-scope change review, and the durable writeback decision are separate gates. A required worker that was not created, did not return a valid required receipt, returned `unavailable` or `boundary-changed`, or could not satisfy required independent verification keeps acceptance `incomplete`. Accepted required receipts plus fresh declared verification may derive only `evidence-complete`; this verification is implementation verification. Only a clean fixed-scope change review may then derive managed `review-clean`. An execution receipt never derives `review-clean` directly; a verification receipt does not derive it either. The later durable writeback decision cannot substitute for fixed-scope change review. An unavailable required implementation worker cannot be replaced by controller mutation, and ordinary Verify cannot satisfy an acceptance contract that requires independent Verify.
|
|
59
|
+
|
|
60
|
+
Keep frontier classification, lane choice, envelopes, receipts, dispatch and retry counts, concurrency reasoning, and resume chronology response-only. Converged requirements and design belong in the selected Change, real dependencies in `Blockers`, and durable facts or rationale in the durable writeback decision. Create no frontier file, ticket map, ledger, registry, ambient hook, or numeric routing score.
|
|
61
|
+
|
|
62
|
+
Total worker dispatch remains at most four. Before starting an optional Diagnose or Inspect dispatch, derive the currently known required remaining worker obligations: count one Fix when accepted mutation is still required and count one Verify when the declared acceptance risk or a failed correction still requires worker verification. Start the optional dispatch only when the remaining dispatch capacity covers that dispatch plus every known required obligation; otherwise skip it and preserve the completion path, or stop when no decisive path fits. This is dynamic capacity protection, not a fixed per-lane allocation.
|
|
63
|
+
|
|
64
|
+
An evidenced failed correction permits at most one corrective retry. Start it only when new evidence makes another correction discriminating, the remaining dispatch capacity still covers the retry and every then-required Verify dispatch, and those remaining resources can still produce decisive acceptance evidence. A failure without new evidence, or a retry that cannot still be decisively verified, stops dispatch. Missing verification, drift, an authority boundary, or unavailable capability also stops dispatch. Use an explicit manual fallback only when it stays within the same owner and authority; Manager never absorbs an unavailable worker's unauthorized implementation.
|
|
36
65
|
|
|
37
66
|
## Dispatch owned work
|
|
38
67
|
|
|
39
|
-
Send a compact envelope that identifies the WorkRef, objective, authority, decisive evidence, and stop boundary. When the host supports workers and authorized implementation remains, dispatch at least one implementation worker; sequential execution does not permit the controller to absorb the whole implementation. The controller retains
|
|
68
|
+
Send a compact envelope that identifies the WorkRef, objective, authority, decisive evidence, and stop boundary. When the host supports workers and authorized implementation remains, dispatch at least one implementation worker; sequential execution does not permit the controller to absorb the whole implementation. The controller retains worker-result acceptance, integration verification, review convergence, lifecycle decisions, and commit eligibility and orchestration. It does not absorb Commit's exact Git procedure.
|
|
69
|
+
|
|
70
|
+
When dispatch cannot satisfy a required worker obligation, apply the AcceptanceDisposition rule above: return `StopDisposition: capability-unavailable`, keep acceptance `incomplete`, and stop. Absence of a dispatch event or receipt is never success, does not discharge the required obligation, and cannot be replaced by the controller claiming the worker's result.
|
|
40
71
|
|
|
41
72
|
For a Group, dispatch child WorkRefs only in the current derived `plan.waves` wave. Assume shared paths, lockfiles, generated artifacts, integration state, real hosts, provider sessions, and hardware resources overlap unless an authorized isolated workspace and verification boundary exist. Keep blockers, later waves, overlaps, and dependent verification sequential. Dispatch in parallel only for isolated mutation paths and verification resources; delegation never implies concurrency. Workers receive no implied focus, lifecycle, Git, publication, deployment, or approval authority. Choose the cheapest decisive check and at most one integration gate.
|
|
42
73
|
|
|
@@ -44,34 +75,22 @@ For a Group, dispatch child WorkRefs only in the current derived `plan.waves` wa
|
|
|
44
75
|
|
|
45
76
|
Inspect diff and verification before accepting results; rerun `rsp status --json`. For a Group restrict it to declared children.
|
|
46
77
|
|
|
47
|
-
|
|
78
|
+
Continue a clear in-scope ready successor while the goal, WorkRef topology, route, behavior, acceptance, interface, scope, and authority remain unchanged. Return to Core only when owner identity, topology, requested route, behavior, acceptance, public interface, scope, mutation authority, or external-action authority changes. At that boundary, suspend mutation, return decisive evidence, and never classify discovery or change topology; only Core may route authorized Shape and freshly select the next path.
|
|
48
79
|
|
|
49
80
|
Stop when discovery changes behavior, acceptance, interfaces, scope, mutation, or external authority. Retry only evidenced corrections. During recovery, reread authority and evidence. If incomplete archived child acceptance belongs to a closed Group, require separate explicit lifecycle authority for `rsp group reopen <group> --reason <text>` before `rsp reopen <group>/<child>`; restore neither children nor dependents implicitly. Never create controller status or parallel lifecycle state.
|
|
50
81
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Treat a progress or status inquiry as an update, not a stop signal: report current evidence and continuing intent, then continue authorized work after the update while authority, verification, and blockers still permit it. For an explicit pause, interrupt active workers and confirm they have stopped before acknowledging the pause, keep the focused WorkRef selected, and do not mutate again until resume. Only an explicit release or unfocus request clears owner selection; ordinary pause and blockers preserve focus.
|
|
82
|
+
Read [interruption and recovery](references/interruption-recovery.md) only for a progress or status inquiry, explicit pause or release, an environment or verification stop, or resume from continuation pointers.
|
|
54
83
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## Converge managed review
|
|
58
|
-
|
|
59
|
-
After fixed-scope re-review, Core correlates the report with the selected Change, original authority, fresh verification, and transient pass count. An `accepted` Finding starts another Resolve Findings pass without asking the user to continue only when it remains inside the original behavior, acceptance, paths, mutation authority, and verification budget. Resolve Findings never self-loops.
|
|
60
|
-
|
|
61
|
-
Allow at most three Resolve Findings passes per Change, separate from the worker retry limit. Stop when the same Finding remains after two completed corrections. Also stop for `needs-clarification`; a material product, interface, or scope change; new mutation or external authority; an additional real-host, provider, or network run outside existing verification authority; or failed or unavailable decisive verification. Return one owner input. Treat an eligible in-scope Finding as `correction-needed`, not an external blocker. Keep counts and correction chronology transient.
|
|
84
|
+
Read [managed review convergence](references/review-convergence.md) only after a fixed-scope re-review returns Findings or when an accepted in-scope Finding may require another bounded Resolve Findings pass.
|
|
62
85
|
|
|
63
86
|
## Preserve boundaries
|
|
64
87
|
|
|
65
88
|
Keep dispatch chronology out of Changes, Group Briefs, Specs, Decision Records. Changes retain converged requirements, outcomes, evidence, omissions, and blockers; Briefs retain shared completion without copied child state. Never persist the goal envelope, WorkSet, waves, or discovery classification.
|
|
66
89
|
|
|
67
|
-
Closeout requires Core-selected
|
|
68
|
-
|
|
69
|
-
Qualified only: effective `manage.closeout` is an automatic grant ceiling narrowed by nearer restrictions and host enforcement. `manual` grants neither automatic archive nor commit. `lifecycle` grants lifecycle closeout after Core durable review but no Git action. `local` grants lifecycle closeout, separately justified recovery checkpoints, and the deterministic terminal route below. Explicit current-turn authority may allow a local action not automated by the preset; denial wins.
|
|
70
|
-
|
|
71
|
-
When granted, close lifecycle before any commit. Change: after Core durable review run `rsp archive <change-work-ref>` and inspect the complete lifecycle diff. For shallow Group: durable-review/archive each child independently, rederive completion, then when all children plus Group gate pass run `rsp group close <group>`; inspect the complete lifecycle diff after each mutation. This includes terminal owners. Require proven review/clean-boundaries.
|
|
90
|
+
Closeout requires a Core-selected and qualified handoff that remains valid under current evidence. For declined, unavailable, unselected, incomplete, or drifted handoffs, every `manage.closeout` preset is dormant; Core may report readiness/next action, but configuration executes neither archive nor commit. Earlier qualification does not carry forward across a new continuation without a fresh Core route result.
|
|
72
91
|
|
|
73
|
-
|
|
92
|
+
Derive `CloseoutEligibility` independently; it is exactly `not-eligible`, `lifecycle-ready`, or `local-commit-ready`. Only `AcceptanceDisposition: review-clean` plus fresh owner, authority, exact diff, and decisive verification evidence can derive a ready value. Any other acceptance state derives `CloseoutEligibility: not-eligible`; neither archive nor commit runs.
|
|
74
93
|
|
|
75
|
-
|
|
94
|
+
Read [lifecycle and delivery closeout](references/closeout.md) only after `CloseoutEligibility` becomes ready, when an explicitly authorized recovery checkpoint is being considered, or when the user explicitly requests push. The reference owns preset application, lifecycle commands, Commit handoff, and remote delivery constraints; this Skill retains the fail-safe above before loading it.
|
|
76
95
|
|
|
77
96
|
Stop on unavailable dependencies, missing authority, failed verification, drift, or limits. When accepted work remains, preserve the focused owner unless explicit release or owner-conflict resolution requires otherwise, then return the incomplete continuation in this order: `WorkRef, Authority, Current state, Changed artifacts, Fresh verification, Blockers, and Next action`. Do not expose retry chronology or claim unobserved completion.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Lifecycle and delivery closeout
|
|
2
|
+
|
|
3
|
+
Load this reference only after `CloseoutEligibility` becomes `lifecycle-ready` or `local-commit-ready`, when an explicitly authorized recovery checkpoint is being considered, or when the user explicitly requests push. The main Skill must first establish a valid selected handoff and retain its incomplete-or-drifted fail-safe.
|
|
4
|
+
|
|
5
|
+
Valid selected handoff only: effective `manage.closeout` is an automatic grant ceiling narrowed by nearer restrictions and host enforcement. `manual` grants neither automatic archive nor commit. `lifecycle` grants lifecycle closeout after Manage-owned clean fixed-scope change review and a complete durable writeback decision but no Git action. `local` automatically grants lifecycle closeout and, for one eligible terminal non-small clean exact owned boundary, exactly one local Commit route without another user request. Separately justified recovery checkpoints remain possible within the same ceiling. Explicit current-turn authority may allow a local action not automated by the preset; denial wins.
|
|
6
|
+
|
|
7
|
+
When granted, close lifecycle before any commit. Change: after Manage-owned clean fixed-scope change review and the durable writeback decision run `rsp archive <change-work-ref>` and inspect the complete lifecycle diff. For shallow Group: review, decide durable writeback, and archive each child independently; rederive completion, then when all children plus Group gate pass run `rsp group close <group>`; inspect the complete lifecycle diff after each mutation. This includes terminal owners. Require proven review/clean-boundaries.
|
|
8
|
+
|
|
9
|
+
Decide commit eligibility separately. Under `local` or explicit commit authority, downstream work may justify one recovery checkpoint: give `rsp-commit` the WorkOwner, paths, evidence, lifecycle state, and authority, then derive status from its receipt. Terminal small owners default to no commit. After lifecycle closeout, a qualified `local` terminal non-small Change or Group with known owner and paths, fresh decisive verification, clean exact boundary, and no nearer denial routes exactly once to `rsp-commit`; do not require the user to repeat `commit`. An ambiguous, mixed, stale, or denied boundary stops without staging. Apply the same owner envelope to explicitly authorized Group/release commits. If Commit is unavailable, return `StopDisposition: capability-unavailable` to Core for its bounded manual Commit fallback; Manage does not stage or commit. Archive grants no Git or publication authority.
|
|
10
|
+
|
|
11
|
+
Push is opt-in only when user explicitly mentions push and remote, branch, and Group or goal milestone are unambiguous or accepted. Push there, or earlier only for required remote CI, recovery, or collaboration. Never force-push, infer push from commit authority, or push a protected or ambiguous branch. Failure preserves local commits and stops at remote boundary. Return to Core before a separate release operation and dedicated release commit.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Interruption and recovery
|
|
2
|
+
|
|
3
|
+
Load this reference only for a progress or status inquiry, explicit pause or release, an environment or verification stop, or resume from continuation pointers.
|
|
4
|
+
|
|
5
|
+
Treat a progress or status inquiry as an update, not a stop signal: report current evidence and continuing intent, then continue authorized work after the update while authority, verification, and blockers still permit it. For an explicit pause, interrupt active workers and confirm they have stopped before acknowledging the pause, keep the focused WorkRef selected, and do not mutate again until resume. Only an explicit release or unfocus request clears owner selection; ordinary pause and blockers preserve focus.
|
|
6
|
+
|
|
7
|
+
When an environment or verification boundary stops dispatch, preserve the focused owner. Update the Change only with durable blocker and verification facts, then return the incomplete continuation in this order: `WorkRef, Authority, Current state, Changed artifacts, Fresh verification, Blockers, and Next action`. Treat continuation prose only as pointers. On resume, reread the current authority, status, focused owner, worktree diff, blockers, and decisive evidence; mark stale or unverifiable claims pending and revalidate the selected handoff before mutation or worker dispatch. Never persist a paused state, worker registry, controller ledger, or execution chronology.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Managed review convergence
|
|
2
|
+
|
|
3
|
+
Load this reference only after a fixed-scope re-review returns Findings or when an accepted in-scope Finding may require another bounded Resolve Findings pass.
|
|
4
|
+
|
|
5
|
+
After fixed-scope re-review, Manage correlates the report with the selected Change, original authority, fresh verification, and transient pass count. An `accepted` Finding starts another Resolve Findings pass without asking the user to continue only when it remains inside the original behavior, acceptance, paths, mutation authority, and declared verification scope. Resolve Findings never self-loops.
|
|
6
|
+
|
|
7
|
+
Allow at most three Resolve Findings passes per Change, separate from the worker retry limit. Stop when the same Finding remains after two completed corrections. Also stop for `needs-clarification`; a material product, interface, or scope change; new mutation or external authority; an additional real-host, provider, or network run outside existing verification authority; or failed or unavailable decisive verification. Return one owner input. Treat an eligible in-scope Finding as `correction-needed`, not an external blocker. Keep counts and correction chronology transient.
|
|
@@ -11,6 +11,8 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Build one net-release evidence ledger and project it into repository-owned release surfaces. Git history locates evidence; it is not product truth.
|
|
13
13
|
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
|
+
|
|
14
16
|
## Establish authority
|
|
15
17
|
|
|
16
18
|
Resolve user scope, audience, language, format, references, and mutation authority first; then nearest project instructions, release-tool configuration, target-artifact conventions, and prior published releases. Higher-precedence evidence wins. Ask one focused question only when an unresolved owner choice materially changes the public result.
|
|
@@ -11,7 +11,7 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Resolve one fixed review report without changing what the reviewer observed. Treat resolution as a bounded correction pass, not a retry loop or a second project lifecycle.
|
|
13
13
|
|
|
14
|
-
Render headings, field labels, explanations, and conclusion prose in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat report and handoff shapes as semantic field order rather than fixed English wording: translate their human-facing labels when the output language differs. Preserve paths, commands, identifiers, WorkRefs, FindingRefs, severity labels, and the dispositions `accepted`, `rejected`, and `needs-clarification` unchanged.
|
|
14
|
+
Render headings, field labels, explanations, and conclusion prose in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat report and handoff shapes as semantic field order rather than fixed English wording: translate their human-facing labels when the output language differs. Preserve paths, commands, identifiers, WorkRefs, FindingRefs, severity labels, and the dispositions `accepted`, `rejected`, and `needs-clarification` unchanged; when their language differs from the response, retain those dispositions only as secondary exact tokens beside localized narration.
|
|
15
15
|
|
|
16
16
|
## Fix scope and authority
|
|
17
17
|
|
|
@@ -4,7 +4,7 @@ description: Review an RSP-tracked code, document, or mixed change against a fix
|
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: oevery
|
|
7
|
-
version: "2026.
|
|
7
|
+
version: "2026.08.05.1"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# RSP Review
|
|
@@ -34,36 +34,13 @@ Determine applicability only from artifacts inside the fixed comparison scope. A
|
|
|
34
34
|
|
|
35
35
|
Inspect in a bounded order: fixed status/diff, selected authority, then only the smallest direct behavior chain and tests needed to resolve a concrete question. Stop when every applicable pipeline can be judged. Do not search unrelated files or broaden authority merely to fill Coverage or Findings.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Read [Code review](references/code-review.md) only when the fixed reviewed artifacts make the Code pipeline applicable.
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
1. Safety and correctness: reachable bugs, data loss, security violations, invalid state transitions, broken contracts, unsafe failures, and regressions.
|
|
42
|
-
2. Change and Spec fidelity: observable behavior against explicit intent and stable facts.
|
|
43
|
-
3. Project standards: only rules established by nearest instructions or authoritative local conventions.
|
|
44
|
-
4. Production reachability — hard gate before completing a seam-dependent Finding: when a Finding or suggested correction depends on an adapter, wrapper, validator, normalizer, or similar seam, name the direct production caller, compare its actual callee with that seam, and verify that the changed production consumer actually reaches that seam. Put the comparison in Evidence or Coverage. If the live path bypasses the seam, report the bypass and do not present an isolated seam fix as sufficient.
|
|
45
|
-
5. Regression evidence — hard gate before `clean`: for every changed Code artifact, compare public return and failure behavior at the comparison point with the reviewed diff. Changing failure delivery between throw/rejection, sentinel values, `null`, status codes, or result objects is always a failure-contract change, even when implementation matches the selected Change. Without a focused test or other explicit verification evidence, emit a Finding and return `issues_found`. Absence of a new test is not actionable by itself: apply the simple deterministic-correction exception when the public behavior shape is preserved and no risky branch, state transition, concurrency, persistence, security behavior, or failure delivery changes, even though the corrected value differs. The exception never applies to a failure-contract change.
|
|
46
|
-
6. Simplicity: unnecessary abstraction, duplication, indirection, dependency, or scope expansion with a concrete smaller alternative; never trade away required behavior.
|
|
47
|
-
|
|
48
|
-
Anchor each Finding to changed lines or the smallest behavior chain. State a realistic trigger and impact. Do not report formatting, naming, generated output, taste, or hypothetical cleanup without authority or demonstrated downside.
|
|
49
|
-
|
|
50
|
-
## Review Documents
|
|
51
|
-
|
|
52
|
-
Classify each document by its semantic role: requirement/Change, implementation plan, Spec, Decision Record/ADR, or explanatory/user documentation. Then check:
|
|
53
|
-
|
|
54
|
-
1. Authority and traceability of claims and decisions.
|
|
55
|
-
2. Internal and cross-artifact coherence, including current implementation facts.
|
|
56
|
-
3. Completeness and ambiguity: undefined terms, unverifiable completion, and choices disguised as decisions. Report an unresolved product, operational, rollback, migration, or completion choice as an ambiguity Finding when no authority resolves it; ask for owner judgment and mark a dependent result blocked only when the choice prevents coherent review.
|
|
57
|
-
4. Feasibility of named paths, interfaces, sequencing, safety, migration, and executable verification, at the detail appropriate to the document role.
|
|
58
|
-
5. Scope and concision: scope leakage, duplicate authority, unrelated requirements, or verbosity hiding a contract.
|
|
59
|
-
|
|
60
|
-
Before the Document verdict, enumerate every unresolved choice in each changed document. Any unresolved product, operational, rollback, migration, ownership, or completion choice must either have resolving authority or produce an ambiguity Finding; do not stop after finding other defects.
|
|
61
|
-
|
|
62
|
-
Anchor Findings to the smallest heading or claim. Do not apply code-style or test-coverage rules to semantic documents, auto-fix meaning, or rewrite prose for taste.
|
|
39
|
+
Read [Document review](references/document-review.md) only when the fixed reviewed artifacts make the Document pipeline applicable. A mixed review reads both references; authority-only artifacts never trigger either reference by themselves.
|
|
63
40
|
|
|
64
41
|
## Report
|
|
65
42
|
|
|
66
|
-
Render headings, field labels, explanations, and verdict prose in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat the shape below as semantic field order rather than fixed English wording: translate its human-facing labels when the output language differs. Preserve paths, commands, identifiers, WorkRefs, severity labels `P0`-`P3`, and the values `issues_found`, `clean`, `skipped`, and `blocked` unchanged.
|
|
43
|
+
Render headings, field labels, explanations, and verdict prose in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat the shape below as semantic field order rather than fixed English wording: translate its human-facing labels when the output language differs. Preserve paths, commands, identifiers, WorkRefs, severity labels `P0`-`P3`, and the values `issues_found`, `clean`, `skipped`, and `blocked` unchanged; when their language differs from the response, retain those values only as secondary exact tokens beside localized narration.
|
|
67
44
|
|
|
68
45
|
Use this shape:
|
|
69
46
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Code review
|
|
2
|
+
|
|
3
|
+
Load this reference only when the fixed reviewed artifacts make the Code pipeline applicable.
|
|
4
|
+
|
|
5
|
+
Check in this order:
|
|
6
|
+
|
|
7
|
+
1. Safety and correctness: reachable bugs, data loss, security violations, invalid state transitions, broken contracts, unsafe failures, and regressions.
|
|
8
|
+
2. Change and Spec fidelity: observable behavior against explicit intent and stable facts.
|
|
9
|
+
3. Project standards: only rules established by nearest instructions or authoritative local conventions.
|
|
10
|
+
4. Production reachability — hard gate before completing a seam-dependent Finding: when a Finding or suggested correction depends on an adapter, wrapper, validator, normalizer, or similar seam, name the direct production caller, compare its actual callee with that seam, and verify that the changed production consumer actually reaches that seam. Put the comparison in Evidence or Coverage. If the live path bypasses the seam, report the bypass and do not present an isolated seam fix as sufficient.
|
|
11
|
+
5. Regression evidence — hard gate before `clean`: for every changed Code artifact, compare public return and failure behavior at the comparison point with the reviewed diff. Changing failure delivery between throw/rejection, sentinel values, `null`, status codes, or result objects is always a failure-contract change, even when implementation matches the selected Change. Without a focused test or other explicit verification evidence, emit a Finding and return `issues_found`. Absence of a new test is not actionable by itself: apply the simple deterministic-correction exception when the public behavior shape is preserved and no risky branch, state transition, concurrency, persistence, security behavior, or failure delivery changes, even though the corrected value differs. The exception never applies to a failure-contract change.
|
|
12
|
+
6. Simplicity: unnecessary abstraction, duplication, indirection, dependency, or scope expansion with a concrete smaller alternative; never trade away required behavior.
|
|
13
|
+
|
|
14
|
+
Anchor each Finding to changed lines or the smallest behavior chain. State a realistic trigger and impact. Do not report formatting, naming, generated output, taste, or hypothetical cleanup without authority or demonstrated downside.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Document review
|
|
2
|
+
|
|
3
|
+
Load this reference only when the fixed reviewed artifacts make the Document pipeline applicable.
|
|
4
|
+
|
|
5
|
+
Classify each document by its semantic role: requirement/Change, implementation plan, Spec, Decision Record/ADR, or explanatory/user documentation. Then check:
|
|
6
|
+
|
|
7
|
+
1. Authority and traceability of claims and decisions.
|
|
8
|
+
2. Internal and cross-artifact coherence, including current implementation facts.
|
|
9
|
+
3. Completeness and ambiguity: undefined terms, unverifiable completion, and choices disguised as decisions. Report an unresolved product, operational, rollback, migration, or completion choice as an ambiguity Finding when no authority resolves it; ask for owner judgment and mark a dependent result blocked only when the choice prevents coherent review.
|
|
10
|
+
4. Feasibility of named paths, interfaces, sequencing, safety, migration, and executable verification, at the detail appropriate to the document role.
|
|
11
|
+
5. Scope and concision: scope leakage, duplicate authority, unrelated requirements, or verbosity hiding a contract.
|
|
12
|
+
|
|
13
|
+
Before the Document verdict, enumerate every unresolved choice in each changed document. Any unresolved product, operational, rollback, migration, ownership, or completion choice must either have resolving authority or produce an ambiguity Finding; do not stop after finding other defects.
|
|
14
|
+
|
|
15
|
+
Anchor Findings to the smallest heading or claim. Do not apply code-style or test-coverage rules to semantic documents, auto-fix meaning, or rewrite prose for taste.
|
|
@@ -4,14 +4,14 @@ description: Shape or rigorously challenge unclear non-trivial work into one exe
|
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: oevery
|
|
7
|
-
version: "2026.
|
|
7
|
+
version: "2026.08.05.1"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# RSP Shape
|
|
11
11
|
|
|
12
12
|
Do not implement the shaped work.
|
|
13
13
|
|
|
14
|
-
Follow Core's response-versus-artifact language boundary.
|
|
14
|
+
Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
15
15
|
|
|
16
16
|
## Establish the boundary
|
|
17
17
|
|
|
@@ -21,12 +21,14 @@ A request to shape, create, or refine a Change grants artifact authority unless
|
|
|
21
21
|
|
|
22
22
|
Return the request directly to implementation when it is tiny and concrete or the selected Change is already ready. Do not rewrite settled work for style or completeness.
|
|
23
23
|
|
|
24
|
-
During an explicit managed goal, its original planning-artifact authority remains valid for clear in-scope discovery. Keep a cohesive correction in the current Change; create one Change for an independently closable result, or one shallow Group for at least two such results sharing the goal. Return the ready
|
|
24
|
+
During an explicit managed goal, its original planning-artifact authority remains valid for clear in-scope discovery. Keep a cohesive correction in the current Change; create one Change for an independently closable result, or one shallow Group for at least two such results sharing the goal. Return the ready WorkOwner to Core for fresh qualification without another authorization round. Stop on changed behavior, acceptance, public interfaces, goal scope, mutation authority, or external action.
|
|
25
25
|
|
|
26
26
|
## Resolve material ambiguity
|
|
27
27
|
|
|
28
28
|
Inspect the repository before asking. Ask only for an owner decision changing behavior, data, interfaces, compatibility, safety, ownership, migration, or acceptance. Write only authorized answers.
|
|
29
29
|
|
|
30
|
+
Shape owns two transient questioning modes. Ordinary clarification asks one to three related material questions, while explicit deep clarification asks exactly one DecisionOwner question per turn. A Core or Manage `StopDisposition: return-to-shape` may enter either mode, but Shape resumes execution only by returning a ready WorkOwner to Core for fresh route derivation; it never resumes Manage directly.
|
|
31
|
+
|
|
30
32
|
Read [deep clarification](references/deep-clarification.md) when the user explicitly asks for rigorous challenge, a high-risk decision remains, or one design question returns. Prefer the installed `rsp-design` capability; otherwise use its fallback.
|
|
31
33
|
|
|
32
34
|
Read [external issue input](references/external-issue-input.md) only when a Change declares an issue relationship or the request asks to shape from an issue URL.
|
|
@@ -37,6 +39,8 @@ Never invent a product decision. When a material choice or mutation authority re
|
|
|
37
39
|
|
|
38
40
|
Read [complex shaping](references/complex-shaping.md) when clarification needs multiple rounds, slices share one completion contract, or independently closable owners converge on terminal delivery.
|
|
39
41
|
|
|
42
|
+
When Shape must establish a new WorkRef, preserve an explicit valid user-supplied identity through canonical normalization. Otherwise follow an explicit nearest project or domain WorkRef naming convention. If neither exists, infer ASCII lowercase kebab-case from stable domain or technical vocabulary. Artifact, commit, response, host locale, and TUI language settings never select or translate WorkRef language. Safe Unicode remains available through explicit input or project/domain convention; never rename an existing open or archived identity because language or naming guidance changes.
|
|
43
|
+
|
|
40
44
|
Prefer one ordinary Change only for one observable outcome sharing a consistency, focused-verification, review, archive, and rollback boundary. Change granularity does not prescribe Git commit count; never split or merge Changes merely to enforce a Change-to-commit mapping. Use a shallow Group for independent outcomes under one goal; an integration gate never merges them. A shared completion contract gates Group closure, not child archive unless declared there. Keep Brief `Slices`, child `Blockers`, and derived readiness. Add no hierarchy.
|
|
41
45
|
|
|
42
46
|
Keep one observable outcome per Change:
|
|
@@ -67,3 +71,9 @@ A Change is ready only when:
|
|
|
67
71
|
- one Change or a justified shallow Group is the smallest sufficient owner.
|
|
68
72
|
|
|
69
73
|
After mutation, run the focused RSP check. Return WorkRef, artifacts, validation, and next action or blocker.
|
|
74
|
+
|
|
75
|
+
When the gate passes, return a `ControlOutcome` for phase Shape with the ready `WorkOwner` WorkRef, decisive readiness evidence, `NextOwner: Core`, and a resume rule that Core freshly derives the route.
|
|
76
|
+
|
|
77
|
+
When a material decision prevents readiness, return a non-ready `ControlOutcome` for phase Shape with `StopDisposition: ask-owner`, the decisive evidence, the `DecisionOwner`, the required answer, and a resume rule that reruns Shape from fresh evidence after the answer.
|
|
78
|
+
|
|
79
|
+
For any other blocker, return a non-ready Shape `ControlOutcome` with the applicable canonical `StopDisposition`, decisive evidence, `NextOwner`, required input, and resume rule. Do not relabel unresolved fog as ready work.
|
|
@@ -24,6 +24,8 @@ Ask exactly one owner decision per turn. Include a recommended answer grounded i
|
|
|
24
24
|
|
|
25
25
|
When no material dependent decision remains, summarize the resulting behavior, boundaries, and acceptance contract, then ask the owner to confirm shared understanding. Keep all artifacts unchanged until that confirmation. After confirmation, write only authorized decisions into their existing RSP owners and reapply the Shape Ready gate.
|
|
26
26
|
|
|
27
|
+
This branch fulfills `StopDisposition: return-to-shape`; it does not resume the prior execution path itself. Only after shared understanding is confirmed and the Shape Ready gate passes may Shape return the ready `WorkOwner` to Core, which freshly rederives the route.
|
|
28
|
+
|
|
27
29
|
## Completion criterion
|
|
28
30
|
|
|
29
31
|
Finish the deep branch when every material dependent decision is either owner-confirmed or recorded as one explicit blocker, the project design task has returned to the same WorkRef when used, and no artifact changed before shared understanding was confirmed.
|
|
@@ -37,7 +37,7 @@ Do not infer a finding from directory names, pattern matching, code size, framew
|
|
|
37
37
|
|
|
38
38
|
## Output
|
|
39
39
|
|
|
40
|
-
Render headings, field labels, explanations, and conclusions in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat the shape below as semantic field order rather than fixed English wording, while preserving paths, severity labels, confidence values, and the result values `findings`, `clean`, and `scoped uncertainty
|
|
40
|
+
Render headings, field labels, explanations, and conclusions in the language explicitly requested by the user; otherwise follow nearest project instructions, then the conversation language. Treat the shape below as semantic field order rather than fixed English wording, while preserving paths, severity labels, confidence values, and the result values `findings`, `clean`, and `scoped uncertainty`; when their language differs from the response, retain those values only as secondary exact tokens beside localized narration.
|
|
41
41
|
|
|
42
42
|
Return findings ranked by material impact, then confidence. Emit at most five and use this shape:
|
|
43
43
|
|
package/skills/rsp-tdd/SKILL.md
CHANGED
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
# RSP TDD
|
|
11
11
|
|
|
12
|
-
Implement one clear behavior test-first
|
|
12
|
+
Implement one clear behavior test-first and return evidence to its selected Change. Follow Core's response-versus-artifact language boundary for all user-visible control narration; when the response language differs, keep exact canonical values only as secondary parenthesized or code-formatted tokens.
|
|
13
13
|
|
|
14
14
|
## Establish the cycle
|
|
15
15
|
|