Plumb

Specification

dev07-4 · decide whether it is proven

A sub-flow of dev07 · run plumb. Entered from the manifest, carrying the stories' facts. Exits to dev07-5 · report it, carrying a verdict per story that nobody could have typed.

2 of 3 stories proven · 0 passed, not wired · 1 unproven · 0 with nothing holding them

dev07-4-1 check the citation's id lands in a declared namespace Unproven

As a reader of a board I want an id outside every namespace the project declared to be named as one, so that a mistyped id never lands beside a real story looking just as real.

a structural claim is proved by inspection, and its citing test executed production code — so what passed was an exercise of the shape rather than a reading of it

The tests that cite it (3)
  • tests/test_board.py::test_a_story_belonging_to_no_declared_spec_is_named — passed, ungrounded
  • tests/test_end_to_end.py::test_a_condition_names_what_it_is_about — passed, grounded
  • tests/test_end_to_end.py::test_an_id_the_project_declared_in_its_own_tables_is_not_an_orphan — passed, grounded
Requirements (6)
What the user needs
  • dev07-4-1-ur1a citation whose id lies in none of the declared namespaces is reported, named, and the run carries on — a finding is reported and never fails or halts a run
  • dev07-4-1-ur2the question is asked only where the project declared namespaces at all
  • dev07-4-1-ur3the check reads the shape of the id, never whether a document exists behind the namespace
  • dev07-4-1-ur4an id outside every declared namespace is named on its own subject, not only as a fact about the run
  • dev07-4-1-ur5an id the project declares in its own configuration — a decision or a parameter named where the project says how its subjects are judged — is not an orphan: the project has already named it, which is the whole of what the check asks
How well
  • dev07-4-1-nfr1the check is a scan over ids and declarations, needing no further run, so it costs nothing and always runs

dev07-4-2 hold the gate — ran and passed, then the archetype's own check Proven

As somebody trusting a green story I want no kind of claim to have an easier way to pass than any other, so that a fake has no branch to hide in.

The tests that cite it (22)
  • tests/test_end_to_end.py::test_a_skipped_citation_is_a_claim_not_a_proof — passed, grounded
  • tests/test_end_to_end.py::test_declaring_entry_points_separates_wired_proof_from_isolated_proof — passed, grounded
  • tests/test_end_to_end.py::test_config_can_declare_an_archetype_the_run_never_learned — passed, grounded
  • tests/test_gate.py::test_no_citing_test_at_all_is_a_claim_not_a_proof — passed, ungrounded
  • tests/test_gate.py::test_a_skip_or_a_failure_never_proves[skipped] — passed, ungrounded
  • tests/test_gate.py::test_a_skip_or_a_failure_never_proves[failed] — passed, ungrounded
  • tests/test_gate.py::test_one_passing_citation_is_enough_even_beside_a_failing_one — passed, ungrounded
  • tests/test_gate.py::test_the_gate_is_two_checks_in_series_and_fails_fast — passed, ungrounded
  • tests/test_gate.py::test_the_structural_branch_handles_every_grounding_fact — passed, ungrounded
  • tests/test_grounding.py::test_grounding_cross_checks_a_claimed_wired_rung — passed, ungrounded
  • tests/test_grounding.py::test_the_depth_cross_check_actually_runs_in_the_gate — passed, ungrounded
  • tests/test_grounding.py::test_a_not_checked_fact_contradicts_nothing — passed, ungrounded
  • tests/test_grounding.py::test_a_behavioral_story_needs_a_citing_test_that_grounds — passed, ungrounded
  • tests/test_grounding.py::test_one_execution_yields_one_fact_so_no_test_serves_both_archetypes — passed, ungrounded
  • tests/test_grounding.py::test_the_gate_needs_grounding_and_never_mutation — passed, ungrounded
  • tests/test_grounding.py::test_the_archetype_is_per_subject_and_defaults_to_behavioral — passed, ungrounded
  • tests/test_grounding.py::test_an_archetype_selects_a_check_and_can_never_grant_a_pass — passed, ungrounded
  • tests/test_grounding.py::test_dispatched_fails_a_structural_story_like_every_other_executing_fact — passed, ungrounded
  • tests/test_grounding.py::test_the_cheapest_thing_that_passes_a_structural_claim_is_not_assert_true — passed, ungrounded
  • tests/test_grounding.py::test_a_behavioural_story_gets_no_partial_credit_for_touching_nothing — passed, ungrounded
  • tests/test_grounding.py::test_an_inspect_by_import_structural_test_cannot_prove_in_either_order — passed, ungrounded
  • tests/test_grounding.py::test_a_structural_test_may_read_its_artifact_in_a_fixture — passed, ungrounded
Requirements (19)
What the user needs
  • dev07-4-2-ur01two checks in series, fail-fast: a citing test ran and passed, and then the check the story's archetype selects
  • dev07-4-2-ur02no citing test at all, a skip, an abort or a failure is a claim and never a proof
  • dev07-4-2-ur03the second check is mirrored and never waived: each archetype gets its own positive check over the same fact, so an exemption exists for neither
  • dev07-4-2-ur04a behavioural story is proved by grounded; ungrounded and inert refuse it, and not-checked and dispatched yield passed — wiring not verified, because a missing declaration is a fact about the setup and not about the test
  • dev07-4-2-ur05a behavioural story gets no partial credit for touching nothing
  • dev07-4-2-ur06a structural story is proved by inert — the artifact was read and none of it ran; every executing fact refuses it, not-checked included, and a test that touched the artifact in no way proves nothing
  • dev07-4-2-ur07the archetype selects a check and can never grant a pass
  • dev07-4-2-ur08the archetype is declared per subject in the project's configuration, defaults to behavioural, and is never written on the test or inferred from it
  • dev07-4-2-ur09one execution yields one wiring fact, so no test serves both archetypes; a test citing both fails on the side its execution did not serve
  • dev07-4-2-ur10a claimed wired rung (dev07-4-2-sr1) whose wiring fact is ungrounded or inert is refuted; unit and component claim isolation and are never refuted for it
  • dev07-4-2-ur11which arm refused is said, from the citations that actually decided the verdict, so a story refused by one arm is never explained by another's fact
What the system does
  • dev07-4-2-sr1the depth vocabulary is the core's own — unit · component · wiring · standards-integration · smoke · smoke/e2e · e2e — of which the wired rungs are wiring, standards-integration, smoke, smoke/e2e and e2e; a claimed depth outside the vocabulary raises the named condition depth.unsupported, never a guess
  • dev07-4-2-sr2the wired rungs are a fixed set the refutation reads; no project declaration widens or narrows it
  • dev07-4-2-sr3the gate judges a claim against the project's own configuration — the archetype, the entry points, the reduction — so a wrong depth or archetype is corrected there, which is the loop A developer's workflow draws through dev08
How well
  • dev07-4-2-nfr1the wiring fact is on the critical path and mutation never is; the deeper check informs and cannot block
  • dev07-4-2-nfr2availability, degradation and removability are behavioural claims, and their entry point is the assembled artifact
  • dev07-4-2-nfr3whether a claim is structural is the project's declaration, held at spec review and never derived; a mis-declaration costs its author the behavioural proof rather than granting a free one
Still open
  • dev07-4-2-u1an observer that watches execution alone cannot assert a read; what a structural story is proved by under such an observer is undecided
  • dev07-4-2-u2component versus wiring intent is not derivable; the claimed depth is trusted where the wired-rung refutation cannot reach it, and the remainder is named rather than hidden

dev07-4-3 derive the verdict live Proven

As anybody reading a status I want it computed by the run I am looking at, so that no stale done survives the thing that made it true stopping being true.

The tests that cite it (16)
  • tests/test_board.py::test_authored_in_derived_out — passed, ungrounded
  • tests/test_core_is_policy_free.py::test_the_core_carries_no_workflow_vocabulary — passed, inert
  • tests/test_core_is_policy_free.py::test_no_core_module_reaches_outside_the_core — passed, inert
  • tests/test_core_is_policy_free.py::test_the_adapter_depends_on_the_core_and_not_the_reverse — passed, inert
  • tests/test_core_is_policy_free.py::test_nothing_shipped_imports_the_methodology — passed, inert
  • tests/test_decision_standing.py::test_an_evaluated_trigger_reads_holding_or_breached_and_never_proven — passed, ungrounded
  • tests/test_decision_standing.py::test_a_decision_nobody_is_watching_is_surfaced_rather_than_read_as_healthy — passed, ungrounded
  • tests/test_decision_standing.py::test_a_breach_informs_and_does_not_fail_anything — passed, ungrounded
  • tests/test_end_to_end.py::test_the_board_comes_out_of_the_command_line — passed, grounded
  • tests/test_end_to_end.py::test_a_failing_citation_un_proves_its_story — passed, grounded
  • tests/test_end_to_end.py::test_unproven_stories_are_not_a_failure — passed, grounded
  • tests/test_gate.py::test_the_status_vocabulary_is_exactly_three_values — passed, ungrounded
  • tests/test_gate.py::test_status_is_derived_live_and_never_stored — passed, ungrounded
  • tests/test_gate.py::test_the_achieved_vector_reports_only_rungs_that_actually_passed — passed, ungrounded
  • tests/test_grounding.py::test_a_failed_citation_is_never_hidden_behind_another_reason — passed, ungrounded
  • tests/test_grounding.py::test_a_refuted_rung_is_not_achieved — passed, ungrounded
Requirements (21)
What the user needs
  • dev07-4-3-ur01a subject's citations reduce under its declared reduction: best for a story, so one passing citation is enough beside a failing one; worst for a subject every citation must hold
  • dev07-4-3-ur02a proof that later fails un-proves its story
  • dev07-4-3-ur03the status is computed live each run and never stored — a stored status is a claim about a past run read as a claim about this one
  • dev07-4-3-ur04the achieved vector reports the rungs that actually passed, and never one the run refuted; required depth is the team's policy, kept outside the core, and never gates
  • dev07-4-3-ur05a subject with declared aspects gets a verdict per aspect and no aggregate, so no reader is shown a green no aspect earned
  • dev07-4-3-ur06the conditions say why the verdict reads as it does, in codes a reader's next move differs by
  • dev07-4-3-ur07cited-and-unproven says which kind: evidence that failed, evidence nobody observed — a citation that never ran is no evidence at all, and a flaky runner is not a broken claim — or evidence that never existed
  • dev07-4-3-ur08a story whose tests also reached production code outside every entry point is surfaced whatever its status
  • dev07-4-3-ur09a decision's standing is its own vocabulary — it holds or it is breached, and it never reads proven
  • dev07-4-3-ur10a decision nothing has measured and nothing is scheduled to review is surfaced as its own condition, because silence and health look identical and the silence is the finding
  • dev07-4-3-ur11a parameter is derived as a decision is and read in its own words — supported, unvalidated, refuted or unmeasured — and never as held or breached, because a value is not held and an estimate that loses to its own placebo is refuted
  • dev07-4-3-ur12a citation that ran and failed is surfaced whatever the subject's other citations show, so a failure is never hidden behind the reason another one fell short
What the system does
  • dev07-4-3-sr1the achieved vector is the depths of the story's passing citations, deduplicated and sorted
  • dev07-4-3-sr2both reductions are one rule — minimum by position over a ranked outcome order — so adding a subject kind is a row in a table, never a branch in the core
How well
  • dev07-4-3-nfr1the gate proves the shape of a proof and never its meaning: PROVEN reads somebody wrote a test for this, and the test really ran the real thing; a test that runs the code and asserts nothing passes it, and mutation does not close this, because it checks the code as written and not the claim
  • dev07-4-3-nfr2the core forces only what it can verify; process, priority and required depth are policy, and a rule nobody can check is a rule people satisfy on paper
  • dev07-4-3-nfr3nothing authored depends on anything derived
  • dev07-4-3-nfr4a breached, expired or unwatched decision informs and never fails a run — surfacing is this tool's part and what a breach costs is the adopter's to decide, exactly as an unproven story is
Still open
  • dev07-4-3-u1status rollup to a chapter or an invariant is unsolved, and whatever closes it must recompute from the stories every run — a cached rollup would violate the claim it hangs off
  • dev07-4-3-u2the achieved vector does not describe a structural story: an inert test reached no rung by design, and leaving the vector empty is the leaning
  • dev07-4-3-u3a proof does not know when its claim moved: a story can be rewritten, keep every old proof, and read PROVEN while nothing it now claims has been tested. No field yet carries a claim version, and what one is — a digest, a revision, a lineage — changes what a citation means

← Every chapter