theory: Axis 8 graded access modality — thin slice (Access, ≤a, ≤a-trans, ≤a-prop)#68
Merged
Merged
Conversation
…ans, ≤a-prop)
Lands the thin-slice obligations 1-6 of the Axis 8 graded access
modality (decision: refinement 2 of taxonomy.md §8 / the Axis 8
design study). Mirrors EchoGraded / EchoLinear's order-layer recipe
verbatim:
1. Access -- 5-grade enum (free / decidable / enum /
feasible / infeasible)
2. _≤a_ -- Hasse-enumerated access order (15
constructors, one per reachable pair)
3. ≤a-trans -- transitivity by case-split
4. ≤a-prop -- propositionality by case-split + refl;
the load-bearing lemma per the design's
§6 falsifier — DID close on refl
5. CEcho + EchoAccess -- per-grade carrier + Σ-shape package
6. access-of,
degrade-access -- projection + _≤a_-indexed degrade
Deferred to the follow-up PR (per the body of EchoAccess.agda and
the Axis 8 design doc §5 items 5-8):
* degrade-access-comp / -compose / -via-join — per-decoration
composition; the factoring-free closer chain of
composition.md §6.
* _⊔a_ join + ≤a-⊔a-{left,right,univ} — categorical join.
* Honest carrier for enum / feasible / infeasible (bridge to
EchoFiberCount.FiberSize-fin) — the falsifier mode B of the
design's §6. Current carriers are minimal Lift ⊤ placeholders
so the order layer ships green.
Wired into All.agda; headlines pinned in Smoke.agda. No postulates,
no escape pragmas, --safe --without-K throughout.
Refs docs/echo-types/roadmap.md "Theory work" Axis 8 entry (line 31)
and roadmap item 6 (line 239). Does NOT close anything.
Agda build (Agda 2.8.0, stdlib v2.3):
$ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda
Checking All (.../proofs/agda/All.agda).
Checking EchoAccess (.../proofs/agda/EchoAccess.agda).
Checking Smoke (.../proofs/agda/Smoke.agda).
EXIT=0
$ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/Smoke.agda
EXIT=0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 tasks
hyperpolymath
added a commit
that referenced
this pull request
May 20, 2026
…tegration) (#73) ## Summary Brings the `harden/ci-flake-pin-2026-05-18` stack onto main, with three logical groupings: * **Harden foundation (P0/P1)** — closure-hole closure, external fibre triangulation against stdlib, reproducible CI-via-flake exact pin (additive verifier). These are the earlier commits on the branch; structural work, no Agda regressions. * **Pillar E expansion (commit `8a24530`)** — clears two `[EXPAND]` tags on `docs/echo-types/paper.adoc`: - **Background and notation** primer: 6 subsections (type-theoretic setting, Σ-types + identity, HoTT fibres, coeffect/graded-modality lineage, thin-poset reindexing modalities, notation summary) plus an 18-row notation table whose every symbol is sourced from a real Agda module. Explicit on the post-retraction framing. - **Related work**: 8 per-neighbour subsections (HoTT fibres, graded comonad/coeffect/QTT, lenses/optics, refinement types, setoid quotients, provenance semirings, IFC/modal type theories, synthesis). All `<<reframing-note>>` xrefs resolve. - `types-abstract.adoc`: per-neighbour related-work positioning block mirroring the paper. Abstract status remains "NOT submission-ready, pending re-review" — content alignment only. * **Licence sweep (commit `2e78761`)** — collapses the `PMPL-1.0-or-later` SPDX identifier to `MPL-2.0` per owner direction 2026-05-20. 29 source/config files swept; README badge updated; `stapeln.toml` + `arghda-core/Cargo.toml` license fields; new `docs/PMPL-NARRATIVE.adoc` records the cultural/discipline overlay PMPL represented (no legal effect change — MPL-2.0 was already the lawyer-confirmed operative legal effect). ## Reconciliation needed before merge `origin/main` has advanced by 7 PRs (#64–#70) since this branch's last merge from main: * #64–#66 bridge work (CNO Agda↔Coq↔Lean4 correspondence, EchoTropical correspondence appendix, EchoJanusBridge OpKind mirror — substantive `EchoJanusBridge.agda` +221 / `EchoApprox.agda` +132) * #67 docs: rule out 2-categorical shape + roadmap credits * #68 theory: Axis 8 graded access modality (new `EchoAccess.agda`, 262 lines) * #69 theory: AntiEcho thin slice (new `AntiEcho.agda`, 93 lines) * #70 theory: EchoApprox composition rung first slice **Expected conflicts** (deliberate, owner-resolved): * `paper.adoc` — this PR adds Background primer + Related work; parallel sessions may have edited adjacent sections * `types-abstract.adoc` — this PR adds a related-work block * `flake.nix` — this PR is the full harden-P1 flake; parallel sessions retained the simpler devShell flake * `.github/workflows/*.yml`, `.machine_readable/6a2/*.a2ml`, `contractiles/*.a2ml`, `stapeln.toml`, `README.md`, `arghda-core/Cargo.toml`, `Containerfile`, `EXPLAINME.adoc`, `QUICKSTART-*.adoc`, `TOPOLOGY.adoc`, `docs/echidna-design-search-2026-04-28.adoc`, `docs/echo-types/MAP.adoc`, `docs/echo-types/echo-kernel-note.adoc`, `scripts/kernel-guard.sh`, `tools/check-guardrails.sh` — licence sweep; conflicts with parallel sessions that kept PMPL headers (resolve by taking this PR's MPL-2.0) ## Test plan - [ ] CI green: governance + Agda + Hypatia scans + Scorecard - [ ] `flake.nix` `nix flake check` passes (additive verifier) - [ ] `agda proofs/agda/All.agda` and `agda proofs/agda/Smoke.agda` both exit 0 under `--safe --without-K`, zero postulates (no Agda was touched by this branch's recent commits, so this should be a verification-only step) - [ ] AsciiDoc render of `paper.adoc` — confirm all `<<reframing-note>>` xrefs resolve - [ ] `docs/PMPL-NARRATIVE.adoc` reads coherently - [ ] No remaining `PMPL`/`Palimpsest` strings outside `docs/PMPL-NARRATIVE.adoc` + the one intentional pointer in `ECOSYSTEM.a2ml` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 tasks
hyperpolymath
added a commit
that referenced
this pull request
May 20, 2026
…eferred) (#75) ## Summary Extends `proofs/agda/EchoAccess.agda` (the PR #68 thin slice) with the join structure and per-decoration composition trio, completing the same recipe as `EchoGraded` and `EchoLinear` at the per-decoration composition rung. **Rung A — categorical join structure.** `_⊔a_` (componentwise max along `free ≤ decidable ≤ enum ≤ feasible ≤ infeasible`) + `≤a-⊔a-left` + `≤a-⊔a-right` + `≤a-⊔a-univ` (universal property). **Rung B — per-decoration composition trio.** * `degrade-access-comp` — two successive degrades along a factoring agree with one degrade along the composed proof. Closes `refl` on every reachable `(p12, p23)` constructor pair (the carriers reduce in lock-step with `≤a-trans`). * `degrade-access-compose` — factoring-free composition; corollary of `degrade-access-comp` + `≤a-prop`. * `degrade-access-via-join` — same law restated through the join. **Rung C — honest carriers — deferred with design note.** An honest `enum`-grade carrier needs an enumerator `Fin n → A` and a decider on `B`. Neither can be supplied without breaking the parametricity over `A` that `Echo f y` enjoys at the `free` grade. The two clean resolutions are (a) parameterise the whole `CEcho` family on `Decidable B` + an enumeration witness (forces every caller to supply them, even at `free` where they do nothing), or (b) bury both in an existential inside the `enum` / `feasible` / `infeasible` cases (loses the ability to extract from outside). Both are real architectural choices — the PR brief's Stop-condition explicitly flagged this as the design-decision case and instructed landing A + B with a written deferral. Importantly, the composition layer that lands here is **grade-indexed not carrier-indexed**, so it is unaffected by the eventual carrier choice. Module preamble carries the full deferral note. All new headlines pinned in `Smoke.agda`. Module preamble section list refreshed; `degrade-access` follow-up commentary updated. No new imports beyond `sym` from `Relation.Binary.PropositionalEquality`. No postulates. `--safe --without-K` preserved throughout. ## Build status **BUILD UNVERIFIED LOCALLY** — the sandbox repeatedly blocked `agda` invocations on positional file arguments (the known quirk that hit PRs #71 + #72). Parent session will verify (`LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda` and same for `Smoke.agda`, both expected to exit 0) and post a confirmation comment. The mathematical content is mechanical mirror of `EchoGraded.{degrade-comp, degrade-compose, degrade-via-join, ⊔g, ≤g-⊔g-*}` (with 5 grades instead of 3) and `EchoLinear.{degradeMode-comp, degradeMode-compose, degradeMode-via-join, ⊔m, ≤m-⊔m-*}` (with 5 grades instead of 2). Every clause closes `refl` modulo the `≤a-trans` reduction table that already ships in PR #68. ## Refs Refs PR #68 (the thin slice), `docs/echo-types/roadmap.md` Axis 8 entry, `/tmp/echo-types-exploration/axis8.md` §5 deferred list. ## Test plan - [ ] `LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda` exits 0. - [ ] `LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/Smoke.agda` exits 0. - [ ] No postulates / no escape pragmas / `--safe --without-K` preserved. - [ ] All seven new headline names resolve in `Smoke.agda`. Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 tasks
hyperpolymath
added a commit
that referenced
this pull request
May 20, 2026
…luster landed (#92) ## Summary Three small accuracy passes through `docs/echo-types/` after the earn-back programme, the §"Theory work — no proof assistant needed" section, and the canonical examples cluster (5/9/10) all closed in this session. Pure prose; no Agda changes. ### 1. `roadmap.md` §"Theory work" — two stale items refreshed * **Axis 8** line said the *decidability-respecting* candidate had shipped but listed the other three as still candidate refinements. All four have now shipped: `EchoDecidable`, `EchoCost` (#85), `EchoAccess` (#68 / #75), `EchoSearch` (#80). Updated to credit all four. * **Negative / co-echoes** line was `[unblocked]`; now `[landed]` — `AntiEcho` (#69), tropical decomposition concrete + generic (#72 + #91), `antiecho-partition-dec` (#90). Names the `coecho.md` §5 obligation-5 / obligation-6 closures explicitly. After these edits, every item in §"Theory work — no proof assistant needed" is either `[landed]` or `[ruled out]`/`[refreshed]` — the section is genuinely closed. ### 2. `roadmap.md` §"Example work" — three items landed * ex. 5 (`EchoExampleProvenance`, #81) → `[landed]` * ex. 9 (`EchoExampleParser`, #83) → `[landed]` * ex. 10 (`EchoExampleAbsInt`, #82) → `[landed]` Only ex. 6 (approximate-echo numeric example) remains `[unblocked]`. ### 3. `earn-back-plan.adoc` — stale `roadmap-gates.adoc` claim corrected * Header note used to say "the gate discipline was historically attributed to a `roadmap-gates.adoc`; that file does not exist in-tree". The file **does** exist (created 2026-05-18; see its preamble). Header rewritten to list `roadmap-gates.adoc` alongside `retractions.adoc` / this plan / `next-questions.adoc` as the four canonical loci. * Ledger row D (the "doesn't exist" entry) marked **CLOSED 2026-05-20** with the cite reflecting current reality. ## Test plan * [x] Pure docs / `.adoc` / `.md` edits — no Agda touched * [x] `agda proofs/agda/All.agda` exit 0 (confirms docs match code) * [x] `agda proofs/agda/Smoke.agda` exit 0 * [x] No retracted-claim language moved; no earned-back claim overclaimed; `paper.adoc` / `types-abstract.adoc` / `conservativity.adoc` untouched ## Scope Disjoint from all currently-open PRs: * #88 (F3) — touches Agda + `retractions.adoc` (different sections) + `earn-back-plan.adoc` Status (different section from header / ledger-D) * #90 (partition-dec) — touches Agda only * #91 (generic-codomain) — touches Agda + preamble comments No retracted claim is moved. No earned-back claim is overclaimed. `paper.adoc` / `types-abstract.adoc` / `conservativity.adoc` are intentionally untouched (owner-gated, per the posture set by #86 / #88). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🔍 Hypatia Security ScanFindings: 10 issues detected
View findings[
{
"reason": "No test directory or test files found",
"type": "no_tests",
"file": "/home/runner/work/echo-types/echo-types",
"action": "flag",
"rule_module": "honest_completion",
"severity": "high",
"deduction": 20
},
{
"reason": "Issue in quality.yml",
"type": "missing_workflow",
"file": "quality.yml",
"action": "create",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in security-policy.yml",
"type": "missing_workflow",
"file": "security-policy.yml",
"action": "create",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in secret-scanner.yml",
"type": "missing_workflow",
"file": "secret-scanner.yml",
"action": "create",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Action actions/cache@v4 needs attention",
"type": "unpinned_action",
"file": "agda.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
"type": "unpinned_action",
"file": "governance.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "No dependabot.yml or renovate.json found in echo-types",
"type": "DependencyUpdate",
"file": "/home/runner/work/echo-types/echo-types",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "high",
"remediation": "Add .github/dependabot.yml or renovate.json configuration.",
"scorecard_check": "Dependency-Update-Tool"
},
{
"reason": "Nominal-only SAST in echo-types: 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/echo-types/echo-types",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "medium",
"remediation": "Add CodeQL or equivalent SAST workflow.",
"scorecard_check": "SAST"
},
{
"reason": "1 workflow(s) with tag-pinned (not SHA-pinned) actions in echo-types",
"type": "DependencyPinning",
"file": "/home/runner/work/echo-types/echo-types",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "medium",
"remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
"scorecard_check": "Pinned-Dependencies"
},
{
"reason": "Repository has 1 non-main remote branch(es). Policy: single main branch only.",
"type": "GS007",
"file": ".",
"action": "delete_remote_branches",
"rule_module": "git_state",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
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
Lands the thin-slice obligations 1–6 of the Axis 8 graded access modality (decision: refinement 2 of
taxonomy.md§8 / the Axis 8 design study). MirrorsEchoGraded/EchoLinear's order-layer recipe verbatim.New module
proofs/agda/EchoAccess.agdaships:Access— 5-grade enum (free / decidable / enum / feasible / infeasible)._≤a_— Hasse-enumerated access order (15 constructors, one per reachable pair along the chain).≤a-trans— transitivity by case-split.≤a-prop— propositionality by case-split +refl. The load-bearing lemma per the design's §6 falsifier — DID close onreflfor all 15 cases. The recipe lives.CEcho+EchoAccess— per-grade carrier (free→Echo,decidable→EchoDec,enum / feasible / infeasible→ minimalLift ⊤placeholders) and the Σ-shape package.access-of,degrade-access— projection +_≤a_-indexed degrade primitive.Wired into
All.agda; headlines pinned inSmoke.agda. No postulates, no escape pragmas,--safe --without-Kthroughout.Refs
docs/echo-types/roadmap.mdAxis 8 entries (line 31 "Theory work" and line 239 roadmap item 6). Does NOT close anything — the follow-up PR below is needed before the lane can be marked landed.Deferred to follow-up PR
Per the body of
EchoAccess.agdaand Axis 8 design doc §5 items 5–8:degrade-access-comp/-compose/-via-join— per-decoration composition; the factoring-free closer chain ofcomposition.md§6._⊔a_join +≤a-⊔a-{left,right,univ}— categorical join.enum/feasible/infeasible(bridge toEchoFiberCount.FiberSize-fin) — the falsifier mode B of the design's §6. The currentLift ⊤carriers are deliberately minimal so the order layer ships green; promoting them is the design's deferred mitigation.Agda build
Agda 2.8.0, stdlib v2.3.
Test plan
agda proofs/agda/All.agdaexits 0 under--safe --without-K.agda proofs/agda/Smoke.agdaexits 0 (verifies pinned headlines resolve).EchoAccess.agda).NO_TERMINATION_CHECK, etc.) introduced.≤a-propcloses on case-split +reflfor all 15 constructor pairs (the design's load-bearing test).🤖 Generated with Claude Code