Skip to content

Commit f6364ce

Browse files
Merge branch 'main' into chore/foundations-bridge-adoc
2 parents 86f8b12 + 949b5ed commit f6364ce

133 files changed

Lines changed: 14267 additions & 2860 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/governance.yml

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
1-
# SPDX-License-Identifier: MPL-2.0
2-
# governance.yml — single wrapper calling the shared estate governance bundle
3-
# in hyperpolymath/standards instead of carrying per-repo copies.
4-
#
5-
# Replaces the per-repo governance scaffolding removed in the same commit:
6-
# quality.yml, guix-nix-policy.yml, npm-bun-blocker.yml, ts-blocker.yml,
7-
# security-policy.yml, rsr-antipattern.yml, wellknown-enforcement.yml,
8-
# workflow-linter.yml
9-
#
10-
# Load-bearing build/security workflows stay standalone in the repo
11-
# (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing).
12-
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
132
name: Governance
3+
144
on:
155
push:
166
branches: [main, master]
177
pull_request:
8+
branches: [main, master]
189
workflow_dispatch:
19-
# Estate guardrail: cancel superseded runs so re-pushes / rebased PR
20-
# updates do not pile up queued runs against the shared account-wide
21-
# Actions concurrency pool. Applied only to read-only check workflows
22-
# (no publish/mutation), so cancelling a superseded run is always safe.
23-
concurrency:
24-
group: ${{ github.workflow }}-${{ github.ref }}
25-
cancel-in-progress: true
10+
2611
permissions:
2712
contents: read
13+
2814
jobs:
2915
governance:
30-
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@3b3549e293f87be99d7dbb939d380c8128842c8e # main
16+
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910

.github/workflows/hypatia-scan.yml

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
# SPDX-License-Identifier: MPL-2.0
2-
# Thin wrapper around hyperpolymath/standards hypatia-scan-reusable.yml.
3-
# See standards#191 for the reusable's purpose and design.
4-
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
52
name: Hypatia Security Scan
3+
64
on:
75
push:
86
branches: [main, master, develop]
@@ -11,16 +9,11 @@ on:
119
schedule:
1210
- cron: '0 0 * * 0'
1311
workflow_dispatch:
14-
# Estate guardrail: cancel superseded runs so re-pushes don't pile up.
15-
concurrency:
16-
group: ${{ github.workflow }}-${{ github.ref }}
17-
cancel-in-progress: true
12+
1813
permissions:
1914
contents: read
20-
security-events: write
21-
pull-requests: write
15+
security-events: read
16+
2217
jobs:
23-
hypatia:
24-
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@6cd3772824e59c8c9affeab66061e25383544242
25-
timeout-minutes: 10
26-
secrets: inherit
18+
scan:
19+
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910

.github/workflows/proofs.yml

Lines changed: 289 additions & 5 deletions
Large diffs are not rendered by default.

.github/workflows/scorecard.yml

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
# SPDX-License-Identifier: MPL-2.0
2-
name: Scorecards supply-chain security
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
name: OSSF Scorecard
3+
34
on:
4-
branch_protection_rule:
5-
schedule:
6-
- cron: '23 4 * * 1'
75
push:
8-
branches: [main]
9-
permissions: read-all
6+
branches: [main, master]
7+
schedule:
8+
- cron: '0 4 * * *'
9+
workflow_dispatch:
10+
11+
permissions:
12+
contents: read
13+
1014
jobs:
11-
analysis:
12-
uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@e0caf11508a3989574713c78f5f444f2ce5e33ef
13-
timeout-minutes: 10
14-
secrets: inherit
15+
scorecard:
16+
uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,5 @@ CoqMakefile.conf
7070
*.vos
7171
*.glob
7272
.*.aux
73+
.*.d
74+
.lia.cache

.machine_readable/6a2/META.a2ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# META.a2ml — My Lang meta-level information
55
[metadata]
66
version = "0.1.0"
7-
last-updated = "2026-06-05"
7+
last-updated = "2026-06-14"
88

99
[project-info]
1010
license = "MPL-2.0"
@@ -17,8 +17,12 @@ decisions = [
1717
{ id = "ADR-001", date = "2026-06-02", title = "Dual-track QTT mechanisation (Coq + Idris2) for the solo-core", status = "accepted", note = "The solo dialect's affine/linear kernel is mechanised twice — Coq (Prop) and Idris2 (Type) — so the two flagship metatheories track the same shape. Methodology is statements-first: theorems committed as statements, then discharged. Semiring laws proved by exhaustive Refl/reflexivity." },
1818
{ id = "ADR-002", date = "2026-06-05", title = "Echo-types is a first-class type former in the formal kernel", status = "accepted", note = "echo-types is integrated into the type SYSTEM, not only the Rust checker: TEcho type former + MkEcho/Weaken terms + THEcho/THWeaken typing rules + echo reduction rules in the Coq/Idris solo-core. EchoMode = Linear/Affine thin poset (weaken + no-section laws); EchoResidue = proof-layer object pinning the laws behind the Rust Ty::is_assignable_from Echo case (closes slice 3 of docs/design/echo-types-integration.md). Claim line held to R-2026-05-18: Echo is a loss-graded reindexing modality over a thin poset — NOT graded-comonad/universal-property/adjunction." },
1919
{ id = "ADR-003", date = "2026-06-05", title = "Idris splitting rules carry explicit context/quantity fields", status = "accepted", note = "On the Idris track the four context-splitting rules (THApp/THPair/THCase/THLet) carry their split contexts (and the App/Let quantity) as explicit constructor fields. Rationale: Idris2 QTT erases the typing-derivation context indices at runtime, but the closed-context progress inversion (g1+g2=Empty implies both Empty) needs them relevant. The Coq twin leaves them as Prop binders (Prop has no erasure). Documented track divergence; the derivation now records its own split, which is arguably more faithful." },
20-
{ id = "ADR-004", date = "2026-06-05", title = "Product/elimination form undecided — gates F1.4 preservation", status = "open", note = "Kernel pairs are multiplicative (THPair splits the context) but eliminators are projections (Fst/Snd); that combination is unsound for preservation on open terms. Decision pending between additive (projections), multiplicative tensor (let-pair elim), or both. See issue #93. Preservation (F1.4) is blocked until resolved." },
20+
{ id = "ADR-004", date = "2026-06-05", title = "Product/elimination form undecided — gates F1.4 preservation", status = "resolved", resolved-date = "2026-06-13", note = "RESOLVED by ADR-007 (both products). Original concern: kernel pairs were multiplicative (split context at intro) but eliminated by projection (Fst/Snd) — neither & nor ⊗, and strictly weaker than both. The resolution is to provide BOTH genuine products. See ADR-007." },
2121
{ id = "ADR-005", date = "2026-06-05", title = "Scope unchanged — no new realignment ANCHOR", status = "accepted", note = "This session (operational semantics, progress, Echo-in-the-typesystem) is progress WITHIN the 2026-01-01 scope-arrest ANCHOR (Solo-first; Rust impl; contain other dialects). It is not a scope realignment, so no new ANCHOR.*.a2ml is issued. Formal mechanisation remains a first-class deliverable consistent with that anchor; proof assistants (Coq/Idris/Agda) are verification tooling, not new compiler host languages." },
22+
{ id = "ADR-006", date = "2026-06-12", title = "Separated QTT context: type context (tctx) + usage vector (uvec)", status = "accepted", note = "The conflated QTT context (types and quantities together in one Snoc, with ctx_add taking its type annotation from its FIRST argument — so context addition was NOT commutative in the types) is replaced by a SEPARATED representation: a type context tctx (TEmpty/TSnoc) shared verbatim across every premise of a rule, and a usage vector uvec (UEmpty/USnoc) that is the only thing split (uadd) or scaled (uscale). Payoff: uadd is genuinely commutative + associative and uscale distributes (uadd_comm, uadd_assoc, uscale_add in Usage.v), which is exactly the clean algebra the F1.4 substitution lemma needs. has_type : tctx -> uvec -> tm -> ty -> Prop. PRs #102 (Usage.v) + #103 (migration)." },
23+
{ id = "ADR-007", date = "2026-06-13", title = "Two genuine products: additive & (TWith) and multiplicative ⊗ (TTensor)", status = "accepted", note = "Resolves ADR-004. The additive product & (TWith) introduces under SHARED usage (both components typed under the same D — safe because only one survives elimination) and is eliminated by Fst/Snd projection. The multiplicative product ⊗ (TTensor) introduces by SPLITTING usage (uadd D1 D2) and is eliminated by a let-pair `let (x,y)=e1 in e2` that binds two variables and delivers both components. This replaces the single incoherent product. PRs #103 (&) + #104 (⊗)." },
24+
{ id = "ADR-008", date = "2026-06-13", title = "Additive-& evaluation is eager (lazy deferred)", status = "accepted", note = "The additive pair With t1 t2 is a value only once BOTH components are values (eager); Fst/Snd project from that value. This is type-safe and, under the current strongly-normalising kernel (no recursion/fixpoint), observationally equivalent to the canonical LAZY & semantics. Switch to lazy & (With always a value; project-then-evaluate) is deferred to when recursion or effects enter the language, at which point lazy becomes required. Flagged, not forgotten." },
25+
{ id = "ADR-009", date = "2026-06-14", title = "F1.4 preservation via an open-context QTT substitution lemma", status = "accepted", note = "Preservation (Coq) is discharged by a substitution lemma ht_subst that holds for OPEN substituends (not only closed values), because the let-pair (⊗) eliminator substitutes tensor components that are typed in a non-empty context. subst2 u1 u2 t = subst0 u1 (subst0 (shift 0 u2) t) (the shift 0 makes it correct for open u2; identity on closed terms, so closed-program evaluation is unchanged). Theorem preservation + affine_pres are real axiom-free Qed (Print Assumptions closed). PR with d174c06." },
2226
]
2327

2428
[development-practices]

.machine_readable/6a2/README.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// SPDX-License-Identifier: MPL-2.0
2+
// Owner: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
23
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
34
# A2ML 6a2 Directory
45

0 commit comments

Comments
 (0)