feat: build the native macOS evidence workbench - #203
Closed
sarthakagrawal927 wants to merge 38 commits into
Closed
Conversation
knip:strict runs in CI (ci.yml "Code health") but was analyzing zero files:
knip.json declared root-relative entry paths while pnpm-workspace.yaml sets
packages: apps/*, so knip resolved the apps as separate workspaces and every
entry/project pattern matched nothing. `knip --reporter json` returned
{"issues":[]}. The unused-code gate has been passing vacuously.
Rewrite the config workspace-aware (., apps/desktop, apps/landing-page-astro)
and strip the suppression that hid real findings — ignoreDependencies drops
from ~24 entries to 2, and the blanket ignore list is gone entirely.
With the gate live it reported six genuinely unused dependencies, verified by
hand as having zero imports anywhere in the desktop app. They were invisible
because the old config named @xterm/* and react-resizable-panels in
ignoreDependencies. They are leftovers from the removed agent terminal UI.
ignoreIssues now whitelists the warm-verification / scenario-compiler contract
modules file-by-file rather than by directory glob, so a new dead module in
those directories still fails the gate. Verified by canary: adding an unused
export is detected.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
.impeccable/ and .claude/projects/ had zero inbound references anywhere in the repo — they are local tool output, not shared repo content. Untrack them (kept on disk) and gitignore them. .claude/settings.local.json was tracked despite already being listed in .gitignore. Its contents are stale per-developer state: every path points at /Users/sarthakagrawal/Desktop/code-reviewer/ with a packages/ + workers/ layout that no longer exists, plus Vercel permissions from before the move to Cloudflare Pages. research/ held one real document — a survey of codebase-context tooling — so move it to docs/knowledge/ with the frontmatter check-docs.mjs requires rather than dropping it. Also drop gitignore entries for a layout that no longer exists: the "Action runtime bundle" dist/* + !dist/index.js pair (there is no action.yml in this repo), packages/*, workers/* and .vercel. dist/* becomes dist/ rather than being deleted, since it matches at any depth and is what keeps docs-site/dist and apps/landing-page-astro/dist out of the index. This commit also carries the gitignore lines for the corpus and evidence moves in the two commits that follow, since they share one file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
benchmark/ and benchmarks/ differed by a single character while holding different things: the public hand-labeled catch-rate corpus, and the internal evaluation corpora (agent-prs, agent-tasks, runtime-challenges, context-*, performance-lab). Move the former to benchmarks/public-catch-rate/ so there is one corpus root and no singular/plural ambiguity. The published surface is unchanged. scripts/generate-benchmark-dataset.mjs still emits apps/landing-page-astro/public/benchmark/codevetter-benchmark-v1.json and the site still serves /benchmark/... — only the repo-root source directory moved. Verified: pnpm bench:public scores all 27 cases from the new path, the generator reads it, and the Astro build produces all 24 pages. Deliberately not rewritten: the pinned-SHA GitHub raw URLs in Bento.astro (they resolve against commit 006c2e5, where the old path still exists), the public /benchmark/ URLs in agent-markdown.ts and benchmark.astro, and docs/development/performance.md's --target benchmark/parser.mjs, which is an unrelated perf example rather than the corpus. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… root Evidence was spread across four locations: artifacts/, .fleet/evidence/, .fleet/design-reviews/, and apps/desktop/artifacts/. The split was actively lossy — .fleet/evidence/landing-audit/ held the scorecard and performance report while artifacts/design/landing-audit/ held the screenshots of the same audit. They now sit together. artifacts/ also had two incompatible jobs: committed design evidence, and the scratch output path the docs tell users to write to (--out artifacts/... in docs/development/verification-receipts.md, benchmark.md and performance.md). Splitting them resolves that — artifacts/ is now gitignored scratch, and those existing doc examples become correct rather than ambiguous. Layout: evidence/design/ screenshots, landing-audit, changelog, probes, reviews evidence/performance/ performance-lab results and manifests evidence/reviews/ PR review captures All moves use git mv so rename history survives. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The documented structure had drifted from the tree: - agents.md's "Repo structure" block omitted benchmarks/, artifacts/, docs-site/ and research/, and listed benchmark/ which has moved. - README.md's "Monorepo Structure" listed openspec/, which does not exist. - Both agents.md and docs/development/docs.md placed blume.config.ts at the repo root. It actually lives at docs-site/blume.config.ts. Also state the artifacts/ vs evidence/ split so the convention is discoverable rather than folklore. Verified with node scripts/check-docs.mjs (77 files, no broken links). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The scan covered sk-, ghp_, gho_, AKIA, AIzaSy, xoxb- and PEM headers but not
pk_, so the projectKey committed in foundry.json never tripped it. Add a
pk_[A-Za-z0-9]{32,} pattern so this class of key cannot leak again.
foundry.json is excluded for now, with a comment saying why: the key already in
it predates the pattern, and blocking every push until it is rotated would be
worse than tracking it. That exclusion should be removed once the key is
rotated at the provider and moved out of the tracked file — redacting it now
would not unpublish it, since it is already in committed history.
Also repoints the corpus exclusion at benchmarks/public-catch-rate/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bank the tooling research so it survives the session that produced it. Four category pages plus a hub, all reachable from docs/index.md: - tooling-decisions.md — adopt/reject summary and the constraints behind it - tooling-secrets-and-supply-chain.md - tooling-coverage.md - tooling-agent-benchmarks.md - tooling-documentation.md — the DeepWiki reject Findings are dated 2026-08-30 and cite primary sources. Items the research could not confirm are marked UNVERIFIED rather than stated as fact — notably Devin/ACU pricing (429s on fetch), Socket pricing (403s), and whether Grype/Syft carry telemetry. Also adds a failed-approaches entry for the reason this was needed: the DeepWiki question was researched twice, in April and August 2026, reaching the same verdict both times, because the April survey sat in a top-level research/ directory that nothing linked to and check-docs never validated. That file is now in docs/knowledge/ and indexed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ation Completes the tooling research the first agent died before delivering. Adds tooling-sandboxing.md and wires it into the hub and index. Recommendation: libkrun (Apache-2.0, Rust, Hypervisor.framework) embedded in-process in src-tauri/, with apple/containerization as the upgrade path once a Swift sidecar is acceptable — it is the only option with native VM state save/restore, the actual warm-start mechanism. Three findings that overturn common assumptions, all recorded: - Firecracker and gVisor do not run on macOS at all (KVM / Linux platforms only). Any plan built on them is dead on arrival. - Docker Desktop is a licensing gate, not just an install burden — free only under 250 employees AND under $10M revenue. - CodeQL is legally disqualified for this product: its license forbids use on non-open-source codebases and automated analysis without paid GHAS, and CodeVetter exists to run against private repos. Also notes that Semgrep's engine (LGPL-2.1) and its registry rules (a separate restrictive license forbidding redistribution) are licensed differently, and that observability needs no new dependency — the existing SQLite tables cover per-run cost and latency. Open questions are marked UNVERIFIED, notably the Virtualization.framework entitlement question, which needs a direct check against Apple's docs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
agents.md still advertised "Nav (7 tabs)" including Work (/agents) and Board (/board). Both were retired on 2026-08-16 — docs/product/surfaces.md records the retirement audit — and App.tsx now redirects them to "/". The sidebar ships six tabs, and Performance (/performance) was missing from the list entirely. This is the same block corrected earlier in this branch for repo structure; the nav line three rows below it was missed on that pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Implements the Swift/AppKit migration, Rust parity bridges, deterministic owner evidence, package qualification, and isolated hosted acceptance workflow for #201.
Route opt-in native qualification through the existing CI dispatcher until the reusable workflow reaches the default branch.
This was referenced Sep 2, 2026
Member
Author
Member
Author
Member
Author
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
Evidence
Release boundary
This PR is intentionally draft. It does not merge, release, retire Tauri, publish an updater, or claim production signing/notarization. Protected native production qualification correctly stops while the eight Apple/Sparkle repository secrets are absent. Owner visual acceptance and the final exact-head hosted run remain gates.
Tracks #193, #198, #199, #200, #201, and #202.