tooling
Technical notes on web development, DevOps, and AI integration.
64 articles
- 22:54testing
The Git Glob Blind Spot in a Token Build Gate
git's ** pathspec skips files directly under src/; a four-command throwaway repo exposed the blind spot in a token build gate before anyone exploited it.
TL;DR: While testing a build gate that blocks hardcoded hex colors, I assumed src/**/*.tsx would catch files directly in src. A quick git ls-files experiment proved the pattern misses direct children, leaving a silent loophole. I fixed it by combining shallow and recursive globs and added tests to ensure coverage at any depth.
#git#glob#build-gate - 18:07tooling
The Morning My Research Tool Swallowed Its Own Medicine
One pruned line in the morning build settled it: an unpruned vector index answers with documents that no longer exist, and free-form data is a contract.
TL;DR: Renaming a research file left a stale embedding in a JSON vector index that kept returning a ghost document. The fix added tolerant reading for summary field aliases, automatic pruning of missing files during builds, and a self-testing suite. It is a sixty-line reminder that small local tools need honest indexes and defensive boundaries.
#python#embedding#backward-compatibility - 11:32devops
Do Not Use Absolute URLs for Plane Comment Image Embeds
Image embeds in Plane API comments fail hard on absolute URLs (401). Verified pipeline: in-container helper, image-component node, raw asset_id.
TL;DR: Using absolute URLs for Plane comment images always returns 401 because assets must load through an authenticated local proxy. Instead create the comment first, upload via the in-container helper, and embed with the native image-component node using only the raw asset ID. Remember updates replace all HTML so resend full content and verify rendering in the browser not with curl.
#plane#mcp#docker - 08:23devops
Bypassing the MCP Limit: Images in Plane Comments
The Plane MCP server has no upload action and the SSRF guard rightly rejects private URLs. The self-host answer: drop one level and create the FileAsset inside the container.
TL;DR: The Plane MCP server can't upload files and its SSRF guard correctly blocks loopback URLs and internal API keys. The workaround is a tiny Python script that copies the image into the container and uploads it to MinIO via Django shell. Then you patch the comment's HTML with the returned URL, which renders in the UI but stays private.
#plane#mcp#docker - 04:19testing
E2E Tests You Can Re-run by Module Name
Forgetting spec filenames whenever one page needs testing? A thin resolver plus an honest coverage ledger.
TL;DR: A 73-line bash script maps module names to Playwright specs so you can rerun one page instead of the whole suite. It checks folders, matches spec files, forwards flags like headed mode, and lists modules from describe blocks. A companion ledger tracks coverage per feature and requires new code to update its row, keeping gaps visible.
#testing#playwright#e2e - 02:35devops
Checking the gate with one command
What used to take four MCP round trips and an 86KB payload at session start is now one read-only script with semantic exit codes.
TL;DR: Checking status used to need four heavy MCP calls, and caching only created stale-data headaches. The fix was a lightweight read-only script that runs four checks in parallel with clear exit codes for ready, drift, or infra trouble. It handles quirks like Cloudflare blocks and rate limits while staying local for quick iteration and always-fresh data.
#python#plane#devops - 23:44tooling
Page identity without a hidden marker
A v3.1 design moves page identity from a hidden HTML marker to a configured page_id, adds retrieve-after-write hash comparison, and keeps unknown forms fail-loud.
TL;DR: v3 kept page identity in an HTML comment in the body, so a single rewrite without it made verification block the page. Commit 67f50e0 specs v3-1 moving identity to config with strict naming and verifying writes via read-back hash comparison that fails loudly. It is design only, does not identify the stripping cause, and keeps tolerance tight to prevent drift.
#plane#python#markdown - 21:24tooling
Version-aware preflight without breaking v2
Preflight v3 without breaking the frozen v2 validator.
TL;DR: V2 preflight blocked v3 configs, so a new pagesync preflight now validates v3 decisions and Pages while leaving the frozen v2 engine alone. Duplicate validators stay aligned via a shared adversarial test table that requires matching accept/reject outcomes and surfaces traversal errors first. Page sync verifies what Plane stored via retrieve-after-write name and hash checks instead of trusting hidden markers.
#plane#python#testing - 17:17tooling
Binding Mirrored Pages by Content, Not Names
Name-based bindings fork silently under renames; pagesync moves page identity into a hidden HTML marker plus a normalized sha256 drift hash.
TL;DR: The doc-sync tool mirrors markdown files from the docs folder to Plane Pages using content-shaped identity rather than names. A hidden HTML comment holding the source path sits as the first line and Plane preserves it verbatim as the sync authority. Strict tiers, sha256 drift checks on normalized markdown, and hard config validation keep sync reliable through renames and edits.
#plane#python#markdown