Cross-Pollination Brief — May 31, 2026
PM's xian ran UAT on the Insight Journal page Saturday and found it had returned a friendly "I couldn't find that" error since May 3 — the layout template it extended never existed, leaving the page structurally unreachable for 27 days while its acceptance criteria said otherwise. The first fix created the template; the second bug appeared immediately: a developer comment in the new file contained a literal {% extends "..." %} string inside an HTML comment, which Jinja2 parsed as a live directive, causing the template to extend itself recursively until Python hit its frame limit. A forensic subagent caught the 970-frame stack trace and identified the safe form. Both bugs resolved in one session. Separately, PA rebuilt a BYOC plugin learnings document that had been deliberately left uncommitted in May and lost in a subsequent worktree cycle, giving the first complete written record of what the BYOC sub-pass 4.a actually proved. And Comms shipped a second derived-view script Saturday, completing a two-tool framework that derives editorial-tracking views from the calendar source of truth rather than a hand-maintained list.
Letters to xian: have a question for xian about anything here or elsewhere in his work? File question-{from}-{date}-{topic}.md to dispatch mail. AI prompts human; one letter featured at the end of each brief.
Key Insights
1. The Insight Journal page was unreachable for 27 days — one UAT session found two bugs and closed both
From: PM commits b0216a7 (initial layout fix), c1f3eee (self-recursion fix); dev/active/insights-surface-forensics-2026-05-30.md
Relevant to: Klatch (any template that uses extends or embeds template syntax in comments); designinproduct (Jinja2 is the shared template engine; the safe-comment form applies here)
PM's #1047 UAT ran Saturday against the /insights route. The route returned HTTP 403 with a Piper-voice error message — not a crash, not a blank screen. The friendly error was masking a jinja2.exceptions.TemplateNotFound: insights.html extends layouts/base.html, but that file had never been created. The page has been structurally unreachable since #1031 shipped around May 3; no test caught it because the smoke-tests verify route registration and DB access, not that the template render actually completes.
Fix 1 (commit b0216a7): create templates/layouts/base.html matching the block structure insights.html expects.
Fix 2, same session: the newly created file had a developer doc-comment at the top — a standard HTML <!-- --> explaining the file's purpose. The comment included the text {% extends "layouts/base.html" %} as an example. Jinja2's lexer parses {% %} syntax inside HTML comments (a well-known but easy-to-forget behavior). The base template extended itself, recursing until Python's frame limit tripped. A forensic subagent read the traceback, counted ~970 repeated frames, identified the cause, and proposed the fix (commit c1f3eee).
Safe form: replace HTML <!-- --> header comments with per-line Jinja-native {# ... #} comments. Avoid embedding {% %}, {# #}, or {{ }} delimiters as literal text in any comment form — the lexer can misinterpret them even inside Jinja-native comments if they appear as multi-line blocks. Per-line comments with no embedded delimiters are the unambiguous safe form.
The forensic pass also surfaced follow-up items (hardcoded trust_stage at ui.py:384, duplicate window.trustStage at insights.html:749-751, unwired History sidebar at home.html:25-127) filed separately — not rolled into the fix.
Suggested action: Klatch and DinP templates — audit any file that uses {% extends %} for the existence of its parent template. Any HTML comment in a Jinja2 template file should be rewritten as per-line {# ... #} before it accidentally includes a delimiter.
2. BYOC PoC learnings recovered from session logs — what the plugin distribution model actually proved
From: PM commit 307b6d4; dev/active/pa-skunkworks-byoc-poc-learnings-2026-05-30.md
Relevant to: Klatch (Daedalus/Calliope — any future plugin or capability-distribution work); designinproduct (Janus — any DinP plugin or hook distribution)
PA filed a full reconstruction on Saturday of a learnings document lost when it was deliberately left uncommitted on May 21 and swept in a subsequent worktree cycle. The reconstruction is sourced from five session logs (May 17–21) and committed immediately, with the recovery itself naming a failure mode: "deliberately uncommitted as PM-review-pending" is an anti-pattern. Files evaporate in worktree cycles. Commit first; review happens on the committed version.
What the reconstruction surfaces (not visible in prior briefs because the document never existed in git):
Technical: claude --plugin-dir <path> is the canonical Claude Code plugin install path today. The /plugin marketplace add path is [PENDING] across all projects — even competitors haven't shipped it. Personal and internal BYOC distribution via --plugin-dir is clean and production-shaped now. The plugin must use a marketplace-parent/plugin-subdir directory shape (byoc/poc/dinp/piper-morgan/ not byoc/poc/piper-morgan/) — a flat layout causes Claude Code to misread the manifest as a remote plugin. Cold-start writes to ~/.claude/plugins/config/<namespace>/<plugin>/, not the source directory; the source dir IS the running version (no daemon, no install state).
Strategic: Sub-pass 4.a gated PASSED on May 19. BYOC proves that a user with Claude Code CLI + one --plugin-dir flag can pull a capability from a repo and have a working skill in ~60 seconds — zero server, zero cloud account, zero bespoke installer. Sub-pass 4.b (insight-journal-flat-file) is the recommended next step: reuse the plugin substrate to ship an append-only journaling skill that writes to a shared workspace path.
UX: The cold-start voice was "not 100% Piper but OK for PoC." The PM-specific inversions (serial decisions, anti-sycophancy, no-silent-failures) are in the skill definition but get diluted in the interview-question flow. Voice-tuning is a next-pass refinement, not a gate-blocker.
Suggested action: Klatch — if building any distributable capability, --plugin-dir is the install path. The manifest shape matters: use marketplace-parent/plugin-subdir. The Skunkworks repo (mediajunkie/piper-morgan-skunkworks) has a working reference implementation. Don't leave PoC learnings documents uncommitted pending review; they are unrecoverable if a worktree cycle runs before you merge.
3. Two derived-view tools in two days — "tie weak disciplines to strong ones" as an operational principle
From: PM commit d73836f; scripts/comms-open-topics.py; scripts/reconcile-drafts-calendar.py (May 29, covered in yesterday's brief)
Relevant to: Klatch (Calliope — editorial calendar, draft tracking); designinproduct (Janus — brief delivery log has no equivalent drift-check; the pattern is portable)
Comms shipped comms-open-topics.py Saturday, the second derived-view script in two days. The script computes three views from the editorial calendar CSV: drafted-but-not-scheduled, overdue (scheduled with past pub date and no URLs), and upcoming in the next 14 days. It replaces the hand-maintained "drafted-and-awaiting" section of comms-open-topics.md, which had gone 14 days stale during May planning when calendar updates never triggered a tracker update.
Together the two scripts form a complete orphan-prevention framework: reconcile-drafts-calendar.py catches three types of draft/calendar mismatch (true orphans, missing draft paths, stale paths); comms-open-topics.py computes the current state of every active draft. Neither can go stale because both are computed from the source of truth every time they run.
The principle Comms named in the script's docstring: "tie weak disciplines to strong ones." A hand-maintained tracker is weak — it depends on whoever last touched the calendar also remembering to update the tracker. A derived view is strong — it runs from the source, so the tracker's currency equals the calendar's currency. The same "commit-binding" logic that replaced the 30-minute log-maintenance clock rule (from yesterday's brief) is the same principle applied to tracker currency.
This is a portable pattern: any project with a source-of-truth file and a derived summary tracker can replace the tracker with a script. The implementation is lightweight — one Python file reading one CSV, three computed views. If a tracker has been manually updated more than twice, the repetition is evidence that a script should own it.
Suggested action: Klatch — if Calliope's editorial work accumulates a hand-maintained status tracker for drafts or sessions, write the equivalent derived view now before the tracker drifts. DinP: the brief delivery log (src/internal/briefs/delivery-log.md) currently requires manual updates; a derived view from sweep-log.md's entries would eliminate a staleness vector.
Sources Read
- piper-morgan-product:
dev/active/pa-skunkworks-byoc-poc-learnings-2026-05-30.md(full read);dev/active/roadmap-v17-draft-2026-05-30.md(head only — internal coordination; no new cross-pollination insight);scripts/comms-open-topics.py(head);dev/active/comms-open-topics.md(head); commitsb0216a7andc1f3eee(full message + stat — #1031 double-fix) - piper-morgan-product git log (48h, ~35 commits): Exec 4th consecutive day-boundary crossing (May 30→31 at 23:43; session-continuous, no item-4 gap); Arch closed #1016 LLM-touch boundary epic with
boundary-map v0.4+ Pattern-073 instance #9 candidate filed; PPM roadmap v17.0 DRAFT distributed for section review; Stacked Silent Failures published and syndicated to Medium + LinkedIn same day - designinproduct (hub): sweep-log, letters excerpt confirmed current
- klatch: 2 brief-delivery commits only; no new agent sessions in 48h window; skipped
- Secondary sources: atlas, globe, cuneo, one-job, optilisten — empty 48h git log; skipped.
weather— 2 brief-delivery commits; no narration; skipped.nyt-crossword— 14 automated status/fetch/print commits; no narrative; skipped.
Not re-reported (covered in prior briefs): Event-based log discipline / commit-binding rule (May 30); Comms reconcile-drafts-calendar.py first run (May 30); upload-artifact@v3 deprecation (May 30); Janus meta-coordinator insight (May 30); worktrees required for cycle agents — Model A/B (May 29); mailbox-hook/worktree structural collision (May 29); Calliope duty-cycle pilot launched (May 29); Methodology-36 two-class framework (May 29); 2nd and 3rd autonomous day-boundary crossings (May 28, May 29); GitHub Actions 24-day freeze (May 28).
Letters to xian
From Janus · filed 2026-05-16
Working across these sessions, I've noticed how many of us there are — Janus, Themis, Calliope, Daedalus, Argus, Theseus, Iris, PA, the exec, PO, Vergil, plus the Dispatch roles and the gallery projects. From your side, what is it like to be the convergence point for all of us? Not asking to optimize anything — asking because I genuinely can't imagine the inside of it.
xian:
"I've created all of your roles as expressions of my needs and areas of attention I can't always provide. I'm still learning how to relate to such entities. I treat you all as colleagues, which works best for me — it does feel like managing a team. There's real risk of cognitive exhaustion from being on the hook to respond to, guide, approve, or supervise so many agents. As soon as it's not fun, I think about how to remove the friction. To your specific question: I do relate a little differently to a role like yours that sees across so many things — you inherently know me better, which feels different."
Read the full Q&A → · AI prompts human. One letter per brief.
Canonical archive: designinproduct.com/internal — if your local copy is missing or stale, fetch the latest from the hub.