Agent Skills › IvanWng97/pixtuoid

IvanWng97/pixtuoid

GitHub

用于在pixtuoid项目中集成新的agent-CLI源适配器。涵盖跨crate配置、站点清单、主题徽章及运行时接线。重点确保执行包含测试覆盖的关键步骤,防止遗漏导致构建失败或功能缺失。

4 skills 341

Install All Skills

npx skills add IvanWng97/pixtuoid --all -g -y
More Options

List skills in collection

npx skills add IvanWng97/pixtuoid --list

Skills in Collection (4)

用于在pixtuoid项目中集成新的agent-CLI源适配器。涵盖跨crate配置、站点清单、主题徽章及运行时接线。重点确保执行包含测试覆盖的关键步骤,防止遗漏导致构建失败或功能缺失。
用户请求添加对特定CLI的支持 需要为工具添加源适配器 提及集成新的agent CLI
.claude/skills/add-source/SKILL.md
npx skills add IvanWng97/pixtuoid --skill add-source -g -y
SKILL.md
Frontmatter
{
    "name": "add-source",
    "version": "1.0.0",
    "metadata": {
        "scope": "pixtuoid repo only"
    },
    "description": "Wire a new agent-CLI Source adapter into pixtuoid (a new coding CLI whose sessions become office sprites). Use when the user says 'add support for <CLI>', 'add a source for <tool>', or 'integrate <agent CLI>'. Orchestrates the cross-crate checklist whose steps have TEST TEETH — the ones a diff-scoped edit silently misses (site manifest bridge, per-source badge hue, home-dir fn)."
}

add-source (v1)

Adding an agent CLI is not a single-file change — it spans pixtuoid-core (decoder + registry + tests), the pixtuoid binary (runtime wiring + install target + badge hue), and the site manifest. Several steps have test teeth that only just preflight's FULL run catches, not the targeted source/install suites — so an agent that stops at "it compiles" ships a red PR.

When to use

  • "Add support for <CLI>" / "integrate " / "add a source for X".
  • A new transcript-bearing OR hook-only coding CLI should show up as sprites.

The authoritative checklist

The complete, current step list lives in crates/pixtuoid-core/CLAUDE.md ("multi-source decoding" / "Adding a new agent CLI") — read it first; it is the source of truth and stays current. The Copilot-format summary is .github/prompts/add-source.prompt.md. Before you start, decide transcript-bearing vs hook-only (invariant #3): a hook-only CLI (Reasonix/CodeWhale/opencode/Cursor) sets transcript: None, skips the runtime wiring + Source impl, and ships a hook.custom decoder + an install/ target instead.

The test-teeth steps agents miss

These are the ones with a failing test attached — do NOT stop before them:

  • site/src/sources.json row — a manifest bridge test fails until it exists; then just gen-readme to sync the README. (CLAUDE.md step 5.)
  • Per-source badge hue — a Theme::source (SourceColors) field in EVERY theme file + a dashboard_line match arm; two guard tests fail otherwise. (CLAUDE.md step 7.)
  • pub fn <cli>_home() if the CLI has a custom config root — one fn honoring its *_HOME precedence, called from BOTH the watcher's default_paths() AND the installer's default_config_path() so they can't disagree. (CLAUDE.md step 6.)
  • A captured fixture under tests/sources/fixtures/<name>/<scenario>/ exercising the SessionStart hook — the conformance test forces one, and its one-AgentId assertion guards against the reason-field ghost.

(The exact test names + full step list are in crates/pixtuoid-core/CLAUDE.md "Adding a new agent CLI" and add-source.prompt.md — this skill headlines the teeth, those own the specifics.)

Finish

  • Wire it into runtime/driver.rs::build_source_set (transcript-bearing only — the one construction site, called by run_async). This step HAS teeth: build_source_set_wires_every_transcript_bearing_source_plus_the_hook_router (driver.rs) FAILS for a registered source left unwired, so just preflight catches the miss — don't make it wait that long.
  • Capture the real wire shape and set verified_version ("unknown" until a byte-real capture anchors it). Drift-watch it (see the add-a-CLI list's drift-watch note in crates/pixtuoid-core/CLAUDE.md).
  • just gen-contract only if you touched the --json/SourceStatus/OutcomeRow SHAPE (adding a row doesn't).
  • just preflight before the PR, then run the two-lens-review skill.
用于为pixtuoid项目添加新颜色主题。涵盖创建包含110个角色的完整主题文件、注册模块、确保RGB唯一性,以及关键的manifest同步和媒体再生步骤,最后通过测试与视觉验证。
用户要求添加特定名称的主题 用户提出新建配色方案 用户请求将现有调色板移植到pixtuoid
.claude/skills/add-theme/SKILL.md
npx skills add IvanWng97/pixtuoid --skill add-theme -g -y
SKILL.md
Frontmatter
{
    "name": "add-theme",
    "version": "1.0.0",
    "metadata": {
        "scope": "pixtuoid repo only"
    },
    "description": "Add a new color theme to pixtuoid (a full ~110-role palette across 9 groups, rendered into the office). Use when the user says 'add a <name> theme', 'new color scheme', or 'port <palette> to pixtuoid'. Orchestrates the Rust registration PLUS the two steps agents miss — the site manifest bridge test and the committed-media regen."
}

add-theme (v1)

A theme is a pub static Theme with ~110 color roles across 9 groups (surface, office, lighting, furniture, effects, ui, tool_glow, ApplianceColors for corridor appliances, and SourceColors for per-CLI dashboard badge hues). Every field must be supplied — corridor appliances render wrong until each theme provides its own set.

When to use

  • "Add a <name> theme" / "new color scheme" / "port <palette>".

The checklist

Full current steps: .github/prompts/add-theme.prompt.md

  1. Create crates/pixtuoid-scene/src/theme/<name>.rs — fill EVERY field; never fall back to the normal palette.
  2. Register: mod in theme/mod.rs, append &<NAME> to ALL_THEMES, theme_by_name() resolves the kebab-case name.
  3. Each palette key must map to a UNIQUE RGB — the renderer recolors by RGB equality (recolor_frame); duplicate keys collide silently.

The two steps agents miss (both have teeth)

  • site/src/themes.json row (id = the kebab-case name) — theme_gallery_manifest_matches_all_themes (theme/mod.rs) asserts the manifest ids == ALL_THEMES names, so the theme fails just test until the row exists. The site never runs the binary, so this bridge test is the only guard that the switcher stays in sync.
  • just gen-mediathemes.json drives the committed theme stills; a new theme drifts them, so regenerate and commit them or the smoke gen-check reds the PR (the same error the bridge test's message points at).

(Full step list + field details: add-theme.prompt.md + the tui CLAUDE.md theme notes — this skill headlines the two teeth steps agents miss.)

Finish

  • just testappliance_palette_is_legible_for_every_theme + the snapshot tests must pass; update insta snapshots if the theme list changed.
  • Visually verify — render the snapshot example and eyeball the office (see the beautify-decoration skill); a palette that passes the legibility guard can still read badly.
  • just preflight, then the two-lens-review skill (a theme is public-facing — add the editorial/film-critic lens for the rendered stills).
用于在pixtuoid中迭代优化像素风装饰物的视觉设计。涵盖现有装饰重绘、新家具添加及视觉验证流程,重点解决构建陷阱与布局集成问题,确保资产正确编译并记录迭代历史。
用户要求美化特定装饰或物品 重新设计现有的房间装饰(如茶水间、休息室) 添加新的固定装置(如吊灯、饮水机) 用户反馈物品太小、不清晰或难以辨认
.claude/skills/beautify-decoration/SKILL.md
npx skills add IvanWng97/pixtuoid --skill beautify-decoration -g -y
SKILL.md
Frontmatter
{
    "name": "beautify-decoration",
    "version": "1.0.0",
    "metadata": {
        "scope": "pixtuoid repo only"
    },
    "description": "Iterate on the visual identity of a top-down pixel-art decoration (sprite + layout integration) in pixtuoid. Use when redesigning an existing decoration (pantry, lounge, meeting room, cubicle decor) or adding a new one. Captures the rebuild trap, the visual-verification loop, resolution constraints, sprite-format pitfalls, and the layout-integration checklist that we learned the hard way during the pantry beautify session."
}

beautify-decoration (v1)

A repo-specific iteration loop for visually redesigning a decoration in pixtuoid. Follow this when the user says "beautify X" or "make Y look better" — it short-circuits several rebuild traps and visual-design dead ends that aren't obvious from the codebase alone.

When to use

  • Redesigning an existing decoration sprite (pantry, lounge, meeting, cubicle decor)
  • Adding a new fixture (pendant lamp, water cooler, chalkboard, etc.)
  • User says "items look too small / don't read like X / blend together"
  • After making sprite edits and "I don't see any change"

The visual-iteration loop

1. Edit sprite OR layout
   ↓
2. cargo build --release --example snapshot
   ↓
3. ./target/release/examples/snapshot --cols 192 --rows 80 /tmp/snap.png
   ↓
4. .venv/bin/python3 scripts/crop-snapshot.py /tmp/snap.png --scale 3 -q <quadrant>
   (or skip the quadrant guessing: snapshot --crop-furniture pantry|couch|vending|
   printer|meeting|sofa|desk OR --crop-agent <label> renders a 40x24-cell window
   already centered on the target — no Python step)
   ↓
5. Read the cropped PNG → self-critique → back to step 1
   ↓
6. When happy, send to user with SendUserFile and short caption
   ↓
7. cargo build --release --workspace    ← rebuild the LIVE binary too
   ↓
8. Commit with iteration history (which designs were tried, why rejected)

The user is the final judge of "does it look like a fridge / coffee machine / etc." — but you should self-critique before sending. Three iterations of self-critique before bothering the user.

Step 7 is mandatory. cargo build --release --example snapshot does NOT rebuild the main binary. Users testing with ./target/release/pixtuoid run won't see sprite changes until the workspace is rebuilt. Forgetting this step is how "I changed the sprite but nothing happened in the live TUI" bugs get filed.

Step 8 is mandatory. Commit messages for sprite changes must include the iteration count and a one-line rationale for each rejected attempt. Future editors need to know which alternatives were explored — otherwise they'll re-try the same dead-end designs (the seated_sleeping sprite went through 4 iterations before reading correctly at scale).

Sharp edges (the things that wasted time during the pantry session)

1. The rebuild trap

  • cargo build --release --workspace does not rebuild examples. Use cargo build --release --example snapshot when iterating on examples/snapshot.
  • include_str! in crates/pixtuoid-scene/src/embedded_pack.rs bakes sprite files at compile time. A build.rs exists at crates/pixtuoid-scene/build.rs that emits rerun-if-changed for every .sprite and pack.toml — so a sprite edit DOES trigger a rebuild now. If you added a new asset and edits still aren't being picked up, check that build.rs is matching its extension.
  • If unsure, verify with: strings target/release/examples/snapshot | grep "<some unique string from your sprite>".

2. Snapshot defaults hide the large sprite variants

examples/snapshot defaults to 192×80 cells → buffer 192×160. Several layouts (pantry, corridor appliances) have conditional variants based on room dimensions. Corridor items (vending machine, printer) only appear when walkway_h ≥ 9–10. Use the default --cols 192 --rows 80 to see everything.

Pantry-specific threshold: pantry_room.width >= 36 triggers the 32×10 sprite; below that, the 20×8 pantry_small.sprite is used. Threshold lives in crates/pixtuoid-scene/src/layout/compute.rs.

3. Visual-inspection helper

The full PNG is too big to grok at a glance and too small at thumbnail. Crop the relevant quadrant with PIL:

from PIL import Image
img = Image.open('/tmp/snap.png')
w, h = img.size
# Pantry is bottom-left quadrant; adjust ratios for other zones:
#   meeting:  (0, 0, 0.30*w, 0.45*h)
#   pantry:   (0, 0.49*h, 0.30*w, h)
#   cubicle:  (0.30*w, 0, w, 0.55*h)
#   lounge:   pre-2026 retired; merged into cubicle band
crop = img.crop((0, int(h*0.49), int(w*0.30), h))
crop = crop.resize((crop.width*2, crop.height*2), Image.NEAREST)
crop.save('/tmp/crop.png')

Then Read the cropped PNG — you (Claude) can see PNG content via the Read tool.

PIL is available system-wide (installed via pip3 install --user --break-system-packages Pillow). If a fresh environment misses it, install once.

4. Resolution budget

  • Each sprite pixel ≈ half a terminal cell (half-block compression).
  • Subzones smaller than ~5 display cells wide blur into pixel noise — users can't read them.
  • Sub-pixel detail (a 1-cell handle, a 1-cell stripe) is invisible. Iterate on silhouette + color identity, not pixel polish.
  • A 32×10 sprite has only ~16 display cells of width. Three zones of ~5 cells each is the practical max for legibility. Drop items; don't shrink them.

5. Identity mistakes that look identical to each other

Symptoms of weak identity:

  • Transparent body (.): the wall color shows through, weakening the silhouette. Use a solid fill color for appliances.
  • All-dark appliances: a row of M-bodied items reads as "row of dark boxes." Give each appliance a distinct base color (e.g., w white fridge against M dark coffee machine + M dark microwave with q glass).
  • Symmetric H-frame on a white box → reads as washing machine, not fridge. Use asymmetric handles (single-side handle, or center-French-door pair).
  • Cyan + blue dispenser dots next to each other → reads as cyan-cyan because b is dark and gets dim. Space them out or use c + r.

6. Sprite-format pitfalls

  • Every row in a .sprite file must have exactly the same number of space-separated cells. Off-by-one is the most common bug.
  • Verify with: awk '/^@/{next}/^#/{next}NF{print NR": "NF}' crates/pixtuoid-scene/sprites/default/foo.sprite — all NF values must match.
  • Or visualize packed rows: awk '/^@/{next}/^#/{next}NF{for(i=1;i<=NF;i++)printf "%s",$i;print " ["NF"]"}' foo.sprite.
  • Palette keys must be unique RGB (the per-agent recolor pass substitutes by RGB equality — see embedded_pack.rs header comment).
  • Reuse existing palette keys when possible; new keys go in crates/pixtuoid-scene/sprites/default/pack.toml [palette] section.

7. Layout integration checklist

When a sprite changes size:

  1. Update the decoration's footprint in the furniture_def(Furniture) geometry table in crates/pixtuoid-scene/src/layout/decor.rs — the single source of truth for footprint + visual, read by mask::build_walkable_mask (waypoints via approach::obstacle_footprint), approach.rs, and the z-sort. Do NOT hardcode a (w, h) at the mask stamp site; it would diverge from the table that stand_point/approach and render-centering read.
  2. A non-waypoint obstacle (plant, wall decor, pod decor) is likewise stamped from its FurnitureDef row via furniture_def(kind.furniture()).footprint, not an inline literal — so the same table edit covers it.
  3. Run cargo test -p pixtuoid-scene — the walkable_mask_is_fully_connected_across_buffer_sizes test (lives in layout/tests.rs, moved with the layout cluster) catches mask/sprite mismatches by trying multiple buffer sizes and asserting BFS reach from the door.
  4. If the connectivity test fails on the smallest buffer (96×70), the sprite is too big for that pantry. Add a _small variant + conditional pick (see pantry_counter_size in SceneLayout for the pattern).
  5. Update animation list in crates/pixtuoid-scene/sprites/default/pack.toml and embedded_pack.rs to include both foo.sprite and foo_small.sprite if you added a variant.

8. Live binary uses different binary than snapshot

./target/release/pixtuoid run uses the main binary. examples/snapshot uses its own binary. Both need cargo build --release --example snapshot (or cargo build --release --workspace --example snapshot) when iterating on snapshot — and cargo build --release is fine for the live TUI binary.

Self-critique checklist — MANDATORY before every SendUserFile

You must run this checklist explicitly before each SendUserFile in a beautify loop. State the result of each row in the message (✅/⚠️/❌). Fix any ❌ before sending; if you ship a ⚠️, call it out so the user knows the trade-off.

Check What it means
Stranger-ID If a stranger saw this with no context, would they identify each new element as the intended thing? Name each element explicitly.
Visually differs Diff is noticeable, not a sub-pixel tweak. If hash-identical to last attempt, you didn't actually rebuild.
Subzone width Each new sub-element ≥ 5 display cells wide (horizontal cells = buffer px; vertical cells = buffer px / 2 due to half-block).
Color distinctness New elements use colors distinct from immediate neighbours.
cargo test Connectivity test passes (cargo test --workspace --features pixtuoid-core/test-renderer).
--debug-walkable Rendered the overlay and visually checked no narrow / isolated walkable pockets near the new element.

Skipping this checklist defeats the point of the skill — the whole reason it exists is that past sessions shipped invisible / unverified changes.

Workflow when adding a NEW decoration

  1. Sketch the design as a list of cells per row (count exactly).
  2. Pick a palette: reuse pack.toml keys; only add new ones if necessary.
  3. Write the .sprite file; verify row widths with the awk command above.
  4. Add the include_str! line to embedded_pack.rs.
  5. Add the [animations.foo] block to pack.toml.
  6. Decide where it lives in the layout — add a Point placement in SceneLayout::compute.
  7. Add the obstacle footprint to build_walkable_mask (or a waypoint kind if it's interactive).
  8. Add a DrawableKind::Foo variant + paint_drawable arm if z-sorting matters.
  9. Run cargo test -p pixtuoid-scene — the layout/walkable-connectivity and painter tests this checklist relies on live there since the scene split (-p pixtuoid-core no longer runs any of them).
  10. Snapshot + iterate.

Recap of the pantry session (case study)

What we did: replaced the 20×8 pantry counter with a 32×10 design through 8 iterations:

  • v1–v3: Too crowded, 6 zones × 3 cells each = unreadable.
  • v4: Simplified to 3 zones (fridge / coffee / microwave-snacks) at 8/10/10 cells.
  • v5–v6: Tried adding detail (handle pairs, dividers). User said "no difference between v5/v6" — too subtle to read at scale.
  • v7: Discovered cargo build --workspace was not rebuilding the snapshot example, so v6 was never actually rendered. Fixed by adding build.rs.
  • v8: Color-coded for identity — solid WHITE fridge vs. dark coffee + dark microwave. Strong silhouette differentiation. (Honest self-critique: still looks washing-machine-y due to H-frame.)

Lessons: silhouette + color over detail, always rebuild the example explicitly, bump cols to 192 for the large variant.

执行两视角代码审查协议,涵盖PR合并前的差异审查和全代码库审计。通过隔离工作区并行调度差异化代理,基于统一因子分类进行验证与处置,确保合并安全及代码质量。
用户请求审查特定PR或分支 询问代码是否准备好合并 执行全代码库审查或审计 发布前或定期漂移检查
.claude/skills/two-lens-review/SKILL.md
npx skills add IvanWng97/pixtuoid --skill two-lens-review -g -y
SKILL.md
Frontmatter
{
    "name": "two-lens-review",
    "version": "1.1.0",
    "metadata": {
        "scope": "pixtuoid repo only"
    },
    "description": "Run pixtuoid's review protocol at either scope — the mandatory pre-merge DIFF gate (2+ differentiated-lens agents on the diff) or a whole-codebase AUDIT (subsystem × factor fan-out over the whole tree). Both draw ONE shared factor taxonomy + verify contract + disposition; they differ only in population and orchestration. Use before merging ANY PR, on 'review this PR\/branch' \/ 'is this ready to merge' (diff scope), or on 'whole-codebase review' \/ pre-release \/ periodic audit (whole-codebase scope). Encodes the five hard requirements, the escalation triggers, the adversarial finder→verify fan-out, and the disposition sweep the repo learned the hard way."
}

two-lens-review (v1.1) — the review gate + the whole-codebase audit

ONE protocol, two SCOPES over the SAME factors:

  • Diff scope — the repo's mandatory merge gate ("Don't merge a PR without the two-lens review" — workspace CLAUDE.md, "Things NOT to do"; PR #23 merged unreviewed with a critical path-traversal). 2+ differentiated-lens agents on the diff, disposition in the PR thread.
  • Whole-codebase scope — the periodic / pre-release AUDIT. A diff review and an audit scan DIFFERENT populations (fix-introduced-in-one-change vs existing code + cross-PR accumulation), so the audit is a SEPARATE pass, not a bigger PR review — but it runs the same factors, verify contract, and disposition.

The factors, the fill-in-the-slots lens briefs, the five hard requirements, the escalation triggers, AND the whole-codebase fan-out orchestration are all canonical in .github/prompts/pr-review.prompt.mdread it; fill from THAT file, never a paraphrase here (a copy here is the exact two-copies-drift class Lens 2 hunts — when the prompt gains a factor or trigger, a copy here silently lags). This skill owns only when to invoke each scope, how to orchestrate, and the red-flag self-checks.

When to use

Diff scope:

  • Before merging any PR (no exceptions — it's the gate, not a nicety; no size exemption — lens count can shrink, the gate can't).
  • User says "review this branch/PR", "two-lens review", "is this ready to merge".
  • After a fix round, to re-review the new head before merge.

Whole-codebase scope:

  • User says "whole-codebase review" / "audit the repo"; a pre-release or milestone sweep; a periodic drift/design-debt pass.
  • NOT the per-PR gate — that's the diff scope above.

Two agents MINIMUM (diff scope), lenses differentiated (a shared lens makes their misses re-correlate); lens/finder count scales with blast radius (or tree size). The quality lever is never the lens NAME — it's the change-specific checklist filled into the <...> slots, and the FACTOR COVERAGE (no family silently dropped).

Diff scope — how to run (orchestration)

  1. Isolate: the reviewed branch in a worktree (never the shared checkout — two sessions on one tree race on HEAD). Note path, branch, base sha.
  2. Dispatch both lenses in parallel, in the background, each a subagent with its brief from pr-review.prompt.md, <...> slots FILLED with this change's specific claims (a lazily-filled slot turns both reviewers generic). Give each the worktree path + git -C <path> diff <base>..HEAD. Then add an escalation lens for EVERY trigger the prompt's "When two lenses aren't enough" section matches on this change — that trigger→lens list is canonical THERE; don't restate it here (a copy would be the two-copies-drift class the header names — a new trigger added to the prompt must reach reviews without a manual mirror).
  3. Collect + verify: first read each lens's ACTUAL return before counting it toward the lens floor — a one-word summary or "test"/placeholder findings is a STUB (a dispatch, not a review); re-run that lens as a single focused agent (PR #455's a11y lens stubbed under an APPROVE-WITH-NITS aggregate; its re-run caught a real AA failure). Then for every MEDIUM+ finding, verify the premise yourself before coding a fix — reviewers have incomplete design context; check the crate's sharp edges first, and if a finding is deliberate design, REFUTE it by citing (or ADDING) the relevant CLAUDE.md sharp edge.
  4. Fold accepted findings into ONE review-round commit; record any reviewer-flagged plan-misses as plan-miss: lines in its message.
  5. Disposition sweep (shared, below).
  6. After a fix round, re-run the gates and watch the NEW head's CI; before merging, read the online bot review's LATEST COMMENT verdict (Findings: N)
    • mergeStateStatus — the review JOB passes even when it posts findings, so the check table alone can't gate (#448).

Whole-codebase scope — how to run (orchestration)

The full fan-out template (subsystem finders + whole-tree specialist sweeps → adversarial verify → dedup → ranked report) is the "Whole-codebase scope — orchestration" section of pr-review.prompt.md. In brief:

  1. Scout (main loop): map crates / LOC / churn / hot files → the work-list.
  2. Find: fan out subsystem finders (per crate/module cluster) + whole-tree specialist sweeps (arch-invariants, concurrency/liveness, security, drift — the aggregate-only lenses). Each finder carries the FULL factor checklist. Prefer a Workflow (pipeline per cell); degrade to parallel Agent fan-out.
  3. Verify each finding adversarially (default REFUTE; check sharp edges; construct a repro or refute) — a separate skeptic per finding, never the finder self-certifying.
  4. Dedup + rank survivors; ship a report ranked by corrected severity, grouped by factor family, KEEPING the refuted-as-deliberate list (coverage proof + sharp-edge context for the next agent).
  5. Disposition sweep (shared, below); end with the repo-wide stale-phrase grep == 0.

Scale to the ask: "any bugs?" → a few finders, single-vote verify; "thoroughly audit / be comprehensive" → larger finder pool, multi-vote adversarial verify, synthesis. Do the involved/cross-crate refactors it surfaces IN-ARC (design-debt lens); defer only genuinely big/refactor work to issues.

Disposition sweep (both scopes)

Drive every reviewer/finder/bot finding to exactly one terminal state: FIXED · REFUTED-with-trace (cite or ADD the relevant per-crate CLAUDE.md sharp edge — that keeps the next agent's context accurate) · ISSUE-FILED (no-deferral rule: only big/refactor defers). "Acknowledged, no action" is NOT a state — #40's ignored finding became a 0.4.1 blocker (#46). Diff scope: in the PR thread. Whole-codebase scope: in the ranked report. Sweep at the FINAL merge head — a finding that lands after the local lenses ran is the #283/#383 drop class; and check WHICH commit a bot re-flag was raised against before re-litigating (#316's were stale).

Red flags (you're about to skip the gate / short the audit)

Thought Reality
"It's a tiny/doc-only PR" The gate has no size exemption; run it (lens count can shrink, the gate can't).
"CI is green, that's enough" CI can't see design, blast radius, drift, or a deliberate-looking real bug.
"The reviewer said X, so fix X" Verify the premise first — check sharp edges; a wrong fix contradicts a design decision.
"One thorough agent is fine" Two differentiated lenses is the floor; one lens's blind spots go uncaught.
"I'll note the finding and move on" Every finding needs a terminal state — dropped findings become release blockers.
"The diff looks clean, we're done" (audit) The diff scope can't see drift accumulation / design-debt accretion / arch erosion — those need the whole-codebase pass.
"The verdict row shows N lenses ran" Count REAL returns, not dispatches — a stubbed lens under a clean aggregate hid a real AA failure (#455).
"The bot says it's still broken" Check WHICH commit it reviewed — #316's re-flags were raised against an old commit; five were already fixed (REFUTED-STALE).
"The finder found it, report it" (audit) Findings self-certify nothing — a separate skeptic must try to REFUTE each survivor first.
"Just unify the duplication" Some duplication is documented deliberate separation (per-source decoders, per-CLI targets); check the sharp edge before proposing a merge.

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-08 17:20
浙ICP备14020137号-1 $Гость$