diff --git a/docs/ledgers/evidence-map.md b/docs/ledgers/evidence-map.md index c08d639..ea795df 100644 --- a/docs/ledgers/evidence-map.md +++ b/docs/ledgers/evidence-map.md @@ -4,8 +4,9 @@ | --- | --- | --- | --- | --- | --- | --- | --- | --- | | E0001 | Host edition | This repository's GitLab-origin scaffold | `2b581184d08daed1d0f0b9611fbafbaa0f24e278` | `.gitlab/`, `.gitlab-ci.yml`, GitLab nouns in contracts | GitHub edition must keep process identical so Options B/C remain file splits | Mapped | | Keep GitLab tree recoverable from this commit; do not mix hosts in-tree | | E0002 | Host edition | `docs/HOST.md` | working tree | GitHub surface map, non-claims, B/C triggers | Do not start B or C inside an unrelated product slice | Designed | | Revisit B/C only on named triggers | -| E0003 | v9fs kernel | https://github.com/v9fs/linux | pin SHA per slice | Kernel v9fs paths; issues as product tracker | Mirror-only: no `.github` / CI in-tree; rebases on torvalds/linux | Mapped | | Pin commit and issue for the active slice | -| E0004 | v9fs harness | https://github.com/v9fs/test | pin SHA and Actions run per slice | Sync, Image publish, suites, wiki, JSON/diff artifacts | All regression CI lives here; linux is checkout source | Mapped | | Pin workflow, suite, and artifact for the claim | -| E0005 | Tip residuals | https://github.com/v9fs/test/issues/28 | open issue; pin run/log in bootstrap | t0011 allsquash ownership; t0013 POSIX ACL xattrs on guest `/tmp` | May be diod, v9fs, or harness expectation; currently XFAIL | Unmapped | bootstrap issue | Pin kernel/diod/harness versions and discriminating FAIL | +| E0003 | v9fs kernel | https://github.com/v9fs/linux | tag `v7.2` = `8d3ae59288f1e7d58d76558a6ee96d533bc5019f` (2026-08-16) | Kernel in Image `kernel-v7.2` / floating `kernel-latest` | Mirror-only: no `.github` / CI in-tree; Image config enables `TMPFS_POSIX_ACL` but not `TMPFS_XATTR` | Mapped | #1 | Implementation slices must re-pin if Image moves off v7.2 | +| E0004 | v9fs harness | https://github.com/v9fs/test | run SHA `94b2182f54b30a073d893990db8f64e69f0d911a`; XFAIL list same on main `cce752431c359134fad9b0ae628bc9ecfefdc179` | `diod/xfail.txt`, mount-helper-v12, Harness CI | All regression CI lives here; docker `ghcr.io/v9fs/docker:latest` is floating | Mapped | #1 | Keep XFAIL until a slice removes rows with PASS | +| E0005 | Tip residuals | https://github.com/v9fs/test/issues/28 | Actions [32929975795](https://github.com/v9fs/test/actions/runs/32929975795) 2026-08-26; eval `unexpected: 0` | t0011 uid 65534 vs test `id -u`; t0013 `Txattrwalk` EOPNOTSUPP 95 | Two independent claims; XFAIL is not integration proof | Mapped | #1 | Open separate implementation slices after #1 lands | +| E0006 | diod | https://github.com/chaos/diod | `de51d1ee1bd5ccf1d8c16b96227c8bb03ec50106` (`master` 2026-06-23; still HEAD 2026-08-31) | t0011 `--allsquash` (default squashuser nobody); t0013 `setfacl` on export | Prepare clones `--depth 1` `DIOD_REF=master`; pin SHA in later slices | Mapped | #1 | Do not treat floating `master` as a pin in implementation PRs | Status vocabulary: `Unmapped`, `Mapped`, `Designed`, `Blocked`, `Superseded`. diff --git a/docs/ledgers/proof-ledger.md b/docs/ledgers/proof-ledger.md index c48d820..2a2e97d 100644 --- a/docs/ledgers/proof-ledger.md +++ b/docs/ledgers/proof-ledger.md @@ -3,7 +3,7 @@ | ID | Claim | Component/artifact | Evidence ids | Current level | Exact proof artifact or command | Explicit non-claims | GitHub issue/PR | Next gap | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | P0001 | Scaffold is a GitHub edition: required GitHub templates, Actions workflow, and host contracts exist; process remains 1:1 with the GitLab origin | `.github/`, `docs/HOST.md`, `scripts/check-scaffold.sh` | E0001, E0002 | Static | `scripts/check-scaffold.sh` and `git diff --check` | Dual-host adapters (B); GitHub-native review/CODEOWNERS/issue forms (C); live `gh` issue/PR loop against a remote | | Contract/Golden: create issue+draft PR from templates on a GitHub remote | -| P0002 | t0011 allsquash and t0013 ACL tip residuals are mapped to a pinned kernel/diod/harness boundary with a discriminating proof plan | `v9fs/test` harness; diod; v9fs | E0003, E0004, E0005 | Unmapped | Bootstrap evidence map; later named suite vs XFAIL | No kernel or diod fix claimed yet; XFAIL is not integration proof | bootstrap issue | Select the first bounded proof promotion | +| P0002 | t0011 allsquash and t0013 ACL tip residuals are two independent mapped claims with pinned kernel/diod/harness versions | `v9fs/test` harness; `chaos/diod`; v9fs Image v7.2 | E0003, E0004, E0005, E0006 | Mapped | `docs/plans/1-map-tip-xfails.md`; run 32929975795; `scripts/check-scaffold.sh` | No kernel or diod fix; XFAIL is not integration proof; docker latest is floating | #1 | Create two implementation slices after independent review lands | Use the levels selected from `docs/PROOF_MODEL.md`. A higher level requires an actual artifact, not only a planned test. diff --git a/docs/plans/1-map-tip-xfails.md b/docs/plans/1-map-tip-xfails.md new file mode 100644 index 0000000..e176fee --- /dev/null +++ b/docs/plans/1-map-tip-xfails.md @@ -0,0 +1,108 @@ +# Work Slice Plan + +## Summary + +- Slice: Map t0011 allsquash and t0013 ACL tip residuals as two independent + claims with pinned kernel, diod, and harness versions +- Human outcome: an implementer can start either residual without reconstructing + this diagnosis from chat +- Evidence version: Harness CI run 32929975795; kernel Image `kernel-latest` = + v7.2 (`8d3ae59288f1e7d58d76558a6ee96d533bc5019f`); diod + `de51d1ee1bd5ccf1d8c16b96227c8bb03ec50106`; harness + `94b2182f54b30a073d893990db8f64e69f0d911a` +- Target component/API/artifact: evidence map + proof plan (no product code) +- GitHub milestone: M0 - Bootstrap +- GitHub issue: https://github.com/v9fs/agent-team/issues/1 +- GitHub PR: to fill +- Branch: `scaffold/1-map-tip-xfails` +- Authority level/exceptions: A2; no merge to `v9fs/linux`; no `.github` on linux +- Owner: evidence mapper (this slice) +- Independent reviewer: distinct from mapper; review the split and pins +- Date: 2026-08-31 + +## Scope + +- In scope: pin versions; separate t0011 vs t0013; name discriminating + observations; record non-claims; name next implementation slices +- Explicit non-claims: no kernel, diod, or harness code change; XFAIL remaining + is not integration proof; `ghcr.io/v9fs/docker:latest` is floating +- Required dependencies: run 32929975795 logs/artifacts already diagnosed in + `01-projects/v9fs/diod-tip-xfails-allsquash-acl.md` +- Deferred dependencies: implementation PRs in `v9fs/test` and/or `chaos/diod` + and/or `v9fs/linux` after this mapping lands + +## Backlog Context + +| Rank | GitHub issue | Outcome | Dependency/proof boundary | Why next | Stop/defer rule | +| --- | --- | --- | --- | --- | --- | +| 1 | agent-team#1 | Pins + two independent claims | Unmapped → Mapped | M0; current next-action | Do not implement | +| 2 | (create after #1 lands) | t0011 squashuser vs assertion | Mapped → Integration on t0011 only | Independent of ACL | Stop if `--squashuser` trial is not decisive | +| 3 | (create after #1 lands) | t0013 ACL xattr / TMPFS_XATTR | Mapped → Integration on t0013 only | Independent of squash | Stop if in-guest local `/tmp` setfacl is not EOPNOTSUPP and not PASS | + +## Evidence Map + +| Source/spec/runtime/data | Version | Purpose | Constraint | Target | +| --- | --- | --- | --- | --- | +| `v9fs/linux` tag `v7.2` | `8d3ae59288f1e7d58d76558a6ee96d533bc5019f` (2026-08-16, "Linux 7.2") | Kernel in Image `kernel-v7.2` / `kernel-latest` | Mirror-only; no `.github` | E0003 | +| `v9fs/test` release `kernel-latest` | notes: "currently v7.2 / kernel-v7.2"; published 2026-08-24 | Floating Image used by Harness CI on push | Later tip Images may differ | E0004 | +| `v9fs/test` harness at run | `94b2182f54b30a073d893990db8f64e69f0d911a` (PR #26) | XFAIL eval, mount helper v12, `diod/xfail.txt` | Main later moved to `cce75243` (docs #27 only) | E0004 | +| Actions run | [32929975795](https://github.com/v9fs/test/actions/runs/32929975795) 2026-08-26 | Discriminating logs: uid 65534 vs EOPNOTSUPP 95 | `unexpected: 0`; XFAIL not a harness regression | E0005 | +| `chaos/diod` | `de51d1ee1bd5ccf1d8c16b96227c8bb03ec50106` (`master` since 2026-06-23; still HEAD 2026-08-31) | t0011/t0013 source; `--allsquash` default squashuser nobody | Prepare clones `--depth 1` `DIOD_REF=master` | E0006 | +| Publish config | `linux-kernel-publish.yml` at harness SHA | `TMPFS_POSIX_ACL` on; `TMPFS_XATTR` not set | Guest `/tmp` may lack ACL xattrs | E0004 | +| Product tracker | [v9fs/test#28](https://github.com/v9fs/test/issues/28) | Human issue for residuals | Keep XFAIL until implementation slices | E0005 | + +## Design + +- Public interface: none (ledger + issue contract) +- Ownership/state boundaries: two residuals, two later write scopes +- Invariants: linux stays mirror-only; all CI stays in `v9fs/test` +- Failure and rollback handling: leave `diod/xfail.txt` until a slice removes rows with a PASS +- Compatibility/migration behavior: n/a +- Observability: named Actions run + diod logs in `diod-regression-logs` + +## Proof Plan + +| Level | Command or artifact | Expected discriminating result | +| --- | --- | --- | +| Static | `scripts/check-scaffold.sh` | Scaffold still valid after ledger edit | +| Mapped | This plan + E0003–E0006 pins | Another agent can restate both claims from git | +| Unit | not in this slice | | +| Contract/Golden | not in this slice | | +| Integration | later: named t0011 or t0013 without XFAIL | PASS for that test only | +| Operational | not claimed | | + +Plausible wrong mechanism and the observation that rejects it: + +> The mapping would fail if t0011 and t0013 were one harness bug, because the +> same run shows squash working (export uid 65534) while ACL walks return +> EOPNOTSUPP 95 with no `Txattrcreate`. A squashuser-only change cannot make +> t0013 PASS. + +t0011 later discriminator: `--squashuser=$(id -un)` makes `exp/` ownership +match `id -u`; asserting 65534 would also pass if the test is what is wrong. +"v9fs dropped squash" is rejected by `Rgetattr uid 65534` and green t0012. + +t0013 later discriminator: in-guest `setfacl` on a local `/tmp` file (not 9p). +EOPNOTSUPP ⇒ export fs / `TMPFS_XATTR`. PASS on local `/tmp` ⇒ 9p/diod xattr +path. "posixacl mount option not parsed" is rejected because `-o posixacl` +mounts and the client issues `Txattrwalk`. + +## Team Orchestration + +| Role | Agent/thread | GitHub issue | Read scope | Write scope | Required output | Integration order | +| --- | --- | --- | --- | --- | --- | --- | +| Orchestrator | ericvh | #1 | both product repos | workflow state | ordered integration | first/last | +| Evidence mapper | this slice | #1 | linux/test/diod/CI | this forge ledgers | evidence/proof map | before code | +| Implementer | none yet | #1 | | none (no product code) | mapping only | | +| Independent reviewer | distinct | #1 | full PR | review note only | decision/findings | after mapping PR | +| CI/proof owner | v9fs/test | #1 | pipeline/proof | none this slice | run 32929975795 | already landed | +| State closer | after review | #1 | GitHub + records | state rows | landed reconciliation | last | + +## Exit Criteria + +- [x] Evidence, authority, dependencies, and write scopes are explicit. +- [x] Target behavior and non-claims are bounded. +- [x] Proof rejects the named plausible false positive (one-bug mapping). +- [ ] Required review and approval are complete. +- [x] Follow-ups have bounded dispositions (two later slices, not opened yet). +- [ ] GitHub and durable evidence agree after landing. diff --git a/docs/project-formulation.md b/docs/project-formulation.md index 37c147e..7f0eadd 100644 --- a/docs/project-formulation.md +++ b/docs/project-formulation.md @@ -104,9 +104,9 @@ Authority levels: | Rank | Issue | Outcome | Evidence boundary | Proof promotion | Predecessor | Unblocks | | --- | --- | --- | --- | --- | --- | --- | -| 1 | M0 bootstrap | Pin t0011/t0013 tip residuals (`v9fs/test#28`) across diod, v9fs, and harness; named proof plan and non-claims | `v9fs/test#28`, harness logs, diod/v9fs tip behavior | Unmapped → Mapped | — | Implementation slice | -| 2 | (planned) | Land the mapped residual as a kernel, diod, and/or harness change with a non-XFAIL assertion | Pins from slice 1 | Mapped → Integration | 1 | Relative/nightly compare | -| 3 | (horizon) | Next P0 from Test Infrastructure or a linux bug with a harness reproduction | Named linux/test issues | Mapped before code | 2 | Feature slices | +| 1 | [#1](https://github.com/v9fs/agent-team/issues/1) | Pin t0011/t0013 as two independent claims | E0003–E0006; run 32929975795 | Unmapped → Mapped | — | Two implementation slices | +| 2 | (open after #1 lands) | t0011: squashuser vs ownership assertion | E0005/E0006 t0011 only | Mapped → Integration | 1 | Drop matching XFAIL rows | +| 3 | (open after #1 lands) | t0013: ACL xattr / `TMPFS_XATTR` vs 9p path | E0003/E0005 t0013 only | Mapped → Integration | 1 | Drop matching XFAIL rows | Execute only the first slice before deciding whether more process, telemetry, or parallelism is justified.