Repository navigation
T097, display harnesses (B): display.js beside the copied module, S7's role keys and the served words (plan 038) - #50
Conversation
…s role keys, the served words (plan 038, R9-W1 (A″), R9-R1 (a)) Three test files, 87 composed reds (wheel_model 76, grouping 7, project_aggregates 4), each a declared-exclusion entry under doc_health. T094's map (R2-INV-R9) owns them to this slice; the holder's rulings are openxFactory#656 comment 6021830531. DJ under R9-W1 (A″). Since slice S7, wheel-model.js and grouping.js import ./display.js, and each harness copied its module alone, so node read ERR_MODULE_NOT_FOUND. Each harness now copies display.js beside the module under its own name, with a package.json so node reads .js as a module, as T026's harness in test_staging_workbench.py does (#43). test_wheel_model.py routes its ten copy sites through one helper. VR, the keys. The wheel keys are S7's stage roles (source, grouping, candidate, selection, submission, completion), and grouping.js keys its tallies "tally:" + role. The cases and assertions are respelled to them. Snapshot field names are schema and are unchanged. VR, the words, under R9-R1 (a): the SERVED words. The expand and staged harnesses are handed the display the governed host serves (governed_host(), read through display_profile.host_display's injected profile seam; nothing is registered), as the page hands it down. So a verb label is display.act(role) ("▶ Propose", "▲ Promote to staging", "✻ Research brief", "✦ Derive possibles", "◀ Demote"), promotability matches the served register_state values, and the packet flyout reads the served artifact axis ("packet files", "Spec deltas", with the proposal/design/tasks order). 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>
Reviewer's GuideUpdates the three composed JavaScript-model test files for S7 role-key contracts, makes their copied harnesses resolve display.js as ES modules, and changes display-sensitive expectations to use the governed host's served vocabulary and artifact ordering. File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The draft’s required main merge and final-head composed validation remain unverified.
Review effort: Balanced
Findings: None
What changed in this PR
Updates three composed test suites to match openDox’s role-based models and governed display vocabulary.
Changes:
- Copies
display.jsalongside harness modules and enables ES modules. - Replaces legacy wheel and tally keys with stage-role keys.
- Supplies the governed display to action and packet assertions.
| File | Description |
|---|---|
| tests/test_wheel_model.py | Centralizes harness setup and updates role keys and display assertions. |
| tests/test_project_aggregates.py | Repairs module dependencies and updates action keys. |
| tests/test_grouping.py | Repairs module dependencies and updates tally keys. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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>
Lane: openXfactory-3 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…enxfactory_root() (OQ-R9-3, after T095) test_landed_parses_a_real_archived_change_delta read REPO_ROOT.parent.parent / "openxFactory", which a runner's layout never holds, so it skipped there (T094's OQ-R9-3; the map's default respells it so it runs). T095 (#46) now provides openxfactory_root(), composed-only (OQ-R9-4), so the case reads the composed openxFactory tree's archive and skips only where the run is not composed. 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>
|
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 2 days and 11 hours by commenting |
|
|
READY at 9b508a6 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: |
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>
…nd T096's follow-on #56 landed) Two files conflicted (add/add), both T022's, which this branch had carried from #41's head 1f2d685: scripts/composed_placements.py and tests/test_composed_placements.py. Main's side was taken for both, as it was for .gitignore (auto-merged to main's). After this merge the tree differs from main only in T029's two files. Lane: openXfactory-3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Authored by lane openXfactory-3, delegated by lane openxfactory-4 (#656 6021862323)
Arc: neutral-product-standalone-operability
T097, display harnesses (B):
display.jsbeside the copied module, S7's role keys, the served words (plan 038)tasks.mdentry yet; lane 4 records T094's slices after T002 (T002: release 2's base and plan 038's bookkeeping, items 1 to 15 (plan 038) openxFactory#1251). Until then the contract is the slice outline row of T094's map (R2-INV-R9, posted as openDox + openXdox: two open-source layers, an installable app with users, projects and a database; domain descendants pin openXdox (Brett's ruling 2026-09-04) openxFactory#656 comment 6021830607) and the holder's rulings (comment 6021830531). The row reads: T097, display harnesses (B): DJ (A″) + VR keys; filestests/test_wheel_model.py,tests/test_grouping.py,tests/test_project_aggregates.py; depends on R9-W1; 87 reds (wheel_model 76, grouping 7, project_aggregates 4).test_column_contributions_governed.pyat 9 passed,tests/test_declared_exclusion.pygreen run lone).display.jsbeside the module it copies, as T026, U-7: the allow-list for 12.5's governed suites, with R-1 (a)'s span kind (plan 038, H-2) #43 does. No openDox module is made import-free.What this PR does
DJ, R9-W1 (A″). Since § 3.4 slice S7,
wheel-model.jsandgrouping.jsimport./display.js. Each harness copied its module ALONE, so node failed withERR_MODULE_NOT_FOUND … display.js. That is the cause of every one of the 87 reds at the base, and of nothing else. Each harness now copiesdisplay.jsbeside its module, under its own name (display.jsimports nothing), and writes apackage.jsonso that node reads.jsas a module, as #43's harness does.test_wheel_model.py's ten copy sites go through one helper,_copy_wheel_model.VR, the keys.
WHEEL_KEYS = STAGE_ROLES). The old wheel names map to them as follows:documents→source,clusters→grouping,possibles→candidate,staged→selection,active→submission,archived→completion.test_project_aggregates.py's threeactionsForcalls.grouping.jskeys its tallies"tally:" + role, so the tally keys are respelled totally:source,tally:grouping,tally:candidate,tally:submissionandtally:completion.documents,clusters,staged_topics, …) are schema and are unchanged, and so are the action cases' ids.VR, the words, under R9-R1 (a): the SERVED words.
display.act(role);display.registerState(...);wheel.jsputsdisplay: vocabin each action env and passesvocabtopacketGroups. So the two harnesses whose cases assert those words or values, the expand harness and the staged harness, are handed the display the GOVERNED host serves. They install it withreadDisplay({ display: cases.display }), as T026, U-7: the allow-list for 12.5's governed suites, with R-1 (a)'s span kind (plan 038, H-2) #43's harnesses do._served_display()reads the host from the conftest'sgoverned_host()(T020), throughdisplay_profile.host_display's injected-profile seam.OpenxFactoryProfile,host_facet: declared,host_profile: openxfactory-engineering). A probe measured the manifest read this way as equal to the one served when the governed host is registered.▶ draft proposal▶ Propose▲ promote to staging,✻ research brief,✦ derive possibles,◀ demote▲ Promote to staging,✻ Research brief,✦ Derive possibles,◀ Demotepacket,spec deltaspacket files,Spec deltasregister_statevalues (latentis the captured role) keep the live-captured possibles fixtures promotable. The served packet order (proposal.md,design.md,tasks.md) keeps the review-order claim.OQ-R9-3, after T095 (#46).
test_landed_parses_a_real_archived_change_deltareadREPO_ROOT.parent.parent / "openxFactory", which a runner's layout never holds, so it skipped there. It now reads the composed tree through T095'sopenxfactory_root()(OQ-R9-4) and skips only where the run is not composed. Composed it passes, reading this run's own openxFactory checkout. The skip's mutant is not killable: lone, the module stops at collection ondoc_healthbefore the case runs.The falsifier, composed (R1Q23 (a)), each file alone
The composed form:
main84f8ed83(pip install -e ".[test]", then that commit force-reinstalled);92010d3e(tests/composed_host_pin.yaml), withopenDox,openXdoxandopenXwalletinitialized recursively and itsscripts/onPYTHONPATH;TERM=dumb;python -m pytest -q -p no:cacheprovider -rfE --junitxml=… <file> < /dev/nullfrom the checkout root;T022's placement script is not on
main(#41 is open). Run from #41's bytes, it refuses atmainfor want of its.gitignoreline, so nothing was placed. It places only the session runbook, which none of these files reads.Base,
mainfc1115d6:ERR_MODULE_NOT_FOUND … display.js, plustest_wheel_model.py::test_landed_parses_a_real_archived_change_delta.REPO_ROOT.parent.parent / "openxFactory". It runs only because the local clone's layout happens to hold an openxFactory checkout two levels up; on a runner it skips (OQ-R9-3).Head,
c16c05eb(the T097 commitsb401bc0eand9a0704a6, withmainmerged in):The 87 read 0 red. The 88th now reads the composed tree (below) and passes; it no longer skips on a runner.
Mutants (each applied alone, run composed, file restored byte-identical)
display.jscopy,test_wheel_model.pydisplay.jscopy,test_grouping.pydisplay.jscopy,test_project_aggregates.py"display": None)package.json, each of the three filesNODE_OPTIONS=--no-experimental-detect-module): 77, 7 and 4 failed. The unmutated head passes in that mode (80, 11, 12). Node 24's detection otherwise readsdisplay.jsas a module unaided.actionsForoffers only rows with novisiblepredicate, and every one of those carries a literal labelThe unchanged set, composed, base
fc1115d6against headc16c05ebNode-for-node identical: 974 nodes at both, the same 10 failed at both, and
diffempty.branch_session132,doxbench_mutation_boundary80,doxbench_share34,gate_loop_views74,gateway_provenance24,hosted_actor5,session_commits22,session_confinement53,session_gates81,session_lifecycle53,session_records29,session_transaction57,session_verbs65,staging_workbench83 passed); failing identically at both (open slices own these, not this one):session_notebook1 andsession_runbook9.generator45,session_snapshot23,snapshot_determinism6,snapshot_registry40 andsnapshot_validation_launch9 passed, at both.test_column_contributions_governed.py: 9 passed, at both.tests/test_declared_exclusion.py207 passed at both. Each of the three files still stops at collection on its declared reason,ModuleNotFoundError: No module named 'doc_health', at both.validate.ymlcollects the suite less the declared exclusion, and all three files are declared. So its floors cannot move.Files changed
tests/test_wheel_model.pytests/test_grouping.pytests/test_project_aggregates.pyCI and review at
c16c05ebvalidate: run 37554225217, success.c16c05eb, "Needs a closer look", Findings: None. Its one note is the merge of currentmainand the composed run after it, which the next section covers. 0 review threads, 0 unresolved. Earlier heads read the same:b3c2d04eand489081e2, Findings: None, 0 threads.NOT done
mainhas moved past the measured basefc1115d6. The branch is not merged again here: the holder's landing loop brings each lane-3 PR up to date (update-branch) before it lands. This PR changes only the three declared test files above, and none of the commits sincefc1115d6touches them.🤖 Generated with Claude Code
Summary by Sourcery
Bring the display-model test harnesses and assertions in line with the module dependencies, stage-role keys, and served vocabulary used by the current composed application.
Bug Fixes:
Enhancements:
Tests: