Skip to content

fix(deed): praxis stems checked like chora stems; clear the three gates #1133 broke - #1136

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/deed-parser-v2-followups
Nov 14, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
fix/deed-parser-v2-followups

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

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

  1. Codex, lib/hypatia/deed.ex:104. dispatch/1 accepted any *_praxis.deed without checking the stem.
    • In deed.abnf (146–148), praxis-file and repo-file share one rule: stem = 1*( ALPHA / DIGIT / "-" / "." / "_" ). One stem/3 now enforces it for both suffixes.
    • Tests: _praxis.deed, ☃_praxis.deed, café_praxis.deed and a b_praxis.deed are refused by both dispatch/1 and parse/2. my-proj.v2_x_praxis.deed is accepted. The chora cases still refuse.
  2. Elixir Compile (dogfood toolchain). check-no-active-logtalk.sh fails on the vendored fixture test/fixtures/deed/standards/valid/rsr-template-repo_chora.deed:110, which carries the upstream :report-format "logtalk".
    • The fixture is added to .logtalk-allowlist with the same class ("vendored upstream fixture") and the same removal condition as its two identical siblings already listed.
    • The list's header asks for rule-level review of a new entry. That review belongs here, because editing the fixture would break its byte-faithfulness to standards.
  3. governance / UUID v7 and UUID v8 conformance. check-uuid-v8.sh --strict (pinned at standards 7641c7f) flagged four ids in test/deed_conformance_test.exs that are deliberately not v8.
    • Those inputs are now built at run time from one v8 id by swapping its version and variant nibbles. The assertions are unchanged, and the v5 case now also checks the refusal reason.
    • The test file and three vendored invalid fixtures go into .uuid-v8-exempt, following the test/deed_test.exs precedent. The fixtures pass the pinned gate but fail the current standards script, so the exemption keeps them from breaking when the pin moves.
    • No real id or domain is touched.
  4. Escript packaging soundness: not this change. It failed on 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_data and the other excluded tags as configured).
  • test/soundness/run-escript-soundness.sh: 14/14.
  • The consumer-shaped scan output passes check-findings-schema.sh.
  • mix format --check-formatted passes on the changed files.
  • check-uuid-v8.sh --strict passes at the pinned and the current standards versions. The logtalk guard reports 15 allowlisted, 0 violations.

For the owner

  • Gate looser than the grammar: the standards gate deed_lint.js (702–703) doesn't check the praxis stem, so it accepts names the grammar refuses. The reader now follows the grammar.
  • Formatting on main: 27 files on main fail mix format --check-formatted under 1.19.4, and no workflow runs that check. Not touched here.

Generated by Claude Code

…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
@coderabbitai

coderabbitai Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You'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.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: e3c2f1c2-4a15-439f-b3f7-fbe99ae18706
Commits

Reviewing files that changed from the base of the PR and between 85cc775 and 618feaf.

Files selected for processing: 5

  • .logtalk-allowlist
  • .uuid-v8-exempt
  • docs/history/A2ML-REMOVED.adoc
  • lib/hypatia/deed.ex
  • test/deed_conformance_test.exs
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Share

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

Copy link
Copy Markdown
Owner Author

"Validate Hypatia Baseline" was red because of a finding this PR did not introduce: structural_drift/SD022 in docs/history/A2ML-REMOVED.adoc. #1135 (85cc775) re-added a literal src/assail/mod.rs path to that file. The path belongs to panic-attack and does not exist in this repo, and the same Governance step is red on main (run 43638219364). The fix is small and keeps main green, so it's on this branch as 618feaf: the reference now reads "its assail module", which is the wording #1113 used.

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

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath marked this pull request as ready for review November 14, 2026 21:02
@hyperpolymath
hyperpolymath merged commit 640ee47 into main Nov 14, 2026
74 of 76 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-14T21:05:35.123493Z 618feaf Draft marked ready
🔒 Security Review ✅ Completed 2026-11-14T21:05:31.444339Z 618feaf Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@hyperpolymath
hyperpolymath deleted the fix/deed-parser-v2-followups branch November 14, 2026 21:02
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.

3 participants