Repository navigation
fix(build): the moon task graphs' input lists completed — every go:embed target + the test-time reads + the seven missing Python source dirs + the root modules (#712) - #877
Open
gadievron wants to merge 1 commit into
Conversation
gadievron
requested review from
dgeyshis,
shahar-davidson and
sounil
as code owners
October 27, 2026 12:36
…d/test tasks gain every go:embed target + the test-time recipe/testdata reads, the Python test task gains the seven missing source dirs + the root modules (#712) PR #579 named the Go half as a pre-existing gap ('moon.yml's test/build inputs do not include embedded assets... a future chore') and deferred it. The Python half was worse: the test task's inputs were openant/**/* + tests/**/* while the tested tree is core/, utilities/, parsers/, context/, prompts/, report/, github_scanner/ and openant/ — seven of eight source directories outside the input set, plus the root modules the tests import (experiment.py, validate_dataset_schema.py) and the run-shaping files (conftest.py, pytest.ini). Nothing runs moon today (no workspace root, no CI job), so the gap is latent — but the most common edits on the embedded-asset surface (a template's markup, a regenerated report.css, a ui/*.html page, anything outside openant/) would have been a cache hit serving a stale binary or test result, including for the class-coverage and golden-render guards. The falsifier offered two closings: complete the input lists, or record the descriptors unused and remove them. The completion route is taken and the DECISION RECORDED IN THE DESCRIPTOR: the descriptors describe the build this repo actually runs and completing them is the prerequisite for any future moon adoption (a .moon/ workspace root, absent today, is the next step); deleting intended-future tooling is the bigger judgment call. The Go test task additionally gains the NON-embedded test-time reads the review rounds caught: the tailwind recipe (the palette, the config, the input CSS — read by the CSS-freshness suites) and the golden-render testdata (the browser-smoke oracle). Pinned: every //go:embed target (derived from the .go sources line-anchored, resolved repo-relative, the all:/quoted forms handled, the _test.go embeds included for the test pin) is covered by both the build and the test input globs; the recipe + testdata reads covered; every source directory AND root module (derived from the tree) covered by the test task's inputs; the analyze/parse/report tasks cover the source tree; the pre-existing inputs kept; the glob matcher is WAX-FAITHFUL (moon uses starbase_utils::glob which is wax: ** matches zero-or-more segments, * never crosses '/') — the r1-N1 catch: the fnmatch helper false-greened on a narrowed glob.
gadievron
force-pushed
the
fix/712-moon-task-inputs
branch
from
October 27, 2026 13:01
15e572e to
bd2689b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Closes #712 — PR #579 named the Go half as a pre-existing gap ("
moon.yml's test/build inputs do not include embedded assets… a future chore") and deferred it. The Python half was worse and unnamed: thetesttask's inputs wereopenant/**/*+tests/**/*while the tested tree iscore/,utilities/,parsers/,context/,prompts/,report/,github_scanner/andopenant/— seven of eight source directories outside the input set, plus the root modules the tests import. Nothing runs moon today (no.moon/workspace root, no CI job), so the gap is latent — but the most common edits on the embedded-asset surface (a template's markup, a regeneratedreport.css, aui/*.htmlpage, anything outsideopenant/) would have been a cache hit serving a stale binary or test result, including for the class-coverage and golden-render guards.The falsifier (authored at filing): "a moon task graph whose build/test inputs cover the embedded assets and the Python source tree — or a recorded decision that the moon descriptors are unused and should be removed."
The fix — the first disjunct: complete the input lists (the decision recorded)
The completion route is taken and the option-(b) analysis recorded in the Go descriptor's header: the descriptors describe the build this repo actually runs (
go build/go test,pytest) and completing their inputs is the prerequisite for any future moon adoption (a.moon/workspace root, absent today, is the next step); deleting intended-future tooling is the bigger judgment call. The scope is exactly what the falsifier names: the identified input omissions are completed; moon activation remains deferred.The Go
build/testtasks gain everygo:embedtarget — the two report templates, the vendoredreport.css/chart.js/datalabels, the fourui/*.htmlpages and their vendored JS — and thetesttask additionally gains the non-embedded test-time reads the review caught (the tailwind recipe:palette.json/tailwind.config.js/input.css, read by the CSS-freshness suites; the golden-render testdata:browser-smoke/golden_input.md).The Python
test/analyze/parse/reporttasks gain the seven missing source directories plus the root modules (experiment.py—tests/test_cwe_tagging.pyimportsfrom experiment import _normalize_result;validate_dataset_schema.py) and the run-shaping files (conftest.py,pytest.ini,pyproject.toml,requirements.txt,moon.yml). Theinstallinput unchanged.The pins (
tests/test_issue712_moon_task_inputs.py, 9 tests)go:embedtarget is DERIVED from the.gosources (line-anchored, theall:/quoted forms handled, the_test.goembeds included on the test side) — never declared — and asserted covered by both thebuildandtestglobs: a new embedded asset outside the globs fires the pin.installinput unchanged; the recorded decision pinned ("considered and declined" + the workspace-root clause).starbase_utils::glob, which is wax (verified against moon's own source chain + docs):**matches zero-or-more whole segments end-anchored;*never crosses/. Two false-green defects were caught by executed mutation probes and closed (the fnmatch helper whose*crossed/; azip()truncation that matched mid-path).Evidence (runs/712)
9143061f..bd2689b8: 9 nodes / 3 witnesses, all assertion-red at base (the data-read route: the tests read the.ymlfiles, the C4 reverts prove the reads load-bearing).**semantics verified against moon's own source chain:starbase_utils::glob→wax; the docs; a 1211-file × 8-task sweep: 0 disagreements;ui/**/*.htmlmatchesui/index.html— the trailing-**-file case — soui/*.htmlis NOT needed; F1 the root modules the tests import; F2 the Go test task's non-embedded reads its own comment claimed to cover; N1 the fnmatch false-green, caught by a mutation probe); r2 the remediation review (all six verified with isolating controls; the N1-residual: thezip()truncation); r3 TERMINAL DRY (the end-anchor landed; the adversarial pairsFalse; the isolating control executed); r4 the CI-catch round — thePython tests (windows-latest)lane failed:Path.relative_to()yields backslash-separated paths on Windows, so the derived embed targets matched no forward-slash glob (Two of PR #132's three named retired-model-ID residuals are still live — the unused legacy enhance constant and both JS-parser docs #703's path-separator class, met a second time); fixed withas_posix(), proven by thePureWindowsPathisolating control (11/11 targets: the old rendering fails every glob, the new matches;as_posix == stron POSIX — the other lanes unaffected); TERMINAL DRY atbd2689b8.9143061f; the open PRs fix(rust): the macro-body call scan runs on a tree-sitter token-tree walk — both regexes and the byte budget retired to the differential oracle (#708) #871–fix(report): the finding cross-reference contract — the sanitizer keeps the finding-ref anchors (#711) #876 disjoint), reconciliation (4 rows).Parity
The legs' own terminal lines, pasted verbatim (the full logs in the bundle —
base-parity-full.log,head-parity-settled.log[the WARM run],head-parity-settled-cold.log,head-parity-go.log,collect-diff.txt):base (at
9143061f, the full core suite):head, warm (at
bd2689b8, the same suite): the standing trio identity-matched; the +10 passing over base = the 9-test moon-input suite + the 1 parametrizedno-hardcoded-pathsguard item; the skips identical (38 = 38):the go module (at the head):
head-parity-go.logendsEXIT:0— all packages ok.collect-diff: base 13,324 collected → head 13,334 —
+10 added / 0 removed, exactly the new moon-input suite's 9 tests + the parametrized guard item (collect-diff.txt).the cold-run disclosure: the head worktree's FIRST full run showed
3 failed, 13148 passed, 180 skipped— the +142 skips over base are the first-run provisioning class, fully decoded by the warm run above (38 = 38); the cold log retained ashead-parity-settled-cold.log.