diff --git a/scripts/resolvers/preamble/generate-completion-status.ts b/scripts/resolvers/preamble/generate-completion-status.ts index f07009020..eb9f3cf29 100644 --- a/scripts/resolvers/preamble/generate-completion-status.ts +++ b/scripts/resolvers/preamble/generate-completion-status.ts @@ -69,7 +69,7 @@ preamble's skill-start output echoed. It also drains the artifacts-sync queue (the former skill-end sync step — do not run gstack-brain-sync separately). **PLAN MODE EXCEPTION — ALWAYS RUN:** This writes telemetry to -\`~/.gstack/analytics/\`, matching preamble analytics writes. +\`$GSTACK_STATE_ROOT/analytics/\`, matching preamble analytics writes. \`\`\`bash ${ctx.paths.binDir}/gstack-skill-end --skill "${ctx.skillName}" --outcome OUTCOME \\ diff --git a/test/gen-skill-docs.test.ts b/test/gen-skill-docs.test.ts index 990c53a6f..91939c052 100644 --- a/test/gen-skill-docs.test.ts +++ b/test/gen-skill-docs.test.ts @@ -441,7 +441,7 @@ describe('gen-skill-docs', () => { expect(SKILL_END_SCRIPT).toContain('analytics/skill-usage.jsonl'); // The render still tells the model where telemetry lands. const content = fs.readFileSync(path.join(ROOT, 'SKILL.md'), 'utf-8'); - expect(content).toContain('~/.gstack/analytics'); + expect(content).toContain('$GSTACK_STATE_ROOT/analytics/'); }); test('plan-review generated preambles stay under the Option A budget', () => { diff --git a/test/instruction-facts.test.ts b/test/instruction-facts.test.ts index b468c9e3e..64a74e0cb 100644 --- a/test/instruction-facts.test.ts +++ b/test/instruction-facts.test.ts @@ -193,7 +193,6 @@ const STATE_ROOT_ALLOWLIST: Array<{ file: string; match: string; reason: string { file: 'retro/SKILL.md.tmpl', match: 'glob: "~/.gstack/projects/{repo_slug}/learnings.jsonl"', reason: MANIFEST_GLOB }, { file: 'scripts/resolvers/learnings.ts', match: '* Learnings are stored per-project at ~/.gstack/projects/{slug}/learnings.jsonl', reason: SOURCE_COMMENT }, { file: 'scripts/resolvers/preamble.ts', match: 'local JSONL append to ~/.gstack/analytics/ (inline, inspectable)', reason: SOURCE_COMMENT }, - { file: 'scripts/resolvers/preamble/generate-completion-status.ts', match: '\\`~/.gstack/analytics/\\`, matching preamble analytics writes', reason: PENDING }, ]; describe('templates and resolvers name gstack state only through allowlisted literals', () => {