chore(audit): execute 2026-06-11 audit — docs GFM tables fix + guardrails (3 findings, 2 refuted) - #161
Merged
Merged
Conversation
…ession GFM was never wired into the Starlight MDX pipeline, so every pipe table across the docs site shipped as literal '| ... |' text instead of <table>. Add remark-gfm to markdown.remarkPlugins, pin it as a direct dep, and add a post-build check:rendered-markdown guard (wired into build:ci) that fails if any rendered page contains unrendered table-delimiter residue. Audit: F001
The engine-pin-parity rule only checked apps/api/.github/workflows/ci.yml, which does not exist in this monorepo (workflows live at the repo root). Every root workflow's bun-version pin was therefore unvalidated against package.json engines.bun. Scan all workflowFiles and flag every bun-version occurrence that drifts from the pin; add a multi-workflow test. Audit: F003
PORT was hardcoded to 7331, silently breaking e2e when the UI dev server is remapped (Docker port mapping, port conflicts). Default stays 7331; PLAYWRIGHT_PORT overrides it and propagates to baseURL and the webServer readiness URL. Audit: F005
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Executes the 2026-06-11 monorepo audit. Of the report's 5 findings, 3 were real and fixed; 2 were false findings (verified and skipped, not patched), plus 4 carried-over blocked items refuted.
/skills/spec-loop/, auth-contract, env-vars, …) shipped as literal| … |text instead of<table>. Wiredremark-gfmintomarkdown.remarkPlugins, pinned it as a direct dep, and added a post-buildcheck:rendered-markdownguard (inbuild:ci) that fails if any rendered page contains unrendered table-delimiter residue — proven to flag all 14 pages when GFM is removed and to ignore intentional table syntax inside fenced code blocks.engine-pin-parityonly checked a nonexistentapps/api/.github/workflows/ci.yml, leaving all root workflows'bun-versionpins unvalidated againstengines.bun. Extended it to scan every root workflow and everybun-version:occurrence; added a multi-workflow test. Proven: injecting a drifted pin now failslint:meta.PORTwas hardcoded to 7331; now overridable viaPLAYWRIGHT_PORT(propagates tobaseURLand thewebServerreadiness URL).Skipped as false findings (verified, not patched)
infra-compose-security-secrets.ymlalready gates the expensive gitleaks steps via an in-jobdorny/paths-filter. The unfilteredpull_requesttrigger is the repo's documented intended pattern (see lint-metagithub-actions-paths-filter-parity: "PR triggers stay unfiltered so branch protection always gets a status"). Adding a PR paths filter would remove the stable required-status guarantee.og-image.png(56,705 bytes) is reproduced byte-for-byte bygenerate:og-image. The audit's claimed 100KB HEAD blob was wrong. No drift.Also refuted: gitleaks "missing pipefail" (
set -euo pipefailalready present), Trivy SARIFcontinue-on-error(GitHub-recommendedif: always()pattern; scan still gates viaexit-code: 1), and the security-workflowcancel-in-progressitem (intentional, enforced bygithub-actions-security-no-cancel).Test plan
bun run check— api ✅ and ui ✅ greencd apps/docs && bun run build:ci✅ (build + fragments + newcheck:rendered-markdown+ linkcheck all pass via pre-push)engine-pin-paritytests: 6 pass (5 original + 1 new multi-workflow)App merge bars
cd apps/api && bun run validatecd apps/ui && bun run validatecd apps/docs && bun run build:cibun run check(from repo root)Conventions
any, no blindas, no!.env.example(+ SECURITY.md when relevant) — n/a (PLAYWRIGHT_PORTis a local test-runner override, not an app env var)Screenshots
Tables now render as real
<table>elements site-wide (e.g./skills/spec-loop/) instead of literal pipe text. No app-UI change.