- publint-all: the recursive publication view uses readdirSync
{recursive} again instead of globSync('**/*') — the glob skips
dot-prefixed segments (verified empirically), but npm pack publishes
dotfiles inside included directories, so hidden exports were
reported missing and other hidden files escaped validation
- markdown.ts/verify-type-equiv: markdownFences now reports whether a
closing delimiter terminates the block (mdast silently closes an
unterminated fence at EOF), and verify-type-equiv rejects unclosed
type-equivalence fences again — the Agent Note claimed such a block
still fails at the manifest checks, but its comparisons can succeed
- Agent Note EN+ZH: record the restored rejection; rewrite the zh
Problem section into past tense to match the English side's shipped
reality; pair re-recorded
- gate-consolidation note: parseArgs strict mode DOES reject a
dash-leading token where a value is expected (verified with node);
only the duplicate-option behavior differs
- YAML roll-up item: scripts/verify-cordis-config.ts is a fourth
js-yaml !!js tag definition the inventory missed
Both EN+ZH, pairs re-recorded.
PR #679 implemented the swap and falsified the note's parity premise:
vitest's fake clock does not intercept node:timers/promises, so the
change traded deterministic fast tests (llm-retry ~4s->~10s real
sleeps, two pty teardown tests rewritten real-time, a weakened
workflow grace-timer guard) for ~10 deleted lines. Moved the note
proposed -> rejected with the verdict on the Status line; the frozen
proposal body is kept per the rejected-lifecycle contract.
Every PR that changes product-user-visible GUI behavior now includes a
demonstration GIF with real provenance (that branch's built tree, real
key, real model rounds). Recording stays side-effect-free; the skill
gains a bounded final publication step: GIFs go on an append-only
orphan assets branch (one per PR series) and embed via the blob URL
with ?raw=true, never on the PR branch itself.
Folds in the operational lessons from the Code Mode UI series:
.playwright-mcp/ screenshot roots (now gitignored), per-PR staging and
precise server teardown, one-call DOM polling for transient states,
exact-text completion predicates, prompt engineering for UI states,
and the export-before-invoke GIF_SKILL_DIR encoder pitfall.
Agent Note: implemented/process/2026-07-26-gui-pr-gif-evidence-and-assets-branch (+ zh pair); the 2026-07-23 recording note now defers publication policy to it.
Implements the gate-consolidation Agent Note from the NIH dependency audit:
- Shared markdownFences helper in scripts/markdown.ts (mdast code-node visit);
doc-typecheck and verify-type-equiv extract fences through it; md-fences.ts
and the duplicated extractEquivBlocks regex scanner are deleted;
markdownProseLines derives fenced lines from parsed code-node positions
instead of a second fence regex.
- publint-all.ts and verify-built-package-invariants.mjs parse argv with
node:util parseArgs instead of hand-stepped parseOptions copies.
- Five straggler readdirSync walks become globSync: verify-runtime-closure,
dev-web discoverPluginDirs, verify-package-paths realPackageNames,
verify-client-domain-graph listSources, publint-all addPath. The
dirent-diagnostic walks in check-workspace-constraints.ts and clean.ts stay.
Behavior parity verified: pnpm run doc-sync and every rewritten gate produce
byte-identical output before and after on this tree.
Moves the owning Agent Note proposed -> implemented and re-records its pair.