Skip to content
Back to skills

Index Lookup

ASecurity

代码索引(.fe-index/)的统一查询入口:按代码路径自动判定该查前端页面索引还是后端模块索引,给出新鲜度校验与查询入口;无索引自动降级。触发:"查索引"、"这段代码有索引吗"、"改这个要查哪个索引"、"index lookup"。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 9, 2026
developmenttestingcode-reviewgitapifrontendbackend

Works with

  • api

Security analysis

A100/100

Scanned November 9, 2026

npx -y skills add HACK-WU/skills --skill index-lookup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Index Lookup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Index Lookup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hack-wu-index-lookup/badge)](https://www.skillsdirectory.com/skills/hack-wu-index-lookup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: index-lookup
description: 代码索引(.fe-index/)的统一查询入口:按代码路径自动判定该查前端页面索引还是后端模块索引,给出新鲜度校验与查询入口;无索引自动降级。触发:"查索引"、"这段代码有索引吗"、"改这个要查哪个索引"、"index lookup"。
---

# 索引查询(index-lookup)

## 概述

**目的**:让消费方(`code-review` / `debug` / `product-manager` / `expert-team` / `code-survey` …)用**一次读表**拿到"这段代码该查哪个索引、是否新鲜、接下来查哪张表",把"选前端还是后端索引"从判断变成**确定性的路径匹配**。

**功能**(**纯文档 skill:本 skill 没有脚本**,"判定"= 按下面的工作流读登记表):
- **登记表驱动**:读 `.fe-index/INDEX.md`(唯一事实源,前端 + 后端各一行)→ 拿代码路径与各行「根目录」做**最长前缀匹配** → 得到查哪端、哪个 `slug`
- **新鲜度粗判**:比对条目 `meta.json` 的 commit 与该仓库 HEAD;不一致不代表过期 → 指向该端 provider 的 `--check` 做精确判定
- **查询入口路由**:按类型指出查哪张表(前端 `apis/` `pages/`;后端 `tables.md` `modules/`)
- **缺失即降级**:无登记表 / 路径未命中 / git 不可用 → 明确告知并回退原流程(grep / 读码),**不阻塞、不臆造**

**使用场景**:
- 接到改动任务(review / debug / 影响分析)时,先确认"要不要查索引、查哪个"——**不要先猜**
- 新会话接手仓库,想知道"这个仓库有没有索引、覆盖哪些范围、是否新鲜"
- 用户问"改这个接口影响哪些页面"、"改这张表影响哪些模块"(← 本 skill 路由,查表在 provider 产物里)

---

## 定位

| 邻接能力 | 它做什么 | 本 skill 做什么 |
|---|---|---|
| `frontend-index` / `backend-index` | **provider**:建库 / 校验 / 查询自己那一端(产物格式、退出码、查询口径的 SSOT) | **消费侧门面**:只做"选哪个 + 指向查询入口";查询口径**一律引用 provider 文档,不复制** |
| `expert-lookup` / `solution-lookup` / `ki-memory-lookup` | 资产复用家族(专家包 / 方案 / 记忆) | 同一模式的**代码结构层**门面 |
| `grep` / LSP | 随机访问(搜到什么算什么) | 索引 = **穷举反查的缓存**(被依赖 / 表反查 / 接口反查);本 skill 负责把"要不要用这个缓存"判明白 |

---

## 核心原则

1. **登记表是唯一事实源**:所有应用都在 `.fe-index/INDEX.md` 里(前端 + 后端各一行);"选哪个"= 路径最长前缀匹配,**不靠猜、不靠调用方各自实现**
2. **新鲜度不擅下结论**:只比对 `meta.commit` 与 HEAD;不一致**不代表过期**(可能只是范围外提交)→ 说"需 `--check` 确认"并指向该端命令;**精确判定归 provider**(带 scope 的 diff)
3. **缺失即降级**:无登记表 / 路径未命中 / git 不可用 → 明确告知 + 回退原流程,**绝不臆造结论**
4. **口径不复制**:查询入口、退出码、产物结构由两个 provider 的文档维护;本 skill 只回答"去哪张表"

---

## 工作流

**四步,全部是读文档,不跑任何脚本**(唯一该跑的是第 3 步里的 provider `--check`——它需要 git 做范围 diff):

1. **找登记表**:**`{项目根}/.fe-index/INDEX.md`**——项目根 = `git rev-parse --show-toplevel`(非 git 仓库则逐级向上找 `.git`);**落点约定固定在这里,不是应用子目录**。找不到再向上 ≤3 层兜底(兼容旧布局)
2. **选条目**:拿"要改的路径"与表里每行的「根目录」做**最长前缀匹配** → 得到 `类型`(frontend / backend)与 `slug`
   - 相对根目录的基准 = **`.fe-index/` 的上一级**(即仓库根)——**该口径由两个 provider 的登记表规范维护,此处仅为消费方的读数提示**
   - **多个路径**(review 的 diff 常有几十个文件):逐个匹配即可;同一端命中多条时选**前缀最长**的那条
3. **看新鲜度**:读该条目 `meta.json` 的 `commit`,与 `git rev-parse HEAD` 比——**不同不代表过期**(可能只是范围外提交)→ 有疑问就跑该端 provider 的 `--check` 定论
4. **查表**:按类型读对应产物(后端 `tables.md` / `modules/*.md`;前端 `apis/*.md` / `pages/*.md`)

### 命中之后(按 kind 走两条路,细节见 provider 文档)

| kind | 校验(**必做**) | 查什么 | 典型问题 |
|---|---|---|---|
| frontend | `scan_frontend.py --check --index …` | `apis/*.md` → 页面(接口反查)|`pages/*.md` → 接口 / 依赖组件 | 改这个接口影响哪些页面 |
| backend | `scan_backend.py --check --index …` | `tables.md` → 模块(表反查)|`modules/*.md` → 被依赖 / 事件命令耦合 | 改这张表影响哪些模块 |

### 跨端问题(两端索引都在册时)

"后端改接口 → 前端哪些页面在用":
后端 `index.md` 的「模块 → 挂载前缀」 × 前端 `apis/*.md` 的接口路径(**前缀包含匹配**,`@Controller()` 无前缀的模块用「方法路径」提示)——口径见 `backend-index/SKILL.md` 的「被其它 skill 集成」。

### 降级链(按序执行,绝不硬撑)

1. **无登记表** → grep / 读码按原流程;若这类问题会反复出现,再决定建索引
2. **命中但 `--check` 报过期(退出码 6)** → 先问用户是否重建(一条命令);不重建则读表时**明确说明"基于旧 commit"**
3. **路径未命中** → 该仓库确实没覆盖这段代码(范围外)→ 扩大 `--include` 重建,或直接 grep

---

## 反模式

- ❌ **不看登记表就断言"这个仓库没索引"**:`.fe-index/` 是隐藏目录,必须读 `INDEX.md`(含向上 ≤3 层)
- ❌ **拿"commit 不一致"直接说过期**:范围外提交也会不一致 → 以 provider 的 `--check` 为准
- ❌ **把本 skill 当查询器**:它只负责"选哪端 + 指向入口";真正的查表在 provider 产物里
- ❌ **索引命中就不读代码**:索引给"去哪看",最终结论仍要回源码——provider 文档同样要求
- ❌ **在消费方(review/debug 等)里复制"选哪端"的逻辑**:会让口径漂移 → 统一调本 skill

---

## 行为边界

- **只读、无脚本**:不改索引、不改代码、不产生产物(建库与校验都由 provider 完成)
- 只认 `.fe-index/`(向上 ≤3 层查找,与 provider 同口径);索引放在自定义位置时按同一约定人工确认
- **不做语义判断**(不知道"这次改动是否只影响某页面"),只做路径 → 条目匹配
- 不替代 provider 的 `--check`:commit 粗判 ≠ 精确判定

---

## 集成(消费方清单 · SSOT)

| 消费方 | 接入点 | 用法 |
|---|---|---|
| `code-review` / `code-change-impact` | 拿到 diff 后、判影响面前 | 读 `INDEX.md` 匹配改动文件 → 按类型查被依赖 / 表反查 / 页面反查 |
| `debug` | 定位根因前 | 用索引缩小搜索域(模块 / 页面),再在命中范围内读码 |
| `product-manager` | M2 体验走查 / M3 缺功能推演前 | 用索引拿**页面地图**(前端)或**模块地图**(后端)作基线 |
| `expert-team` | 建专家前 + 建完后 | 建前拿模块边界 / 依赖;建后重跑 provider 的 `--emit-tree`(专家列会自动出现) |
| `expert-lookup` | 未命中专家资产时 | 用索引拿模块边界 / 依赖 / 数据表作兜底线索(专家资产未覆盖的模块) |
| `code-survey` / 设计前调研 | 调研开始时 | 登记表命中则消费,未命中再决定是否建库 |
| `module-teach` | 讲解某模块前 | 读 `modules/{slug}.md`(后端)或 `pages/*.md`(前端)锁定范围与依赖 |
| `frontend-walkthrough` | 阶段 1 入口穷举;阶段 1.5 挖隐藏缺陷 | 拿 `pages/*.md`(页面清单 + 接口/组件)省一次全站搜索;拿 `apis/*.md` 反查页面依赖的接口充当"异步源"清单 |
| `e2e-testing` | 阶段 1 拆解旅程 | 用「页面 → 接口」与「模块 → 表」挑关键路径与跨组件终态校验点 |

> 集成方**必须自行降级**:无索引时按原流程走,不阻塞、不报错。

---

## 更多资源

- 查询口径与产物结构(SSOT):`frontend-index/SKILL.md`、`backend-index/SKILL.md` —— 本 skill **不复制**它们的规则
- 登记表列结构:`应用 | 类型 | slug | 根目录 | 规模 | commit | 生成日期`(两个 provider 共同维护)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.