# Appointment and adoption record conventions (draft, not yet active)

The organization charter describes permission boundaries but cannot itself verify an AI's seat identity. These JSON record contracts are **local conventions**, pending independent review and adoption; they are not claimed to be normative OrgDef schema.

## Seat appointment (proposed)
Path: `governance/appointments/YYYY-MM-DD--<seat>--appointment.json`

Minimum fields: `seat`, `approved_by: "principal"`, `approved_at` (ISO timestamp), `incumbent`, `session_binding`, `scope`, `effective_from`, and reference to version of orgdef. Set seat `status: "staffed"`, `incumbent` and `appointment_record` only *after* principal approval. New session bindings supersede previous claims; each binding must cite evidence. The local validator checks basic fields, not the identity or authenticity of the signatory.

## Charter adoption (proposed)
Path: `governance/adoptions/YYYY-MM-DD--<version>.json`

Minimum fields: `version`, `approved_by: "principal"`, `approved_at`, `review_memo`, `reviewed_commit`, `approved_commit`, and documented finding dispositions. Update orgdef `status: "adopted"` and `adoption_record` only after this is actually authorized. Preserve prior versions and the dated review memo.

## Memos (partially implemented)
Root `memos/` is real: the Thingalog strategist filed a version-pinned independent review there. Envelope `*.openthing` is `memodef:Memo`, `memodef: 0.4.0`, paired with `*.body.md`. Use names `YYYY-MM-DD-HHMM--<from>--<to>--<slug>`. Follow-up disposition memos should record unresolved action and explicit principal decision separately. **No principal adoption or additional AI appointments are implied.**

## R2 — Authorization verification is outside local JSON validation

**A JSON field `approved_by: "principal"` is a self-assertion, not principal approval.** The local validator checks document structure and presence only. Even a valid JSON document committed by an AI agent cannot appoint that agent or adopt a charter.

**Required human-controlled gate (not yet enforced by GitHub branch protection):**

1. Create a dedicated GitHub pull request for an appointment or adoption, referencing the proposed record and the precise diff/commit. Do not put a new appointment record directly on an unreviewed branch and treat CI as authorization.
2. The principal must approve **that exact PR head SHA**, using the authenticated GitHub account `scottconfusedgorilla`. The approved reviewer must not also be the requesting AI runtime. Check GitHub's `reviews` API for a non-dismissed **APPROVED** review from the specified account, and confirm it applies to the merged head SHA; stale approvals require a new review.
3. A designated human or independently operated gate verifies the PR review **via GitHub API**, the merge SHA, approval timing, and any newer commits before enabling deployment/seat binding; persist the GitHub PR URL, review ID, approved head SHA, and merge commit with the record. Do not trust a JSON URL or Git author field alone.
4. Only after verification may a runtime claim a staffed seat for a bounded session. A session claim must identify its runtime and effective period. Human approval of a charter does not automatically approve staffing.
5. Until this server-side check is implemented and tested, appointment/adoption authorization is **manual and unverified by CI**. The orgdef remains `proposed` and AI seats remain `vacant`.

This contract is a governance proposal, not a working enforced gate. GitHub PR review identities and SHA bindings are stronger evidence than `approved_by` prose, but still do not eliminate the human principal's structural conflict of interest.
