Skip to content

Commit 2d47e89

Browse files
copeusclaude
andcommitted
release: v3.3.2 — V-memory was 43% machine output
Asked whether recall still works under 3.x's dogfooding cadence, the measurement said no. A run directory carries two machine-generated shapes ending in .md: the per-job worker prompt the emitter renders, and the spec.md/plan.md a run keeps when its real spec lives elsewhere. On this repository that was 71 prompts and 44 stubs out of 267 indexable files — 43% of the corpus — and the prompts are ~40 lines of near-identical boilerplate. Measured on a real query, not argued: "scope gate write_allowed violation" returned one useful result followed by FIVE near-identical worker prompts. After the exclusion: the PRD's Scope Gate section, a dogfood review, the architecture doc, the implementation plan, another dogfood review. Excluded from the INDEX only. They stay in git, stay in the audit trail, stay readable — they are simply not what anyone means by "what do we know about X". docs/superpowers/dogfood/** is deliberately kept: hand-written, and the densest record this project has of what actually went wrong. "Why was a red test floor merged" now returns that section first. Index 196 -> 152 files, 1712 chunks, all human prose. Nine selftests pin the predicate, including that a real spec, a dogfood record and an architecture doc are never treated as generated. Known and unchanged: the dense lane holds 0 vectors, so recall is FTS5-only and the >= 80 vector scale gate has never engaged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent c5721ea commit 2d47e89

4 files changed

Lines changed: 100 additions & 4 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{
1010
"name": "superpowers-v",
1111
"description": "Compound V for Superpowers: triple parallel pre-flight (code archaeology + domain-expert + Context7 library validator), disjoint partitioning, manifest-driven multi-backend dispatch (Claude + Codex + Antigravity + Cursor), git-diff scope enforcement, crash-resumable runs, adaptive tier-based routing, epic mode, research-grounded brainstorming (gated pre-brainstorm recon + batched elicitation), V-memory local-first semantic+lexical recall over docs/superpowers (opt-in pure-python embeddings + a deterministic recall→action bridge), and batched parallel dispatch (Opus default, narrow Sonnet exception)",
12-
"version": "3.3.1",
12+
"version": "3.3.2",
1313
"source": "./",
1414
"author": {
1515
"name": "Oleg",

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "superpowers-v",
33
"description": "Compound V for Superpowers: triple parallel pre-flight (code archaeology + domain-expert advisor + library/doc validator via Context7), disjoint file partitioning, manifest-driven multi-backend dispatch (Claude + headless Codex + Antigravity + Cursor workers), git-diff scope enforcement, crash-resumable runs, adaptive tier-based routing, epic mode for multi-feature builds, V-memory local-first semantic+lexical recall over docs/superpowers (opt-in pure-python embeddings + a deterministic recall\u2192action bridge), and batched parallel dispatch (Opus default, Sonnet for narrow junior-task carve-out), plus /v:onboard — a project-onboarding command that builds a citation-verified knowledge base + AGENTS.md/CLAUDE.md bridge behind a human gate. Auto-intercepts four transitions: pre-brainstorm recon \u2192 brainstorming \u2192 writing-plans \u2192 execution.",
4-
"version": "3.3.1",
4+
"version": "3.3.2",
55
"author": {
66
"name": "Oleg",
77
"email": "copeus@gmail.com"

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,33 @@ All notable changes to **superpowers-v (Compound V)** are documented here.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses semantic versioning.
66

7+
## [3.3.2] - 2026-09-02
8+
9+
### Fixed — V-memory was 43% machine output
10+
11+
Asked whether recall still works under 3.x's dogfooding cadence, the measurement said no.
12+
13+
`docs/superpowers/execution/<run>/` carries two machine-generated shapes that end in `.md`: the per-job worker prompt the emitter renders, and the `spec.md` / `plan.md` a run keeps when its real spec lives elsewhere (the manifest's `spec_path` points into `docs/superpowers/specs/`). On this repository, after a night of dogfooding, that was **71 worker prompts and 44 run-directory stubs out of 267 indexable files — 43% of the corpus**, and the prompts are ~40 lines of near-identical boilerplate.
14+
15+
The effect, measured on a real query rather than argued:
16+
17+
```
18+
"scope gate write_allowed violation"
19+
before: 1 useful result, then FIVE near-identical worker prompts
20+
after: the PRD's Scope Gate section, a dogfood review, the architecture doc,
21+
the implementation plan, another dogfood review
22+
```
23+
24+
Both are excluded from the **index** now. They stay in git, stay in the audit trail, stay readable — they are simply not what anyone means by *"what do we know about X"*. Recall is evidence for planning and review, and evidence that is 43% copies of one template is worse than a smaller corpus.
25+
26+
Deliberately **not** excluded: `docs/superpowers/dogfood/**`, which is hand-written and the densest record this project has of what actually went wrong. A query for *"why was a red test floor merged"* now returns that section first.
27+
28+
Index: 196 → 152 files, 1712 chunks, all human prose.
29+
30+
### Known
31+
32+
The dense lane holds **0 vectors** — the venv is bootstrapped but nothing has been embedded, so recall is FTS5-only and the `>= 80 vectors` scale gate has never engaged. That is unchanged by this release and unrelated to it; `/v:memory-refresh --bootstrap` is what populates it.
33+
734
## [3.3.1] - 2026-09-02
835

936
> v3.3.0 was cut automatically mid-session, when its version bump reached `main`, and

scripts/compound-v-memory.py

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,50 @@ def _in_git_worktree(root: str) -> bool:
243243
return False
244244

245245

246+
# --------------------------------------------------------------------------- #
247+
# WHAT IS PROSE, AND WHAT IS EMITTER OUTPUT THAT HAPPENS TO END IN .md
248+
#
249+
# `docs/superpowers/execution/<run>/` is a run's audit trail, and two things in it
250+
# are machine-generated: the per-job worker prompt that `compound-v-emit-workflow.py`
251+
# renders, and the `spec.md` / `plan.md` a run carries when its real spec lives
252+
# elsewhere (`spec_path` in the manifest usually points into
253+
# `docs/superpowers/specs/`).
254+
#
255+
# Measured on this repository 2026-09-02, after a night of dogfooding: 71 worker
256+
# prompts and 44 run-directory stubs out of 267 indexable files — **43% of the
257+
# recall corpus**, and the prompts are ~40 lines of near-identical boilerplate.
258+
# A query for "scope gate write_allowed violation" returned five worker prompts in
259+
# its top six, burying the one document that actually explains the scope gate.
260+
#
261+
# Recall is evidence for planning and review. Evidence that is 43% copies of one
262+
# template is worse than a smaller corpus, so these are excluded from the INDEX.
263+
# They stay in git, stay in the audit trail, and stay readable — they are simply not
264+
# what anyone means by "what do we know about X".
265+
#
266+
# NOT excluded: `docs/superpowers/dogfood/**` (written by hand, and the densest
267+
# record this project has of what actually went wrong), and every run-directory file
268+
# that is not one of these two shapes.
269+
_EXEC_PREFIX = DOCS_REL.rstrip("/") + "/execution/"
270+
271+
272+
def is_generated_run_artifact(rel: str) -> bool:
273+
"""True for emitter-rendered prose inside a run directory."""
274+
rel = str(rel or "").replace("\\", "/")
275+
if not rel.startswith(_EXEC_PREFIX):
276+
return False
277+
tail = rel[len(_EXEC_PREFIX):]
278+
parts = tail.split("/")
279+
if len(parts) < 2:
280+
return False
281+
rest = parts[1:]
282+
# <run>/jobs/<job>.prompt.md — rendered by render_worker_prompt()
283+
if len(rest) == 2 and rest[0] == "jobs" and rest[1].endswith(".prompt.md"):
284+
return True
285+
# <run>/spec.md and <run>/plan.md — the manifest's spec_path/plan_path point at
286+
# the real ones; these are the run's local copies or stubs.
287+
return len(rest) == 1 and rest[0] in ("spec.md", "plan.md")
288+
289+
246290
def tracked_files(root: str):
247291
"""Repo-relative *.md/*.jsonl under docs/superpowers, GIT-TRACKED only.
248292
@@ -267,7 +311,9 @@ def tracked_files(root: str):
267311
)
268312
if roots.returncode == 0:
269313
rels += [p for p in roots.stdout.decode("utf-8", "replace").split("\0") if p]
270-
return sorted(r for r in rels if r.endswith(".md") or r.endswith(".jsonl"))
314+
return sorted(r for r in rels
315+
if (r.endswith(".md") or r.endswith(".jsonl"))
316+
and not is_generated_run_artifact(r))
271317
except (OSError, subprocess.SubprocessError):
272318
pass
273319
return [] # fail closed: inside git but ls-files failed — index nothing, never untracked
@@ -276,7 +322,9 @@ def tracked_files(root: str):
276322
for dirpath, _dirs, files in os.walk(docs_abs):
277323
for f in files:
278324
if f.endswith(".md") or f.endswith(".jsonl"):
279-
rels.append(os.path.relpath(os.path.join(dirpath, f), root))
325+
rel = os.path.relpath(os.path.join(dirpath, f), root)
326+
if not is_generated_run_artifact(rel):
327+
rels.append(rel)
280328
return sorted(rels)
281329

282330

@@ -1239,6 +1287,27 @@ def _fake_q(texts):
12391287
shutil.rmtree(tmp, ignore_errors=True)
12401288

12411289
# onboarding: doc_type_for clean labels for root files (no filename leak)
1290+
# --- generated run artefacts are not prose (3.3.2) --------------------
1291+
D = DOCS_REL.rstrip("/")
1292+
check("worker prompt is generated",
1293+
is_generated_run_artifact(D + "/execution/r1/jobs/impl.prompt.md"))
1294+
check("run-dir spec stub is generated",
1295+
is_generated_run_artifact(D + "/execution/r1/spec.md"))
1296+
check("run-dir plan stub is generated",
1297+
is_generated_run_artifact(D + "/execution/r1/plan.md"))
1298+
check("a real spec is NOT generated",
1299+
not is_generated_run_artifact(D + "/specs/2026-01-01-thing-design.md"))
1300+
check("a dogfood record is NOT generated",
1301+
not is_generated_run_artifact(D + "/dogfood/2026-01-01-run.md"))
1302+
check("an architecture doc is NOT generated",
1303+
not is_generated_run_artifact(D + "/architecture/native-mechanisms.md"))
1304+
check("a run-dir file that is neither shape is NOT generated",
1305+
not is_generated_run_artifact(D + "/execution/r1/notes.md"))
1306+
check("a nested jobs path outside a run dir is NOT generated",
1307+
not is_generated_run_artifact(D + "/jobs/impl.prompt.md"))
1308+
check("a non-execution path is never generated",
1309+
not is_generated_run_artifact("README.md"))
1310+
12421311
check("doc_type root agents", doc_type_for("AGENTS.md") == "agents")
12431312
check("doc_type root claude", doc_type_for("CLAUDE.md") == "claude")
12441313
check("doc_type root conventions", doc_type_for("CONVENTIONS.md") == "conventions")

0 commit comments

Comments
 (0)