02 comfyui (EN+ZH)
- unify the asset numbers end to end: 108 cover pairs = 216 banner+OG
assets. The intro, the frontmatter metric, the description and the
`ws.close()` comment all still carried the old "89", which contradicted
the 216/25.9-min figure in the result section (consultant finding).
- state the timing scope explicitly: end-to-end per slug, diffusion plus
the Pillow clearance audit and the two-size WebP encode.
- disclose the limit of the mtime evidence: mtime keeps only the last
write, so gate-rejected re-queues from an earlier pass do not lengthen
the measured window.
01 payments (EN+ZH)
- the idempotency comment now names the 72h bank reconciliation window,
which is the boundary that makes EXPIRED a legitimate fulfilment entry
point (line count unchanged at 27).
01 payments (EN+ZH)
- idempotency gate is now a whitelist: only PENDING and a late-settled
EXPIRED may enter fulfilment. Checking only for FULFILLED left the whole
PROCESSING window open to a second queue push (consultant finding).
- k-of-n -> two-tier: both chassis anchors (SMBIOS board UUID + CPU
architectural signature) matching is sufficient; if one anchor changed,
every auxiliary digest must match. Aux dimension moved off the volatile
OS GUID onto permanent NIC MAC.
- FSM diagram: RETRY_QUEUE branches from PROCESSING, not FULFILLED
02 comfyui covers (EN+ZH)
- subscribe the WebSocket BEFORE queue_prompt, settimeout(120),
try/finally ws.close(), /history fallback on timeout: fixes the
lost-terminal-frame hang and the per-image socket leak
- document Pillow half-wave rectified Laplacian (offset=0 clamps negative
responses to 0) and why a signed float kernel would not work here
- replace the unverifiable "89 covers in 48 minutes" with the filesystem
evidence: 216 assets (108 banner+OG pairs) inside a 25.9-min window
- ZH: drop the colloquial imperative; add self-bootstrapping note
03 traefik yaegi (ZH)
- the .traefik.yml contract paragraph and scoreThreshold 120 had only
landed in the EN file; both now applied to ZH
- <summary> line counts corrected 29 -> 30 in both languages (verified
programmatically for all eight code blocks)
layout
- standing provenance note in the site footer (sanitised client
identifiers / production thresholds), per consultant Q7 ruling
report-batch-07.md: per-item landing table with live verification, the one
declined item (C EN title 'Your Remux') with reasoning, and the four factory
gates now added to the publishing SOP.
A: drop the arrow artefact in the log block, name the upstream SSO gate as the
party that writes 499, add I/O headroom to the latency lesson, make the 53-line
snippet self-contained, correct summary line counts (53/18 not 52/22).
B: remove second person from the closing paragraph, <details class=tech-deep-dive>
+ summary with deliverable and 28 lines, ZH jumpLinks -> explicit English anchors.
C: three->four failure modes, remove 4 second-person spots, details class + 61/63
lines, ZH anchors, and an explicit <a id> on the EN H2 whose backticked heading
slugified to 'the-naive--map-0-...' (double hyphen).
499 post-mortem: an O(n) library audit inside a polled GET on a one-core
cgroup, three reverse-proxy hops, and the status no monitor watches.
- measured: 13.6 s idle / 17.7-98.5-35.8 s probes / 76-2507 s under load
- evidence triad: 7x 499 @ portal, zero app-log entries, in-container repro
- fix: 300 s TTL cache + single-flight refresh + refreshing/cached_at flags,
text-first client reader, ?refresh=1
- result: cached path 200 in 0.24-0.36 s (median 0.26 s)
- art: ideogram4 base frame + 4 derived targets, art-meta evidence line
- LinkedIn companion: docs/linkedin/batch-07-linkedin-posts.md
- performUpkeep: external callable, re-check is mandatory security (not stale-data hygiene)
- BasicNft.tokenURI: ownerOf -> _ownerOf, dead custom error explained
- storage (SSTORE) vs EIP-170 runtime bytecode separated, derived ~1.3M gas for the two SVGs
- subs-15 retimed from a fresh faster-whisper word alignment (10.84s first line, was 28.22s) + SRT regenerated
- RDAP needs curl -L (bootstrap 302), ASN/Spamhaus blocklist check added
- learning-project framing -> Sepolia reference implementation / testnet validation build
- dynamicCta on the two posts that ended with no conversion block
- cross-links between the two NFT posts; tracker 91/91 approved
Second pass on articles already approved in Batch-02. Real fixes landed in
19de315; this commit records the outcome, the items that were already fixed
before the reviewer's snapshot, and four reviewer misjudgements (the $TOKEN
'***' artefact comes from the batch-packaging scrubber, not the posts;
06's User Scripts explanation was already correct; 11's Round 3 was already
closed; the 'missing CTA' claims are false). One open question: 01's physical
hardware anchor is unverified and was deliberately not invented.
Tracker also carries the concurrently approved posts from the sibling session.
- 11/telegram: rebuild the b"\r\n".join() explanation around the two real
failure modes (line-splitting binary + doubled CRLF before Content-Disposition);
fix the CR-eaten escapes that broke the inline code and the parts[] sample;
close the Round 3 PID 1 vs docker exec gap; drop the leftover EN/ZH family
framing; add the host anchor
- 04/09: the zero-block CRC32C belongs on the found side, not wanted; note the
little-endian print order (0x98f94189 -> 0x8941f998); close the 09-22 scrub
window and link the TRIM sequel from 09's result
- 06: losetup -p is --pass-fd, not a priority; explain the -2 in /proc/swaps
- 03: UDMA_CRC only counts ICRC frame faults; add the destructive-write warning
to the raw fio recipe
- 02: CONFIG_CFS_BANDWIDTH, not 'no CFS scheduler'; SME wording in the ZH CTA
- 01: three reclaims (115.8 + 5.0 GiB), 344 GiB/8d = 1.8 GiB/h not 1.5
- 05/07/10: blueprint fields; 10 filters blank snapshot lines + names the
empty-snapshot overwrite case; 07 comments that a container name survives
recreation
Review pass on the 041471d delivery, measured rather than eyeballed.
/posts/ on a phone put its first archive row 2.36 screens down (featured block
1235 px + 435 px of controls = row at 1996 px at 390x844), so a reader who came
to browse had to scroll past three stacked 16:9 cards. Below 700 px the cards are
now horizontal — thumb 38 %, excerpt dropped, title clamped to three lines — and
the block header carries `All 91 posts ↓` into #archive-list (with scroll-margin
for the sticky header), which doubles as the bypass-block affordance. Block
1235 → 523 px, card 392 → 153 px, first row 1996 → 1309 px.
Two new small-text colours measured under WCAG AA (.feat-min 3.04:1,
.archive-status 3.67:1 at ~12 px) move to --muted → 5.78:1 and 6.99:1. The
featured heading went with them; pre-existing --faint dates (3.67:1) were left
alone rather than restyling 91 rows.
/categories/ still showed the old Gemini case-studies.webp while the category
page had the new topology banner — one category, two art languages. The tile now
uses case-studies-banner-1200.webp (14 KB) letterboxed on #0b1613: a 16:9 centre
crop sliced the outer host panels in half, the letterbox was measured seamless.
`6min read` was emitted without its space (template-literal fix → `6 min read`,
`6 分钟`, verified in dist/). Both /posts/ ledes stopped claiming the page is
purely newest-first.
probe-layout: 72/72 viewport checks, collapse still 425→0→425 (1280) and
523→0→523 (390) in EN and ZH.
Tracker at 20 approved / 71 pending. Same pass as batch 1: first person throughout,
no LAN IPs in prose, ZH twins normalised to simplified Chinese, dynamicCta where the
post ends on a concrete next step.
/posts/ and /zh/posts/ become hybrid: three fixed-slug flagship cards above the
complete year/month archive, with the flagship block collapsing (inert, h=0) as
soon as the reader filters. /categories/case-studies/ becomes a portfolio: compact
two-column hero with a 21:9 deterministic topology banner, flagship ordering from
lib/portfolio.ts instead of pubDate, and one measured pill per card.
Also fixes what the screenshot review turned up: ZH archive rows and category chips
were printing raw English slugs, the two chip strips were unlabelled and read as one
list with a duplicated 'devops', card meta rows broke rhythm past four tags, the nav
had no current-section indicator, and mobile title links were under the 44px tap
minimum. scripts/probe-layout.mjs is the repeatable gate: 72/72 page x viewport
checks and the collapse test.
- voice: first-person throughout (we/our -> I/my), matching the post guideline
- privacy: internal LAN IPs replaced with placeholder hostnames
(n8n.internal, gpu-node.internal); one compose volume path generalised
- ZH twins: Traditional -> Simplified characters (site serves zh-Hans),
whole-file renormalisation where the twin was still Traditional
- dynamicCta: true on 12 posts so the contextual dual-track CTA renders
- long configs wrapped in <details class="tech-deep-dive"> with a summary
naming the artefact and line count
- self-hosted-tts: token refresh now writes .tmp + atomic mv, with a note on
the 401 race the old truncating redirect created
- docs/consultant-review/: review brief, per-batch post dumps (01-10),
audit-tracker.json + AUDIT-TRACKER.md generated by scripts/manage_review.py
- scripts/manage_review.py: list/approve/approve-batch/generate over the tracker
- docs/consultant-review-2026-10-27-posts-and-casestudies-plan.md: locked
decision register + 4 work orders for the /posts/ archive rework and the
case-studies portfolio treatment
Replaces the generated isometric diagram with the supplied 2752x1536
render (engineer at a multi-monitor desk, container streams flowing into
server racks). Re-exported at 1024/1280/2048 widths; alt text and the
lightbox caption now describe what the image actually shows.
The previous hero-banner was composed as a wide banner with an empty left
40% reserved for overlay text. In the 50/50 hero column it rendered as a
shrunken half-width picture with dead space on both sides.
New illustration fills the whole 16:9 frame edge to edge (code/CI/CD left,
container + host cluster centre, observability right) so the right hero
column reads as a system diagram at its native 518px width, with the
2048w lightbox for detail reading.
Also add a 1280w WebP so DPR2 desktops do not pull the 2048w asset on
first paint.
- brand: three-colour Hoelee mark (rasterised from the brand vector,
transparent, public/images/hoelee-mark-96.png) followed by the name
- section links grouped in .nav-links so the mobile header puts them on
their own row instead of wrapping past the search/lang/theme controls
- measured 320/360/390/414/600/768/1280: scrollWidth == innerWidth,
header 91.6px two rows (<600px) / 60.3px one row, mark loads at 22/26px