Skip to content

T103: the T074 files' composed reds, respelled to their carved homes and the composed tree (plan 038, T094's R2-INV-R9) - #49

Merged
brettheap merged 7 commits into
mainfrom
r2/t103-t074-files
Oct 7, 2026
Merged

brettheap merged 7 commits into
mainfrom
r2/t103-t074-files

Conversation

@brettheap

@brettheap brettheap commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Authored by lane openXfactory-3, delegated by lane openxfactory-4 (#656 6021862323)

Arc: neutral-product-standalone-operability

T103: the T074 files (plan 038; T094's map R2-INV-R9, slice outline row T103)

There is no tasks.md entry yet: lane 4 records T094's slices after T002 (openxFactory#1251). Until then, the contract is the slice outline row plus the holder's rulings, openxFactory#656 6021830531.

  • Realizes: the composed half of requirement 9 for these four declared files (T073's F9.1: each declared file runs green in the composed workflow). The means are PP, plus MN, HR and CS for test_gate_console.py.
  • Falsifier (the outline row): run the four files composed, each alone. 28 reds go to 0: completeness 2, packet 1, gate_console 1, round_trip 24. test_gate_console.py then reads 127 passed and 5 skipped. Its 5 skips are OQ-R9-3, which this slice respells so they run composed: it reads 132 passed, 0 skipped.
  • Ruled: openxFactory#656 6021830531:
    • OQ-R9-1 to OQ-R9-4 at their defaults;
    • W7: each of these four files' chain is T103 → T074, so this lands before T074.
    • The ruling it sits under is 6016982816 (ARC-Q2 (a)).
  • After: T095 (T095: the composed harness for the declared integration tests (plan 038, T094's R2-INV-R9) #46, landed as e2340bb6), which this PR codes against: openxfactory_root(), CONTRACTS_DIR and DECLARED_HOST_SUITES. T021 (T021, U-2: the gate console's schemas, each read where its owner keeps it, nothing vendored (plan 038, P4F-4) #40) landed as f70bc9c3. Both are met.

What changed (4 test files, nothing else)

file nodes means change
tests/test_completeness.py 2 MN, PP The purity check reads completeness.py at its carved home (carved_module_path), and doc_health.lines where this process imports it from. The gating bound scans this leg's import root src/ and expects openxdox/generator.py and openxdox/kickoff.py. Its doc_health half scans the doc_health package this process imports.
tests/test_round_trip.py 24 PP _MOVER reads openxFactory's scripts/proposal-support.py through openxfactory_root() (23 nodes). The shared-predicate pin reads round_trip.py at its carved home and families.py from families.__file__ (1 node).
tests/test_doxbench_packet.py 1, the rail node PP The status-read drift check reads openxFactory's corpus, openxfactory_root() / "docs", instead of this checkout's docs/.
tests/test_gate_console.py 1 collection error, and the 3 cases behind it PP, MN, HR, CS The module-level forward-gate load goes through openxfactory_root(). The two in-test from ideation_dashboard import cli imports become from opendox import cli. HR (the two cases that parse gate) is T095's DECLARED_HOST_SUITES, and CS (the receipt case) is T095's CONTRACTS_DIR; neither needs an edit in this file.
tests/test_gate_console.py, OQ-R9-3 5 skips CS _contract_carries_the_new_verbs reads each schema where the pinned validator reads it. gate-action-record comes from the installed distribution's packaged copy (openxdox.contracts.verified_path). gate-intent comes from the directory CONTRACTS_DIR names. A lone checkout has no CONTRACTS_DIR, so the group still skips there. Once CONTRACTS_DIR is supplied, a schema that cannot be read fails collection instead of reading as "not released" (Copilot r4199436303).

Edits are kept local to the failing reads, so T074's later respelling of these files' doc_health imports stays clean. The two doc_health reads in completeness and round_trip resolve through the import system, so they follow whatever T074 makes those imports.

Flagged, a widening beyond the failing assertion: test_the_scoring_modules_only_importers_are_the_generator_and_the_guard's second loop scanned REPO_ROOT / "scripts" / "doc_health". This leg has no such directory, so since the carve the loop has scanned nothing and passed vacuously. It now scans the composed doc_health package, 38 modules, and passes. Mutant M2b below shows the check is live.

The falsifier, measured

Measured in R1Q23 (a)'s composed form:

The integration branches are LOCAL and never pushed:

Earlier runs over local integrations read the same, file for file: main d45a0939 + #40 + #46 at 6aeb6797, and main f70bc9c3 + #46 c2192e3e at 57a970fc.

The rail node needs T073's status-exemption rail. Without it, the node fails on pk.STATUS_SCAN_LINES, at the rail, before it reaches its corpus read. So the four files are also measured with #45 26fe63e7 merged in, with T022's placement made first and removed after.

Base + #45, 28 red:

tests/test_completeness.py: exit 1; 29 passed, 2 failed, 0 errors, 0 skipped
tests/test_doxbench_packet.py: exit 1; 85 passed, 1 failed, 0 errors, 0 skipped
tests/test_gate_console.py: exit 2; 0 passed, 0 failed, 1 errors, 0 skipped
tests/test_round_trip.py: exit 1; 50 passed, 24 failed, 0 errors, 0 skipped
TOTAL over 4 files: 164 passed, 27 failed, 1 errors, 0 skipped; 28 red

Head + #45, 0 red:

tests/test_completeness.py: exit 0; 31 passed, 0 failed, 0 errors, 0 skipped
tests/test_doxbench_packet.py: exit 0; 86 passed, 0 failed, 0 errors, 0 skipped
tests/test_gate_console.py: exit 0; 132 passed, 0 failed, 0 errors, 0 skipped
tests/test_round_trip.py: exit 0; 74 passed, 0 failed, 0 errors, 0 skipped
TOTAL over 4 files: 323 passed, 0 failed, 0 errors, 0 skipped; 0 red

The 28 red at base, each with its first failure:

  • test_completeness.py: test_the_scoring_module_touches_nothing_outside_its_arguments (FileNotFoundError, scripts/ideation_dashboard/completeness.py); test_the_scoring_modules_only_importers_are_the_generator_and_the_guard (AssertionError: []).
  • test_doxbench_packet.py::test_the_status_read_agrees_with_the_repositorys_own_corpus_reader: "the drift check needs real documents to be a check".
  • test_gate_console.py: a collection error (FileNotFoundError, scripts/proposal-support.py).
  • test_round_trip.py:
    • test_both_gates_agree_where_a_documents_status_header_is ×12, test_the_mover_agrees_with_the_other_fence_implementations ×10 and test_the_movers_line_split_is_the_three_real_endings_and_nothing_else: FileNotFoundError, scripts/proposal-support.py;
    • test_the_shared_predicate_is_spelled_the_same_in_all_three: FileNotFoundError, scripts/ideation_dashboard/round_trip.py.

Without #45, base vs head reads completeness 2→0, round_trip 24→0 and gate_console 1→0 (132 passed). Packet reads 57 red at both: its 56 rail nodes and the rail node all fail at the rail, which is T073's.

The two "rejected" conformance cases are rejected by the schema (validator exit 1), not by a harness failure (exit 2). Run by hand with the farm:

  • a valid promote-to-staging record: exit 0;
  • one with no workflow job: exit 1, "2 error(s)";
  • a derive-possibles record with no cluster_id: exit 1, "1 error(s)".

Mutants of the respellings

This slice adds no guard and no fixture. Each mutant reverts or misdirects one respelled read; every one was run with that file alone, composed, over head + #45.

id mutation result
M1 purity check reads generator.py, not completeness.py killed: 1 failed (AssertionError on the import set)
M2b the doc_health loop scans src/ instead killed: 1 failed (the loop's assertion names completeness.py)
M3 importer scan back to REPO_ROOT / "scripts" killed: 1 failed (AssertionError: [])
M4 shared-predicate pin reads gate_console.py killed: 1 failed
M5 rail node back to REPO_ROOT / "docs" killed: 1 failed ("the drift check needs real documents to be a check")
M6 conformance group: CONTRACTS_DIR test inverted 127 passed, 5 skipped: the group reverts to never running
M7 conformance group reads a schema without the verbs 127 passed, 5 skipped: the skip condition reads the schema's content
M8 a broken farm: a pytest plugin removes gate-intent.schema.yaml from the farm after the conftest builds it at 6aeb6797, before the fix: 127 passed, 5 skipped, so it survived (the masking Copilot r4199436303 named). At 57a970fc: a collection error (FileNotFoundError), so it is killed

Unchanged

Base (main e2340bb6) vs head (683b9562), each file alone and composed: 974 nodes, 0 differ, and no node goes from green to red anywhere.

  • 12.5's 16 governed suites: identical at both, node for node. Their remaining reds are T073's and the other slices', not this PR's.
  • F5.2's 5 protected files: generator 45, session_snapshot 23, snapshot_determinism 6, snapshot_registry 40 and snapshot_validation_launch 9, all passed at both.
  • test_column_contributions_governed.py: 9 passed at both.
  • tests/test_declared_exclusion.py, lone (no PYTHONPATH): 207 passed at base and at head.
  • None of the four files is in 12.5's computed set (16) or F5.2's (7), so no allow-list entry is needed.

CI

T095 has landed, so this head carries openxfactory_root and CONTRACTS_DIR from main. Locally, in validate's lone form at 683b9562 (pinned openDox dede32b4, --deselect of LEFT_OUT): selected=1165 passed=1161 skipped=4 failures=0 errors=0, against the floors 1099 / 1095 / 4. tests/test_declared_exclusion.py run alone reads 207 passed at base and at head.

CI at 683b9562:

  • validate passed (run 37548600589): selected=1165 passed=1161 skipped=4 failures=0 errors=0, against the floors 1099 / 1095 / 4 (margin 66);
  • SonarCloud Code Analysis passed;
  • Copilot's review 5435805891 at 683b9562: Findings: None. It rates the PR "Needs a closer look" only because the PR was a draft and the composed packet result depends on T073's rail, which lands separately.

Threads: 1 in all (r4199436303, fixed at 57a970fc, answered and resolved), 0 unresolved.

Not done / what remains

🤖 Generated with Claude Code

Summary by Sourcery

Update composed-workflow test paths and imports so the carved repositories validate their own and shared sources correctly.

Bug Fixes:

  • Update four test suites to resolve source files, support scripts, documentation, and contract schemas from their correct locations in the composed repository workflow.
  • Restore the gate-console CLI and contract conformance checks after the repository carve, including failure behavior for missing composed schemas.

Enhancements:

  • Align completeness, round-trip, packet, and gate-console tests with the split openDox/openXfactory repository layout while preserving their existing coverage.

Tests:

  • Make the four affected test files pass in composed isolation, eliminating 28 baseline failures and previously skipped contract cases.

brettheap and others added 3 commits October 6, 2026 17:43
…(plan 038)

Repairs the composed reds of T094's map (R2-INV-R9, slice T103) that need
nothing from T095:

- tests/test_completeness.py (2 nodes): the purity check reads the scoring
  module at its carved home (carved_module_path), and doc_health.lines where
  this process imports it from; the gating bound scans this leg's import root
  (src/) and expects openxdox/generator.py and openxdox/kickoff.py; its
  doc_health half scans the doc_health package this process imports, which
  the carve had left scanning a directory this leg does not have.
- tests/test_round_trip.py (1 of 24): the shared-predicate pin reads
  round_trip.py at its carved home and families.py where it is imported from.
- tests/test_gate_console.py: the two in-test CLI imports are respelled to
  opendox.cli (the collection error stays until the T095-dependent half).

Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…y_root() and CONTRACTS_DIR (plan 038)

The half of T094's slice T103 that codes against T095's interface (#46):

- tests/test_doxbench_packet.py, the rail node: the status-read drift check
  reads openxFactory's corpus (docs/) from the composed tree through
  openxfactory_root(), not this checkout's docs/, which holds too few
  documents for the check to be one.
- tests/test_round_trip.py (23 nodes) and tests/test_gate_console.py (the
  collection error): openxFactory's forward gate, scripts/proposal-support.py,
  which the carve left in openxFactory, is read from the composed tree.
- tests/test_gate_console.py, OQ-R9-3: the conformance group's skip condition
  reads each schema where the pinned validator reads it (gate-action-record
  from the installed distribution's packaged copy, gate-intent from the
  contracts directory CONTRACTS_DIR names), so its five cases run composed;
  a lone checkout has no CONTRACTS_DIR and the group still skips there.

The gate console's two gate-parsing cases and its receipt case need T095's
DECLARED_HOST_SUITES and CONTRACTS_DIR, and nothing more in this file.

Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Reviewer's Guide

This draft adapts four test suites to the post-carve composed workflow by resolving source modules, support scripts, corpus documents, and contract schemas from the locations actually used by openDox and openxFactory. The changes are limited to test read paths and imports, including activation of previously vacuous contract checks in composed runs while retaining skips for incomplete lone-checkout environments.

File-Level Changes

Change Details Files
Repoint completeness and importer-integrity checks to the carved openDox modules and the composed doc_health package.
  • Read completeness.py from its carved module path and doc_health.lines from the active import location.
  • Scan src/openxdox for scoring importers and the composed doc_health package for forbidden dependencies.
tests/test_completeness.py
Align corpus and support-script reads with the composed openxFactory tree.
  • Use openxfactory_root() for the corpus used by the packet status-drift check.
  • Load proposal-support.py from openxFactory rather than the checkout-local scripts directory.
tests/test_doxbench_packet.py
tests/test_gate_console.py
tests/test_round_trip.py
Update gate-console tests to exercise the carved openDox CLI and activate contract conformance checks against the correct schema locations.
  • Import the CLI from opendox.
  • Read gate-intent from CONTRACTS_DIR and gate-action-record from packaged verified contracts.
  • Preserve lone-checkout skipping when composed contract inputs are unavailable.
tests/test_gate_console.py
Update round-trip source-pinning checks to resolve each implementation from its actual composed-tree location.
  • Read round-trip.py from its carved home and families.py from the imported module path.
  • Continue loading the mover from openxFactory's composed scripts directory.
tests/test_round_trip.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

A missing composed schema is incorrectly converted into passing test skips.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Updates four test suites for carved module locations and composed openxFactory resources.

Changes:

  • Resolve source modules and schemas from their owning packages.
  • Read composed tooling and documentation through openxfactory_root().
  • Switch CLI tests to opendox.cli.
File Description
tests/​test_completeness.py Updates purity and importer scans.
tests/​test_round_trip.py Resolves mover and predicate sources.
tests/​test_doxbench_packet.py Scans the composed documentation corpus.
tests/​test_gate_console.py Updates CLI, support script, and schema resolution.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread tests/test_gate_console.py Outdated
brettheap and others added 2 commits October 6, 2026 22:05
Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…skipping it (Copilot r4199436303)

Once a composed run supplies CONTRACTS_DIR, a gate-intent or gate-action-record
schema that cannot be read is a broken composed source, not an unreleased
contract. The OSError handler made it read as "verbs not released", so the
five conformance cases skipped and the file passed. The read error is now left
to fail collection. A lone checkout, with no CONTRACTS_DIR, still skips the
group as before.

Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Required dependency PRs #45 and #46 remain open, leaving this draft’s standalone CI intentionally red.

Review effort: Balanced
Findings: None

Resolved since last review (1)

Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

It remains draft and its composed packet result depends on the separately landing T073 rail changes.

Review effort: Balanced
Findings: None

@brettheap brettheap changed the title DRAFT: T103: the T074 files' composed reds, respelled to their carved homes and the composed tree (plan 038, T094's R2-INV-R9) T103: the T074 files' composed reds, respelled to their carved homes and the composed tree (plan 038, T094's R2-INV-R9) Oct 7, 2026
@brettheap
brettheap marked this pull request as ready for review October 7, 2026 00:25
@sourcery-ai

sourcery-ai Bot commented Oct 7, 2026

Copy link
Copy Markdown

Sorry @brettheap, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 16 hours and 54 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@brettheap
brettheap requested a balanced review from Copilot October 7, 2026 00:27
@sonarqubecloud

sonarqubecloud Bot commented Oct 7, 2026

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery assessment

Approved.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

The changes consistently implement the ruled composed-path behavior with no unresolved correctness issues found.

Review effort: Balanced
Findings: None

@brettheap

Copy link
Copy Markdown
Contributor Author

READY at 7383719

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

Holder, automatic READY on Brett's word "land lane 3's PRs when green" (2026-10-06). At the head: CLEAN, rollup SUCCESS, nothing pending, 0 unresolved threads, and Copilot at 73837199 reads "🟢 Approval recommended". The per-repo lander checks closing keywords and lands it.

@brettheap
brettheap merged commit 6f25915 into main Oct 7, 2026
4 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

LANDED — lane openxfactory-4, 2026-10-07T00:31:40Z, PR #49 → 6f25915 (opensoft/openXdox-code main; plain gate)

Brett: plan 038 RULED incl. lane openxfactory-4 lands every PR (#656 6013547504); Start release 2 (#656 6001702967)

brettheap added a commit that referenced this pull request Oct 7, 2026
Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
brettheap added a commit that referenced this pull request Oct 8, 2026
Brings T101 (#48), T098 (#51), T103 (#49), T096 (#53), T100 (#54), T099
(#47), T021's follow-on (#55), T102 (#52), T022 (#41, landed as aefd109),
T097 (#50) and T096's follow-on (#56).

Conflicted: scripts/composed_placements.py and tests/test_composed_placements.py,
both T022's files, which this branch carried from #41 through #44. Main's
landed side is kept for both. tests/declared_exclusion.yaml merged clean
(T101's entry edits beside T073's header and open_until).

Lane: openXfactory-3

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants