@blxzer/cursor-trellis 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -2
- package/README.md +7 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +13 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +2 -1
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/workflow.d.ts +7 -0
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +33 -42
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/constants/paths.d.ts +4 -0
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +4 -0
- package/dist/constants/paths.js.map +1 -1
- package/dist/migrations/manifests/0.4.1.json +9 -0
- package/dist/templates/common/{skills/check.md → bundled-skills/cstl-check/SKILL.md} +56 -8
- package/dist/templates/common/bundled-skills/cstl-check/references/fowler-12-smells.md +28 -0
- package/dist/templates/common/bundled-skills/cstl-cursor2plus-setup/SKILL.md +1 -1
- package/dist/templates/common/bundled-skills/cstl-handoff/SKILL.md +117 -0
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/hooks-and-settings.md +2 -2
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/overview.md +1 -1
- package/dist/templates/common/bundled-skills/cstl-micro-grill/SKILL.md +6 -0
- package/dist/templates/common/commands/continue.md +1 -1
- package/dist/templates/common/skills/brainstorm.md +17 -2
- package/dist/templates/cursor/agents/cstl-check.md +16 -2
- package/dist/templates/cursor/agents/cstl-implement.md +1 -1
- package/dist/templates/cursor/agents/cstl-research.md +1 -1
- package/dist/templates/cursor/commands/cursor2plus-setup.md +1 -1
- package/dist/templates/cursor/commands/handoff.md +99 -0
- package/dist/templates/cursor/rules/cstl-cursor-modes.mdc +2 -2
- package/dist/templates/cursor/rules/retrieval-routing.mdc +1 -1
- package/dist/templates/markdown/agents.md +30 -2
- package/dist/templates/markdown/{spec/guides → framework}/cursor-native-modes-guide.md.txt +2 -2
- package/dist/templates/markdown/{spec/guides → framework}/cursor-subagent-policy.md.txt +1 -1
- package/dist/templates/markdown/framework/dogfood-only-surfaces.md.txt +31 -0
- package/dist/templates/markdown/framework/index.md.txt +27 -0
- package/dist/templates/markdown/framework/internal-skills-cursor-reachability.md.txt +44 -0
- package/dist/templates/markdown/framework/prd-grill-frontier.md.txt +83 -0
- package/dist/templates/markdown/{spec/guides → framework}/verification-strength-guide.md.txt +2 -2
- package/dist/templates/markdown/index.d.ts +22 -10
- package/dist/templates/markdown/index.d.ts.map +1 -1
- package/dist/templates/markdown/index.js +70 -11
- package/dist/templates/markdown/index.js.map +1 -1
- package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +1 -1
- package/dist/templates/markdown/spec/guides/index.md.txt +5 -13
- package/dist/templates/markdown/spec/guides/prototype-guide.md.txt +10 -10
- package/dist/templates/markdown/spec/guides/test-discipline-guide.md.txt +1 -1
- package/dist/templates/shared-hooks/session-start.py +1 -1
- package/dist/templates/trellis/CONTEXT.md +53 -0
- package/dist/templates/trellis/config.yaml +1 -1
- package/dist/templates/trellis/docs/adr/README.md +21 -0
- package/dist/templates/trellis/index.d.ts +2 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +3 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/local/README.md +2 -2
- package/dist/templates/trellis/scripts/common/artifact_locale.py +16 -0
- package/dist/templates/trellis/scripts/common/parent_orchestration.py +1 -1
- package/dist/templates/trellis/scripts/common/task_store.py +7 -5
- package/dist/templates/trellis/scripts/common/test_observable_defaults.py +10 -4
- package/dist/templates/trellis/scripts/cursor_retrieval_probe_prompt.md +4 -5
- package/dist/templates/trellis/tasks/locale/en/default-prd.md +8 -0
- package/dist/templates/trellis/tasks/locale/zh/default-prd.md +8 -0
- package/dist/templates/trellis/workflow.md +17 -11
- package/dist/utils/manifest-prune.d.ts.map +1 -1
- package/dist/utils/manifest-prune.js +7 -0
- package/dist/utils/manifest-prune.js.map +1 -1
- package/dist/utils/retrieval-execution-telemetry.js +1 -1
- package/dist/utils/retrieval-execution-telemetry.js.map +1 -1
- package/package.json +2 -2
- package/dist/templates/markdown/spec/guides/cursor-trellis-release-coexistence-guide.md.txt +0 -166
- package/dist/templates/markdown/spec/guides/goal-release-regression-runbook.md.txt +0 -132
- /package/dist/templates/markdown/{spec/guides → framework}/artifact-locale-guide.md.txt +0 -0
- /package/dist/templates/markdown/{spec/guides → framework}/cursor-context-injection-guide.md.txt +0 -0
- /package/dist/templates/markdown/{spec/guides → framework}/cursor-semantic-compliance.md.txt +0 -0
- /package/dist/templates/markdown/{spec/guides → framework}/execution-strategy.md.txt +0 -0
- /package/dist/templates/markdown/{spec/guides → framework}/injection-budget-guide.md.txt +0 -0
- /package/dist/templates/markdown/{spec/guides → framework}/retrieval-daily-guide.md.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { DIR_NAMES, PATHS } from "../constants/paths.js";
|
|
3
|
-
import { getAllScripts, getAllPoolSkeleton, workflowMdTemplate, configYamlTemplate, gitignoreTemplate, executionStrategyRulesJson, } from "../templates/trellis/index.js";
|
|
3
|
+
import { getAllScripts, getAllPoolSkeleton, workflowMdTemplate, configYamlTemplate, gitignoreTemplate, executionStrategyRulesJson, contextMdTemplate, adrReadmeTemplate, } from "../templates/trellis/index.js";
|
|
4
4
|
// Import markdown templates
|
|
5
5
|
import { agentProgressIndexContent,
|
|
6
6
|
// Backend structure (multi-doc)
|
|
@@ -8,11 +8,23 @@ backendIndexContent, backendDirectoryStructureContent, backendDatabaseGuidelines
|
|
|
8
8
|
// Frontend structure (multi-doc)
|
|
9
9
|
frontendIndexContent, frontendDirectoryStructureContent, frontendTypeSafetyContent, frontendHookGuidelinesContent, frontendComponentGuidelinesContent, frontendQualityGuidelinesContent, frontendStateManagementContent,
|
|
10
10
|
// Guides structure
|
|
11
|
-
guidesIndexContent, guidesCrossLayerThinkingGuideContent, guidesCodeReuseThinkingGuideContent, guidesDurableLearningDecisionGuideContent,
|
|
11
|
+
guidesIndexContent, guidesCrossLayerThinkingGuideContent, guidesCodeReuseThinkingGuideContent, guidesDurableLearningDecisionGuideContent, guidesDebugLoopGuideContent, guidesPrototypeGuideContent, guidesTestDisciplineGuideContent, guidesCrossPlatformThinkingGuideContent, frameworkDocs, } from "../templates/markdown/index.js";
|
|
12
12
|
import { writeFile, ensureDir } from "../utils/file-writer.js";
|
|
13
13
|
import { replacePythonCommandLiterals } from "./shared.js";
|
|
14
14
|
import { writeCursor2plusLocalBundle } from "./cursor2plus-local.js";
|
|
15
15
|
import { sanitizePkgName, } from "../utils/project-detector.js";
|
|
16
|
+
/**
|
|
17
|
+
* Root-level files written by the workflow configurator (outside `.cstl/`).
|
|
18
|
+
* Shared by createWorkflowStructure (init), update.ts collectTemplateFiles
|
|
19
|
+
* (update hash tracking), and manifest-prune buildKnownKeys (so uninstall
|
|
20
|
+
* recognizes them as trellis-written and removes them).
|
|
21
|
+
*/
|
|
22
|
+
export function getWorkflowRootTemplateFiles() {
|
|
23
|
+
const files = new Map();
|
|
24
|
+
files.set("CONTEXT.md", contextMdTemplate);
|
|
25
|
+
files.set("docs/adr/README.md", adrReadmeTemplate);
|
|
26
|
+
return files;
|
|
27
|
+
}
|
|
16
28
|
/**
|
|
17
29
|
* Create workflow structure based on project type
|
|
18
30
|
*
|
|
@@ -46,6 +58,16 @@ export async function createWorkflowStructure(cwd, options) {
|
|
|
46
58
|
await writeFile(path.join(cwd, DIR_NAMES.WORKFLOW, "config.yaml"), configYamlTemplate);
|
|
47
59
|
ensureDir(path.join(cwd, DIR_NAMES.WORKFLOW, "config"));
|
|
48
60
|
await writeFile(path.join(cwd, DIR_NAMES.WORKFLOW, "config", "execution-strategy-rules.json"), executionStrategyRulesJson);
|
|
61
|
+
// Project domain glossary stub (on-demand read, never always-inject)
|
|
62
|
+
// and ADR rules — shared with update.ts collectTemplateFiles and
|
|
63
|
+
// manifest-prune buildKnownKeys via getWorkflowRootTemplateFiles().
|
|
64
|
+
for (const [relativePath, content] of getWorkflowRootTemplateFiles()) {
|
|
65
|
+
const destPath = path.join(cwd, relativePath);
|
|
66
|
+
if (relativePath.endsWith("README.md")) {
|
|
67
|
+
ensureDir(path.dirname(destPath));
|
|
68
|
+
}
|
|
69
|
+
await writeFile(destPath, content);
|
|
70
|
+
}
|
|
49
71
|
// Create workspace/ with index.md
|
|
50
72
|
ensureDir(path.join(cwd, PATHS.WORKSPACE));
|
|
51
73
|
await writeFile(path.join(cwd, PATHS.WORKSPACE, "index.md"), replacePythonCommandLiterals(agentProgressIndexContent));
|
|
@@ -170,50 +192,10 @@ async function createSpecTemplates(cwd, projectType, packages, remoteSpecPackage
|
|
|
170
192
|
name: "code-reuse-thinking-guide.md",
|
|
171
193
|
content: guidesCodeReuseThinkingGuideContent,
|
|
172
194
|
},
|
|
173
|
-
{
|
|
174
|
-
name: "retrieval-daily-guide.md",
|
|
175
|
-
content: guidesRetrievalDailyGuideContent,
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
name: "cursor-semantic-compliance.md",
|
|
179
|
-
content: guidesCursorSemanticComplianceContent,
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
name: "cursor-subagent-policy.md",
|
|
183
|
-
content: guidesCursorSubagentPolicyContent,
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
name: "execution-strategy.md",
|
|
187
|
-
content: guidesExecutionStrategyContent,
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: "cursor-context-injection-guide.md",
|
|
191
|
-
content: guidesCursorContextInjectionGuideContent,
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
name: "cursor-native-modes-guide.md",
|
|
195
|
-
content: guidesCursorNativeModesGuideContent,
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
name: "verification-strength-guide.md",
|
|
199
|
-
content: guidesVerificationStrengthGuideContent,
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
name: "injection-budget-guide.md",
|
|
203
|
-
content: guidesInjectionBudgetGuideContent,
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
name: "artifact-locale-guide.md",
|
|
207
|
-
content: guidesArtifactLocaleGuideContent,
|
|
208
|
-
},
|
|
209
195
|
{
|
|
210
196
|
name: "debug-loop-guide.md",
|
|
211
197
|
content: guidesDebugLoopGuideContent,
|
|
212
198
|
},
|
|
213
|
-
{
|
|
214
|
-
name: "goal-release-regression-runbook.md",
|
|
215
|
-
content: guidesGoalReleaseRegressionRunbookContent,
|
|
216
|
-
},
|
|
217
199
|
{
|
|
218
200
|
name: "prototype-guide.md",
|
|
219
201
|
content: guidesPrototypeGuideContent,
|
|
@@ -230,6 +212,15 @@ async function createSpecTemplates(cwd, projectType, packages, remoteSpecPackage
|
|
|
230
212
|
for (const doc of guidesDocs) {
|
|
231
213
|
await writeFile(path.join(guidesDir, doc.name), doc.content);
|
|
232
214
|
}
|
|
215
|
+
// Framework docs (.cstl/framework/) — framework-owned, refreshed by update.
|
|
216
|
+
// Apply the same platform command rewrite as update.ts collectTemplateFiles
|
|
217
|
+
// so init-written content matches the hash update expects (no-op on
|
|
218
|
+
// same-version update instead of a spurious rewrite).
|
|
219
|
+
const frameworkDir = path.join(cwd, PATHS.FRAMEWORK);
|
|
220
|
+
ensureDir(frameworkDir);
|
|
221
|
+
for (const doc of frameworkDocs) {
|
|
222
|
+
await writeFile(path.join(frameworkDir, doc.name), replacePythonCommandLiterals(doc.content));
|
|
223
|
+
}
|
|
233
224
|
if (packages && packages.length > 0) {
|
|
234
225
|
// Monorepo mode: create spec/<name>/ for each package
|
|
235
226
|
for (const pkg of packages) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ export declare const DIR_NAMES: {
|
|
|
15
15
|
readonly ARCHIVE: "archive";
|
|
16
16
|
/** Spec/guidelines directory (under .cstl/) */
|
|
17
17
|
readonly SPEC: "spec";
|
|
18
|
+
/** Framework docs directory (under .cstl/) - framework-owned, update-managed */
|
|
19
|
+
readonly FRAMEWORK: "framework";
|
|
18
20
|
/** Scripts directory (under .cstl/) */
|
|
19
21
|
readonly SCRIPTS: "scripts";
|
|
20
22
|
/** Review-pool directory (under .cstl/) */
|
|
@@ -45,6 +47,8 @@ export declare const PATHS: {
|
|
|
45
47
|
readonly TASKS: ".cstl/tasks";
|
|
46
48
|
/** .cstl/spec/ */
|
|
47
49
|
readonly SPEC: ".cstl/spec";
|
|
50
|
+
/** .cstl/framework/ */
|
|
51
|
+
readonly FRAMEWORK: ".cstl/framework";
|
|
48
52
|
/** .cstl/scripts/ */
|
|
49
53
|
readonly SCRIPTS: ".cstl/scripts";
|
|
50
54
|
/** .cstl/pool/ */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,SAAS;IACpB,8BAA8B;;IAE9B,gEAAgE;;IAEhE,4DAA4D;;IAE5D,uCAAuC;;IAEvC,+CAA+C;;IAE/C,uCAAuC;;IAEvC,2CAA2C;;CAEnC,CAAC;AAGX,eAAO,MAAM,UAAU;IACrB,mCAAmC;;IAEnC,8BAA8B;;IAE9B,2BAA2B;;IAE3B,oBAAoB;;IAEpB,4BAA4B;;IAE5B,qBAAqB;;IAErB,0BAA0B;;CAElB,CAAC;AAGX,eAAO,MAAM,KAAK;IAChB,aAAa;;IAEb,uBAAuB;;IAEvB,mBAAmB;;IAEnB,kBAAkB;;IAElB,qBAAqB;;IAErB,kBAAkB;;IAElB,uBAAuB;;IAEvB,0BAA0B;;IAE1B,wBAAwB;;CAEhB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,SAAS;IACpB,8BAA8B;;IAE9B,gEAAgE;;IAEhE,4DAA4D;;IAE5D,uCAAuC;;IAEvC,+CAA+C;;IAE/C,gFAAgF;;IAEhF,uCAAuC;;IAEvC,2CAA2C;;CAEnC,CAAC;AAGX,eAAO,MAAM,UAAU;IACrB,mCAAmC;;IAEnC,8BAA8B;;IAE9B,2BAA2B;;IAE3B,oBAAoB;;IAEpB,4BAA4B;;IAE5B,qBAAqB;;IAErB,0BAA0B;;CAElB,CAAC;AAGX,eAAO,MAAM,KAAK;IAChB,aAAa;;IAEb,uBAAuB;;IAEvB,mBAAmB;;IAEnB,kBAAkB;;IAElB,uBAAuB;;IAEvB,qBAAqB;;IAErB,kBAAkB;;IAElB,uBAAuB;;IAEvB,0BAA0B;;IAE1B,wBAAwB;;CAEhB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/constants/paths.js
CHANGED
|
@@ -16,6 +16,8 @@ export const DIR_NAMES = {
|
|
|
16
16
|
ARCHIVE: "archive",
|
|
17
17
|
/** Spec/guidelines directory (under .cstl/) */
|
|
18
18
|
SPEC: "spec",
|
|
19
|
+
/** Framework docs directory (under .cstl/) - framework-owned, update-managed */
|
|
20
|
+
FRAMEWORK: "framework",
|
|
19
21
|
/** Scripts directory (under .cstl/) */
|
|
20
22
|
SCRIPTS: "scripts",
|
|
21
23
|
/** Review-pool directory (under .cstl/) */
|
|
@@ -48,6 +50,8 @@ export const PATHS = {
|
|
|
48
50
|
TASKS: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.TASKS}`,
|
|
49
51
|
/** .cstl/spec/ */
|
|
50
52
|
SPEC: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.SPEC}`,
|
|
53
|
+
/** .cstl/framework/ */
|
|
54
|
+
FRAMEWORK: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.FRAMEWORK}`,
|
|
51
55
|
/** .cstl/scripts/ */
|
|
52
56
|
SCRIPTS: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.SCRIPTS}`,
|
|
53
57
|
/** .cstl/pool/ */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO;IACjB,gEAAgE;IAChE,SAAS,EAAE,WAAW;IACtB,4DAA4D;IAC5D,KAAK,EAAE,OAAO;IACd,uCAAuC;IACvC,OAAO,EAAE,SAAS;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM;IACZ,uCAAuC;IACvC,OAAO,EAAE,SAAS;IAClB,2CAA2C;IAC3C,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mCAAmC;IACnC,MAAM,EAAE,WAAW;IACnB,8BAA8B;IAC9B,SAAS,EAAE,YAAY;IACvB,2BAA2B;IAC3B,YAAY,EAAE,eAAe;IAC7B,oBAAoB;IACpB,SAAS,EAAE,WAAW;IACtB,4BAA4B;IAC5B,GAAG,EAAE,QAAQ;IACb,qBAAqB;IACrB,cAAc,EAAE,aAAa;IAC7B,0BAA0B;IAC1B,cAAc,EAAE,UAAU;CAClB,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,aAAa;IACb,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,uBAAuB;IACvB,SAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;IACzD,mBAAmB;IACnB,KAAK,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;IACjD,kBAAkB;IAClB,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAC/C,qBAAqB;IACrB,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,EAAE;IACrD,kBAAkB;IAClB,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAC/C,uBAAuB;IACvB,cAAc,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE;IAC/D,0BAA0B;IAC1B,iBAAiB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE;IACrE,wBAAwB;IACxB,mBAAmB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,cAAc,EAAE;CACjE,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO;IACjB,gEAAgE;IAChE,SAAS,EAAE,WAAW;IACtB,4DAA4D;IAC5D,KAAK,EAAE,OAAO;IACd,uCAAuC;IACvC,OAAO,EAAE,SAAS;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM;IACZ,gFAAgF;IAChF,SAAS,EAAE,WAAW;IACtB,uCAAuC;IACvC,OAAO,EAAE,SAAS;IAClB,2CAA2C;IAC3C,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mCAAmC;IACnC,MAAM,EAAE,WAAW;IACnB,8BAA8B;IAC9B,SAAS,EAAE,YAAY;IACvB,2BAA2B;IAC3B,YAAY,EAAE,eAAe;IAC7B,oBAAoB;IACpB,SAAS,EAAE,WAAW;IACtB,4BAA4B;IAC5B,GAAG,EAAE,QAAQ;IACb,qBAAqB;IACrB,cAAc,EAAE,aAAa;IAC7B,0BAA0B;IAC1B,cAAc,EAAE,UAAU;CAClB,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,aAAa;IACb,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,uBAAuB;IACvB,SAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;IACzD,mBAAmB;IACnB,KAAK,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;IACjD,kBAAkB;IAClB,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAC/C,uBAAuB;IACvB,SAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;IACzD,qBAAqB;IACrB,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,EAAE;IACrD,kBAAkB;IAClB,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAC/C,uBAAuB;IACvB,cAAc,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE;IAC/D,0BAA0B;IAC1B,iBAAiB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE;IACrE,wBAAwB;IACxB,mBAAmB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,cAAc,EAAE;CACjE,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.4.1",
|
|
3
|
+
"description": "Approved-surface backfill: cstl-handoff + session boundary, cstl-check dual-axis, grilling frontier, PRD grain, CONTEXT/ADR stub",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**@blxzer/cursor-trellis 0.4.1**\n\n- feat(skills): ship `cstl-handoff` bundled skill + Cursor `/cstl-handoff` command\n- feat(workflow): session boundary line; task `handoff.md` ≠ session handoff\n- feat(skills): `cstl-check` dual-axis (Standards/Spec) + Fowler 12 smells asset\n- feat(skills): grilling frontier in brainstorm + micro-grill\n- feat(templates): PRD grain (User Stories / Implementation Decisions) in default-prd en/zh\n- feat(templates): minimal CONTEXT.md stub + docs/adr README\n- chore: empty migrations list (template sync via `cstl update`)",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Run `cstl update` to sync workflow/skills/templates. No `--migrate` required."
|
|
9
|
+
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cstl-check
|
|
3
|
+
description: "Comprehensive quality verification on two axes — Standards (spec compliance, lint, type-check, tests, code smells, cross-layer data flow) and Spec (prd fidelity, scope, learning/spec-sync). Use when code is written and needs quality verification, before committing changes, or to catch context drift during long sessions."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Code Quality Check
|
|
2
7
|
|
|
3
8
|
Comprehensive quality verification for recently written code. Combines spec compliance, cross-layer safety, and pre-commit checks.
|
|
@@ -35,9 +40,19 @@ Read the specific guideline files referenced — the index is a pointer, not the
|
|
|
35
40
|
|
|
36
41
|
Run the project's lint, type-check, and test commands. Fix any failures before proceeding.
|
|
37
42
|
|
|
38
|
-
## Step 4: Review Against Checklist
|
|
43
|
+
## Step 4: Review Against Checklist (dual-axis)
|
|
44
|
+
|
|
45
|
+
Report **Standards and Spec in two separate sections** — never merge them into a single severity ranking. Standards findings first, then Spec findings; the same issue may be cross-referenced on both sides, but one axis must not mask the other. Do NOT output a "combined top risks" list mixing spec violations with requirement deviations.
|
|
46
|
+
|
|
47
|
+
### Dual-axis dispatch (Full+ only)
|
|
48
|
+
|
|
49
|
+
- **Lite / no task context**: single pass — the main agent runs Standards then Spec sequentially (no parallel split).
|
|
50
|
+
- **Full+ and sub-agents available**: may dispatch two read-only review sub-agents in parallel (a Standards-agent and a Spec-agent). They **only report findings, never modify code**; the main agent consolidates and fixes per Step 6.
|
|
51
|
+
- **Sub-agents unavailable**: degrade to single pass — do not block the check.
|
|
39
52
|
|
|
40
|
-
###
|
|
53
|
+
### Standards (did we write it right)
|
|
54
|
+
|
|
55
|
+
#### Code Quality
|
|
41
56
|
|
|
42
57
|
- [ ] Linter passes?
|
|
43
58
|
- [ ] Type checker passes (if applicable)?
|
|
@@ -45,16 +60,31 @@ Run the project's lint, type-check, and test commands. Fix any failures before p
|
|
|
45
60
|
- [ ] No debug logging left in?
|
|
46
61
|
- [ ] No suppressed warnings or type-safety bypasses?
|
|
47
62
|
|
|
48
|
-
|
|
63
|
+
#### Test Coverage (verification strength — not TDD)
|
|
49
64
|
|
|
50
|
-
Follow `.cstl/
|
|
65
|
+
Follow `.cstl/framework/verification-strength-guide.md` for **graded** validation depth by closeout profile. cstl does **not** mandate red-green TDD or per-function unit tests.
|
|
51
66
|
|
|
52
67
|
- [ ] **Lite:** focused validation on touched behavior recorded in `verify.md` (`Validation:` line + result)
|
|
53
68
|
- [ ] **Full:** above + `Check evidence:` + `Reviewed change-set:` when contract requires code-review gate
|
|
54
69
|
- [ ] New function / bug fix → add or update tests **when the project's norms and task scope require it** — not as automatic TDD ceremony
|
|
55
70
|
- [ ] `python ./.cstl/scripts/task.py validate <task>` passing JSONL schema **≠** task acceptance; substantive `verify.md` signals still required
|
|
56
71
|
|
|
57
|
-
|
|
72
|
+
#### Fowler 12 Smells
|
|
73
|
+
|
|
74
|
+
Scan the change surface against `references/fowler-12-smells.md` (12 named smells, one-line criterion + don't-report boundary each). Report when hit, `N/A` when not — do not pad the report with misses.
|
|
75
|
+
|
|
76
|
+
#### False-positive calibration (AI cross-review)
|
|
77
|
+
|
|
78
|
+
Before prioritizing any CRITICAL/WARNING finding, read `.cstl/spec/guides/index.md` → **"When Verifying AI Cross-Review Results"**: verify each finding against the actual code; budget ~35% false-positive rate for AI reviews; typical patterns: trust boundary confusion, ignoring design comments, variable misreading.
|
|
79
|
+
|
|
80
|
+
### Spec (did we build the right thing)
|
|
81
|
+
|
|
82
|
+
#### prd / design / implement fidelity
|
|
83
|
+
|
|
84
|
+
- [ ] Against `prd.md` Goal / Requirements / Acceptance Criteria: is the implementation faithful, and does it stay **within scope** (no over-scope)?
|
|
85
|
+
- [ ] Are `design.md` / `implement.md` boundaries violated (if present)?
|
|
86
|
+
|
|
87
|
+
#### Durable Learning (Phase 3.3)
|
|
58
88
|
|
|
59
89
|
- [ ] `verify.md` contains exactly one token: `Learning decision: update-spec` | `no-update` | `unsure`
|
|
60
90
|
- [ ] If `update-spec` or `unsure`: `research/learning-proposal.md` exists (or documented `N/A` with reason) and matches the decision
|
|
@@ -62,13 +92,13 @@ Follow `.cstl/spec/guides/verification-strength-guide.md` for **graded** validat
|
|
|
62
92
|
- [ ] If `update-spec`: spec was written only after confirmation; `Spec update evidence:` points at `.cstl/spec/...`
|
|
63
93
|
- [ ] No silent edits to `.cstl/spec/` without confirmation
|
|
64
94
|
|
|
65
|
-
|
|
95
|
+
#### Spec Sync
|
|
66
96
|
|
|
67
97
|
- [ ] Does `.cstl/spec/` need updates? (route through semi-automatic flow: proposal → confirm → `cstl-update-spec`)
|
|
68
98
|
|
|
69
99
|
> "If I fixed a bug or discovered something non-obvious, should I document it so future me won't hit the same issue?" → If YES, update the relevant spec doc.
|
|
70
100
|
|
|
71
|
-
|
|
101
|
+
#### Retrieval evidence (when task used research / smart-search / optional pack)
|
|
72
102
|
|
|
73
103
|
- [ ] **`verify.md` lists unresolved retrieval gaps** — external facts still unverified, missing `research/` or `research/smart-search/` evidence, or claims without source/Git/test corroboration
|
|
74
104
|
- [ ] If `{TASK}/research/retrieval-pack-latest.json` exists, top `contextPack.selected` items are cited or gaps are explicitly noted in `verify.md`
|
|
@@ -77,6 +107,24 @@ Follow `.cstl/spec/guides/verification-strength-guide.md` for **graded** validat
|
|
|
77
107
|
|
|
78
108
|
When present, Read the pack and ensure `verify.md` has `## Evidence pack reference` citing `contextPack.selected` (`title`, `source`, `reference`, `score`) or explicit gaps. Empty `selected` with existing `research/` → note stale pack or scoring failure in `verify.md`.
|
|
79
109
|
|
|
110
|
+
#### Terminology / ADR consistency (one line)
|
|
111
|
+
|
|
112
|
+
- [ ] Read root `CONTEXT.md`: do terms in the change mix `_Avoid_` aliases? If an irreversible decision was introduced, should there be an ADR? (Prompt only — do not force creating a file.)
|
|
113
|
+
|
|
114
|
+
### Report format
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
## Standards findings
|
|
118
|
+
- [sev] ...
|
|
119
|
+
|
|
120
|
+
## Spec findings
|
|
121
|
+
- [sev] ...
|
|
122
|
+
|
|
123
|
+
## Summary
|
|
124
|
+
- Standards: N issues (not ranked against Spec)
|
|
125
|
+
- Spec: M issues
|
|
126
|
+
```
|
|
127
|
+
|
|
80
128
|
## Step 5: Cross-Layer Dimensions (if applicable)
|
|
81
129
|
|
|
82
130
|
Skip this step if your change is confined to a single layer.
|
|
@@ -110,4 +158,4 @@ Skip this step if your change is confined to a single layer.
|
|
|
110
158
|
|
|
111
159
|
## Step 6: Report and Fix
|
|
112
160
|
|
|
113
|
-
Report violations found and fix them directly. Re-run project checks after fixes.
|
|
161
|
+
Report violations found (Standards and Spec sections per Step 4 format) and fix them directly. Parallel review sub-agents **do not fix** — the main agent owns all fixes. Re-run project checks after fixes.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Fowler 12 Smells — Quick Criterion Reference
|
|
2
|
+
|
|
3
|
+
Scan the change surface line by line: report when a smell is hit, write `N/A` when not. Each criterion is a one-line "is" definition; the **don't-report** boundaries guard against false positives (paired with the ~35% false-positive discipline in `.cstl/spec/guides/index.md`).
|
|
4
|
+
|
|
5
|
+
1. **Mysterious Name** — a name fails to express the code's intent (what it does / why it exists); the reader must read the implementation to understand it.
|
|
6
|
+
Don't report: evaluate only within the changed lines; do not opportunistically flag historical naming outside the change surface.
|
|
7
|
+
2. **Duplicated Code** — the same structure/expression is repeated in 2+ places, so a change must be synced across several sites.
|
|
8
|
+
Don't report: small test boilerplate (e.g. a one-line setup) where extraction would reduce readability.
|
|
9
|
+
3. **Feature Envy** — a method uses another object's data/methods far more than its own.
|
|
10
|
+
Don't report: an orchestration point that coordinates multiple collaborators is the method's job, not envy.
|
|
11
|
+
4. **Data Clumps** — the same group of fields/parameters keep appearing together and should be bundled into an object.
|
|
12
|
+
Don't report: don't force types that only bundle without adding behavior (lazy creation discipline).
|
|
13
|
+
5. **Primitive Obsession** — primitives (string/number/bool) carry concepts that deserve their own type (IDs, amounts, states).
|
|
14
|
+
Don't report: when the value domain is already constrained by an existing validation/config layer and adds no new behavior.
|
|
15
|
+
6. **Repeated Switches** — the same discriminating field (kind/type/status) drives switch/if-else chains repeated in multiple places.
|
|
16
|
+
Don't report: 1–2 occurrences where that is the language idiom (e.g. ADT pattern matching).
|
|
17
|
+
7. **Shotgun Surgery** — one conceptual change requires synchronized edits scattered across many places.
|
|
18
|
+
Don't report: when the multiple edits are concentrated in one cohesive module (locality holds).
|
|
19
|
+
8. **Divergent Change** — one module changes frequently for many different reasons.
|
|
20
|
+
Don't report: when the module is an intentional facade/aggregator.
|
|
21
|
+
9. **Speculative Generality** — abstractions/parameters/hooks are built for imagined future needs with no current caller.
|
|
22
|
+
Don't report: abstractions actually used in this change.
|
|
23
|
+
10. **Message Chains** — a long call chain `a.b().c().d()` is needed to reach a target value, with intermediate links being pure pass-through.
|
|
24
|
+
Don't report: when the fluent/builder chain is itself the public interface.
|
|
25
|
+
11. **Middle Man** — a class/method mostly forwards to somewhere else and adds little value of its own.
|
|
26
|
+
Don't report: when the forwarding provides encapsulation/seam value (e.g. an adapter sitting at a seam).
|
|
27
|
+
12. **Refused Bequest** — a subclass barely uses inherited parent behavior/fields, making the inheritance relationship nominal.
|
|
28
|
+
Don't report: when inheritance is used only for type identity/interface satisfaction (is-a semantics) or the unused members are minimal.
|
|
@@ -60,4 +60,4 @@ Native **Cursor API** (no Cursor++): **stop** — frontmatter `model:` works; th
|
|
|
60
60
|
- Project override (optional): `.cstl/local/subagent-models.json5` — same shape, wins on same key
|
|
61
61
|
- Patch bundle: `.cstl/local/cursor2plus/`
|
|
62
62
|
|
|
63
|
-
Policy: `.cstl/
|
|
63
|
+
Policy: `.cstl/framework/cursor-subagent-policy.md` (Method 2.5 / 2.6).
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cstl-handoff
|
|
3
|
+
description: "Condense the current session into a portable handoff document so a new agent / harness / directory can continue the work. User-invoked when the work needs to 'travel' (switch harness, switch directory or repo, hand to a colleague, or fork a side branch); writes to the OS temp directory and reports the full path."
|
|
4
|
+
argument-hint: "What will the next session use this for?"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# cstl-handoff — Session handoff
|
|
9
|
+
|
|
10
|
+
Condense the current session into a **portable** handoff document (`cstl-handoff-{yyyyMMdd-HHmmss}-{slug}.md`), written to the **OS temp directory** (does not pollute the workspace), so a new agent can continue without the original session. User-invoked (`disable-model-invocation: true` — the agent never triggers it on its own; it is written only when the user invokes `/cstl-handoff`).
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## How this differs from a task `handoff.md` (read first)
|
|
15
|
+
|
|
16
|
+
**The two have opposite purposes — not interchangeable:**
|
|
17
|
+
|
|
18
|
+
| | This skill (session handoff) | Task `handoff.md` |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| What | Portable cross-session summary | Child-task integration / implementation-window **delivery evidence** |
|
|
21
|
+
| Where | OS temp directory (volatile) | `.cstl/tasks/<task>/` (durable, archived with the task) |
|
|
22
|
+
| Lifecycle | Single transfer; dead once the work lands | Kept with the task evidence for Parent / review traces |
|
|
23
|
+
|
|
24
|
+
A task directory's `handoff.md` is the evidence file for `integrate-child` / `review-child`, **not** a session handoff document; the temp file this skill produces is **not** task evidence.
|
|
25
|
+
|
|
26
|
+
## When to use / when not (five-question tree)
|
|
27
|
+
|
|
28
|
+
At stage boundaries first ask: **does the work still continue in this session?**
|
|
29
|
+
|
|
30
|
+
1. **Continue** — default preference: keep going in this session
|
|
31
|
+
2. **Clear** — context can be dropped; clear and restart
|
|
32
|
+
3. **Handoff** — the work needs to travel → this skill
|
|
33
|
+
4. **Subagent** — a side branch can run in parallel while the main session stays → dispatch a subagent (optionally with a handoff file)
|
|
34
|
+
5. **Compact** — same harness, same directory, only intent compression needed → use the platform compact
|
|
35
|
+
|
|
36
|
+
**Handoff only when the work needs to travel**, triggered by exactly four situations:
|
|
37
|
+
|
|
38
|
+
| Situation | Why a file is needed |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| Switch harness (e.g. Cursor → Codex) | The new harness cannot see the old context |
|
|
41
|
+
| Switch directory / repo | Common for prototype directories and new repos |
|
|
42
|
+
| Hand to a colleague | They need something they can read independently |
|
|
43
|
+
| Fork a side branch (main line continues) | You stay in this session; a second agent takes a copy in parallel |
|
|
44
|
+
|
|
45
|
+
**Same harness, same directory continuation → compact / continue, not handoff.** The value of handoff is **portability**, not better compression; if only intent compression is wanted, `/compact` is the better fit.
|
|
46
|
+
|
|
47
|
+
## Steps
|
|
48
|
+
|
|
49
|
+
1. **Read the user argument**: the "next-session purpose" passed on invocation decides which whys to keep (trim key decision rationale by purpose — do not take everything verbatim).
|
|
50
|
+
2. **Write the temp file** (path rules below).
|
|
51
|
+
3. **Report the full absolute path** (required): temp paths are long and differ per OS; the user must get the path first.
|
|
52
|
+
4. **Remind about volatility**: the temp file may be cleaned by the environment (Codex clears temp across sessions; `/private/tmp` is lost on reboot). For cross-hour / cross-harness continuation, ask the user to copy it to a durable location immediately (this also applies to other temp files referenced by the document).
|
|
53
|
+
|
|
54
|
+
### Path rules (Windows first)
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
$env:TEMP\cstl-handoff-{yyyyMMdd-HHmmss}-{slug}.md
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- Windows: `$env:TEMP` (i.e. `%TEMP%`), e.g. `C:\Users\<user>\AppData\Local\Temp\cstl-handoff-20260808-153000-migrate-ts.md`
|
|
61
|
+
- Linux / macOS: `$TMPDIR/cstl-handoff-{yyyyMMdd-HHmmss}-{slug}.md` (`/tmp` when `$TMPDIR` is unset)
|
|
62
|
+
- After writing, always report the **full absolute path** to the user (Write-Host or plain text) — never just the filename.
|
|
63
|
+
|
|
64
|
+
## Content template (English skeleton)
|
|
65
|
+
|
|
66
|
+
> Follow `artifact_locale` when the project uses it; English by default.
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
# Session handoff — <work summary>
|
|
70
|
+
|
|
71
|
+
> Generated by cstl-handoff at <time> · Next-session purpose: <user argument>
|
|
72
|
+
|
|
73
|
+
## Goal
|
|
74
|
+
<what the in-flight work is trying to achieve>
|
|
75
|
+
|
|
76
|
+
## Done
|
|
77
|
+
- <items>
|
|
78
|
+
|
|
79
|
+
## Not done / Blocked
|
|
80
|
+
- <items>
|
|
81
|
+
|
|
82
|
+
## Next steps
|
|
83
|
+
1. <ordered steps>
|
|
84
|
+
|
|
85
|
+
## Key whys (trimmed by next-session purpose)
|
|
86
|
+
- <decision + reason; whys unrelated to this purpose can be omitted>
|
|
87
|
+
|
|
88
|
+
## Facts vs unverified beliefs
|
|
89
|
+
- Facts: <verified>
|
|
90
|
+
- Beliefs (unverified): <assumptions — never write them as facts>
|
|
91
|
+
|
|
92
|
+
## Pointers (reference paths only, never copy bodies)
|
|
93
|
+
- Task: `.cstl/tasks/<task>/` (prd.md / design.md / implement.md / verify.md)
|
|
94
|
+
- Context: `CONTEXT.md` · Research: `<task>/research/`
|
|
95
|
+
- Prototype evidence (if a prototype was involved): `<task>/research/prototype-<slug>.py` (see `.cstl/spec/guides/prototype-guide.md` §9)
|
|
96
|
+
- Other: ADR / issue / commit / diff paths or URLs
|
|
97
|
+
|
|
98
|
+
## Suggested skills (for the continuing agent)
|
|
99
|
+
- <skill name list, e.g. cstl-brainstorm, cstl-check, cstl-continue>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Rules
|
|
103
|
+
|
|
104
|
+
- **Reference, don't copy**: anything already on disk (spec / PRD / ADR / issue / commit / diff) gets a path or URL only, never pasted verbatim. The document should be a small part of the session; a path list replaces copying.
|
|
105
|
+
- **Redact**: API keys, tokens, passwords, PII → replace with `<REDACTED>` before writing; when unsure, write `<REDACTED>`.
|
|
106
|
+
- **Facts vs beliefs**: unverified assumptions must be marked, never written as verified facts — the continuing agent will treat the document as a contract and will not re-check.
|
|
107
|
+
- **Prototype evidence pointer**: when the session involved a prototype, list the prototype evidence path in the pointers section (`prototype-guide.md` §9: git throwaway branch or a task `research/` path snapshot) and confirm the evidence is captured before cleanup.
|
|
108
|
+
- **Delivery**: have the new agent **read the file path**; do not stuff the summary into shell quotes to launch the new agent (backticks / `$(...)` get swallowed and silently truncated).
|
|
109
|
+
|
|
110
|
+
## Anti-patterns
|
|
111
|
+
|
|
112
|
+
- ❌ Treating handoff as a long-lived document: it is a transit document for a single transfer and dies once the work lands (long-term facts belong in `AGENTS.md` / spec, not handoff)
|
|
113
|
+
- ❌ Pasting large spec / PRD / diff bodies (should reference paths only)
|
|
114
|
+
- ❌ Stuffing the summary into shell quotes to launch the next agent (silent truncation risk)
|
|
115
|
+
- ❌ Not reporting the full path / not reminding about temp volatility
|
|
116
|
+
- ❌ Writing a handoff for same-harness same-directory continuation (should compact / continue)
|
|
117
|
+
- ❌ Writing keys / tokens into the document
|
|
@@ -6,7 +6,7 @@ Hooks/settings are the entry layer that connects Cursor to Trellis. They decide
|
|
|
6
6
|
|
|
7
7
|
`.cursor/hooks.json` registers:
|
|
8
8
|
|
|
9
|
-
- session-start hook: injects a Trellis overview when a new session starts or context resets (note the Cursor `additional_context` bug #158452 — see
|
|
9
|
+
- session-start hook: injects a Trellis overview when a new session starts or context resets (note the Cursor `additional_context` bug #158452 — see `.cstl/framework/cursor-context-injection-guide.md`).
|
|
10
10
|
- workflow-state hook: parses `[workflow-state:STATUS]` blocks from `.cstl/workflow.md` and emits the body matching the selected task `status` on each user input. Parser-only; the script does not embed fallback content.
|
|
11
11
|
- sub-agent context hook: injects task context when implementation/check/research agents start.
|
|
12
12
|
- shell/session bridge: lets shell commands see the same Trellis session identity.
|
|
@@ -35,7 +35,7 @@ Cursor exposes sessionStart, preToolUse on Task/Subagent, beforeShellExecution,
|
|
|
35
35
|
|
|
36
36
|
| User need | Edit location |
|
|
37
37
|
| --- | --- |
|
|
38
|
-
| AI should see more/less context in a new session | `.cursor/hooks.json` → `session-start` hook (or `.cursor/rules/*.mdc` for content the model must see every turn — see
|
|
38
|
+
| AI should see more/less context in a new session | `.cursor/hooks.json` → `session-start` hook (or `.cursor/rules/*.mdc` for content the model must see every turn — see `.cstl/framework/cursor-context-injection-guide.md`). |
|
|
39
39
|
| Per-turn hint policy should change | `[workflow-state:STATUS]` block in `.cstl/workflow.md`. The hook parses workflow.md verbatim — no script edit required. |
|
|
40
40
|
| Sub-agent cannot read PRD/spec | `inject-subagent-context.py` hook or agent prelude in `.cursor/agents/*.md`. |
|
|
41
41
|
| `task.py selected` in shell has no selected task | `inject-shell-session-context.py` hook or environment-variable configuration. |
|
package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/overview.md
CHANGED
|
@@ -17,7 +17,7 @@ Platform files do not store business state. They let Cursor read Trellis state,
|
|
|
17
17
|
| --- | --- | --- |
|
|
18
18
|
| settings/config | `.cursor/hooks.json` | Register hooks and platform behavior. |
|
|
19
19
|
| hooks | `.cursor/hooks/` | Inject context at session start, pre-tool-use on Task/Subagent, before-shell-execution, and stop events. |
|
|
20
|
-
| rules | `.cursor/rules/*.mdc` (`alwaysApply: true`) | Per-turn policy prepended before every prompt (e.g. Request Triage, retrieval routing). See
|
|
20
|
+
| rules | `.cursor/rules/*.mdc` (`alwaysApply: true`) | Per-turn policy prepended before every prompt (e.g. Request Triage, retrieval routing). See `.cstl/framework/cursor-context-injection-guide.md` for the channel-reliability matrix. |
|
|
21
21
|
| agents | `.cursor/agents/` | Define `cstl-research`, `cstl-implement`, and `cstl-check` for Task / Agent-session dispatch. |
|
|
22
22
|
| skills | `.cursor/skills/` | Capability descriptions that auto-trigger or can be read on demand. |
|
|
23
23
|
| commands | `.cursor/commands/` | User-invocable `/slash` entry points (e.g. `cstl-continue`, `record-session`). |
|
|
@@ -43,6 +43,12 @@ Your recommended answer defaults to the **minimal sufficient** option that still
|
|
|
43
43
|
5. After the user answers, summarize the clarified requirement in one or two Chinese sentences.
|
|
44
44
|
6. Execute directly once the requirement is clear enough.
|
|
45
45
|
|
|
46
|
+
## Frontier support (optional)
|
|
47
|
+
|
|
48
|
+
Default is one question at a time (small-request clarification). When several questions can be asked together and their prerequisites are all decided (**≤3 questions**), list them in one round (numbered + recommended answers) and wait for a batch reply. Beyond that, keep one question at a time.
|
|
49
|
+
|
|
50
|
+
Facts the environment can self-check do not consume question slots: self-check first (Hard Constraints: always inspect local files first); while a fact check is pending it only blocks the questions that depend on it — ask the rest of the frontier without blocking.
|
|
51
|
+
|
|
46
52
|
## Escalation
|
|
47
53
|
|
|
48
54
|
Escalate once when the clarified work no longer fits Micro-Grill:
|
|
@@ -43,7 +43,7 @@ Shows the Phase Index (Plan / Execute / Finish) with routing + skill mapping.
|
|
|
43
43
|
|
|
44
44
|
When a task is selected, `get_context.py` shows the selected task's `status` field. Route by `status` + artifact presence. This command replaces the user needing to remember the Trellis flow; it does not itself approve implementation.
|
|
45
45
|
|
|
46
|
-
- `status=planning` + no `prd.md` → **1.1** (
|
|
46
|
+
- `status=planning` + no `prd.md` → **1.1** (Read `.cstl/framework/prd-grill-frontier.md` for PRD Grill discipline)
|
|
47
47
|
- `status=planning` + `prd.md` only → decide whether the task is lightweight or complex. Lightweight can move to **1.4** review; complex returns to **1.1** to add `design.md` + `implement.md`.
|
|
48
48
|
- `status=planning` + complex artifacts complete + sub-agent jsonl not curated (only the seed `_example` row) → **1.3**
|
|
49
49
|
- `status=planning` + required artifacts complete + required jsonl curated or inline mode → execution gate (run `task.py start-execution <task> --check`, report PASS, ask for explicit execution approval, then run `task.py start-execution <task> --approved`)
|
|
@@ -14,6 +14,8 @@ This is mandatory. Before asking the user a question, first check whether the an
|
|
|
14
14
|
|
|
15
15
|
Do not ask the user to confirm facts that the repository can answer. Ask only for product intent, preference, scope, risk tolerance, or decisions that remain ambiguous after inspection.
|
|
16
16
|
|
|
17
|
+
Read root `CONTEXT.md` (if present) before asking questions, and use its glossary terms.
|
|
18
|
+
|
|
17
19
|
## Thinking Principles
|
|
18
20
|
|
|
19
21
|
These two principles shape *how* you grill, not just *what* you ask. Apply them throughout Phase A and B.
|
|
@@ -74,10 +76,10 @@ Inspect and record in `prd.md` (sections: **Confirmed facts**, initial **Out of
|
|
|
74
76
|
1. **Code & tests** — relevant modules, fixtures, configs, error paths.
|
|
75
77
|
2. **Specs** — `.cstl/spec/` indexes and layer guides for touched packages.
|
|
76
78
|
3. **History** — archived tasks, active task research, developer journal when useful.
|
|
77
|
-
4. **Platform** — project platform hooks, agents, and skills (see `.cstl/
|
|
79
|
+
4. **Platform** — project platform hooks, agents, and skills (see `.cstl/framework/cursor-subagent-policy.md` when using Cursor); shared `.agents/skills/` when behavior spans platforms.
|
|
78
80
|
5. **Parent/Child** — if multiple independent deliverables, note child split early in `prd.md`.
|
|
79
81
|
|
|
80
|
-
Use retrieval per `.cstl/
|
|
82
|
+
Use retrieval per `.cstl/framework/retrieval-daily-guide.md` (rg for literals, codegraph for structure, fast-context for semantic sweep).
|
|
81
83
|
|
|
82
84
|
Dispatch **`cstl-research`** (writable Agent) when a topic needs a dedicated `{TASK}/research/<topic>.md` file; do **not** use a subagent for PRD Grill itself.
|
|
83
85
|
|
|
@@ -128,6 +130,19 @@ Stop micro-grill when no blocking open questions remain.
|
|
|
128
130
|
|
|
129
131
|
Do not ask process questions ("should I search?"). Do not re-ask facts Discovery already confirmed.
|
|
130
132
|
|
|
133
|
+
## Frontier rounds (question pacing)
|
|
134
|
+
|
|
135
|
+
PRD Grill questions advance in **frontier rounds**:
|
|
136
|
+
|
|
137
|
+
- **frontier** = all "prerequisite-decided" questions: their prerequisite decisions are resolved, so they can be asked now without guessing unheard answers.
|
|
138
|
+
- Each round lists the current frontier at once, each question numbered (❓Q1/Q2/Q3…) with a recommended answer.
|
|
139
|
+
- **≤3 questions per round**; split into more rounds beyond that to avoid information overload.
|
|
140
|
+
- **Facts are the agent's job**: when a frontier question needs environment facts, dispatch a sub-agent to check; while exploration is pending it counts as an unresolved prerequisite that only blocks its downstream questions — ask the rest of the frontier anyway.
|
|
141
|
+
- **Decisions are the user's job**: every decision waits for the user's answer; do not answer for them.
|
|
142
|
+
- A user answer reshapes the design tree and the frontier extrapolates into the next round; **an empty frontier = the design tree is exhausted** — summarize the consensus and confirm before treating planning as done.
|
|
143
|
+
|
|
144
|
+
> **Override note:** this section overrides the "Ask the questions one at a time" line in the Non-Negotiable Interview Contract — Phase B (PRD Grill) pacing follows these frontier rounds rather than one-question-at-a-time; `cstl-micro-grill` still defaults to one question at a time.
|
|
145
|
+
|
|
131
146
|
## Question Rules (Phase B only)
|
|
132
147
|
|
|
133
148
|
Each question must include:
|
|
@@ -21,7 +21,7 @@ You are the Check Agent in the Trellis workflow.
|
|
|
21
21
|
## Model policy
|
|
22
22
|
|
|
23
23
|
- **Default:** no `model:` → **inherit** parent session.
|
|
24
|
-
- **Per dispatch:** main session asks user → one-shot `model:` overlay → `Task` → restore (architecture review uses the same flow). See `.cstl/
|
|
24
|
+
- **Per dispatch:** main session asks user → one-shot `model:` overlay → `Task` → restore (architecture review uses the same flow). See `.cstl/framework/cursor-subagent-policy.md`.
|
|
25
25
|
|
|
26
26
|
## Recursion Guard
|
|
27
27
|
|
|
@@ -48,7 +48,7 @@ Look for the `<!-- cstl-hook-injected -->` marker in your input above.
|
|
|
48
48
|
|
|
49
49
|
Before checking, read:
|
|
50
50
|
- `.cstl/spec/` - Development guidelines
|
|
51
|
-
- `.cstl/
|
|
51
|
+
- `.cstl/framework/verification-strength-guide.md` - Graded verify depth (Lite/Full/Parent; not TDD)
|
|
52
52
|
- Task `prd.md` - Requirements document
|
|
53
53
|
- Task `design.md` - Technical design (if exists)
|
|
54
54
|
- Task `implement.md` - Execution plan (if exists)
|
|
@@ -144,6 +144,20 @@ If `contextPack.selected` is empty but research artifacts exist, document why (b
|
|
|
144
144
|
|
|
145
145
|
## Report Format
|
|
146
146
|
|
|
147
|
+
Report **Standards and Spec in two separate sections** — never merge them into a single severity ranking (dual-axis, aligned with the `cstl-check` skill). Standards findings first, then Spec findings; the same issue may be cross-referenced on both sides, but one axis must not mask the other.
|
|
148
|
+
|
|
149
|
+
```markdown
|
|
150
|
+
## Standards findings
|
|
151
|
+
- [sev] <file>:<line> - <finding>
|
|
152
|
+
|
|
153
|
+
## Spec findings
|
|
154
|
+
- [sev] <file>:<line> - <finding>
|
|
155
|
+
|
|
156
|
+
## Summary
|
|
157
|
+
- Standards: N issues (not ranked against Spec)
|
|
158
|
+
- Spec: M issues
|
|
159
|
+
```
|
|
160
|
+
|
|
147
161
|
```markdown
|
|
148
162
|
## Self-Check Complete
|
|
149
163
|
|