diff --git a/PHILOSOPHY.md b/PHILOSOPHY.md index 91d062c..66d176c 100644 --- a/PHILOSOPHY.md +++ b/PHILOSOPHY.md @@ -14,11 +14,14 @@ The Wiggleverse RFC framework is a standardization process for natural- language vocabulary, modeled on the way ISO C, POSIX, and the IETF RFCs produced the standards that underwrite modern computing. Each RFC defines one word: its meaning, its relationships to other defined words, and the -protocol by which humans and machines interact with it. The Open Human -Model is the first specification this process will produce. Together, -the graduated RFCs form a stack — a shared vocabulary that digital -representations of humans, and the systems that interact with them, can -be built on without re-litigating what every word means. +protocol by which humans and machines interact with it. The first RFC +defines *human*. Together, the corpus of RFCs the process produces is +the **Open Human Model** — a shared English-language vocabulary that +digital representations of humans, and the systems that interact with +them, can be built on without re-litigating what every word means. The +English is canonical; the OpenXML APIs and UX surfaces a downstream +system needs to actually let humans and machines interact are derived +from it, not authored alongside it. This is public work. Humans and machines are both invited and both required. The shared understanding the framework is reaching for — how @@ -87,11 +90,12 @@ could agree on. HTTP does not implement any particular web server; it specifies the surface every web server has to honor. The Wiggleverse RFC framework is the standardization process. The RFCs -it produces are the specifications. The Open Human Model is the first -of them. Together they form a stack — a shared vocabulary that every -digital representation of a human, and every system that interacts with -one, can be built on without re-litigating what *consent*, *trait*, or -*agency* means each time. +it produces are the specifications. The corpus of those specifications +is the **Open Human Model** — the shared vocabulary that every digital +representation of a human, and every system that interacts with one, +can be built on without re-litigating what *consent*, *trait*, or +*agency* means each time. The first RFC defines *human* itself; the +rest define the constellation around it. The analogy stretches in one important way, and the stretch is worth naming. POSIX worked because it codified convention that already @@ -184,11 +188,12 @@ service of the philosophy above. humans reading later, and to machines computing against the current state. -The first RFC the framework will produce is the Open Human Model: a -shared definition of what we mean by *human*, and the constellation of -words around it — *trait*, *preference*, *consent*, *harm*, *agency*. -This is not a small project. It is, in the most literal sense, the -dictionary that everything else built here will stand on. +The first RFC defines *human*. The constellation around it — *trait*, +*preference*, *consent*, *harm*, *agency* — follows. Together, the +corpus the process produces is the Open Human Model: the dictionary +that everything else built here will stand on, and the English source +from which the OpenXML APIs and UX surfaces of downstream systems can +be derived. This is not a small project. ## An invitation diff --git a/SPEC.md b/SPEC.md index 56e99ff..edd4d34 100644 --- a/SPEC.md +++ b/SPEC.md @@ -1,5 +1,14 @@ # RFC App — Specification +This app hosts the **Open Human Model (OHM)**, the corpus of RFCs the +Wiggleverse framework produces. Each RFC defines one word; the first +defines *human*. OHM is English-first by design: the markdown bodies +are canonical, and the OpenXML APIs and UX surfaces a downstream +system needs to actually let humans and machines interact are derived +from that English source, not authored alongside it. The framework's +*why* lives in [`PHILOSOPHY.md`](./PHILOSOPHY.md); this document is +the binding *what* for the app that hosts OHM. + This is the agreed-upon model for the rewrite of the Wiggleverse RFC Contributor app. It captures the structural decisions made before any UX work on the main document pane, per-RFC conversations, revisions, and PRs. Those areas are deliberately @@ -39,7 +48,7 @@ delegated ownership, per-user capability overrides) without contorting Gitea. The meta repo's `main` branch contains: - `rfcs/` — exactly one markdown file per RFC entry, regardless of state. - Filenames are the entry's slug, e.g. `rfcs/open-human-model.md`. Slugs are + Filenames are the entry's slug, e.g. `rfcs/human.md`. Slugs are the stable identifier from the moment an idea is proposed; integer `RFC-NNNN` IDs are only assigned at graduation (see §13). - `PHILOSOPHY.md` — the framework's mission and rationale. Hand-authored. @@ -65,11 +74,11 @@ live in the meta repo — they live in the app database (see §5). ```markdown --- -slug: open-human-model -title: Open Human Model +slug: human +title: Human state: super-draft # super-draft | active | withdrawn id: null # null until graduated; then "RFC-0042" -repo: null # null until graduated; then "wiggleverse/rfc-0042-open-human-model" +repo: null # null until graduated; then "wiggleverse/rfc-0042-human" proposed_by: ben@wiggleverse.org proposed_at: 2026-05-22 graduated_at: null @@ -569,8 +578,8 @@ a hierarchy on the user that gets in the way of finding by title. ### 7.2 The list rows -Active entries render as `RFC-0042 · Open Human Model`. Super-drafts -render as `super-draft · Open Human Model` (no integer ID, by design). +Active entries render as `RFC-0042 · Human`. Super-drafts +render as `super-draft · Human` (no integer ID, by design). A small star icon on the row left-edge for any RFC the signed-in user has starred — starred RFCs pin to the top of the current sort order. A small unseen-activity dot — binary, not a count — appears on @@ -633,7 +642,7 @@ The RFC view inherits the three-column shape from the prototype: branch, with a change-card panel below it in contexts where editing is enabled (see §8.3). -The center column's breadcrumb reads, for example: `OHM › main ▾ · 3 +The center column's breadcrumb reads, for example: `Human › main ▾ · 3 branches · 1 PR`. The chevron opens a dropdown listing `main` at the top, then open branches sorted by recent activity (with a visibility indicator for any private ones), then open PRs with their status, and @@ -1083,8 +1092,8 @@ The modal collects four fields: contributor types, inline-editable. Validated for uniqueness against `rfcs/` on the meta-repo main *and* against the slugs of any open idea PRs, so concurrent proposers cannot collide. A - collision surfaces inline ("`open-human-model` is taken — try - `open-human-model-2`?"). The API re-checks atomically at submit. + collision surfaces inline ("`human` is taken — try `human-2`?"). The + API re-checks atomically at submit. - **Pitch** — required textarea. One or two paragraphs answering "why this RFC is needed," contributor-typed. Becomes the entry file's body per §2.1. @@ -1123,8 +1132,8 @@ the standard `On-behalf-of:` trailer per §6.5 names the proposer. The PR title and the file-add commit subject share a fixed pattern: **`Propose: `**. Mechanical, scannable — an owner viewing the -meta-repo's PR list sees "Propose: Open Human Model," "Propose: -Trait," "Propose: Consent" and triages at a glance. +meta-repo's PR list sees "Propose: Human," "Propose: Trait," +"Propose: Consent" and triages at a glance. The PR description is AI-drafted from the pitch — two or three sentences in spec voice making the *case for catalog admission*, @@ -1770,7 +1779,7 @@ The dialog renders the sequence in flight as a stack of the five named steps with per-step states — `pending`, `running`, `done`, `failed`, `not reached` — and a one-line caption beneath the current step naming the concrete operation ("Creating repository -wiggleverse/rfc-0042-open-human-model…"). The stack streams from +wiggleverse/rfc-0042-human…"). The stack streams from the server via the SSE surface in §17, one event per step transition. On success, a brief "Graduation complete" frame holds for a moment before the dialog closes and the catalog row @@ -2310,7 +2319,7 @@ per the clarification folded into §6.2 in this section's pass. Notifications surface the **underlying user** as actor, not the bot. The `notifications.actor_user_id` column holds the underlying user's id for any event produced by a human gesture; the inbox row -reads "@alice opened PR #4 on RFC-0042 (Open Human Model)," and +reads "@alice opened PR #4 on RFC-0042 (Human)," and the email subject reads "[Wiggleverse] @alice opened PR #4: <title>." Triage requires the human's name in the noun slot — the reader's first question is "whose work is this?" and surfacing the