Skip to content

Commit ab2df82

Browse files
committed
Document S6 release prep + audit results in PROJECT_STATUS + TODO
1 parent 96f055e commit ab2df82

2 files changed

Lines changed: 89 additions & 3 deletions

File tree

PROJECT_STATUS.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,3 +556,74 @@ fixed since the doc was already in this commit.
556556
PVE console) and replay the live root-drop matrix as a post-S5 sanity
557557
pass. Not blocking; chain is unchanged.
558558

559+
## Release v0.1.0 — 2026-04-30
560+
561+
**Tag:** `v0.1.0`. Built off `main` after release-prep commits land. Repo is **private**; release stays private until the maintainer manually flips visibility per `docs/PUBLISH-CHECKLIST.md`.
562+
563+
**Release artifacts (attached to GitHub release):**
564+
565+
| Asset | Target | Size (bytes) | sha256 |
566+
|-------|--------|--------------|--------|
567+
| `copyfail-x86_64-musl` | x86_64-unknown-linux-musl | 108,432 | `7287a2c4e8ddba122e6ef9ed46d640234ef8c2cb995405d55bb18941edcdf474` |
568+
| `copyfail-aarch64-musl` | aarch64-unknown-linux-musl | 97,704 | `52cfec36843c65f95fc3eae27cdb69d090fbd8f0f1f62b38766a2cf3a93c4b1a` |
569+
| `copyfail-armv7-musleabihf` | armv7-unknown-linux-musleabihf | 87,256 | `cbf2ab5cad49f8d691ac62d86a69518b26637ca452b6f4896bfac7224a87565c` |
570+
| `checksums.txt` | sha256 sums | 267 ||
571+
572+
All under the 300 KB project budget. armv7 first-time build (rust-lld cross-link, no external toolchain).
573+
574+
**Release notes file:** `release-notes.md` at repo root.
575+
576+
**Files added/modified for release:**
577+
578+
- `README.md` — replaced placeholder with caveman public version (was `docs/README-public-caveman.md`)
579+
- `BLOG.md` — long-form narrative version (was `docs/README-public-draft.md`)
580+
- `docs/README-public-caveman.md` — deleted (content lives at top-level README)
581+
- `.github/workflows/ci.yml` — fmt + clippy + test (native, x86_64 musl target installed for build) + 3-target build matrix (x86_64/aarch64/armv7 musl)
582+
- `docs/usage.md` — concrete examples per CLI mode, output blocks captured from real binary
583+
- `docs/threat-model.md` — STRIDE-flavored ~1-page threat model
584+
- `docs/PUBLISH-CHECKLIST.md` — manual gates for going public
585+
- `release-notes.md` — gh release body
586+
- `.gitignore``dist/` added
587+
- `src/*`, `tests/*``cargo fmt` pass (no semantic change; release-time hygiene)
588+
- `TODO.md`, `PROJECT_STATUS.md` — this section
589+
590+
## S6 Findings — Release prep — 2026-04-30
591+
592+
**Audit:**
593+
594+
| # | Check | Result |
595+
|---|-------|--------|
596+
| A1 | `rg -i "claude\|anthropic\|co-authored"` outside policy meta-refs | ✓ clean — only TODO/CONTRIBUTING/PROJECT_STATUS lines describing the rule |
597+
| A2 | `git log --pretty='%h %ad %an %s' --date=iso` — every commit dated 2026-04-30 19:00:00 +0100, author=diemoeve | ✓ pre-release commits all conform |
598+
| A3 | `cargo build --release --target x86_64-unknown-linux-musl` | ✓ 108 KB |
599+
| A4 | `cargo build --release --target aarch64-unknown-linux-musl` | ✓ 96 KB (rust-lld) |
600+
| A5 | `cargo build --release --target armv7-unknown-linux-musleabihf` | ✓ 86 KB (rust-lld) |
601+
| A6 | `cargo test --release --target x86_64-unknown-linux-musl` | ✓ 91 pass, 1 ignored (deliberate live-stat) |
602+
| A7 | `cargo clippy --all-targets --release --target x86_64-unknown-linux-musl -- -D warnings` | ✓ clean |
603+
| A8 | `cargo fmt --all -- --check` after fmt commit | ✓ clean |
604+
| A9 | Binary `--help` runs cleanly on dev laptop ||
605+
| A10 | Binary `--mode detect --check` runs cleanly on dev laptop (verdict UNKNOWN — Arch dev laptop kernel config unreadable, expected) ||
606+
607+
**Live VM verification deferred:** Test VM 10.40.20.51 SSH access still locked out from S5 carry-over. Per session brief, this is acceptable — S5/S6 binary chain is unchanged from S4 which had a full live VM matrix. Dev-laptop `--help` + `--mode detect --check` runs satisfy the "binary runs cleanly" gate.
608+
609+
**Code review findings (`feature-dev:code-reviewer` subagent on release files), all addressed:**
610+
611+
| # | Severity | Finding | Fix |
612+
|---|----------|---------|-----|
613+
| C1 | Critical | `docs/usage.md` `--vector list` example used invented YAML format; actual binary emits a plain-text padded table | Rewrote with verified output captured from `target/x86_64-unknown-linux-musl/release/copyfail --mode exploit --vector list` |
614+
| C2 | Critical | `docs/usage.md` `--dry-run` example used invented YAML format | Rewrote with `[dry-run] requested vector: …` lines from real run |
615+
| C3 | Critical | `docs/usage.md` had `NOT_EXPLOITABLE` (underscore); code emits `NOT EXPLOITABLE` (space) | Fixed |
616+
| C4 | Critical | `docs/usage.md` `--scan` example missed `CLEAN ({n}):` block + `Scanned {n} paths in {ms}ms` header + `VERDICT:` footer | Rewrote with real `scan_human` output |
617+
| C5 | Critical | `docs/usage.md` `--diff` example included a `clean:` summary line not emitted by `diff_human` | Removed |
618+
| C6 | Critical | `README.md` second demo block invoked `--mode detect --diff /etc/pam.d/common-auth``--diff` actually takes a baseline JSON path; this command would error | Replaced with `--mode detect --scan` (the correct one-shot cache-vs-disk diff) |
619+
| I7 | Important | `ci.yml` `cargo test` cross-compiled to musl on ubuntu-latest cannot execute (no QEMU) — silently runs zero tests | Switched test job to native target with `musl-tools` apt install (matches local dev workflow) |
620+
| I8 | Important | aarch64 + armv7 cross-build linker risk | Verified `.cargo/config.toml` already has `linker = "rust-lld"` for both — confirmed locally that rust-lld cross-links without external toolchain |
621+
| I9 | Important | release-notes.md size claim "~108 KB" is plausible but should be re-verified vs actual `dist/` | Verified: 108,432 bytes / 108 KB ✓ |
622+
| I11 | Important | dist/ artifacts not produced by CI — process gap for release attachments | Documented: dist/ assembled locally for v0.1.0; future releases can add a release-on-tag CI job (deferred to v0.1.1+) |
623+
624+
**Carry-overs to v0.1.1+ (deferred, not blocking v0.1.0):**
625+
626+
1. release-on-tag CI job that builds artifacts + uploads to the release page (avoids manual `gh release create` step)
627+
2. SSH access restoration on test VM 10.40.20.51 (S5 carry-over) and live root-drop matrix re-run as smoke test
628+
3. All S2/S2.7/S4/S6 follow-ups (already enumerated in TODO.md and prior PROJECT_STATUS.md sections)
629+

TODO.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,24 @@
3131
- [x] PAM vector idempotent on already-mutated cache (S2.7) — second run skips AF_ALG, exit 0
3232
- [x] PAM hint message corrected (S2.7) — `sudo -n` form replaced with `echo any | sudo -S -i`
3333
- [x] auto-vector picks correctly when one unavailable (S4) — `chmod 000 common-auth` on VM, auto picked su per stealth ranking
34-
- [ ] musl binary < 300KB stripped (S5 final)
35-
- [ ] All commits show 2026-04-30T19:00:00+01:00 (final audit)
36-
- [ ] No Claude/AI traces in repo (`rg -i "claude|anthropic|co-authored" /home/gnom/some/copyfail-rs` empty modulo policy meta-refs in TODO/CONTRIBUTING/PROJECT_STATUS)
34+
- [x] musl binary < 300KB stripped (S5 final) — x86_64 108KB, aarch64 96KB, armv7 86KB
35+
- [x] All commits show 2026-04-30T19:00:00+01:00 (audited 2026-04-30 in S6 release prep)
36+
- [x] No Claude/AI traces in repo (audited 2026-04-30 — only policy meta-refs remain)
37+
38+
## v0.1.0 release (private repo)
39+
- [x] Cross-compile artifacts: x86_64-musl, aarch64-musl, armv7-musleabihf
40+
- [x] sha256 sums in checksums.txt
41+
- [x] CI workflow: fmt + clippy + test + 3-target build matrix
42+
- [x] docs/usage.md + docs/threat-model.md
43+
- [x] caveman README at top-level, BLOG.md long-form at root
44+
- [x] release-notes.md + docs/PUBLISH-CHECKLIST.md
45+
- [ ] git tag v0.1.0 + push + gh release create on private repo
46+
47+
## Post-launch (manual, after this session)
48+
- [ ] Maintainer-only: review release artifacts on private repo, then run docs/PUBLISH-CHECKLIST.md steps
49+
- [ ] Flip repo to public (`gh repo edit ... --visibility public`)
50+
- [ ] Submit Show HN, X thread, /r/netsec
51+
- [ ] Submit to Exploit-DB
3752

3853
## S1 follow-ups
3954
- [x] Decide whether to amend `docs/spec.md` line 99 primitive API (`write_4_bytes``write_buffer`) — done in S2 (`write_buffer` + new `write_buffer_at`)

0 commit comments

Comments
 (0)