Fix pre-existing test bugs; narrative docs → AsciiDoc; version 0.9.0#52
Merged
Conversation
Addresses test failures surfaced by the Hypatia review / ExUnit suite: - debugger: read variable bindings from State.environment (the real field; the code referenced a non-existent State.variables), and add the missing Phronesis.Trace.merge/2 the debugger uses to fold per-node sub-traces. - parser: a parenthesised group now parses the full logical expression, so comparisons and booleans inside parens work, e.g. (is_valid == true AND enabled) -- fixes conformance 04_boolean_logic. - incremental_lexer: clamp the edit window into the source so an out-of-bounds delta can't drive binary_part/3 with a negative length. Net: the local suite goes from 17 to 6 failures with no regressions. The remaining 6 are doc-generator fixture/feature gaps and one LSP incremental re-lex edge case (see PR notes). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AqMopxUsgu78rg5fhWBUkk
…0.9.0 - Convert the top-level narrative documentation from Markdown to AsciiDoc per the estate "docs must be .adoc" policy, licensed CC-BY-SA-4.0: ANALYSIS-COMPLETE, IMPLEMENTATION-ROADMAP, LSP-IMPLEMENTATION-SUMMARY, TEST-NEEDS, TOOLCHAIN-WISHLIST, TOPOLOGY, WOKELANG-FEATURE-COMPARISON. GitHub-required (.md), AI-instruction, issue-template, wiki, and academic proof corpora are intentionally left as-is. - EXPLAINME: update the file-map reference to the renamed LSP summary. - mix.exs: version 0.1.0 -> 0.9.0 to match STATE.a2ml and resolve the three-way version disagreement. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AqMopxUsgu78rg5fhWBUkk
🔍 Hypatia Security ScanFindings: 19 issues detected
View findings[
{
"reason": "Action trufflesecurity/trufflehog@main needs attention",
"type": "unpinned_action",
"file": "secret-scanner.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in secret-scanner.yml",
"type": "missing_timeout_minutes",
"file": "secret-scanner.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in scorecard-enforcer.yml",
"type": "scorecard_publish_with_run_step",
"file": "scorecard-enforcer.yml",
"action": "split_scorecard_publish_job",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "binary_to_term without :safe option -- deserialization attack (1 occurrences, CWE-502)",
"type": "elixir_send_unsanitised",
"file": "/home/runner/work/phronesis/phronesis/lib/phronesis/compiler.ex",
"action": "flag",
"rule_module": "code_safety",
"severity": "high"
},
{
"reason": "Nominal-only SAST in phronesis: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
"type": "StaticAnalysis",
"file": "/home/runner/work/phronesis/phronesis",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "medium",
"remediation": "Add CodeQL or equivalent SAST workflow.",
"scorecard_check": "SAST"
},
{
"reason": "Repository has 6 non-main remote branch(es). Policy: single main branch only.",
"type": "GS007",
"file": ".",
"action": "delete_remote_branches",
"rule_module": "git_state",
"severity": "medium"
},
{
"reason": "Code scanning (Hypatia): hypatia/structural_drift/SD007 -- Hypatia structural_drift: SD007 -- 8 day(s) old",
"type": "CSA001",
"file": ".claude/CLAUDE.md",
"action": "review",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Hypatia): hypatia/structural_drift/SD007 -- Hypatia structural_drift: SD007 -- 8 day(s) old",
"type": "CSA001",
"file": ".claude/CLAUDE.md",
"action": "review",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Hypatia): hypatia/structural_drift/SD007 -- Hypatia structural_drift: SD007 -- 8 day(s) old",
"type": "CSA001",
"file": ".claude/CLAUDE.md",
"action": "review",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Hypatia): hypatia/code_safety/elixir_send_unsanitised -- Hypatia code_safety: elixir_send_unsanitised -- 8 day(s) old [STALE]",
"type": "CSA001",
"file": "lib/phronesis/compiler.ex",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
hyperpolymath
marked this pull request as ready for review
June 19, 2026 23:41
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.
Follow-up to #51, addressing the three buckets I flagged there.
1 · Test / Hypatia fixes (local suite 17 → 6 failures, no regressions)
Fixed the clean, decisive bugs:
State.environment(the code referenced a non-existentState.variables), and add the missingPhronesis.Trace.merge/2.(is_valid == true AND enabled)works — fixes conformance04_boolean_logic.binary_part/3.Not fixed — fixture/feature decisions, not clean bugs (flagged)
examplesis hard-coded[], the test has a "Risk"/"risk" case typo, andexamples/sample.phruses unimplemented list-literal syntax ([64496, ...]). Making these green needs AST line-number plumbing (risky — changes the tuple shape used across the interpreter / type-checker / reflexion) or fixture/test redesign. Happy to do it with your steer on intended behaviour.The
binary_to_termHypatia finding is a false positive —compiler.ex:166already passes[:safe].2 ·
mix.exsversion0.1.0→0.9.0, matchingSTATE.a2mland resolving the three-way version disagreement.3 · Narrative docs → AsciiDoc (CC-BY-SA-4.0)
Converted the top-level narrative docs from Markdown to AsciiDoc (via pandoc) per the estate "docs must be
.adoc" policy, licensed CC-BY-SA-4.0:ANALYSIS-COMPLETE,IMPLEMENTATION-ROADMAP,LSP-IMPLEMENTATION-SUMMARY,TEST-NEEDS,TOOLCHAIN-WISHLIST,TOPOLOGY,WOKELANG-FEATURE-COMPARISON. Left as-is (intentionally): GitHub-required.md(CHANGELOG / SECURITY / CONTRIBUTING / CODE_OF_CONDUCT), AI-instruction files (CLAUDE.md, copilot-instructions.md),.github/ISSUE_TEMPLATE/*, thewiki/(GitHub wiki) and theacademic/proof corpus — say the word if you want those swept too.Verification
Built/tested on Elixir + OTP 25 (hex blocked in the sandbox →
jason/stream_datavendored as path deps for the test run only;mix.exs/mix.lockcommitted unchanged). Changed modules compile warning-clean; the previously-failing debugger/conformance tests plus the reflexion suite are green (reflexion still 32/32); 6 known failures remain as above.🤖 Generated with Claude Code
https://claude.ai/code/session_01AqMopxUsgu78rg5fhWBUkk
Generated by Claude Code