test(ci): wire the 147 Idris2 + 186 Zig integration tests into CI; clear RSR template drift#97
Merged
Merged
Conversation
Both suites existed but never ran in CI (the Idris2 tests were only typechecked; the Zig integration suite was never wired into build.zig and in fact never compiled). Wire and green both, verified locally with the real toolchain (idris2 0.8.0 + zig 0.15.2 + GTK/WebKit). Idris2 (abi-typecheck.yml): after typechecking shell+groove, build and run gossamer-abi-tests -> 147 passed, 0 failed. Path filters extended to tests/idris2 and gossamer-abi-tests.ipkg. Zig integration (e2e.yml + build.zig): add a `test-integration` step and run it in the E2E job. Making test/integration_test.zig compile required: - main.zig re-exports its FFI submodules (csp/filesystem/ssg/groove/plugin/ clipboard/dialog/tray) so a test/-rooted module can reach them via the `gossamer` module (Zig 0.15 forbids ../src import across a module root); - completing the `export fn` -> `pub export fn` migration on the C-ABI surface (identical C symbols; now Zig-visible) so the test can call them; - fixing three latent bugs the never-built suite hid: gossamer_notify returns u32 not Result; std.mem.zeroes(GossamerHandle) is rejected by Zig 0.15 (byte-zero the handle instead); the Result enum has 12 variants now, not 11 (Zig main.zig and Idris2 Types.idr agree - verified). Result: 186 passed; the default test/test-display/test-android steps and the libgossamer artifact are unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Zg1kEsjSRpcf1wFBZyeNj
…n drift
- methodology.a2ml: fill the {{PROJECT_UNIQUE_STRENGTH}} placeholder with
gossamer's actual unique strength. The file's own reject-if-contains rule
flags unresolved {{...}}, so this was a self-flagged bug.
- ai/AI.a2ml: the repo identity claimed to be `rsr-template-repo`; correct
to `gossamer` (methodology.a2ml lists `rsr-template-repo` as a
state-corruption marker, so this too was self-flagged).
- .well-known/groove/manifest.json: service_version 0.1.0 -> 0.3.1 to match
the canonical root 0-AI-MANIFEST.a2ml version.
- .editorconfig: stale `RSR-template-repo` header -> `gossamer`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Zg1kEsjSRpcf1wFBZyeNj
hyperpolymath
added a commit
that referenced
this pull request
Jul 1, 2026
…eal export Rebases PR #95's honest-Foreign.idr fix (was 070010f) onto current main. Replaces the placeholder %foreign surface — 8 of the 11 declared symbols had no Zig definition (gossamer_init/free/process/get_string/process_array/ register_callback/is_initialized), the "phantom template" flagged as the CRITICAL item of gossamer#82 — with the real exported C-ABI symbols. All 25 C:libgossamer %foreign declarations now resolve to an actual `export fn` in src/interface/ffi/src/*.zig (verified 25/25 against main's Zig). The remainder of PR #95 (ABI de-conflation, standards CI adoption, governance docs, .machine_readable reorg, licensing) is superseded by work already merged to main — #96 (de-conflation + split packages), #87/#97 (MPL-2.0 licensing), #93 (reusable workflows), #78 (wiki) — and merging it as-is regresses those. This reduces #95 to its one non-superseded contribution so it merges without conflict or regression. Verified with idris2 0.8.0: gossamer-abi + gossamer-groove --typecheck green, 147/147 ABI tests pass, ABI decoupling guard passes. Addresses the CRITICAL item of gossamer#82. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Zg1kEsjSRpcf1wFBZyeNj
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.
Summary
Follow-up hygiene from the repo-wide audit (the same audit that produced the #82 rewrite). Two independent wins, each verified with the real toolchain, not asserted:
build.zigand, it turns out, never compiled. Both now build and pass, and both run in CI.{{…}}placeholder, a stale repo identity, and a version drift).Toolchain used locally: idris2 0.8.0 (Chez, matching
abi-typecheck.yml) + zig 0.15.2 + GTK/WebKit (matchinge2e.yml).Changes
(a) CI test wiring — commit
test(ci): …abi-typecheck.yml— after typechecking shell+groove,idris2 --build+ rungossamer-abi-tests→ 147 passed, 0 failed. Path filters extended totests/idris2/**andgossamer-abi-tests.ipkg.e2e.yml+src/interface/ffi/build.zig— newtest-integrationstep, run in the E2E job → 186 passed. Makingtest/integration_test.zigcompile required:main.zigre-exports its FFI submodules (csp/filesystem/ssg/groove/plugin/clipboard/dialog/tray) so atest/-rooted module can reach them through thegossamermodule (Zig 0.15 forbids../srcimports across a module root — the reason it was never wired);export fn→pub export fnmigration on the C-ABI surface (identical C symbols, now Zig-visible) so the test can call them;gossamer_notifyreturnsu32notResult;std.mem.zeroes(GossamerHandle)is rejected by Zig 0.15 (byte-zero the handle instead); theResultenum has 12 variants now, not 11 — and Zigmain.zigand Idris2Types.idragree (verified:guard_locked=11↔GuardLocked=11).test,test-display,test-android, and thelibgossamer.soartifact all still build/pass.(b) RSR drift — commit
chore(rsr): …bot_directives/methodology.a2ml— fill the{{PROJECT_UNIQUE_STRENGTH}}placeholder (the file's ownreject-if-containsrule flags unresolved{{…}}).ai/AI.a2ml— repo identity claimed to bersr-template-repo; corrected togossamer(also self-flagged by the same reject rule)..well-known/groove/manifest.json—service_version0.1.0→0.3.1(matches the canonical root0-AI-MANIFEST.a2ml)..editorconfig— staleRSR-template-repoheader →gossamer.RSR Quality Checklist
Required
pubprefixes + submodule re-exports; consistent with house style)unsafeblocks without// SAFETY:comments (none added)believe_me,unsafeCoerce,Obj.magic,Admitted,sorry).envfiles includedAs Applicable
src/interface/abi/↔src/interface/ffi/— the 186 integration tests now enforce result-code/ABI agreement in CI)CHANGELOG— intentionally omitted (CI-plumbing + manifest hygiene; happy to add an entry if you'd prefer)Testing
Companion to the #82 rewrite (done separately, no code change). Deliberately scoped to CI plumbing + manifest hygiene — no product-behaviour change.
🤖 Generated with Claude Code
https://claude.ai/code/session_013Zg1kEsjSRpcf1wFBZyeNj
Generated by Claude Code