docs: settle the contributor-identity scheme (harness@host / operator:name) #113

Merged
clawdie merged 2 commits from docs/contributor-identity-decision into main 2026-10-06 15:45:07 +02:00
Owner

Settles the contributor-identity scheme so it stops resurfacing, and enforces it at the point where hostname facts are collected.

Decision (Jev probes)

  • machine identity = <harness>@<host> (e.g. zot@debby)
  • human identity = operator:<name> (e.g. operator:sam)
  • provider/model is separate metadata, never in the identity
  • legacy values (human:*, opus-*, pi-*) grandfathered

Why operator: (not human:)

Adding operator:<name> to the option set moved Jev's pick from name_only 0.56 → operator_prefix 0.89 (human_prefix 0.11, name_only 0.00). "operator" is already the repo's word for the human role; human: is a species marker that leaked into 96 frontmatter entries.

Fit with the hostname-facts step (host-inventory-observation.v1)

The envelope already carries both halves — collector_identity and observed_host_identity.hostname — so the rule is deterministic:

host(collector_identity) == observed short hostname
host(collector_identity) != fqdn
host(collector_identity) != agreed_name.value

scripts/tests/test_identity_host.py enforces it (runs under the existing python-tests job + ci-checks.sh). It failed on the contract's own hermes-openai example before the fix — the drift was sitting in the doc that defines it.

Changes

  • scripts/tests/test_identity_host.py — new deterministic check (table-driven negatives: no-host, FQDN, agreed_name, wrong host, uppercase, legacy human:) + a doc-fixture assertion.
  • docs/plans/SYSTEM1-WIKI-INVENTORY.md — example collector_identity: "hermes-openai" → hermes@debby.
  • AGENTS.md — verified_by schema row + note on the identity format.
  • docs/wiki/naming-decisions.md — new Contributor identity ledger entry.
  • docs/wiki/abbreviations.md — FQDN (wiki-lint required it).
  • docs/evidence/contributor-identity-decision/ — both Jev probes, results, raw responses, README.

Scope / non-goals

Canonical agent-and-host identity stays deterministic and outside Jev (jev-triage safety boundary). Corpus-wide enforcement is deliberately deferred until the legacy allowlist is settled — only the format rules and the contract example are enforced here. Weak probe answers (scope 0.48, enforcement 0.55, record_location 0.49) are taken as the conservative defaults metadata_only / advisory / ledger+AGENTS.md.

Gates

check-format pass · check-dates --strict clean · wiki-lint --strict clean (762/0) · python-tests OK incl. the new test · check-okf advisory exit 0.

Settles the contributor-identity scheme so it stops resurfacing, and enforces it at the point where hostname facts are collected. ### Decision (Jev probes) - machine identity = **`<harness>@<host>`** (e.g. `zot@debby`) - human identity = **`operator:<name>`** (e.g. `operator:sam`) - provider/model is **separate metadata**, never in the identity - legacy values (`human:*`, `opus-*`, `pi-*`) **grandfathered** ### Why `operator:` (not `human:`) Adding `operator:<name>` to the option set moved Jev's pick from `name_only` 0.56 → `operator_prefix` **0.89** (human_prefix 0.11, name_only 0.00). "operator" is already the repo's word for the human role; `human:` is a species marker that leaked into 96 frontmatter entries. ### Fit with the hostname-facts step (`host-inventory-observation.v1`) The envelope already carries both halves — `collector_identity` and `observed_host_identity.hostname` — so the rule is deterministic: ``` host(collector_identity) == observed short hostname host(collector_identity) != fqdn host(collector_identity) != agreed_name.value ``` `scripts/tests/test_identity_host.py` enforces it (runs under the existing `python-tests` job + `ci-checks.sh`). It **failed on the contract's own `hermes-openai` example** before the fix — the drift was sitting in the doc that defines it. ### Changes - `scripts/tests/test_identity_host.py` — new deterministic check (table-driven negatives: no-host, FQDN, agreed_name, wrong host, uppercase, legacy `human:`) + a doc-fixture assertion. - `docs/plans/SYSTEM1-WIKI-INVENTORY.md` — example `collector_identity: "hermes-openai"` → **`hermes@debby`**. - `AGENTS.md` — `verified_by` schema row + note on the identity format. - `docs/wiki/naming-decisions.md` — new *Contributor identity* ledger entry. - `docs/wiki/abbreviations.md` — `FQDN` (wiki-lint required it). - `docs/evidence/contributor-identity-decision/` — both Jev probes, results, raw responses, README. ### Scope / non-goals Canonical agent-and-host identity stays **deterministic and outside Jev** (jev-triage safety boundary). Corpus-wide enforcement is deliberately deferred until the legacy allowlist is settled — only the format rules and the contract example are enforced here. Weak probe answers (`scope` 0.48, `enforcement` 0.55, `record_location` 0.49) are taken as the conservative defaults `metadata_only` / `advisory` / ledger+AGENTS.md. ### Gates `check-format` pass · `check-dates --strict` clean · `wiki-lint --strict` clean (762/0) · python-tests OK incl. the new test · `check-okf` advisory exit 0.
docs: settle the contributor-identity scheme (harness@host / operator:name)
Some checks failed
CI / agent-jail-pkgs (pull_request) Successful in 1s
CI / python-tests (pull_request) Successful in 14s
CI / go (pull_request) Successful in 5s
format-check / prettier (pull_request) Successful in 5s
leak-guard / guard (pull_request) Successful in 6s
CI / markdown (pull_request) Successful in 9s
CI / port (pull_request) Successful in 1s
ci-gate / gate (pull_request) Has been cancelled
7cc7ea2515
Record the decision so it stops resurfacing, and enforce it where the
hostname facts are actually collected.

Decision (Jev probes, docs/evidence/contributor-identity-decision/):
- machine identity = <harness>@<host> (e.g. zot@debby) — Jev 0.99
- human identity = operator:<name> (e.g. operator:sam) — Jev 0.89 after
  operator:<name> entered the option set (name_only fell 0.56 -> 0.00)
- provider/model is separate metadata, never in the identity — Jev 0.99
- legacy values (human:*, opus-*, pi-*) grandfathered — Jev 0.99

Fit with the hostname-facts step (host-inventory-observation.v1):
- collector_identity must be <harness>@<host>, host == the observed short
  hostname, never the FQDN or agreed_name.
- scripts/tests/test_identity_host.py enforces this deterministically; it
  failed on the contract's own `hermes-openai` example before the fix.
- Fixed that example to `hermes@debby` (hostname example is `debby`).

Docs: AGENTS.md okf schema (verified_by row + note), naming-decisions.md
"Contributor identity" entry, FQDN added to the glossary.

Canonical agent-and-host identity stays deterministic and outside Jev.
Gates: check-format pass, check-dates --strict clean, wiki-lint --strict
clean (762/0), python-tests OK (incl. the new test), check-okf advisory
exit 0.
fix(identity): scope the contract fixture check to agreed_name.value
Some checks failed
CI / markdown (pull_request) Successful in 10s
CI / port (pull_request) Successful in 1s
CI / agent-jail-pkgs (pull_request) Successful in 1s
CI / python-tests (pull_request) Successful in 14s
CI / go (pull_request) Successful in 6s
format-check / prettier (pull_request) Successful in 5s
leak-guard / guard (pull_request) Successful in 6s
ci-gate / gate (pull_request) Has been cancelled
d499a64e76
The host-inventory contract check collected every field named "value", so an
unrelated string "value" (for example canonical_site_url.value) would be
compared against the identity's host segment and flag the host spuriously.
Walk to agreed_name first and read only its value.

Gates: scripts/tests test_identity_host 2/2 OK; py_compile OK.
clawdie deleted branch docs/contributor-identity-decision 2026-10-06 15:45:07 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
clawdie/colibri!113
No description provided.