Strata · Compass — Product Requirements Document
The last of the planned Strata teams (after Excavation, the Classification Lab, and Atlas). Compass reads what you keep circling — the arcs a repository scaffolds, drops, and re-scaffolds — and names the next move, with its evidence. Where every other team recovers the past (labor, scheme, decisions) from the record, Compass is the only one that points at the future. That is its whole interest and its whole danger.
Status: planned (the org surface lists it as the lone remaining "planned" team, no count claimed). This document is the plan — and, more than any other Strata PRD, the argument for why this team must be built with extreme restraint or not at all.
1. Thesis
A repository doesn't only record what was done. In its abandoned branches, its re-scaffolded features, its TODO stubs that never grew, and its decisions that got reversed, it records what was wanted and not finished — the intentions that outran the work. Read those signals together and a shape appears: the things this project keeps reaching for and setting back down. Compass names that shape, and from it, the next move that has the most evidence behind it.
This is the natural fourth turn of the Strata thesis. Bowker and Star: infrastructure goes invisible when it works. Compass studies the inverse — the infrastructure that never worked, the intent that left a trace precisely because it failed to ship. An abandoned branch is a fossil of a want. A feature scaffolded twice and dropped twice is a want that keeps coming back. The repository is, among other things, a record of unfinished intentions, and that record can be read.
2. The honesty problem (this section is the reason to be cautious)
Every other Strata team reports the past, and the past has a commit you can cite. Compass predicts, and a prediction has nothing to cite. This inverts the discipline that made Atlas trustworthy, and it is the single fact that must govern the entire design.
The trap is obvious and fatal: a forecasting tool that dresses up noise as foresight. It is trivially easy to emit confident-sounding "next moves" that are really just the largest dead branch restated, or recency bias with a compass rose drawn around it. If Compass ships that, it is not a Strata team — it is a horoscope, and it discredits the honest teams next to it.
So the design rule, stronger than Atlas's "never manufacture rationale":
Compass never predicts. It surfaces evidence and lets the reader conclude.
Concretely, that means Compass is not a recommendation engine that says "build X next."
It is an evidence board: it shows the arcs you keep circling, ranked by how strong and how
recent the circling signal is, each one backed by the real branches / stubs / reversals that
constitute it — and it stops there. The "next move" is a framing of evidence the reader
already owns, never a claim the tool invents. The headline self-measurement (the Compass
analogue of residual_load and rationale_rate) is evidence-per-suggestion: every
surfaced arc must point to ≥N real, dated, attributable signals, or it is not surfaced.
If, when built, the strongest arcs are still indistinguishable from noise (Section 5 shows this is a live risk on this repository), the honest outcome is to say so and surface nothing — a Compass that reports "no arc has enough signal to name" is correct, where one that invents three is not. Compass is allowed to return empty. It is not allowed to guess.
3. The signals (what "circling" is made of)
Compass invents no new excavation. It reads signals the other teams already produce, plus a small amount of its own branch-topology reading, and looks for the same intent recurring across them. A survey of this repository (1,348 commits, 31 May 2026) shows what is actually available — and how noisy it is:
| Signal | Source | Here | Honesty note |
|---|---|---|---|
| Abandoned branches | Games / Necromancer (graveyard.json) | 42 dead threads | the strongest seam — real, dated, attributable |
| Resurrect / bury verdicts | the graveyard game (verdict write-back) | human-supplied | a direct intent signal — the user said "this still matters" |
| Dead-end files (written, deleted) | Excavator (dead_ends) | 484 | noisy: they cluster in active areas, not abandoned ones |
| Reversals | Atlas (kind: "reversal") | 0 | nothing cleanly re-decided yet — the cleanest signal is absent here |
| Replacements | Atlas (kind: "replacement") | 24 | each names a thing swapped out — a possible re-approach, weakly |
| Re-scaffold pattern | branch topology over time | rare | a feature begun, dropped, begun again under a new name — hard to detect |
The reading is sobering and belongs in the plan: the cleanest predictive signal (clean reversals) is entirely absent on this repo, and the most abundant (dead-ends) is the least trustworthy because it fires hardest in the busiest, healthiest areas. The one genuinely high-quality signal is the graveyard's resurrect verdict — but that is human-supplied, so it is intent the user stated, not intent Compass inferred. This is good (it keeps Compass honest) and limiting (Compass is then mostly a re-framing of what the user already told the graveyard).
4. The agent (deliberately a single agent, deliberately small)
Atlas is three agents; Compass is one, and intentionally so — scope restraint is a design feature here, not a shortcut. The agent is Compass (no sub-agents until the single one earns trust).
Compass reads graveyard.json (dead threads + their deadness/recency), the persisted
verdicts (resurrect = "still wanted"), Atlas's decisions (reversals + replacements as
re-approach signals), and the Excavator's dead-end areas — and groups them into arcs: a
named recurring intention with the concrete signals that evidence it. Output, one row per arc:
{
id,
arc, // the recurring intention, named from the signals' own words
// (e.g. "auth" from a dead auth branch + an auth replacement)
signal_count, // how many distinct real signals constitute this arc
signals: [ // EVERY one cited — branch sha, decision id, dead-end path, verdict
{ kind, ref, date, detail } // kind: branch|reversal|replacement|dead_end|verdict
],
last_signal_date, // recency — a cold arc is a weaker arc
strength, // 0..100, transparently = f(signal_count, recency, verdict-boost)
area, // the area it governs, via the same Linker model Atlas uses
framing // a NEUTRAL one-line restatement of the evidence — never an imperative
}
framing is the delicate field and the place the honesty rule lives in code: it is a
description of the evidence ("three abandoned attempts at X, the most recent 40 days ago,
one marked resurrect"), never a directive ("build X"). The reader draws the conclusion.
The strength floor is a hard gate, the Compass analogue of Atlas's confidence floor: an
arc below signal_count ≥ 3 and strength ≥ 60 is not surfaced, and coverage reports how
many were held back — including, loudly, the case where everything was held back.
5. Method & limits
- No model, at all, in v1. Where Atlas used an optional LLM to condense text already in the record, Compass has no such safe use: any model role here would be generating a prediction, which is exactly the forbidden act. v1 is purely deterministic grouping + scoring of existing signals. (A future, clearly-flagged model pass could only ever summarize an arc's already-surfaced evidence — never rank or invent one.)
- Determinism. Given the repo + the other agents' outputs + declared weights, the arcs and their strengths reproduce exactly. The strength function's weights are versioned constants, like the residual lexicon.
- The Linker is reused, not rebuilt — arcs bind to areas via Atlas's existing model.
- Stated blind spots:
- The cold-start / sparse-signal problem is real here (Section 3): on this repository Compass may honestly surface nothing, and the PRD treats that as success, not failure.
- Survivorship. Compass can only see intentions that left a trace (a branch, a stub, a decision). A want that was thought and never typed is invisible — the same limit essay No. 10 names for the whole dig, sharpened.
- The self-fulfilling risk. If a surfaced arc nudges the reader to build it, Compass has
influenced the future it claimed only to describe. The neutral-
framingrule is the guard, but the risk is inherent to any forward-looking surface and is named here on purpose. - Recency ≠ importance. A hot signal is not a valuable one. Strength weights recency because a cold arc is likely truly dropped, but the PRD is explicit that this is a proxy, not a value judgment.
6. Why it belongs in Strata (and the case for not shipping it)
| Team | Direction | Cites |
|---|---|---|
| Excavation, Lab, Atlas, Games, Curator | the past | a real commit, always |
| Compass | the future | nothing — only evidence for a framing |
Compass completes the org's stated shape (it is the last planned team, and the schema already
reserves intent_signals for it). It also genuinely uses what the others built: the
graveyard's threads and verdicts, Atlas's reversals, the Excavator's dead-ends. That
composition is real and is the case for building it.
The case against, stated honestly because a good PRD argues both sides: this repository's predictive signal is weak (0 reversals, noisy dead-ends, one good-but-human signal), so a faithfully-built Compass may surface almost nothing — which is correct but unspectacular — and a Compass that surfaces something impressive is probably cheating. The recommendation is to build it only as the restrained evidence-board described here, accept that it may often be near-empty on this repo, and never let it become a recommender. If that bar feels like it robs the team of its appeal, that is the correct signal that the appeal was the dishonest part.
7. Surfaces (deferred, exactly as Atlas was)
v1 ships the agent and the data (compass.json + coverage), no public surface, mirroring
Atlas's staging. If and only if the data proves to carry real signal, the surface is
/strata/compass: an evidence board, each arc a card showing its framing and the full
list of real signals beneath it (branches, reversals, verdicts — each linking to its commit),
with the coverage strip (arcs surfaced / held back) leading, so an honest "nothing rose above
the floor" is the first thing a reader sees when that is the truth. It would be the sixth
companion and flip the org tile from "planned" to a live arc count.
Out of scope, permanently unless explicitly revisited: any imperative recommendation, any ranking a human didn't supply the inputs for, and any model-generated "next move." Those are the line between a Strata team and a fortune teller.
8. Build plan (Atlas-style, gated)
strata/agents/compass.js— single agent: readgraveyard.json+ verdicts + Atlasdecisions+ Excavator dead-ends, group into arcs, score by the declared weights, apply thesignal_count ≥ 3 ∧ strength ≥ 60floor, writecompass.jsonwith a coverage block.- Orchestrator — add Compass last (it depends on the others' outputs existing in
output/); print a COMPASS section (arcs surfaced / held back). build-report.mjs— fold Compass coverage into the digest; letbuildOrg()flip the Compass tile to a live "arcs surfaced" count only when ≥1 arc clears the floor — if zero clear it, Compass stays "planned," which is the honest state.- Workflow — extend the
strata-run.ymlcommit loop to includecompass.json. - (Deferred, gated on real signal) the
/strata/compassevidence-board surface.
Gate between steps 1 and 2: run the agent on this repo and look at the output. If the surfaced arcs are not obviously, defensibly real to a human reading them, stop and report that rather than wiring a near-empty or noise-driven team into the org. The decision to proceed is a human one, made on the v1 output — not assumed by this plan.
9. Success criteria
- Compass runs deterministically (no model) and either surfaces arcs that a human agrees are genuinely recurring intentions, or honestly surfaces none — both are passing outcomes.
- Every surfaced arc cites ≥3 real, dated signals; zero arcs rest on a single signal or on inferred (un-evidenced) intent.
- Every
framingis a neutral restatement of evidence; zero imperatives ("build…", "you should…") in the output, audited. - The org tile reflects the true state: a live count only if arcs cleared the floor, "planned" if not — never a fabricated number, never a guessed move.
10. Decisions (resolved up front)
- Single agent, no model, v1. Forecasting is the forbidden act; v1 is deterministic evidence-grouping only.
- Hard floor
signal_count ≥ 3 ∧ strength ≥ 60, and an explicit "surface nothing" path when no arc clears it. framingis descriptive, never imperative — enforced and audited; this is the honesty rule in code.- Surface deferred and gated on the v1 output proving real signal; the org tile only flips to "built" when an arc actually clears the floor.
11. Open question (the one genuinely for the owner)
Should Compass be built at all on this repository, given Section 5? The PRD's own recommendation is: build the restrained agent (steps 1–4) because the evidence-board framing is honest and the composition is real, run it, and let the v1 output decide whether the surface (step 5) is worth shipping or whether Compass stays an agent-and-data team whose tile reads a small, true number. The one thing the PRD will not endorse, under any framing, is a Compass that predicts. That is not a v2 feature to revisit; it is the boundary of the team.