The Systems question rides every read and write — unified seam, create_system dedup gate, sweeps-are-discovery prose #107

Merged
bvandeusen merged 3 commits from dev into main 2026-08-09 16:04:58 -04:00
Owner

Fixes Scribe issues #2569 and #2570 (operator-driven corrections to the #2562 instruction-delivery work):

  • attach_systems() — one seam on every read and write of a task, note, or snippet (get/create/update + add_task_log): tagged records always show systems (read-side affiliation was previously invisible for tasks and notes); an untagged project record carries the unified systems_hint question instead — same question regardless of vocabulary state, empty included. Owner-only, never attached empty, fail-open.
  • create_system is duplicate-gated (normalized name, archived included) so liberal minting is safe by construction.
  • Prose inverted on every surface: audits/sweeps take several tags and are the prime System-discovery moment; the gate is the guardrail against sprawl, not restraint.
  • Plugin 0.1.28 (floor + using-scribe updates).

CI green on dev (run 3566, 75bdb9c).

Fixes Scribe issues #2569 and #2570 (operator-driven corrections to the #2562 instruction-delivery work): - `attach_systems()` — one seam on every read and write of a task, note, or snippet (get/create/update + add_task_log): tagged records always show `systems` (read-side affiliation was previously invisible for tasks and notes); an untagged project record carries the unified `systems_hint` question instead — same question regardless of vocabulary state, empty included. Owner-only, never attached empty, fail-open. - `create_system` is duplicate-gated (normalized name, archived included) so liberal minting is safe by construction. - Prose inverted on every surface: audits/sweeps take several tags and are the prime System-discovery moment; the gate is the guardrail against sprawl, not restraint. - Plugin 0.1.28 (floor + using-scribe updates). CI green on dev (run 3566, 75bdb9c).
bvandeusen added 3 commits 2026-08-09 16:04:49 -04:00
fix(systems): sweeps are the discovery moment — zero-Systems hint, create_system dedup gate, prose inverted
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 7s
CI & Build / TypeScript typecheck (push) Successful in 11s
CI & Build / integration (push) Successful in 16s
CI & Build / Python tests (push) Failing after 29s
CI & Build / Build & push image (push) Skipped
56b1952de5
First real-world test of the #2562 fixes (Scribe issue #2569): a Forge
session ran a whole-codebase audit and created zero Systems — endorsed
by the shipped guidance, whose "no particular area takes none" clause
read as an exemption for exactly the record type that enumerates the
subsystem vocabulary. And the systems_hint was silent for a zero-Systems
project, the one state nothing else nudges out of.

- systems_hint gains a zero-Systems branch: prompt the FIRST
  create_system instead of going quiet.
- create_system is duplicate-gated like the other creates (normalized
  name, archived included, fail-open) — liberal creation becomes safe by
  construction, so the guidance can stop preaching restraint.
- Prose inverted on every surface (hint text, create_system docstring,
  floor bullet, using-scribe step 7): audits/sweeps take several tags
  and mint the Systems they name; the gate is the guardrail against
  sprawl, not holding back; only a record genuinely about no particular
  area goes untagged.
- Plugin 0.1.26 -> 0.1.27.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
refactor(systems): one seam — the Systems question rides every read and write of a record
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 9s
CI & Build / TypeScript typecheck (push) Successful in 10s
CI & Build / integration (push) Successful in 12s
CI & Build / Python tests (push) Failing after 29s
CI & Build / Build & push image (push) Skipped
3455f9cb9a
Scribe issue #2570, from the operator's challenge: the invariant is
"always be asking whether what you're touching is a System's territory
and whether the work is filed there" — not a nudge in one corner. The
prior shape failed it twice: the hint fired only on creates (with a
special-cased zero-Systems branch), and get_task/get_note returned
records WITHOUT their Systems, so the read-side reflex had nothing to
fire on (same per-kind asymmetry as #2481).

- attach_systems(): single helper used by get/create/update for tasks,
  notes, and snippets, plus add_task_log. Tagged records always show
  `systems`; an untagged project record carries the `systems_hint`
  question instead. Neither field attaches empty (#2483). Hint is
  owner-only; everything fail-open (#2109).
- untagged_systems_hint unified to ONE question — the vocabulary
  listing varies, the question doesn't; the zero-Systems branch stops
  being special text.
- Docstrings state the uniform contract; floor prose now names the
  read-side reflex (systems visible -> list_system_records the pile).
- Plugin 0.1.27 -> 0.1.28.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test(systems): fix two mock bugs in the seam tests — unset .id on the fake, shared to_dict dict leaking across creates
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 8s
CI & Build / TypeScript typecheck (push) Successful in 11s
CI & Build / integration (push) Successful in 12s
CI & Build / Python tests (push) Successful in 47s
CI & Build / Build & push image (push) Successful in 27s
75bdb9c148
Runs 3562/3565: _fake_system never sets .id so the dup-gate assertion
compared a MagicMock to 7; and a shared to_dict return_value dict let
the tagged create's mutation leak into the orphan create's response.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bvandeusen merged commit 266d8b8117 into main 2026-08-09 16:04:58 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledScribe#107