Some checks failed
ci / check (push) Failing after 4s
Provenance (tier S, one paragraph in lieu of survey and ADR): the human check that kept INTENT stage 1 open was run and the drag was broken. Root cause, worth more than the instance: drop targets were ids, and an id must be unique, so exactly one element could ever be seat-0. The relationship-graph circle took it and the seat card that every action card's own text points at -- 'drag Attack onto a seat' -- silently had none. A seat is drawn twice and both drawings are the seat; the document model could not express that. Drop keys are now data-drop. Any number of elements may carry the same key, so a seat is droppable on its card and on its graph node. Measured on a live server: seat-0/1/2 each appear twice, id survives only on cb-status which is the one element the script looks up, and down=action-attack&up=seat-1 returns ok. Second defect: a drop on nothing returned without posting and without touching the status line, so a broken target was indistinguishable from a working page. resolve already refuses rather than defaulting, which is right; refusing SILENTLY is not. The page now reports the raw fact -- 'took action-attack, let go over nothing droppable' -- which names elements, not moves, so ADR-0007 control 5 holds. And the honest part: the general check added here -- every offered affordance names a key that exists, driven through Policy::choose over four real bot games -- does NOT catch the reported defect. seat-0 did exist, on the graph circle. It is kept because a wholly absent target is a real class, and paired with a targeted regression test that does catch it. Three mutations, each red for its stated reason, including the reported defect reintroduced; only the targeted test fires on that one. A cb-play assertion matched id="action-ground" as a substring while describing itself as checking the page; rewritten through drop_keys. make all exits 0. Stage 1 stays open: verified by tests, mutation and a live server, not by a human dragging. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.5 KiB
TOML
36 lines
1.5 KiB
TOML
[package]
|
|
name = "cb-render-html"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
license-file.workspace = true
|
|
|
|
[features]
|
|
# ADR-0009: the JS harness is exposed to cb-play's tests behind a feature,
|
|
# so the engine stays a dev cost there too and never a shipped one.
|
|
js-harness = ["dep:quick-js"]
|
|
|
|
# ADR-0007 Decision 1: the browser is the renderer, so the rendering path
|
|
# has **no third-party dependencies at all** beyond what the game already
|
|
# carries. Adding one here needs an argument against ADR-0007 §Decision 3.
|
|
[dependencies]
|
|
cb-kernel.workspace = true
|
|
games-ground.workspace = true
|
|
# ADR-0009: an EMBEDDED engine, not `node` — CI runs on rust:1.97, which
|
|
# has no node, so requiring one would make our build acquire a runtime
|
|
# nobody audits while it scored zero on the only instrument that governs
|
|
# dependencies. Optional, and never in the shipped-runtime configuration:
|
|
# AM-4a measures 157,202 against 161,000 and has no room for it.
|
|
quick-js = { version = "0.4", optional = true }
|
|
|
|
[dev-dependencies]
|
|
# The coverage gate walks the serialized view; nothing else needs it.
|
|
serde_json.workspace = true
|
|
# CB-WP-0016 T03 drives a real bot game to render at real decision points.
|
|
# A workspace crate, so AM-4 is unmoved: it counts third-party code.
|
|
# `scenarios` carries GroundState::setup, which the walk needs to deal a game.
|
|
cb-game-runtime = { workspace = true, features = ["scenarios"] }
|
|
games-ground = { workspace = true, features = ["scenarios"] }
|
|
quick-js = "0.4"
|
|
|
|
[lints]
|
|
workspace = true
|