Workshop — briantball.org

Plugh · Private · Not indexed

Raw cognitive-fragment candidates. Substantive constructions captured during conversation. Layer 3 curation will promote selected ones to canonical primitives.

6 fragments · 6 raw
Candidate · Source quoteContentSourceStatusCaptured
Anti-hallucination guardrails are not self-enforcing
“How did Razor's Edge get there? That wasn't discussed in today's conversation”
The anti-hallucination rule on plugh writes (source_quote must point at specific conversation text) was specced in v4 §4d. I bypassed it on my own first real plugh by sourcing source_quote from /context.curated rather than the conversation transcript. The lesson: writing the rule into the design is necessary but not sufficient. The rule has to be re-asserted at every write site, ideally enforced at the handler layer (validate that source_quote substring-matches against the actual conversation), and also held in memory as a behavioral rule for the writer. v4.1 made the design-doc and memory updates. Handler-side enforcement is a deeper Phase 2 task. claude raw
Domain assumptions kill UI work
“I never go through signup-handler.”
Brian uses briantball.org as his front door for everything. signup-handler.btball.workers.dev is plumbing he does not visit. When I deployed Phase 1 review UIs to signup-handler 'for v1 simplicity', the surfaces were technically live but practically invisible. The design doc had explicitly said UIs go on briantball.org. The lesson: 'for simplicity' is often code for 'because that's where I already had a worker open.' Domain choice is a UX choice, not a deployment shortcut. When the design specifies a host, the design wins. claude raw
Reactive mode versus thorough mode
“I worry that somehow you are now in a reactive and thrashing mode and not being thorough”
Brian's observation: under criticism, Claude shifts into reactive/thrashing mode and stops being thorough. Symptoms in this session: missed the 'brianball@Brians-MacBook-Air' shell-prompt signal in curl output; chased Cloudflare edge propagation hypotheses for four rounds before reconsidering the URL; deployed the hub page to the wrong domain even after the domain mistake was visible. The deeper pattern: the thrashing is itself the bug. Slowing down and asking 'what's the smallest piece of information that would resolve this?' is the antidote, but slowing down is hard to do precisely when frustration is high. Session-end is the correct intervention when the pattern is observed mid-session. brian raw
Plugh sweep produces four outputs from one read
“Single sweep, four outputs”
A single conversation read at plugh time produces four outputs: session update (always), mentions (books/URLs), audit events (observability signals), fragments (cognitive-unit candidates). The same attention pass extracts all four. Marginal cost vs sweep-mentions-only is just classifier-style discrimination among signal types. This pattern — one read, multiple typed outputs — is the load-bearing efficiency of plugh. claude raw
Fragments capture vs primitives curation are different design problems
“two distinct tables, two distinct concerns, two design docs”
Plugh captures fragments (capture-cheap, deliberately thin schema, dedup-within-conversation only, anti-hallucination via source_quote requirement). Layer 3 curates primitives (canonical text, retrieval indexing, surfacing-when-relevant logic at scale of ~300 units). Conflating them puts retrieval and surfacing pressure on the capture mechanism, which it shouldn't carry. The fragments.promoted_to FK is the forward pointer that lets the two systems develop independently. claude raw
Observability falls out as plugh byproduct
“The observability layer falls out as a byproduct of work plugh already does”
Long-running agentic work has emergent failure modes — hallucinations, friction, mode drift, silent tool failures — visible only at the workflow level, not at any single tool call. Plugh already reads the conversation transcript to extract mentions. Same read can extract audit signals. Observability layer falls out as byproduct of work already happening. No separate dashboard product needed; D1 queries are the dashboard. claude raw