Skip to content

F1 PASSED: gc-coassoc closed (earn-back gate, R-2026-05-18 follow-up)#86

Merged
hyperpolymath merged 1 commit into
mainfrom
f1-coassoc-earn-back
May 20, 2026
Merged

F1 PASSED: gc-coassoc closed (earn-back gate, R-2026-05-18 follow-up)#86
hyperpolymath merged 1 commit into
mainfrom
f1-coassoc-earn-back

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Gate F1 of the earn-back plan — the MAKE-OR-BREAK retraction from
R-2026-05-18 — now passes.

The 2026-05-18 spike EchoGradedComonadF1.agda had two of three
graded-comonad laws closed (gc-counit-l, gc-counit-r) and named
the remaining obstruction precisely: an isolated proof-engineering
type-mismatch at the inductive step of gc-coassoc, requiring an
explicit δ-naturality lemma over the outer R layer rather than the
ad-hoc coe-cong-R ∘ sym push. This PR discharges that obligation:

δ-suc :  m n {A} (x : D (m + n) A) (b : Bool) 
        δ (suc m) n {A} (x , b) ≡ (δ m n x , b)
δ-suc m n {A} x b = coe-cong-R (D-+ m n A) x b

This factor + the existing subst-D-suc let gc-coassoc close as a
six-step ≡-Reasoning chain. Stdlib's +-assoc (suc m) n p reduces
definitionally to cong suc (+-assoc m n p), so the two ℕ-equation
proofs at the chain ends are syntactically identical and ℕ-UIP is
not needed for gc-coassoc itself
(gc-counit-l still uses ℕ-UIP,
which is K-free via Hedberg / decidable equality).

Mechanised content of F1

  • Grade monoid (ℕ, +, 0); D 0 A = A; D (suc r) A = R (D r A)
    where R X = X × Bool — a non-collapsing residue layer.
  • mapD r f functorial (mapD-id, mapD-∘).
  • ε : D 0 A → A — counit at the unit grade.
  • δ : D (m + n) A → D m (D n A)NESTED comultiplication.
  • gc-counit-r (definitional), gc-counit-l (induction on grade),
    gc-coassoc (this PR).
  • D2-nontrivial — separating witness that D r is not / a prop.
  • Echo is the grade-unit object: D 0 (Echo f y) ≡ Echo f y.

--safe --without-K, zero postulates, zero escape pragmas, no
funext. Wired into All.agda and pinned in Smoke.agda.

Scope (please re-read with care)

F1 earns back the existence of a graded comonad with Echo as the
grade-unit object — that's the claim R-2026-05-18 retracted at its
strongest reading. It does NOT retroactively make EchoGraded
itself a graded comonad: EchoGraded remains a thin-poset reindexing
modality on a three-element lattice, with no nested family, no monoid
multiplication, no D r r' ⇒ D r ∘ D r'. The paper's title and central
thesis (Echo as a reindexing modality) stand unchanged; F1 enters the
codebase as an additional mechanised contribution beside
EchoGraded.

What this unblocks

Gate F3 — a genuinely independent second model of the comonad at
a different grade monoid (e.g. tropical or multiplicative semiring),
without a × ⊤ carrier or a ⊑-prop-equivalent field — is now in
scope. F3 is not started by this PR.

Doc changes (gated, scoped)

  • docs/echo-types/earn-back-plan.adoc — ledger row A1 + Status
    entry (F1 PASSED 2026-05-20), with the scope qualifier pinned.
  • docs/retractions.adoc — follow-up F-2026-05-20a appended
    (append-only revision policy preserved); no edits to other doc
    bodies.
  • paper.adoc, types-abstract.adoc, conservativity.adoc
    intentionally untouched in this PR. Their bodies are about
    EchoGraded's thin-poset structure, which F1 does not change.
    Whether to add a bounded new-contribution paragraph mentioning the
    F1 side-construction is owner-gated.

Test plan

  • agda proofs/agda/All.agda exit 0 under --safe --without-K
  • agda proofs/agda/Smoke.agda exit 0 under --safe --without-K
  • grep -nE '^\s*postulate\b|BUILTIN REWRITE|NON_TERMINATING|TERMINATING' proofs/agda/EchoGradedComonadF1.agda returns no matches in code
  • --safe --without-K OPTIONS line preserved on the F1 module
  • (owner) confirm the scope language in retractions.adoc
    F-2026-05-20a matches intent
  • (owner) decide whether paper.adoc / types-abstract.adoc /
    conservativity.adoc should gain a bounded contribution
    paragraph in a separate PR

Non-overlap with parallel sessions

Touches: EchoGradedComonadF1.agda (existing 2026-05-18 spike,
finishing it), All.agda (one-line F1 import), Smoke.agda (F1 pin
block), earn-back-plan.adoc, retractions.adoc.

Stays clear of:

🤖 Generated with Claude Code

Gate F1 of the earn-back plan (docs/echo-types/earn-back-plan.adoc §F1)
— the MAKE-OR-BREAK retraction from R-2026-05-18 — now passes.

The 2026-05-18 spike had two of three graded-comonad laws closed
(gc-counit-l, gc-counit-r) and named the remaining obstruction
precisely: an isolated proof-engineering type-mismatch at the
inductive step of gc-coassoc, requiring an explicit δ-naturality
lemma over the outer R layer rather than the ad-hoc coe-cong-R ∘ sym
push. That obligation is now discharged:

  δ-suc : ∀ m n {A} (x : D (m + n) A) (b : Bool) →
          δ (suc m) n {A} (x , b) ≡ (δ m n x , b)
  δ-suc m n {A} x b = coe-cong-R (D-+ m n A) x b

This factor + the existing subst-D-suc let gc-coassoc close as a
six-step ≡-Reasoning chain. Stdlib's +-assoc (suc m) n p reduces
*definitionally* to cong suc (+-assoc m n p), so the two ℕ-equation
proofs at the chain ends are syntactically identical and ℕ-UIP is
not needed for gc-coassoc itself (gc-counit-l still uses ℕ-UIP, which
is K-free via Hedberg / decidable equality, exactly as the spike
documented).

Mechanised content of F1 (proofs/agda/EchoGradedComonadF1.agda):

  * Grade monoid (ℕ, +, 0); D 0 A = A; D (suc r) A = R (D r A) where
    R X = X × Bool — a non-collapsing residue layer
  * mapD r f : functorial (mapD-id, mapD-∘)
  * ε : D 0 A → A — counit at the unit grade
  * δ : D (m + n) A → D m (D n A) — NESTED comultiplication
  * gc-counit-r (definitional), gc-counit-l (induction on grade),
    gc-coassoc (this PR)
  * D2-nontrivial — separating witness that D r is not ⊤ / a prop
  * Echo is the grade-unit object: D 0 (Echo f y) ≡ Echo f y

--safe --without-K, zero postulates, zero escape pragmas, no funext.
Wired into All.agda and pinned in Smoke.agda; agda proofs/agda/All.agda
and agda proofs/agda/Smoke.agda both exit 0.

Scope (re-read with care). F1 earns back the *existence* of a graded
comonad with Echo as the grade-unit object — that's the claim
R-2026-05-18 retracted at its strongest reading. It does NOT
retroactively make EchoGraded itself a graded comonad: EchoGraded
remains a thin-poset reindexing modality on a three-element lattice,
with no nested family, no monoid multiplication, no D r r' ⇒ D r ∘ D r'.
The paper's title and central thesis (Echo as a reindexing modality)
stand unchanged; F1 enters as an *additional* mechanised contribution
beside EchoGraded.

What this unblocks. Gate F3 (a genuinely independent second model of
the comonad at a different grade monoid — e.g. tropical or
multiplicative semiring — without a × ⊤ carrier or a ⊑-prop-equivalent
field) is now in scope; F3 is not started by this PR.

Doc changes (gated, scoped):
  * docs/echo-types/earn-back-plan.adoc — ledger row A1 + Status entry
    (F1 PASSED 2026-05-20), with the scope qualifier above pinned
  * docs/retractions.adoc — follow-up F-2026-05-20a appended (append-
    only revision policy preserved); no edits to other doc bodies
  * paper.adoc, types-abstract.adoc, conservativity.adoc — INTENTIONALLY
    untouched in this PR; their bodies are about EchoGraded's
    thin-poset structure, which F1 does not change. Whether to add a
    bounded new-contribution paragraph mentioning the F1
    side-construction is owner-gated.

Refs: docs/echo-types/earn-back-plan.adoc §F1 ; docs/retractions.adoc
R-2026-05-18

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath marked this pull request as ready for review May 20, 2026 17:46
@hyperpolymath hyperpolymath merged commit c064670 into main May 20, 2026
0 of 10 checks passed
@hyperpolymath hyperpolymath deleted the f1-coassoc-earn-back branch May 20, 2026 17:46
hyperpolymath added a commit that referenced this pull request May 20, 2026
…landed (#89)

Updates the `Current rung state (2026-05-20)` block to record Wave 3
of today's swarm and refresh the next-Claude plan.

## What this captures

* 5 Wave-3 PRs (`#80` EchoSearch, `#81` provenance, `#82` absint,
  `#83` parser, `#85` EchoCost) and 2 parallel-session merges
  (`#84` Pillar E Evaluation, `#86` F1 gc-coassoc).
* Axis 8 is now 4-of-4 (decidability + graded access + cost + search).
* Next-Claude plan refreshed: ordinal-track unbudgeted WF is the named
  next bottleneck; EchoApprox examples 6/8 still open; EchoSearch
  sequential/product composition deferred.

## Two minor lessons memorialised

* Per-lane Smoke `open import ... using ( ... )` blocks should be
  separate (with header comments), not shared paren-blocks — cuts
  swarm merge-conflict noise.
* During swarm-merge sequences, re-fetch the branch before any
  force-push: parallel claude sessions may be concurrently rebasing
  the same PR (observed on `#82`).

## Invariants

* Doc-only change; no Agda touched.
* `--safe --without-K` invariant unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 20, 2026
Gate F3 of the earn-back plan (docs/echo-types/earn-back-plan.adoc §F3)
is now unblocked by F1 (#86). F3 passes when at least two
non-isomorphic-grade-monoid instances of the abstract graded-comonad
interface are mechanised. This PR is phase 1: the interface itself
and the first instance. Phase 2 (a second instance at a different
grade monoid — e.g. the free monoid (List X, ++, []) over a
non-trivial X) is a separate follow-up.

Two new modules:

* EchoGradedComonadInterface.agda — the abstract record
  GradedComonadStructure. Fields: grade monoid (G, 1G, _·G_) + the
  three monoid laws (·G-identityˡ, ·G-identityʳ, ·G-assoc); graded
  carrier D + functorial action mapD + the two functor laws; counit
  ε at the unit grade; NESTED comultiplication δ; and the three
  graded-comonad laws stated against subst along the monoid's
  propositional identities.

  F3 guardrail honoured: no ⊑-prop-equivalent field anywhere. The
  record contains only structure, monoid laws, and comonad laws —
  no order relation, no propositionality-of-the-grade-relation
  hypothesis. Inspect the field list to verify.

* EchoGradedComonadInstance1.agda — `nat-instance : GradedComonadStructure`
  packaging F1's existing definitions at (ℕ, +, 0). Reuses
  EchoGradedComonadF1.D / mapD / ε / δ / gc-counit-l / gc-counit-r /
  gc-coassoc verbatim; stdlib's +-identityˡ / +-identityʳ / +-assoc
  supply the monoid laws. The shape match was clean — F1's law
  signatures already use subst along the corresponding ℕ-equation
  proofs, so no adapter lemma was needed.

(For the ℕ instance specifically, +-identityˡ is itself refl for
every argument — stdlib defines `+-identityˡ _ = refl` because
`0 + n` reduces to `n` definitionally — so the subst on the
gc-counit-r side reduces to id and the reduced types align with
F1's original gc-counit-r signature `≡ x`. The interface's
propositional-subst form is what is provable in general; for ℕ it
happens to reduce.)

--safe --without-K, zero postulates, no funext, no escape pragmas.
Wired into All.agda; the interface record and the instance witness
are pinned in Smoke.agda. agda proofs/agda/All.agda and
agda proofs/agda/Smoke.agda exit 0.

Scope. This phase 1 ships the interface design only. F3 does NOT
pass on phase 1 alone — the gate explicitly requires "two
non-isomorphic grade monoids" (earn-back-plan.adoc §F3). The
single instance at (ℕ, +, 0) is a feasibility check that the
interface is well-formed and inhabitable; it is not the second
model the retraction R-2026-05-18 finding 3 was about.

Depends on: #86 (F1 PASSED). This PR's branch is based on
f1-coassoc-earn-back; will rebase onto main once #86 lands. No
edits to retractions.adoc / earn-back-plan.adoc in this PR — the
ledger update happens when F3 actually passes (i.e., phase 2).

Refs: docs/echo-types/earn-back-plan.adoc §F3, docs/retractions.adoc
R-2026-05-18 finding 3 ("Not two models")

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 20, 2026
…re (#93)

## Summary

Brings `.machine_readable/6a2/STATE.a2ml` and `META.a2ml` in line
with the prose docs after this session's Pillar F earn-back closure
and §"Theory work" closing.

## `META.a2ml` — three new ADRs (append-only)

No existing ADR is edited. Three appended after `adr-006`:

* **`adr-007`** — F1 earn-back via monoid-graded iterated-residue
  construction. `EchoGradedComonadF1.agda` at `(ℕ, +, 0)` with
  Echo as grade-unit object, nested δ, all three comonad laws,
  `D2-nontrivial` separating witness. (PR #86 merged 2026-05-20.)
* **`adr-008`** — F3 earn-back via two non-isomorphic-grade-monoid
  instances of an abstract `GradedComonadStructure` interface. No
  `⊑-prop`-equivalent field. `nat-instance` at commutative
  `(ℕ, +, 0)`; `list-instance` at non-commutative `(List Tag, ++, [])`.
  (PR #88 open.)
* **`adr-009`** — Retraction-discipline succeeded: the R-2026-05-18
  reframing converted into four earn-back gate passes (F4, F2, F1,
  F3); one retraction stays retracted (conservativity metatheorem,
  finding 5); none silently re-inflated.

Each ADR carries the strict scope qualifier — F1/F3 earn back claims
**for a separate side-construction**; `EchoGraded` itself remains a
thin-poset reindexing modality per R-2026-05-18, and `paper.adoc` /
`types-abstract.adoc` / `conservativity.adoc` are intentionally not
moved.

## `STATE.a2ml` — `next-actions` pruned + two closure sections appended

**Pruned**: 3 of 5 April `next-actions` were stale and are resolved
in the prose:
* `integration` (apply 7-commit sequence) — done long ago
* `t-3` (Gate-1 falsification test 3) — superseded by Gate 1
  adjacency refresh (`decisions/gate1-adjacency-refresh.adoc`, PR #77)
* `q2-4` (falsifier attempts) — absorbed by `IntegrationAudit.agda`
  EI-2 negative result; remaining attempts are bookkeeping

**Remaining + added**: `q2-1` (echo-not-prop generalisation, still
high), `q2-3` (RoleGraded as N5, still low), new
`owner-gated-paper-update` entry, new `ordinal-track-path-1` entry
(in-flight in other session), and the original `v0-2-recipe-extension`
parked entry.

**Two new closure sections** at the end of STATE.a2ml:

* **`earn-back-summary`** — closure record for all four gates with
  module paths, claim wording, retraction-followup citations, and a
  `forbidden-rebrandings` list to prevent later mis-framing.
* **`theory-work-summary`** — closure record for §"Theory work — no
  proof assistant needed": axes fully mechanised list, ruled-out
  items, refreshed items, canonical examples cluster.

## Test plan

* [x] Pure machine-readable data; no Agda touched
* [x] `agda proofs/agda/All.agda` exit 0
* [x] `agda proofs/agda/Smoke.agda` exit 0
* [x] Append-only ADR discipline preserved (adr-001 through adr-006
      unchanged; new ADRs at the end)
* [x] No retracted claim moved; no earned-back claim overclaimed
* [ ] (owner) confirm a2ml schema validation if you run a validator
      against the standards/state-a2ml + meta-a2ml specs

## Scope

Pure machine-readable data update. Disjoint from all currently-open
PRs (#88 F3, #90 partition-dec, #91 generic-codomain, #92 docs tidy).
`paper.adoc` / `types-abstract.adoc` / `conservativity.adoc` are
intentionally not touched.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
hyperpolymath added a commit that referenced this pull request May 20, 2026
…nstances (#88)

## Summary

Gate **F3** of the earn-back plan (`docs/echo-types/earn-back-plan.adoc
§F3`)
now passes. Two non-isomorphic-grade-monoid instances of an
abstract graded-comonad interface, with no `⊑-prop`-equivalent field
in the interface itself, are mechanised:

* **`nat-instance`** at the **commutative** monoid `(ℕ, +, 0)` —
  packages the F1 (#86) iterated-residue construction.
* **`list-instance`** at the **non-commutative** free monoid
  `(List Tag, ++, [])` over a two-element `Tag` with per-element
  residue layers `R smol A = A × Bool`, `R big A = A × ℕ`. All
  three graded-comonad laws proved.

The non-isomorphism is constructively witnessed by
`tag-list-non-commutative` (one direction: only a non-commutative
monoid satisfies it). The two earn-back gates F1 and F3 — both
landed today — close the comonad-side earn-back programme as
specified.

## Three new modules

### `EchoGradedComonadInterface.agda` — abstract record

`GradedComonadStructure` fields:
* Grade monoid: `G`, `1G`, `_·G_`, the three monoid laws.
* Graded carrier: `D : G → Set → Set`, `mapD`, functor laws.
* Counit `ε : D 1G A → A` at the unit grade.
* **Nested** comultiplication `δ : D (g ·G h) A → D g (D h A)`.
* The three graded-comonad laws stated against `subst` along the
  monoid's propositional identities.

**No `⊑-prop`-equivalent field** — F3 guardrail honoured by
construction. Inspect the field list at the top of the module.

### `EchoGradedComonadInstance1.agda` — F1 packaged

`nat-instance : GradedComonadStructure` reuses
`EchoGradedComonadF1.D / mapD / ε / δ / gc-counit-l / gc-counit-r /
gc-coassoc` verbatim; stdlib's `+-identityˡ / +-identityʳ / +-assoc`
supply the monoid laws. No adapter lemma needed — F1's signatures
already use `subst` along the corresponding ℕ-equation proofs.

### `EchoGradedComonadInstance2.agda` — free-monoid instance

`list-instance : GradedComonadStructure` at `(List Tag, ++, [])`.
Construction parallels F1:
* `D [] A = A`; `D (x ∷ xs) A = R x (D xs A)`.
* `mapD-id`, `mapD-∘` by structural induction (per Tag).
* `D-++` proves the type equality `D (xs ++ ys) A ≡ D xs (D ys A)`
  inductively; `δ = coe (D-++ xs ys A)`.
* `gc-counit-r`: definitional (`++-identityˡ _ = refl` in stdlib).
* `gc-counit-l` / `gc-coassoc`: structural induction on the grade
  list, cons step splitting on the head `Tag`. Same `δ`-naturality
  + `subst`-over-residue factoring as F1's `gc-coassoc`.
* `D-nontrivial`: separating witness that
  `D (smol ∷ big ∷ []) Bool` is not collapsing to `⊤` / a prop.

## Build invariant

* `agda proofs/agda/All.agda` exit 0 under `--safe --without-K`
* `agda proofs/agda/Smoke.agda` exit 0 under `--safe --without-K`
* **zero postulates, no funext, no escape pragmas** anywhere in the
  three new modules
* both instances wired into `All.agda`; record + both instances +
  non-isomorphism witness + non-triviality witness pinned in
  `Smoke.agda`

## Scope (please re-read with care)

F3 earns back the two-models claim **for the graded-comonad witness
introduced by F1** — there are two genuinely non-isomorphic
grade-monoid models of the `GradedComonadStructure` interface, the
laws hold at each, the interface itself is `⊑-prop`-free. That is
exactly what the gate asked for.

F3 does **NOT** earn back the older `EchoRelModel`/`GCLaws`
two-models claim retracted at R-2026-05-18 finding 3. That
retraction concerned `set-model` and `rel-model` (both at the same
grade poset, with `⊑-prop` baked in as a field, `rel-model = set-model
× ⊤`, agreement by `refl`). The `GradedLossModel` interface there
still has `⊑-prop`; that situation is unchanged. F3 here is about a
**different** abstract interface and a **different** pair of models.
The two earn-backs are not interconvertible — do not cite one as
evidence for the other.

`paper.adoc`, `types-abstract.adoc`, and `conservativity.adoc`
remain untouched. Their bodies are about `EchoGraded`'s thin-poset
structure, which neither F1 nor F3 changes. The combined F1+F3
result strengthens the case for a bounded "new contribution"
paragraph, but the title / thesis / reindexing-modality framing
should not move on these gates alone — owner-gated, as for F1.

## Doc updates (gated, scoped)

* `docs/echo-types/earn-back-plan.adoc` — ledger row A3
  (Unstarted → PASSED), Sequencing entry added, Status entry with
  the strict scope qualifier above.
* `docs/retractions.adoc` — follow-up **F-2026-05-20b** appended
  (append-only revision policy preserved); the scope qualifier
  pinned in prose.

## Dependencies

* Builds on **#86** (F1 PASSED). Branch based on
  `f1-coassoc-earn-back`; will rebase cleanly onto `main` once #86
  lands.
* Disjoint from **#82** (AbsInt) and **#84** (paper Evaluation —
  already merged).

## Test plan

* [x] Interface module typechecks
* [x] Instance 1 (nat) typechecks
* [x] Instance 2 (list) typechecks — all three comonad laws
* [x] Full `All.agda` build green
* [x] `Smoke.agda` build green
* [x] No postulates, no escape pragmas, no funext in any new module
* [x] No `⊑-prop`-equivalent field in the interface record
* [x] Non-commutativity witness for the second grade monoid
* [x] Non-triviality witness for the second carrier
* [ ] (owner) inspect field list of `GradedComonadStructure` — flag
      anything `⊑-prop`-shaped if present
* [ ] (owner) ratify the F-2026-05-20b scope language in
      `retractions.adoc`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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