Skip to content

proof(SafeGit): DISCHARGE forbiddenRefCharsAnchor via Refl (proven#90) - #102

Merged
hyperpolymath merged 2 commits into
mainfrom
proof/safegit-forbidden-ref-chars-anchor
May 30, 2026
Merged

proof(SafeGit): DISCHARGE forbiddenRefCharsAnchor via Refl (proven#90)#102
hyperpolymath merged 2 commits into
mainfrom
proof/safegit-forbidden-ref-chars-anchor

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Yet another "OWED comment was overly cautious" discharge in the proven#90 Phase 3 campaign.

What it does

```idris
public export
forbiddenRefCharsAnchor :
forbiddenRefChars = [' ', '~', '^', ':', '?', '*', '[', '\\', '\x7F']
forbiddenRefCharsAnchor = Refl
```

Why it works

`forbiddenRefChars` is `public export` in SafeGit.idr L24-26 with this exact list literal as its body. The elaborator unfolds the LHS to the RHS for `Refl`. No "Char-list reduction" is needed — both sides are the same literal after the standard `public export` unfolding.

Out of scope

The other 2 SafeGit OWEDs have real blockers:

  • `emptyRefNameInvalid` — String-FFI (`unpack`, `length` on `""`)
  • `refNameExtracts` — auto-implicit elaboration

Refs #90

`forbiddenRefChars` is `public export` in SafeGit.idr L24-26 with this
exact list literal as its body. The elaborator unfolds the LHS to the
RHS for `Refl`. No "Char-list reduction" is needed — both sides are
the same literal after `public export` unfolding.

One-line proof:
- forbiddenRefCharsAnchor = Refl

Conversion:
- `0 forbiddenRefCharsAnchor : ...` (type-only OWED)
  → `public export forbiddenRefCharsAnchor : ... = Refl`

Same "OWED comment was overly cautious" pattern as the prior 7
discharges this session (#97, #98, #99, #100, #101). The other 2
SafeGit OWEDs (emptyRefNameInvalid, refNameExtracts) DO have real
String-FFI / auto-implicit blockers per their OWED comments and are
out of scope.

Refs #90

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath
hyperpolymath enabled auto-merge (squash) May 30, 2026 15:29
@sonarqubecloud

Copy link
Copy Markdown

hyperpolymath added a commit that referenced this pull request May 30, 2026
…clear)

All 5 OWEDs in this file share the SafeCron / SafeGit "definitional
anchor" pattern (PR #101, PR #102): they're definitional anchors on
public-export smart constructors or record-update functions. All
discharge by Refl.

Discharged:
- makeNonDelegatableSetsFalse — record-update projection on `{ capDelegatable := False }`
- setExpirySetsJust — record-update projection on `{ capExpiry := Just t }`
- emptyStoreNoCapabilities — record projection on named constructor
- emptyStoreNoRevoked — record projection on named constructor
- adminHierarchyDef — definitional equality

All 5 OWED comments cited "public export body opacity" as the blocker —
inverted diagnosis (public export ENABLES type-level unfolding).

This is the seventh PR in today's overly-cautious-OWED hunt
(addParamIncreasesCount, anyMatchesNonNewline, negateInverts/unionIsOr,
validResultIsValid, 9 SafeCron anchors, forbiddenRefCharsAnchor, now
5 SafeCapability anchors).

Refs #90

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath
hyperpolymath merged commit 22519e5 into main May 30, 2026
11 of 24 checks passed
@hyperpolymath
hyperpolymath deleted the proof/safegit-forbidden-ref-chars-anchor branch May 30, 2026 16:43
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 331 issues detected

Severity Count
🔴 Critical 130
🟠 High 31
🟡 Medium 170

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Action perpolymath/standards/.github/workflows/governance-reusable.yml@main\n needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in architecture-enforcement.yml",
    "type": "missing_timeout_minutes",
    "file": "architecture-enforcement.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in architecture-enforcement.yml",
    "type": "missing_timeout_minutes",
    "file": "architecture-enforcement.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in boj-build.yml",
    "type": "missing_timeout_minutes",
    "file": "boj-build.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "missing_timeout_minutes",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "missing_timeout_minutes",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in cflite_batch.yml",
    "type": "missing_timeout_minutes",
    "file": "cflite_batch.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in cflite_pr.yml",
    "type": "missing_timeout_minutes",
    "file": "cflite_pr.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in codeql.yml",
    "type": "missing_timeout_minutes",
    "file": "codeql.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "missing_timeout_minutes",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

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.

1 participant