You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Track the actionable findings from a repository-wide audit of main at 53304e1 (2026-08-04),
after the prototype-driven client rebuild and the latest payment/draft work.
This is a bounded health and completion tracker, not a permanent speculative roadmap. It records
confirmed contradictions, unfinished acceptance criteria, major product gaps, and maintenance
risks that were otherwise absent from the open tracker. Implementation detail lives in focused
child issues.
Re-measured 2026-08-07 against main at 47e26cc. Every number in the original audit has
moved and most of the linked work is closed; the figures below are the current ones and the
original assessment is preserved at the bottom. What is left is almost entirely the part
automated coverage cannot do — playing the game and judging it.
open, body re-measured; every file it originally named is split and twelve different ones are over the limit
Also open, and not part of the original audit: #791 — delete exclusions.json and prohibit
curated denylists. It is the one open issue whose acceptance criteria conflict with instructions
elsewhere in the repository, and closing #706 and #776 removed two of the three places that told
contributors to maintain the registry.
Re-measured audit score
Area
Then
Now
Assessment
Architecture
9/10
9/10
Unchanged; the boundaries held through the tranche
Testing discipline
8.5/10
8.5/10
Gates unchanged and green
Rules/card breadth
5.5/10
7.5/10
299 supported definitions, all of M19; 45 named exclusions
Client completeness
6.5/10
8/10
Settle, spectator, deck builder, and undo all shipped
Unchanged, and now a recorded decision rather than an omission
What is actually left
1. Playing it, which nothing here can substitute for
Play at least one complete 3-player FFA through the shipping client.
Play at least one complete 4-player FFA or Commander game through the shipping client.
Exercise dense developed boards, per-attacker defenders, stack interaction, public piles,
commander damage, and eliminated seats.
Repeat the critical paths on desktop, phone landscape/portrait, and 200% browser zoom.
Run the supported-viewport sweep that reports the smallest rendered permanent, and decide
the legibility threshold (docs/client-design.md §10 question 1).
Judge whether the settle band is enough for a player who missed a five-event settle
(§10 question 4) and whether a spectator ever wants to move chairs (§10 question 5).
Drive the deck editor at 299 cards and report where it stops feeling immediate
(§10 question 2).
Play a game with Root Snare in it and report whether the log was enough for a turn-long
effect no region of the board states (§10 question 7).
File narrow reproducible issues for every failure; do not keep generic "validate
multiplayer" work open after findings are split.
Structural support is not usability evidence, and this is the whole of the merge criterion the
project actually holds itself to.
2. Structural debt, before the next expansion
refactor: split oversized production files to satisfy repository policy #711 — twelve production files over 1,000 code lines, led by crates/sage-engine/src/ability/effect.rs (1,936) and crates/sage-server/src/rules_text/effects.rs (1,625). The M19 tranche regrew exactly the
seams the first wave of splits cleared.
3. The exclusion registry
Remove exclusions.json and prohibit card/mechanic denylists #791 — remove exclusions.json, and with it the idea that a missing mechanic can be
recorded rather than built. 45 entries today. Every one of them must survive as affirmative
implementation work or as an honest report of what the catalog does not do.
4. Documentation drift, found a second time
The original audit closed #712 for stale capability claims. The same class of drift recurred as
the tranche landed, and is fixed in the PR linked below:
README described the catalog as "a verified slice of Core Set 2019" when it is the whole set.
README and docs/brief.md both said the replacement layer covers one event and that damage
prevention and cost modification are out of scope; both exist (ADR 0019's own second half
documents damage, so only the summaries were stale).
docs/client-design.md §10 said the deck editor had "only ever been built against a catalog of
~134 cards" — it is 299.
The lesson worth keeping: capability prose in README and the brief goes stale on exactly the
commits that make the project better, and no gate catches it. Whoever lands a mechanic owns the
sentence that claimed it was impossible.
5. Deliberately not scheduled
Chat and a who-is-here roster: real gaps, drawn and honestly labelled as carrying nothing,
below everything above in priority. Open a focused issue only when scheduled.
SAGE has a strong architectural foundation: pure immutable Rust rules engine; server-owned rooms,
policy, timers, automation, redaction, and reconnect; complete personalized views and issued
action identifiers; deterministic randomness; shared Rust/TypeScript protocol contract; generated,
freshness-checked card compatibility report; substantial unit, integration, agent-game, and
browser coverage; a real shipping web client rather than the former grey box.
It is nevertheless a playable vertical slice, not a deployable XMage alternative. The open
tracker previously showed only undo even though the repository itself named multiple unfinished
client surfaces, 36 excluded mechanic families, documentation drift, no current deployment path,
and central files beyond the repository's size policy.
Area
Score
Architecture
9/10
Testing discipline
8.5/10
Rules/card breadth
5.5/10
Client completeness
6.5/10
Documentation
6/10
Maintainability
6.5/10
Deployment readiness
3/10
Overall health: 7/10. Against the browser vertical slice ≈7.5/10; against XMage-in-the-browser
≈3.5/10.
Coverage at the time
134 supported functional definitions; 36 explicitly excluded mechanic families; sixteen
production files over 1,000 lines, the largest being apply/cast.rs (~2,696), apply/combat.rs (~2,104), and ability.rs (~1,849).
Purpose
Track the actionable findings from a repository-wide audit of
mainat53304e1(2026-08-04),after the prototype-driven client rebuild and the latest payment/draft work.
This is a bounded health and completion tracker, not a permanent speculative roadmap. It records
confirmed contradictions, unfinished acceptance criteria, major product gaps, and maintenance
risks that were otherwise absent from the open tracker. Implementation detail lives in focused
child issues.
Where this stands
Nine of the ten linked issues are closed:
docs/client-design.md§6.9, the band, in #785UndoPolicy::Offby defaultAlso open, and not part of the original audit: #791 — delete
exclusions.jsonand prohibitcurated denylists. It is the one open issue whose acceptance criteria conflict with instructions
elsewhere in the repository, and closing #706 and #776 removed two of the three places that told
contributors to maintain the registry.
Re-measured audit score
What is actually left
1. Playing it, which nothing here can substitute for
commander damage, and eliminated seats.
the legibility threshold (
docs/client-design.md§10 question 1).(§10 question 4) and whether a spectator ever wants to move chairs (§10 question 5).
(§10 question 2).
effect no region of the board states (§10 question 7).
multiplayer" work open after findings are split.
Structural support is not usability evidence, and this is the whole of the merge criterion the
project actually holds itself to.
2. Structural debt, before the next expansion
crates/sage-engine/src/ability/effect.rs(1,936) andcrates/sage-server/src/rules_text/effects.rs(1,625). The M19 tranche regrew exactly theseams the first wave of splits cleared.
3. The exclusion registry
exclusions.json, and with it the idea that a missing mechanic can berecorded rather than built. 45 entries today. Every one of them must survive as affirmative
implementation work or as an honest report of what the catalog does not do.
4. Documentation drift, found a second time
The original audit closed #712 for stale capability claims. The same class of drift recurred as
the tranche landed, and is fixed in the PR linked below:
docs/brief.mdboth said the replacement layer covers one event and that damageprevention and cost modification are out of scope; both exist (ADR 0019's own second half
documents damage, so only the summaries were stale).
docs/client-design.md§10 said the deck editor had "only ever been built against a catalog of~134 cards" — it is 299.
The lesson worth keeping: capability prose in README and the brief goes stale on exactly the
commits that make the project better, and no gate catches it. Whoever lands a mechanic owns the
sentence that claimed it was impossible.
5. Deliberately not scheduled
below everything above in priority. Open a focused issue only when scheduled.
Completion criteria
This tracker can close when:
than open design questions.
concrete findings resolved or tracked.
deferral stands and this criterion is struck.
Non-goals
the current vertical slice.
Original audit (2026-08-04, `main` at 53304e1)
Executive assessment
SAGE has a strong architectural foundation: pure immutable Rust rules engine; server-owned rooms,
policy, timers, automation, redaction, and reconnect; complete personalized views and issued
action identifiers; deterministic randomness; shared Rust/TypeScript protocol contract; generated,
freshness-checked card compatibility report; substantial unit, integration, agent-game, and
browser coverage; a real shipping web client rather than the former grey box.
It is nevertheless a playable vertical slice, not a deployable XMage alternative. The open
tracker previously showed only undo even though the repository itself named multiple unfinished
client surfaces, 36 excluded mechanic families, documentation drift, no current deployment path,
and central files beyond the repository's size policy.
Overall health: 7/10. Against the browser vertical slice ≈7.5/10; against XMage-in-the-browser
≈3.5/10.
Coverage at the time
134 supported functional definitions; 36 explicitly excluded mechanic families; sixteen
production files over 1,000 lines, the largest being
apply/cast.rs(~2,696),apply/combat.rs(~2,104), andability.rs(~1,849).Recommended execution order (as written then)
Every step of that order except the playtests, #711, and the deliberately deferred #710 is done.