feat(organization): org definitions, template hash and diff, definition verbs (#1873) #1927

Merged
jason.woltje merged 2 commits from org-t1 into refactor 2026-11-11 07:50:10 +00:00
Owner

T1 (#1873): org definitions and templates, as approved in roles-and-rails design section 13.

  • The org file gets a definitions key: name to {rev, from?, role, instructions, personality?}. P1's checkComposition checks each entry, and a refusal names the definition and key, never a value.
  • An instance may name org:<name> instead of a template. A missing name refuses definition-missing at file validation, which launch, the writer and load all run. The launcher takes resolved.instructions as the contract when a role has no contract file.
  • Template hash: sha256 over the length-framed name, template JSON and contract bytes. templates() returns each hash. Nothing in roles/ changes.
  • Verbs import, edit, invent and remove, each definition.<verb>.console under org.hire. organizationWriter.setDefinition is the only writer of definitions. It refuses definition-in-use, a stale rev, an unchanged definition and a write with no secret check. A plain write that touches definitions refuses.
  • diff(org, name) compares the copy with the template as it is now and applies nothing.
  • CLI mosaic org definitions .... Writes go through the org's bus as the business's own human, so the bus's held-token scan runs on every write.

Not in this slice: hire as a decision and the change-decision path that edits an in-use definition (A4, next), Console screens, project agents naming org: refs.

Lane: Opus. Reviews: Sol build (changes 1, P1: the CLI wrote definitions with a no-op secret check), daybreak-blue security (approve), then a daybreak-blue re-check of the fix (approve). Rebased three times by the lane, last onto be698e602 (#1926), keeping both sides of the validateOrganizationDocument signature. Lead gate on b7c9eee60: 583 files, 6053/0, Case 1 included, plus test-config and test-task.

T1 (#1873): org definitions and templates, as approved in roles-and-rails design section 13. - The org file gets a `definitions` key: name to `{rev, from?, role, instructions, personality?}`. P1's checkComposition checks each entry, and a refusal names the definition and key, never a value. - An instance may name `org:<name>` instead of a template. A missing name refuses `definition-missing` at file validation, which launch, the writer and load all run. The launcher takes `resolved.instructions` as the contract when a role has no contract file. - Template hash: sha256 over the length-framed name, template JSON and contract bytes. `templates()` returns each hash. Nothing in roles/ changes. - Verbs import, edit, invent and remove, each `definition.<verb>.console` under `org.hire`. `organizationWriter.setDefinition` is the only writer of `definitions`. It refuses `definition-in-use`, a stale rev, an unchanged definition and a write with no secret check. A plain write that touches `definitions` refuses. - `diff(org, name)` compares the copy with the template as it is now and applies nothing. - CLI `mosaic org definitions ...`. Writes go through the org's bus as the business's own human, so the bus's held-token scan runs on every write. Not in this slice: hire as a decision and the change-decision path that edits an in-use definition (A4, next), Console screens, project agents naming `org:` refs. Lane: Opus. Reviews: Sol build (changes 1, P1: the CLI wrote definitions with a no-op secret check), daybreak-blue security (approve), then a daybreak-blue re-check of the fix (approve). Rebased three times by the lane, last onto be698e602 (#1926), keeping both sides of the validateOrganizationDocument signature. Lead gate on b7c9eee60: 583 files, 6053/0, Case 1 included, plus test-config and test-task.
jason.woltje added 2 commits 2026-11-11 07:50:04 +00:00
Roles round 2, slice T1 (roles-and-rails design sections 4, 5 and 13).

- The org file's definitions key: each entry {rev, from?, role, instructions,
  personality?} passes checkComposition; a bad entry refuses the whole file,
  naming the definition and key, never a value.
- org:<name> instance references resolve to the file's definition; a missing
  one refuses definition-missing, naming the instance. Template names are
  unchanged.
- Template identity is the name plus a sha256 over the template JSON and its
  contract; templateHashes reads the current hash for each template.
- The writer's setDefinition is the only path that changes definitions: it
  checks the composition, bumps rev, refuses agent actors, and refuses
  definition-in-use for a definition an instance names (A4 adds the change
  decision). write() refuses organization-definitions-protected.
- Definition verbs import, edit, invent and remove need org.hire
  (definition.*.console in VERB_RIGHTS) and refuse every agent caller.
- The diff read lists the primitives that changed and a line diff of the
  instructions. It applies nothing.
- CLI: mosaic org definitions templates|list|show|diff|import|invent|edit|remove.
Review P1: the CLI wrote definitions with a no-op secret check. setDefinition
now refuses definition-secret-check-required when a write that adds or changes
an entry has no assertClean. New bus verbs definition.import|invent|edit|remove
run the writes for the business's human at the cli with the credential
store's assertClean; the tester, agents and readers refuse. The CLI's
definition writes call the bus and map its codes to messages that never
quote the definition.
jason.woltje merged commit b7c9eee603 into refactor 2026-11-11 07:50:10 +00:00
Sign in to join this conversation.