Skip to content

docs(proposals): producer-readiness checklist + canonical emit order (closes #97)#114

Merged
hyperpolymath merged 1 commit into
mainfrom
producer-readiness-97
May 30, 2026
Merged

docs(proposals): producer-readiness checklist + canonical emit order (closes #97)#114
hyperpolymath merged 1 commit into
mainfrom
producer-readiness-97

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Closes #97 — addresses both halves of the paired-review meander finding.

(A) Producer-readiness checklist — Appendix B in proposal 0001 (~120 LOC)

Tabulates each carrier section's IR prerequisites, current producer-side status, and roadmap-issue identifier in each producer's tracker where the gap is named:

Carrier IR prerequisites Status
typedwasm.ownership per-fn ownership-kind tracking SHIPPING
typedwasm.regions region decls + field offsets + stable indices NOT YET EMITTABLE (AS Roadmap C1 deferred; Ephapax dead code)
typedwasm.capabilities per-fn cap decl + module budget + effect IR NOT YET EMITTABLE (AS Roadmap C2 not started; Ephapax Perform/Handle stubbed)
typedwasm.region-imports (0003) + cross-module region tracking + wasm-module-name resolution NOT YET EMITTABLE
typedwasm.access-sites (0002) + per-instr tracking + post-rewrite hook NOT YET EMITTABLE (depends on regions)
typedwasm.capability-grants (0004) + per-callsite grant tracking NOT YET EMITTABLE (depends on capabilities)

NOTE block surfaces the all-or-nothing implication: do not emit a section you cannot populate.

Proposal 0002 gains a §"Producer-readiness (cross-reference)" subsection (~28 LOC) pointing to 0001's Appendix B plus three access-sites-specific items: per-instruction tracking, post-rewrite hook discipline, region-index stability across sections.

(B) Canonical emit ordering — extends 0001 §"Producer obligations"

New 5th item specifying the recommended emit order matching the runtime dependency graph:

1. typedwasm.ownership
2. typedwasm.regions
3. typedwasm.region-imports        (proposal 0003)
4. typedwasm.capabilities
5. typedwasm.access-sites          (proposal 0002)
6. typedwasm.capability-grants     (proposal 0004)

Consumers MUST NOT depend on this order — the verifier reads sections by custom-section name, so any order is parseable. The canonical order exists for cross-producer module comparability (byte-equal carrier sequences for two producers of the same logical module — useful for cmp / diff / content-addressing).

Acceptance update for #97

  • Proposal 0001 gains §"Producer-readiness checklist" appendix listing the IR prerequisites for each section.
  • Proposal 0002 gains a one-line cross-reference (expanded to a full subsection with access-sites-specific items) to 0001's checklist.
  • Proposal 0001 §"Producer obligations" specifies the canonical emit order with a "consumer MAY accept any order" note.
  • When AffineScript / Ephapax start their respective Roadmap C1/C2/C3 implementations, those issues cross-reference this checklist. (Producer-side action, not a typed-wasm gate.)

What this closes

Together with #94, #95, #96 (resolved in PRs #110/#111/#112/#113), this completes all the documentation-side gates around proposals 0001 and 0002. Both proposals are now fully ready for [review] → [accepted] owner decision.

Test plan

  • AsciiDoc renders cleanly (cols-tables, lower-alpha sub-list, code-block fences).
  • Cross-reference link to Appendix B from proposal 0002 uses AsciiDoc anchor format.
  • No code changes — no Cargo/Idris2 build required.

Related

🤖 Generated with Claude Code

…loses #97)

Addresses both halves of #97:

## (A) Producer-readiness checklist

Adds "Appendix B — Producer-readiness checklist" to proposal 0001 (~120
LOC). Tabulates each carrier section's IR prerequisites, current
producer-side status (SHIPPING vs NOT YET EMITTABLE), and the
roadmap-issue identifier in each producer's tracker where the gap is
named:

  Carrier                       | IR prerequisites      | Status
  -----------------------------|-----------------------|-------------
  typedwasm.ownership          | per-fn ownership tags | SHIPPING
  typedwasm.regions            | region decl + offset  | NOT YET EMIT
  typedwasm.capabilities       | per-fn cap decl       | NOT YET EMIT
  typedwasm.region-imports     | + cross-module        | NOT YET EMIT
  typedwasm.access-sites       | + per-instr tracking  | NOT YET EMIT
  typedwasm.capability-grants  | + per-callsite track  | NOT YET EMIT

NOTE block surfaces the all-or-nothing implication: do not emit a
section you cannot populate.

Proposal 0002 gains a §"Producer-readiness (cross-reference)"
subsection (~28 LOC) pointing to 0001's Appendix B plus three
access-sites-specific items: per-instruction tracking, post-rewrite
hook discipline, region-index stability across sections.

## (B) Canonical emit ordering

Extends proposal 0001 §"Producer obligations" with a 5th item
specifying the recommended emit order:

  1. typedwasm.ownership
  2. typedwasm.regions
  3. typedwasm.region-imports (proposal 0003)
  4. typedwasm.capabilities
  5. typedwasm.access-sites (proposal 0002)
  6. typedwasm.capability-grants (proposal 0004)

Order matches the runtime dependency graph (access-sites
foreign-keys regions; capability-grants foreign-keys capabilities;
region-imports companions regions). Explicit note: consumers MUST
NOT depend on this order — the verifier reads by name. The
canonical order exists for cross-producer module comparability
(byte-equal carrier sequences for two producers of the same logical
module — useful for cmp / diff / content-addressing).

## Acceptance update for #97

- [x] Proposal 0001 gains §"Producer-readiness checklist" appendix
  listing the IR prerequisites for each section.
- [x] Proposal 0002 gains a one-line cross-reference (expanded to a
  full subsection with access-sites-specific items) to 0001's
  checklist.
- [x] Proposal 0001 §"Producer obligations" specifies the canonical
  emit order with a "consumer MAY accept any order" note.
- [ ] When AffineScript / Ephapax start their respective Roadmap
  C1/C2/C3 implementations, those issues cross-reference this
  checklist. (Producer-side action, not a typed-wasm gate.)

Refs: #34, #50, #97, #106 (acceptance roadmap),
ephapax#165 §3+§6, affinescript#402 §4+§7, affinescript#462.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath enabled auto-merge (squash) May 30, 2026 14:56
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 96 issues detected

Severity Count
🔴 Critical 8
🟠 High 19
🟡 Medium 69

⚠️ 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 boj-build.yml",
    "type": "unknown",
    "file": "boj-build.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in c5-regenerate.yml",
    "type": "unknown",
    "file": "c5-regenerate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in cargo-audit.yml",
    "type": "unknown",
    "file": "cargo-audit.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in codeql.yml",
    "type": "unknown",
    "file": "codeql.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "unknown",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "unknown",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "unknown",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "unknown",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "unknown",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath hyperpolymath merged commit 2f36f51 into main May 30, 2026
31 checks passed
@hyperpolymath hyperpolymath deleted the producer-readiness-97 branch May 30, 2026 15:06
hyperpolymath added a commit that referenced this pull request May 30, 2026
…115)

## Summary

Owner-decision close of the proposal-acceptance arc. Both proposals
satisfied every acceptance gate this session ([see #106 wrap-up
comment](#106 (comment)));
this PR applies the status flip.

## Status changes

- `docs/proposals/0001-multi-producer-carrier-section.adoc` — `review →
accepted`
- `docs/proposals/0002-access-site-carrier.adoc` — `review → accepted`
- `docs/proposals/README.adoc` — "Current proposals" table updated; NOTE
block clarifies files remain in `docs/proposals/` (ADR promotion is a
separate file-restructure follow-up).

## LEVEL-STATUS.md updates

| Level | Before | After |
|-------|--------|-------|
| L2 (region binding) | proposal-stage | **YES** (carrier-backed) —
`verify_access_sites_from_module` (PR #109); gated `unstable-l2` |
| L3–L6 (type-compat, null, bounds, result-type) | proposal-stage |
**YES** (carrier-backed, schema half) — regions codec PR #107;
per-access enforcement gated on producer codegen |
| L15-A/B (capabilities) | proposal-stage | **YES** (carrier-backed) —
`verify_capabilities_from_module` (PR #109); gated `unstable-l15` |
| L13 cross-module (positive form) | — | proposal-stage — proposal 0003
`[draft]` (new row) |

"Open gating items" section rewritten to remove obsolete pre-acceptance
gates (all shipped via #107/#109) and enumerate the remaining
producer-side prerequisites + [draft] proposal 0003/0004 work.

## What this DOES NOT change

- **File locations**: proposals stay in `docs/proposals/`. ADR promotion
to `docs/decisions/` (with renumbering — existing ADR 0001 is
"adopt-rsr-standard", so proposals 0001/0002 would become ADRs
0002/0003) is a deliberate separate PR to keep the status flip cleanly
auditable.
- **Code**: no source or test changes. Verifier passes already shipped
in #107/#109 behind `unstable-l2` / `unstable-l15` feature flags.
- **Producer-side codegen**: still pending per Appendix B prerequisites
in proposal 0001.

## Test plan

- [x] Status field flipped on both proposals.
- [x] README table reflects new statuses with date.
- [x] LEVEL-STATUS L2/L3-L6/L15 rows show carrier-backed YES.
- [x] Open gating items rewritten (4 items: producer codegen, L13
cross-module, L15-C, ADR promotion).
- [ ] CI passes (doc-only changes; no Cargo/Idris2 build risk).

## Related

- #34 (proposal 0001 umbrella)
- #78 (proposal 0002 RFC)
- #106 (acceptance roadmap tracker — full wrap-up comment)
- This session's 5-PR sprint that satisfied every gate: #107 (codec),
#108 (spec doc), #109 (verifier), #110 (Criterion 2 appendix), #111
(proposal 0004 draft for #96), #112 (proposal 0003 draft for #95), #113
(WBool pin for #94), #114 (producer-readiness for #97).

🤖 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.

spec: add producer-readiness checklist + canonical emit ordering to proposals 0001 / 0002

1 participant