Skip to content

docs: absorb the field reviews — host-boundary gaps, emu-dev skill, rulings - #516

Merged
pdfinn merged 2 commits into
masterfrom
docs/principles-followups
Aug 21, 2026
Merged

docs: absorb the field reviews — host-boundary gaps, emu-dev skill, rulings#516
pdfinn merged 2 commits into
masterfrom
docs/principles-followups

Conversation

@pdfinn

@pdfinn pdfinn commented Aug 21, 2026

Copy link
Copy Markdown
Member

Summary

Two field reviews of the guidance corpus, both triggered by PR #421 (the non-compliant voice PR that motivated the guidance effort), absorbed in two commits:

Commit 1 — lessons implicit in the maintainer review of #421: the null-list-concatenation boot-killer, "the fid is the session", the check-the-9P-reply rule, the config-is-data smell.

Commit 2 — the explicit counterfactual audit of the corpus ("had the contributor followed these docs, which of #421's defects would have been prevented?"). Its verdict: the architectural class is well covered; the blind spot is every boundary with the host. All eight filed gaps closed:

  • New emu-dev skill — the C layer had zero coverage. Kill path (oshostintr interrupts syscalls, not condvar waits; osenter/osleave; never hold a QLock across a blocking wait; bounded-poll shape of the incumbent emu/MacOSX/audio-sdl3.c, with osenter/osleave cited from the live port layer), CONF/mkdevlist wiring (a driver absent from the CONF is dead code — wire it in the same PR or don't ship it), the incumbent rule (read the rival you're replacing for the regressions it fixed), drivers-deliver-events layering.
  • DESIGN-PRINCIPLES: "The host boundary" — pin + SHA256-verify everything fetched; installers never build-and-execute unpinned HEAD; boot never executes host-authored files; placement is shipping (the release copy loop makes lib/ placement a release decision). Plus "Writes are RPCs — on both sides", and smell rows for global busy flags (→ per-fid state, DMEXCL) and UI policy in drivers.
  • Shell semantics as table rows — null-list concatenation and failed-redirection-raises hoisted into the LIMBO-FOR-GO-PROGRAMMERS table as the single lookup point; the style gate now documents that it checks style, not semantics.
  • Test norms (limbo-test): assert behavior, not source text; a suite that skips in CI guards nothing in CI; the contract test is the durable form of "I ran it".
  • Pre-image hygiene (limbo-dev): verify modified files' pre-images match master tip before opening a PR.

Two maintainer rulings applied:

  1. dis/tests/*.dis is tracked — the stale .gitignore line dropped; CLAUDE.md, limbo-dev, and limbo-test now agree with each other and with reality (56 tracked, actively maintained files).
  2. Sketch-first is policy — CONTRIBUTING states PRs introducing non-trivial file interfaces without a linked proposal issue will be returned for the sketch; the style-gate workflow gains a soft warning when a PR adds *9p.b/module/*.m sources with no issue reference in its description; the PR template gains a pinned-and-checksummed row.

Acceptance per the audit's own oracle: every finding in the #421 maintainer review now has a citable section (blockers 1.1–1.5 → Writes-are-RPCs / shell table / host boundary / emu-dev / fid-is-the-session; rework items 2.2–2.8 → existing sections plus emu-dev and host boundary).

Watch item, deliberately not changed: DESIGN-PRINCIPLES' speech9p distribution-transparency citation describes master accurately today; revisit if #421 lands helper-direct audio.

Testing

  • sh -n clean on the gate; local run unchanged (same 5 known legacy findings); workflow YAML validates.
  • The harness auto-discovered the new emu-dev skill from .claude/skills/.

🤖 Generated with Claude Code

https://claude.ai/code/session_017Eo29oZp7mPig1XekwRPsq

pdfinn and others added 2 commits August 21, 2026 21:26
The PR-421 voice review — the first real consumer of the design
principles — surfaced rules the docs should have stated: the
null-list-in-concatenation boot-killer joins the Limbo shell gotchas
(the review cited it as already present; now it is), the ninep-server
skill gains 'the fid is the session' (Clunk/Flush teardown, DMEXCL
instead of global busy flags, chatsrv/gpusrv exemplars) and the
'a 9P write can fail — check the reply' client rule, and the smells
table gains executing host-authored files at boot (config is data,
never code).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Eo29oZp7mPig1XekwRPsq
…ctual review)

A counterfactual audit tested the corpus against PR #421 (the
non-compliant voice PR that motivated the guidance): had the docs
existed, which defects would they have prevented? The architectural
class scored well; the consistent blind spot was every boundary with
the host. This closes the eight gaps it filed:

- emu-dev skill (new): kproc kill path (oshostintr interrupts syscalls,
  not condvar waits; osenter/osleave; never hold a QLock across a
  blocking wait), CONF/mkdevlist wiring (unwired driver = dead code),
  the incumbent rule, drivers-deliver-events layering.
- DESIGN-PRINCIPLES: 'The host boundary' section (pin + checksum
  everything fetched; installers never build-and-execute unpinned HEAD;
  boot never executes host-authored files; placement is shipping via
  the release copy loop); 'Writes are RPCs — on both sides'; smell rows
  for global busy flags and UI policy in drivers.
- LIMBO-FOR-GO-PROGRAMMERS: null-list concatenation and
  failed-redirection rows hoisted into the shell table as the single
  lookup point.
- Tutorial: caller-side dual of failed-at-the-writer; fid-is-the-session
  pointer on the blocking-reads bullet.
- limbo-test: norms — behavior not source text, a suite that skips in
  CI guards nothing, the contract test is the durable 'I ran it'.
- limbo-dev: pre-image hygiene before opening a PR.
- Maintainer ruling applied: dis/tests/*.dis is TRACKED — stale
  gitignore line dropped, CLAUDE.md/limbo-dev/limbo-test now agree.
- Maintainer ruling applied: sketch-first is policy — CONTRIBUTING
  states interface PRs without a proposal issue are returned; the
  style-gate workflow adds a soft proposal-link annotation; PR template
  gains the pinned-and-verified row; style gate documents its
  style-not-semantics scope.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Eo29oZp7mPig1XekwRPsq
@pdfinn pdfinn changed the title docs: absorb the first field-review's lessons into the guidance docs: absorb the field reviews — host-boundary gaps, emu-dev skill, rulings Aug 21, 2026
@pdfinn
pdfinn merged commit c30e2c2 into master Aug 21, 2026
21 checks passed
@pdfinn
pdfinn deleted the docs/principles-followups branch August 21, 2026 15:30
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