Repository navigation
fix(deed): praxis stems checked like chora stems; clear the three gates #1133 broke - #1136
Conversation
…1133 tripped Hypatia.Deed.dispatch/1 sent any name ending in _praxis.deed to praxis-deed without checking its stem, so _praxis.deed and a non-ASCII stem were accepted. deed.abnf gives praxis-file and repo-file the same stem rule, 1*( ALPHA / DIGIT / "-" / "." / "_" ), so the _chora.deed stem check now covers both suffixes (Codex finding on #1133, deed.ex:104). Tests: an empty, a non-ASCII and a space-holding stem are refused by dispatch/1 and parse/2; a dotted, hyphenated stem is accepted. Two gates #1133 turned red on main, fixed at their cause: * Elixir Compile (dogfood toolchain), check-no-active-logtalk: the vendored standards fixture test/fixtures/deed/standards/valid/rsr-template-repo_chora.deed carries the upstream :report-format "logtalk". It is a byte-faithful copy and must not diverge from standards, so it joins the two identical rsr-template-repo fixtures already listed in .logtalk-allowlist, with the same class and removal condition. * Governance UUID v7/v8 conformance: test/deed_conformance_test.exs wrote four deliberately non-v8 ids as literals, and the pinned gate (standards 7641c7f) has no exemption list. The test now builds them from one v8 id by replacing its version and variant nibbles, with the same assertions (and the v5 identity case now checks the refusal reason). The file and the three vendored invalid fixtures that carry #u5 or malformed #uuid on purpose are also listed in .uuid-v8-exempt, for the current standards gate, which reads that list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0136P7ZoBy5xGnGDLk7wQ8jC
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 17 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
Governance's "Validate Hypatia Baseline" step is red on main since #1135 (85cc775), and on #1136: unfiltered medium finding structural_drift/SD022 in docs/history/A2ML-REMOVED.adoc -- doc references `src/assail/` but no such directory exists in the tree #1135 re-added the literal `src/assail/mod.rs` path in the assail-classifications row. That path is in panic-attack, not here, and #1113 had reworded it for the same reason. This rewords it again ("its assail module"). The row's meaning is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0136P7ZoBy5xGnGDLk7wQ8jC
|
"Validate Hypatia Baseline" was red because of a finding this PR did not introduce: Note that this row (assail-classifications.a2ml) is out of date since #1118 and panic-attack#295. panic-attack now reads the deed first, and hypatia has translated the registry. Rewriting the row is a separate edit, which I'm leaving for its author. Generated by Claude Code |
|
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |



Summary
#1133 (Deed parser v2) merged while one Codex finding and four red checks were still open. Three of the four reds came from #1133 and are fixed here. The fourth was already red on main.
Changes
lib/hypatia/deed.ex:104.dispatch/1accepted any*_praxis.deedwithout checking the stem.praxis-fileandrepo-fileshare one rule:stem = 1*( ALPHA / DIGIT / "-" / "." / "_" ). Onestem/3now enforces it for both suffixes._praxis.deed,☃_praxis.deed,café_praxis.deedanda b_praxis.deedare refused by bothdispatch/1andparse/2.my-proj.v2_x_praxis.deedis accepted. The chora cases still refuse.check-no-active-logtalk.shfails on the vendored fixturetest/fixtures/deed/standards/valid/rsr-template-repo_chora.deed:110, which carries the upstream:report-format "logtalk"..logtalk-allowlistwith the same class ("vendored upstream fixture") and the same removal condition as its two identical siblings already listed.check-uuid-v8.sh --strict(pinned at standards 7641c7f) flagged four ids intest/deed_conformance_test.exsthat are deliberately not v8..uuid-v8-exempt, following thetest/deed_test.exsprecedent. The fixtures pass the pinned gate but fail the current standards script, so the exemption keeps them from breaking when the pin moves.undefined function deed_state/1, which came from feat(rules): RSR 3.1.1 and 3.2.1 read the chora deed first #1117's merge. That red push run sat on 6033a78, before fix(rsr): restore the library half of #1117 lost in its merge; main compiles again #1125/fix(rsr): restore the deed-first 3.1.1 and 3.2.1 that #1117 described (main does not compile) #1128/fix(rsr): main compile break from the #1113/#1115/#1117 collision #1132. The same error reproduces on 6033a78, and an unrelated PR failed the same way before fix(deed): Hypatia.Deed matches deed.abnf v2.0.0, with a standards-fixture conformance test #1133 merged. Current main passes (43638218845).Verification
Run with Elixir 1.19.4 / OTP 27.3.4.19, the CI versions:
mix compile --warnings-as-errors: exit 0.mix test: 3338 tests, 0 failures, 246 excluded (seed 0;verisim_dataand the other excluded tags as configured).test/soundness/run-escript-soundness.sh: 14/14.check-findings-schema.sh.mix format --check-formattedpasses on the changed files.check-uuid-v8.sh --strictpasses at the pinned and the current standards versions. The logtalk guard reports 15 allowlisted, 0 violations.For the owner
deed_lint.js(702–703) doesn't check the praxis stem, so it accepts names the grammar refuses. The reader now follows the grammar.mix format --check-formattedunder 1.19.4, and no workflow runs that check. Not touched here.Generated by Claude Code