tooling
Technical notes on web development, DevOps, and AI integration.
64 articles
- 14:52tooling
Two-Tier Law in a Commit Hook at KotaPortal
A commit-hook script keeps two tiers of law: broken test-marker claims block the commit, while risky surfaces like auth paths or destructive migrations only earn a logged warning.
TL;DR: The commit script has two tiers: a test marker like "characterization" hard-blocks the commit unless an exact comment line is present, while risky surfaces such as auth code, destructive migrations, or dangerouslySetInnerHTML only log a warning. Hard-blocking everything would kill velocity, and hooks can be bypassed with --no-verify. The goal is raising the cost of carelessness, not building a wall.
#git#git-hooks#security - 14:00tooling
The Machine That Guards Review Claims in Commit Messages
A bash gate turns free-text Security-review claims into three machine-tested invariants on the commit-msg hook.
TL;DR: Review claims in commit messages are usually free text nobody checks, so one repo added a bash commit-msg gate turning them into machine-tested invariants. The script enforces exactly one Security-review: trailer, a fixed position above Co-Authored-By, and substance, matching "tests only" claims against a whitelist of changed paths. It's bypassable with --no-verify, but it cheaply catches honest mistakes.
#git#bash#security - 00:13backend
When a Comma Cuts the Description: YAML Under the Linter
Eight of ten OpenAPI lint errors were not contract drift: an unquoted comma in a flow-mapping description became a bogus null-keyed entry.
TL;DR: Ten OpenAPI lint errors weren't contract drift but YAML parsing: unquoted commas inside flow mappings silently truncate description values. Linting grades the parsed debris, not the source, so Redocly flagged symptoms far below the real cause. Quoting descriptions fixed it; openapi-typescript regeneration produced byte-identical output, proving the fix was pure hygiene.
#openapi#yaml#api - 20:23tooling
The Backlog Is Not a Queue: An Agreement Gate Before To Do
A one-line transition rule became a question-and-answer arena: items reach To Do only after agreement, following the definition-of-ready pattern.
TL;DR: A kanban transition rule let one owner unilaterally move items from Backlog to To Do, leaving questions scattered and work stuck. Rewriting it as an agreement gate—items advance only when their backlog Q&A thread concludes—turned the backlog into a negotiation arena. Same-day results: a design item closed with no code, execution split into three new items.
#kanban#agile#workflow - 18:39tooling
Document Status Is Derived, Not Recorded
Manually recorded document status always goes stale. Make the folder the state machine: status is derived from file location, never filled in by hand.
TL;DR: Manual status labels make documentation lie because humans forget to update them, and automated review timers only incentivize whitespace edits. The fix is deriving status automatically from folder location: four fixed states (truth, intake, active, frozen) form a directory-as-state-machine. This mirrors ADR practices and Diataxis, keeps legacy links intact, and current progress lives on the project board.
#documentation#adr#workflow - 18:03ai
Superpowers for Coding Agents: Branching Makes Sense
Adopting the superpowers framework turns a branching naming convention into a real isolation requirement. One worktree per task, enforced by the workflow itself.
TL;DR: The superpowers framework chains coding agents through mandatory stages—brainstorming, git worktrees, planning, TDD, code review—enforced by skills. Worktrees give each task an isolated directory and branch, making the one-branch-per-task rule functional rather than ritual. The overhead pays off only in long autonomous runs; disable telemetry if your data policies are strict.
#claude-code#superpowers#git-worktree - 14:45ai
Where MCP Config Lives: User or Project Scope
Where MCP configuration belongs: workspace files travel with the repo and get team review, user profiles stay personal and skip review entirely.
#mcp#vscode#security - 14:45tooling
Executed Specs Are Decision Records, Not Trash
Executed specifications are decision records: archive them as a status change, keep them immutable with the ADR append-only pattern.
#documentation#adr#workflow - 01:03security
Reading a Tech Stack from Public Signals
Passive recon: map a stack from subdomains, archived URLs, TXT records, MX, nameservers, and secret scans without sending one packet to the target.
TL;DR: Passive recon maps a domain's tech stack from public data alone—DNS, subdomains, old URLs, headers—without touching the target. The catch: signals mislead easily, since verification tokens don't prove actual usage and Cloudflare headers matter less than nameserver records. Found secrets? Stop at discovery—validation crosses into active territory, so report through official disclosure channels.
#security#dns#tooling