Check code for standardization, readability, maintenance complexity, and defensive coding practices
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Run all available tests and linters, check for anti-patterns, and generate a comprehensive code quality report
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Analyze the overall quality of the apple-fm source. Generate a comprehensive report.
Run unit tests with coverage
npm test
Report total tests, pass/fail, and coverage per file. The thresholds in
vitest.config.ts (statements 80 / branches 75 / functions 80 / lines 80) are
the floor; flag any file that drags the suite under them. cli.ts and
repl.ts are intentionally excluded (thin I/O) — confirm they have no
testable logic that crept in.
Coverage is a floor, not a ceiling. A line/branch/function/statement percentage only proves each line ran during the suite — it says nothing about whether the right behavior was asserted, or whether sequences of operations across internal state boundaries were exercised. A module can sit at 100% on every metric and still ship basic bugs, because every operation was tested once from a clean initial state while the transitions between states were never tried. So treat high coverage as the trigger for the behavioral / state-transition audit (step 6) — not as a stopping point. Never report a coverage number as if it were a proof of correctness.
Run the linter
npm run lint
Report errors/warnings grouped by rule.
Run typecheck
npm run typecheck
Report any type errors.
Build the helper (best-effort)
npm run build:helper
On a macOS 26 machine this should emit bin/apple-fm-helper. On other
machines the script no-ops with exit 0 by design — note which happened. If it
built, run bin/apple-fm-helper --probe and report the availability line.
Check anti-patterns (conventions from CLAUDE.md):
.js — grep src//tests/ for relative
imports without a .js suffix.any leaks — grep src/ for : any\b, as any\b, <any>. The house
style is unknown + a narrowing check.strict-boolean-expressions is on; flag any
if (someString) style test (use === undefined / .length).package.json dependencies must stay empty
(the Node layer only spawns the helper). Flag any addition..swift
file under apple-fm-helper/, currently main.swift, GuidedGeneration.swift,
and Tools.swift) may reference FoundationModels. Grep src/ for
FoundationModels (should be zero hits outside comments).tests/fixtures/stub-helper.js must still implement the
same events as docs/4-protocol.md and the Swift helper.src/*.ts over ~200 LOC; prefer splitting.Behavioral / state-transition audit (the part coverage % can't see)
Static checks and a coverage number verify that lines ran; they cannot tell you a behavior or a transition between internal states is missing. This step hunts exactly those gaps.
6a. Identify the stateful modules. A module is "stateful" if its behavior depends on something that persists or changes between calls, not just on the current arguments. Heuristics — flag any module that has:
In apple-fm the prime suspects are:
src/liveSession.ts (LiveSession) — the long-lived
apple-fm-helper --session process: no-process → spawned → busy → dead →
lazy respawn, with id-correlated in-flight commands. Transitions: first
command spawns; a crash mid-command must reject that command and respawn on
the next; overlapping/out-of-order command ids; dispose while busy.src/session.ts (ChatSession) — multi-turn history with automatic
compaction: below compactAtTokens → over threshold → summarize older turns,
keep keepRecentTurns verbatim → continue appending. Transitions: cross the
threshold exactly once vs. repeatedly; a summary that itself pushes back over
threshold; empty history then refill; compaction interleaved with new turns.src/tools/permissions.ts (PermissionPolicy) and
src/tools/registry.ts (ToolRegistry) — per-call mode + remembered
allow/deny decisions accumulating across calls.6b. For each, build a small state/transition map — list the states and the legal (and illegal) transitions between them. This is quick prose or a table, not a formal FSM.
6c. Check the tests against the transitions, not the operations. Read the corresponding test file and ask: does it only ever drive each operation once, from a clean initial state? Or does it exercise multi-step sequences that cross state boundaries? Concretely, look for tests that try:
6d. Flag and recommend. For every stateful module whose tests only cover
single-operation-from-clean-state, flag it — even if its line/branch coverage
is 100% — and recommend an adversarial transition-matrix test: enumerate the
states on both axes and assert the behavior of each state→state move, including
the illegal ones. Give the concrete example sequences from 6c so the follow-up
is actionable. File these as hs-task/hs-bug tickets.
Check the build shape
npm run build && ls dist/
Verify dist/index.js, dist/cli.js, and their .d.ts files exist, and that
dist/cli.js keeps its #!/usr/bin/env node shebang.
liveSession.ts, session.ts, permissions.ts,
registry.ts, plus any others found in 6a) with: its states, whether the tests
exercise transitions vs. only single-operation-from-clean-state, and a
transition-coverage verdict (Covered / Partial / Untested-transitions). This
section must be able to flag a module as having untested transitions even when
its line/branch coverage is 100%. For each flagged module, give the concrete
adversarial sequences to add.hs-task/hs-bug)
for non-trivial findings.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Check code for standardization, readability, maintenance complexity, and defensive coding practices
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Check requirements docs against implementation and report discrepancies
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Read the latest Glassbox code review and apply all feedback annotations
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Read the Hot Sheet worklist and work through the current priority items
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Run as a distributed worker — continuously claim, work, and release Up Next tickets
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Create a new bug ticket in Hot Sheet
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.