Plumb

Specification

dev07-3 · collect what the run did

A sub-flow of dev07 · run plumb. Entered from the observed run, carrying the run, the traces, the wiring facts and — where mutation ran — the scores. Exits to dev07-4 · decide whether it is proven, carrying the manifest: the one document the core reads.

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

dev07-3-1 record one citation per citing test Proven

As a developer reading a citation I want it to carry what the test claimed beside what the run observed of it, so that every fact on it can be checked rather than taken on trust.

The tests that cite it (26)
  • tests/test_adapter_floor.py::test_the_published_module_can_be_built_at_the_declared_floor — passed, untouched
  • tests/test_board.py::test_an_xfail_is_not_a_skip[skipped-False-skipped] — passed, ungrounded
  • tests/test_board.py::test_an_xfail_is_not_a_skip[skipped-True-failed] — passed, ungrounded
  • tests/test_board.py::test_informs_cites_without_a_depth_and_never_invents_one — passed, ungrounded
  • tests/test_board.py::test_a_depth_written_on_informs_is_not_carried — passed, ungrounded
  • tests/test_board.py::test_every_runner_outcome_maps_without_translation_loss[passed-passed] — passed, ungrounded
  • tests/test_board.py::test_every_runner_outcome_maps_without_translation_loss[skipped-skipped] — passed, ungrounded
  • tests/test_board.py::test_every_runner_outcome_maps_without_translation_loss[failed-failed] — passed, ungrounded
  • tests/test_board.py::test_a_green_setup_is_not_a_pass_and_a_teardown_error_is_not_either — passed, ungrounded
  • tests/test_board.py::test_one_test_citing_two_stories_yields_two_citations_with_their_own_refs — passed, ungrounded
  • tests/test_board.py::test_the_adapter_leaves_grounding_unfilled_rather_than_guessing_it — passed, ungrounded
  • tests/test_end_to_end.py::test_a_failing_citation_un_proves_its_story — passed, grounded
  • 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_a_decision_is_cited_per_aspect_and_reads_in_its_own_words — passed, grounded
  • tests/test_gate.py::test_a_subject_with_several_aspects_derives_one_verdict_each_and_no_overall — passed, ungrounded
  • tests/test_gate.py::test_a_citation_naming_no_aspect_is_counted_nowhere_rather_than_everywhere — passed, ungrounded
  • tests/test_gate.py::test_the_manifest_carries_no_verdict_for_the_gate_to_read — passed, ungrounded
  • tests/test_manifest.py::test_a_citation_is_test_depth_result_and_its_grounding_slot — passed, ungrounded
  • tests/test_manifest.py::test_grounding_and_mutation_are_slots_defaulting_to_unfilled — passed, ungrounded
  • tests/test_manifest.py::test_the_result_vocabulary_is_the_runners_own_normalized — passed, ungrounded
  • tests/test_manifest.py::test_a_citation_carries_the_consumers_key_and_plumb_owns_none_of_it — passed, ungrounded
  • tests/test_manifest.py::test_plumb_enforces_no_uniqueness_on_a_ref_it_does_not_own — passed, ungrounded
  • tests/test_manifest.py::test_the_manifest_names_the_instrument_that_measured_it — passed, ungrounded
  • tests/test_manifest.py::test_a_half_named_instrument_names_none — passed, ungrounded
  • tests/test_manifest.py::test_the_instrument_is_a_property_of_the_fact_not_of_the_document — passed, ungrounded
  • tests/test_manifest.py::test_a_measurement_time_rides_the_fact_and_absent_is_never_now — passed, ungrounded
Requirements (18)
What the user needs
  • dev07-3-1-ur01the minimum citation is test, depth and result; an adapter that knows nothing of wiring still emits a valid document
  • dev07-3-1-ur02the result is the runner's own signal normalized to passed, skipped or failed; the runner's word is used and never carried, so one outcome has one vocabulary
  • dev07-3-1-ur03a green setup is not a pass, and a teardown error is not one either — the result is the test body's
  • dev07-3-1-ur04the wiring fact and the mutation facts are slots, filled by the steps that produce them and defined there
  • dev07-3-1-ur05citation.ref is the consumer's own key — minted, owned and joined by their system; plumb never parses it, and it rides the citation so one test citing two stories may carry two
  • dev07-3-1-ur06where a subject declares aspects, each citation names the one it is about; a citation naming none counts nowhere rather than everywhere, and on a one-aspect subject absent means the only one
  • dev07-3-1-ur07a citation on a decision carries no depth; one written there is not carried
  • dev07-3-1-ur08the observer rides the fact and never the document, and a half-named instrument names none — mechanism is the load-bearing field
  • dev07-3-1-ur09the measurement time rides the fact, and absent is never now
  • dev07-3-1-ur10each citation carries what the observed run spent on it, so cost attributes to a subject; cost is evidence and moves no status
  • dev07-3-1-ur11the mechanism names the rule a frame was named by, so two facts a reader is told to compare were made comparable by the same rule
  • dev07-3-1-ur12an adapter declares the oldest runtime it runs on, so an adopter reads whether it fits their project before installing rather than after a failure
  • dev07-3-1-ur13the tool's floor and an adapter's floor are separate declarations, so upgrading the tool never asks a project to upgrade the runtime its tests run under
  • dev07-3-1-ur14a runtime below the declared floor is refused by name, so an adopter reads their own version back rather than a fault that looks like their project's
What the system does
  • dev07-3-1-sr1the floor is held by reading what the adapter ships, in that language's own terms, so the declaration and the artifact cannot disagree
  • dev07-3-1-sr2the check covers everything the adapter loads in the project's runtime and nothing beyond it, because that is the only part the project's runtime has to satisfy
  • dev07-3-1-sr3a capability the floor cannot carry is declared unavailable at that floor, and the rest of the adapter runs
How well
  • dev07-3-1-nfr1the adapter records facts and stamps no verdict, so it can neither grant nor revoke done — writing an adapter is not a position of trust

dev07-3-2 assemble the manifest per story Proven

As a team whose ids are spreadsheet rows I want them carried untouched, so that adopting this does not mean re-minting a corpus.

The tests that cite it (30)
  • 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_malformed_manifest_is_refused_at_the_edge — passed, grounded
  • tests/test_end_to_end.py::test_a_suite_that_cites_nothing_yet_is_a_correct_first_run — passed, grounded
  • tests/test_end_to_end.py::test_a_manifest_outside_the_window_is_migrated_and_then_read — passed, grounded
  • tests/test_end_to_end.py::test_migrating_a_current_manifest_rewrites_nothing — passed, grounded
  • tests/test_end_to_end.py::test_a_shape_below_the_chain_is_refused_without_naming_a_command_that_cannot_help — passed, grounded
  • tests/test_end_to_end.py::test_a_board_covers_what_was_cited_and_offers_no_denominator — passed, grounded
  • tests/test_end_to_end.py::test_a_namespace_is_declared_and_is_never_a_directory — passed, grounded
  • tests/test_end_to_end.py::test_a_python_run_names_every_citing_test_when_asked — passed, grounded
  • tests/test_manifest.py::test_the_story_id_is_opaque_so_an_external_key_needs_no_catalog — passed, ungrounded
  • tests/test_manifest.py::test_the_archetype_is_per_story_not_per_citation — passed, ungrounded
  • tests/test_manifest.py::test_a_manifest_declares_the_shape_it_was_written_against — passed, ungrounded
  • tests/test_manifest.py::test_the_chain_reaches_one_major_deeper_than_the_window — passed, untouched
  • tests/test_manifest.py::test_a_manifest_from_the_future_is_refused_and_told_what_is_supported — passed, ungrounded
  • tests/test_manifest.py::test_a_manifest_with_no_declared_version_is_refused — passed, ungrounded
  • tests/test_manifest.py::test_an_unknown_story_field_is_refused_rather_than_silently_dropped — passed, ungrounded
  • tests/test_manifest.py::test_the_version_table_and_the_code_cannot_drift_apart — passed, untouched
  • tests/test_manifest.py::test_a_refusal_names_the_version_the_document_declared — passed, ungrounded
  • tests/test_manifest.py::test_a_field_the_declared_version_does_not_define_is_refused_by_name — passed, ungrounded
  • tests/test_manifest.py::test_a_citation_missing_a_required_field_is_refused_by_name — passed, ungrounded
  • tests/test_manifest.py::test_an_adapter_that_knows_nothing_of_grounding_still_emits_a_valid_document — passed, ungrounded
  • tests/test_manifest.py::test_a_retired_shape_is_refused_by_the_chain_and_not_merely_by_a_run — passed, ungrounded
  • tests/test_manifest.py::test_the_manifest_records_how_far_the_run_got_not_only_what_it_found — passed, ungrounded
  • tests/test_manifest.py::test_observing_no_tests_and_being_unable_to_count_are_different_answers — passed, ungrounded
  • tests/test_manifest.py::test_a_count_nobody_measured_is_refused_rather_than_coerced — passed, ungrounded
  • tests/test_manifest.py::test_a_version_4_manifest_carries_forward_with_the_extent_absent_not_zero — passed, ungrounded
  • tests/test_manifest.py::test_a_retired_field_is_not_one_a_newer_version_may_carry — passed, ungrounded
  • tests/test_manifest.py::test_a_retired_field_is_not_one_a_newer_version_may_carry — passed, ungrounded
  • tests/test_manifest.py::test_a_measurement_time_in_the_wrong_shape_is_refused_rather_than_coerced — passed, ungrounded
  • tests/test_the_jvm_adapter.py::test_the_board_counts_the_tests_it_observed_rather_than_reciting_them — skipped, not-checked
Requirements (9)
What the user needs
  • dev07-3-2-ur1citations group under the story id, and the id stays opaque — no catalog is needed and none is kept
  • dev07-3-2-ur2a subject is placed by the namespace its id declares, never by a directory
  • dev07-3-2-ur3the subject's declared archetype rides beside its citations — the one field the adapter is handed rather than measures
  • dev07-3-2-ur4the extent of the observation is recorded, so a run that saw no tests is never read as a run that found nothing wrong
  • dev07-3-2-ur5absent means not reported and is never read as zero; a count nobody measured is refused rather than coerced
  • dev07-3-2-ur6the manifest answers for the subjects the tests cite and carries no denominator — what a project has left to do lives in the project
What the system does
  • dev07-3-2-sr1the manifest is kept outside the project's tree and begins empty every run, so no run reads another run's facts
  • dev07-3-2-sr2the document declares the schema shape it was written against
Still open
  • dev07-3-2-u1whether reporting the extent becomes a hard requirement of the adapter contract or stays optional is undecided; what is decided is that the blind spot is never silent

dev07-3-3 union the adapters, and hand over the manifest Proven

As a developer on a polyglot project I want a missing language named and a disagreement reported, so that a board covering three of my four languages never reads as whole.

The tests that cite it (19)
  • tests/test_artifact.py::test_both_adapters_are_handed_the_same_resolved_facts — passed, ungrounded
  • tests/test_board.py::test_the_manifest_is_the_only_input_the_board_needs — passed, ungrounded
  • tests/test_board.py::test_the_adapter_turns_a_runners_own_signal_into_neutral_facts — passed, ungrounded
  • tests/test_board.py::test_an_adapter_that_could_not_count_raises_no_alarm — passed, ungrounded
  • tests/test_board.py::test_several_manifests_become_one_board_and_a_disagreement_refuses — passed, ungrounded
  • tests/test_board.py::test_an_extent_nobody_can_complete_is_not_a_total — passed, ungrounded
  • tests/test_board.py::test_a_board_missing_a_language_says_so — passed, ungrounded
  • tests/test_config.py::test_the_launcher_picks_the_adapter_and_the_core_never_learns_which — passed, untouched
  • tests/test_config.py::test_an_unknown_adapter_fails_as_a_launch_not_as_a_verdict — passed, ungrounded
  • tests/test_docs_match_the_tool.py::test_a_java_run_never_needs_the_python_runner — passed, untouched
  • tests/test_end_to_end.py::test_a_manifest_this_process_did_not_produce_renders_a_board — passed, grounded
  • tests/test_end_to_end.py::test_a_manifest_this_process_did_not_produce_renders_a_board — passed, grounded
  • tests/test_end_to_end.py::test_a_manifest_survives_the_round_trip_out_and_back — passed, grounded
  • tests/test_end_to_end.py::test_a_malformed_manifest_is_refused_at_the_edge — passed, grounded
  • tests/test_end_to_end.py::test_a_board_from_a_saved_manifest_asks_the_namespace_question_of_the_project_named — passed, grounded
  • tests/test_end_to_end.py::test_a_run_that_cannot_board_leaves_no_manifest_from_an_earlier_one — passed, grounded
  • tests/test_manifest.py::test_the_manifest_round_trips_as_the_sole_interface — passed, ungrounded
  • tests/test_manifest.py::test_a_manifest_from_another_schema_version_is_refused_at_the_edge — passed, ungrounded
  • tests/test_manifest.py::test_a_version_4_manifest_carries_forward_with_the_extent_absent_not_zero — passed, ungrounded
Requirements (14)
What the user needs
  • dev07-3-3-ur1the board derives from the union of every adapter's manifest, never from one of them
  • dev07-3-3-ur2two manifests asserting different facts about one subject are a defect to report, never a difference to average, order or reconcile
  • dev07-3-3-ur3an adapter that could not run is named, so a partial board never reads as a whole one; with one adapter, its failure is the run's failure
  • dev07-3-3-ur4the union is assembled from what the run produced, never from a list of what was expected
  • dev07-3-3-ur5the edge is checked by name: a citation missing a required field, a field the declared version does not define, a retired field, an unknown story field, a document with no declared version, or a value in the wrong shape is refused rather than coerced
  • dev07-3-3-ur6an older shape inside the window is migrated and then read, and a field it could not express is filled only with not reported — never a substantive default; where it cannot be carried honestly it is read as its own version or refused
  • dev07-3-3-ur7a board rendered from a saved manifest answers the namespace question when it is told which project the manifest belongs to, and reads no declaration it was not told about: a configuration that happens to sit where the command was typed may be another project's
What the system does
  • dev07-3-3-sr1the manifest is the sole hand-off between language-specific and language-neutral components, and the one document the core reads
  • dev07-3-3-sr2the manifest's shape is published as the adapter contract, versioned, and this chapter carries no second copy of its fields
  • dev07-3-3-sr3the supported schema majors are a window, and each major's required fields are its own
How well
  • dev07-3-3-nfr1nothing in the core depends on an adapter
Still open
  • dev07-3-3-u1the manifest is read and written whole; whether the document gains a streamable shape or the merge learns to stream is worth deciding rather than defaulting into
  • dev07-3-3-u2two adapters observing the same production code — a polyglot module both can watch — may be the one case two instruments legitimately disagree; the comparability rule decides it and does not yet say
  • dev07-3-3-u3a union whose manifests come from two repositories has no owner: nothing says who holds the board or how a run in one tree learns the other exists — and whatever answers it is assembled from manifests actually produced, never from a list of the expected

← Every chapter