소스 정보
- 저장소
- QianJinGuo/wiki
- 최근 소스 활동
- 2026년 8월 15일 08:44
- 감지된 SKILL.md 언어
- 영어
- 스타
- 1
- 포크
- 1
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/QianJinGuo/wiki --skill wiki-entity-metadata-extraction명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | wiki-entity-metadata-extraction |
| description | Use when extracting wiki entity vxc scores and dates. |
| category | wiki |
Extract per-entity metadata — title, vxc score, publish date, rating — for newly-committed wiki entities, reliably across CJK filenames, multi-source entities, multi-entity commits, and batch windows. This is the extraction engine behind status reports (wiki-inbox-scan-v2 cron), audits, and quality passes.
title | vxc | publish_date for entities added in a time window.CJK-safe new-file list (never plain git log | grep entities/ — octal-quoted CJK lines get dropped):
git log --since="24 hours ago" --diff-filter=A --name-only -z --format= -- 'entities/*.md' | tr '\0' '\n' | grep '^entities/'
-z --format= yields a pure NUL-separated filename stream; no core.quotepath needed.
Read log.md WHOLE, never grep-filtered by date pattern. Score facts live in continuation lines that contain no date: the - 高价值:... line and - N 篇 domain-reject 入档:... line sit under a dated ## header but themselves have no date. grep "2026-08-1[34]" log.md returns 29 lines and silently drops both score-bearing lines → 0 score facts. Open the file with Python open(..., encoding='utf-8', errors='replace') and iterate every line. (read_file misdetects log.md as binary — same workaround family.)
Per entity, parse frontmatter: title, created, rating, and sources: — which may be inline array (sources: [raw/articles/slug]), block list (sources:\n - raw/articles/a\n - raw/articles/b), carry .md suffix, or full raw/articles/ prefix. Normalize each to a bare slug with a two-pass resolver: first try same-line inline-array regex ^sources:\s*(.+)$, then a dedicated block-list regex ^sources:\s*\n\s*-\s*(raw/articles/[^\s\]]+) — then strip, in order: sources: prefix, - list marker, leading [, raw/articles/ prefix, trailing ], trailing .md. (All four traps below are verified: each stripping step is mandatory, in that order.)
vxc priority chain (stop at first hit):
vxc=NN, or (vxc=NN) in parens, or NEW(NN)/RAW(NN)/MERGE(NN) without vxc= — all are that entity's score. Regex: v[×x]c=(\d+) or (?:NEW|RAW|MERGE|SUPP)[((](\d+).(prompt-to-harness vxc=72 / handroid vxc=56 / file-upload-multimodal vxc=49)): match each name (vxc=|NEW[(]) pair against the entity basename norm — re.sub(r'[^0-9a-z\u4e00-\u9fff]','',name.lower()) containment. Never blind-grab the first vxc= in the subject.vxc 49-81) and log.md only summarizes (11 passing (vxc 49-81)), the per-article scores live in the batch run's own /tmp files. Try in order: ingest-list.json (the ingest ledger: list of dicts {slug, fname, vxc, url} — key by fname; matched 22/27 entities directly on the 2026-08-15 round), then score_results_MMDD.json (API LLM output: [{fname, title, value, confidence, stars, vxc, reason}]) and reuse-scores.json (reused rss-feed-scan saved scores: [[source, fname, vxc, stars], ...]). If both jsons miss an entity, the batch log.md 新入档 URL(评分一次…) block lists per-URL (vxc=NN INGEST) lines — last-resort recovery (recovered voiceeq 56 when ingest-list/reuse both lacked it). Resolve each entity's sources: raw slug and key by exact fname — no normalization needed. Verified 39/39 coverage on a 25-NEW + 14-single-entity window (2026-08-15). The batch log line 复用 rss-feed-scan 已存分数 N 篇 is the tell that reuse-scores.json exists. Details: references/batch-tmp-artifact-score-recovery.md.^(?:vxc|score_vc):\s*(\d+) (often absent).Publish date priority: raw frontmatter ^(?:source_published|publish_date|publish_time|published): → entity frontmatter publish_date: (verified: AML entity carries a real publish_date: 2026-08-12 while its raw has none) → body ^Published Time: → entity created: with ~ prefix (ingestion date, not original).
Report coverage: print VXC_COVERAGE=N/M — a low ratio tells you the batch window has unscored entities (normal for 39+-entity recovery rounds where log.md only records the top 5 in the 高价值 line).
高价值 and domain-reject continuation lines carry no date. Always read the whole file.高价值: prefix contaminates the norm key → 高价值重新审视交叉熵lmloss fails containment. Strip the prefix (re.sub(r'^.*?高价值[::、]?\s*', '', line)) before regex-extracting pairs.entities/memory-for-llms-tsinghua-taxonomy-2026 has sources: with TWO raws: first raw (paper) has no score in log.md, second raw (mozhi reprint) matched RAW-tier vxc=35 — but the entity is NEW vxc=64. Same for stealing-reasoning-traces-proprietary-llm-apis (raw 30 vs entity 64). Match the entity's own basename against entry facts before any raw slug; a raw-tier score is the wrong answer for a NEW entity.%h vs %H hash mismatch silently breaks single-entity detection. Building the per-commit file-count map with --format=%H (full hash) but comparing against %h (short hash) from the subject line → every lookup misses → is_single always True → the FIRST vxc= in a multi-entity subject is assigned to every entity (handroid got 72 instead of 56; file-upload 72 instead of 49). Use %h in BOTH the map key and the comparison.(vxc=56, NEW entity) (parens, after CJK text), — vxc=64 NEW entity + raw, InstEmb NEW(64). The vxc= regex alone misses NEW(64) style.600倍加速视频生成 (56) vs entity title 600 倍加速 720p 视频实时生成 — 单卡 14B 模型推理优化; Linux内核漏洞 (64) vs 科维斯 AI(Corvus AI)— TencentOS 内核漏洞研究智能体首秀. Known-upgrade map (log.md 2026-08-13 domain-reject line → 08-14 expand/rescue entities): 600倍加速视频生成→video-generation-600x-acceleration-single-gpu-2026 (56), Linux内核漏洞→corvus-ai-tencentos-kernel-vulnerability-agent-2026 (64), COVERT→covert-vlmaas-covariant-obfuscation-eccv-2026 (56), Handroid→handroid-* (56, also in commit subject). Report these as vxc=NN (reject-line proxy).scripts/extract_new_entities.py — the full validated extraction script (v5, 2026-08-14). Usage: python3 extract_new_entities.py [--since "24 hours ago"]. Prints TOTAL_NEW, VXC_COVERAGE, and a TSV sorted by vxc desc. Run from the wiki root (cd ~/wiki first — the script chdirs itself, but git must run inside the repo).OVERRIDES dict at the top for reject-line proxy scores (verified mappings only — see pitfalls).references/batch-tmp-artifact-score-recovery.md — includes the exact fname-keyed lookup snippet and artifact schema inventory.v[×x]c[=:]\s*(\d+)## [date] TYPE | title | slug | vxc=NN): match the entity's own basename slug FIRST, then each raw slug. Entity-slug-first is critical for multi-source entities (see pitfalls).高价值 line: strip the 高价值: prefix, then match each title (vxc=NN).domain-reject 入档 line: proxy scores for entities later upgraded from domain-rejected articles. Titles here are compressed — containment usually fails; use the known-upgrade map (see pitfalls).腾讯Omega AI BI (vxc=72) in the 高价值 line never containment-matches the entity title 腾讯Omega:下一代"AI BI"的答案? (norm interleaves 下一代 between Omega and AI BI). When the 高价值 line names an entity your matcher missed, take the log.md value directly.python3 -c containing certain string ops got blocked with a bogus "cannot restart or stop the gateway" error, and a heredoc python3 - <<'EOF' was blocked the same way. Cron-safe path is always write_file /tmp/extract.py + python3 /tmp/extract.py — never inline one-liners, never heredocs, never pipe into a second interpreter.write_file /tmp/extract.py can return a warning "modified by sibling subagent" — parallel cron runs share /tmp and both pick the same generic name, so the other run's script gets overwritten (or yours does). Use a job-unique suffix: /tmp/extract-<job>-<MMDD>-<HHMMSS>.py (verified 2026-08-15: mv to a timestamped name before running). Memory rule: 写/tmp 用 job 唯一后缀.sources: resolver — leading [ and - marker traps (verified 2026-08-14, 59-entity window): a naive resolver that strips sources:/raw/articles//.md but NOT the leading [ builds raw/articles/[raw/articles/slug.md → every raw lookup silently misses → all vxc/date render — while titles look fine (all-— table with valid titles is the signature). Worse, the same-line regex ^sources:\s*(.+)$ with \s* GREEDILY CROSSES THE NEWLINE into block-list items, capturing - raw/articles/slug including the - list marker — which then fails the startswith('raw/articles/') check unless you also strip ^-\s+. Mandatory strip order: sources: prefix → - marker → leading [ → raw/articles/ prefix → trailing ] → trailing .md. Two-pass (inline regex, then block-list regex) plus all six strips fixed 59/59.ingested: in the frontmatter (verified 2026-08-14): a fallback like re.search(r'(20\d{2}[-/.]\d{1,2}[-/.]\d{1,2})', content[:3000]) — where content[:3000] INCLUDES the YAML frontmatter — matches ingested: 2026-08-13 instead of a real publish date. Signature: every raw in a batch reports the SAME date, equal to the ingest date (e.g. all 2026-08-13/14). Fix: extract source_published|publish_date|publish_time|published keys from raw frontmatter FIRST (55/59 raws in the observed window carry a real one); only then run a body fallback that starts AFTER the closing ---. Don't conclude raws lack dates until you've grepped all four frontmatter keys..md suffix (verified 2026-08-14): copying git log -z output into a Python list by hand produced 端到端交付20像工业流水线一样的生产和交付任务.md when the real file is ...需求.md → FileNotFoundError-style miss, and the entity's title rendered as 端到端交付20...任务.md (basename fallback, .md still attached). If a title ends in .md, the entity file wasn't found — flag it. Generate the file list inside the extraction script via subprocess git log (or os.path.isfile-verify every entry) instead of hand-copying CJK names.7f1ed21fe wiki-inbox-scan: 25 NEW entities + 3 MERGE ... vxc 49-81 gave no per-entity vxc, and log.md only said 11 passing (vxc 49-81) — yet all 25 scores were in /tmp/score_results_0815.json (API-scored 15 candidates: 8 NEW entities + 3 merges, with 4 rejects listed too) and /tmp/reuse-scores.json (73 reused saved scores, 17 of which became NEW entities). The rejects' scores (baseten 27 / 最有意思ai音乐 35 / 根治ai音乐 32 / 苦等两年chatgpt 48) confirmed which candidates did NOT become entities. Match by raw fname; the batch's raw files sit on disk with source_published intact, so dates come along for free. Always spot-verify a surprising top score straight from the json (v=9 c=9 s=5 confirmed 腾讯PCG 81) — do not trust the assembled table blindly.score_results_*.json vs reuse-scores.json vs candidates.json schemas differ: API output is a list of dicts with vxc; reuse-scores is [source, fname, vxc, stars] tuples with NO reason/title; candidates.json is fname+source ONLY (no scores — it's the pre-scoring candidate list). classify-results.json holds premove/genuinely_new splits. Build one fname → (vxc, source) index from the first two and ignore the others for scoring. (Full inventory: references/batch-tmp-artifact-score-recovery.md.)