关于 adversarial-tanstack
adversarial-tanstack 是用于审查 TanStack Start 和 TypeScript 变更的合并门禁技能。它由单个盲审子 Agent 按规则给出严格的通过或失败结论,不负责修复代码或提供建议式反馈。
主要功能
- 01单个子 Agent 盲审
- 02失败即拦截的判定
- 03安全与客户端/服务端边界规则
- 04检查当前 TanStack Start API
- 05为失败规则列出具体修复项
适用场景
- 01合并前检查 TanStack Start 变更
- 02独立审查 Agent 编写的代码
- 03审计客户端/服务端边界安全
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill adversarial-tanstack安装后在 Claude Code 中输入/adversarial-tanstack确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
gotchas.mdmetadata.jsonassets/templates/verdict.mdreferences/_sections.mdboundary-client-env-prefix.mdboundary-env-server-context.mdboundary-loader-no-secrets.mdreviewer-prompt.mdsec-auth-at-handler.mdsec-csrf-with-custom-start.mdsec-no-account-enumeration.mdsec-private-cache-control.mdsec-session-cookie-flags.mdserverfn-current-api.mdserverfn-post-mutations.mdserverfn-static-imports.mdserverfn-validate-input.mdssr-deterministic-render.mdssr-per-request-instances.mdssr-suspense-for-loader-data.mdtscfg-erasable-syntax.mdtscfg-no-verbatim-module-syntax.mdtscfg-strict-baseline.mdtypes-exhaustive-switch.mdtypes-justified-nonnull.mdtypes-no-escape-hatches.mdtypes-parse-external-data.md详细介绍
对抗式 TanStack 门禁
用于 TanStack Start + TypeScript Web 应用变更的合并门禁——这是一个通过/不通过门禁:由单个盲审子 Agent 带着对抗性审查要求,根据本门禁的规则评判工作;只有每条规则均为 PASS 或 N/A 时,工作才算通过。本技能只给出裁定,绝不修复工作。
规则基于 @tanstack/react-start 1.168+(v1 RC,2026 年 7 月)以及 TypeScript 5.8–6.x 的语义。
适用时机
- TanStack Start 功能、路由或服务端函数即将合并,需要客观的 PASS/FAIL,而非建议性反馈。
- Agent(Claude、Codex)编写了 Start 应用代码,你希望进行独立检查,避免作者偏见导致审核流于形式。
- 差异涉及客户端/服务端边界——环境变量、加载器、服务端函数、身份验证——此处错误的 PASS 会导致机密泄露或未经授权的数据访问。
- 根据当前 v1 RC API 范围审查现有 Start 代码库文件集(过时的
.inputValidator()、已移除的createServerFileRoute)。
不要用于非 Start React 应用(大多数 serverfn/boundary/ssr 规则会返回 N/A,门禁会退化为 TypeScript 检查),也不要在用户想要解释和重构而非裁定时使用。
审查流程
严格按以下步骤执行——本门禁的价值在于每次审查都采用相同流程。
- 确定目标。 明确要审查的内容(差异、文件集或 PR),并记录 ref/路径,确保审查针对明确且固定的目标。目标路径始终包含
tsconfig.json、src/router.tsx和src/start.ts(如果存在)——即使差异未涉及这些文件,若干规则也需要依据它们来判定。 - 加载规则。 阅读 references/_sections.md 和
references/中的每个规则文件(所有boundary-*.md、serverfn-*.md、sec-*.md、ssr-*.md、types-*.md、tscfg-*.md文件)。 - 编写审查者提示词。 根据规则和目标填写 references/reviewer-prompt.md。组合后的提示词必须完全自包含——审查者看不到任何对话历史,因此不得引用提示词以外的上下文。
- 派发一名盲审者。 启动单个 Task 子 Agent,其全部输入必须是组合后的提示词——不得提供对话上下文,也不得附带评论。
- 失败即关闭。 审查者的结构化输出就是裁定——不进行合并步骤。只有每条规则均为 PASS 或 N/A 时,总体裁定才为 PASS;任意一条 FAIL 都会导致门禁失败。绝不取平均、权衡严重程度或豁免规则——“轻微”的 FAIL 仍然是 FAIL。
- 生成裁定。 填写 assets/templates/verdict.md。若为 FAIL,将审查者的“通过所需的缺失项”建议汇总到修复列表中,每项注明位置,并按类别重要性排序。每条最终结果为 FAIL 的规则都必须出现在修复列表中,并给出足够具体、可直接执行的变更——如果审查者的建议只是重述违规内容,生成裁定前应根据规则中的 Correct 示例推导修复方案。
如果同一条规则在针对未变更目标的多次重新审查中反复改变裁定,或者人工阅读证据后推翻裁定,这说明规则存在可判定性缺陷——应在 gotchas.md 中记录并细化规则;不得推翻门禁。
裁定格式
审查者应针对每条规则返回:PASS | FAIL | N/A、证据(file:line 或引文——PASS 和 FAIL 都必须提供证据),以及每条 FAIL 对应的修复方案,该方案应用后应能使规则转为 PASS——写明具体变更及其位置,绝不能只重述违规内容。最终报告遵循 assets/templates/verdict.md。
规则类别
| # | 类别 | 前缀 | 涵盖内容 |
|---|---|---|---|
| 1 | 客户端/服务端边界 | boundary- | 仅在服务端上下文中使用环境变量、加载器同构性、公共前缀规范 |
| 2 | 服务端函数与路由 | serverfn- | 输入验证器、变更操作使用 POST、当前 v1 RC API、静态导入 |
| 3 | 身份验证与安全 | sec- | 在处理程序中进行身份验证、使用自定义启动配置处理 CSRF、缓存隐私、Cookie 标志、防枚举 |
| 4 | SSR 与数据加载 | ssr- | 为每个请求创建路由器/QueryClient、对加载器数据使用 useSuspenseQuery、确定性渲染 |
| 5 | 边界处的类型安全 | types- | 使用架构解析外部数据、穷尽式 switch、逃生口审计、非空断言 |
| 6 | 编译器配置 | tscfg- | strict + noUncheckedIndexedAccess、erasableSyntaxOnly、关闭 verbatimModuleSyntax(Start 专用) |
参考文件
| 文件 | 描述 |
|---|---|
| references/reviewer-prompt.md | 供盲审员使用的自包含提示词模板 |
| assets/templates/verdict.md | 评审报告模板 |
| references/_sections.md | 类别定义与排序 |
| metadata.json | 版本与来源引用 |