fabric drift validates only declared edges — card-vs-source divergence is undetectable (37% of cards affected here)
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
調査の方向性
Start with agents/fabric/lib/drift.sh and trace the stale-edge check, then inspect enrich.py and its detect_ts_js_imports detector to understand how declared and source-derived edges are represented. Run the detector and fw fabric drift on a representative card/source pair, including missing and extra edges. Done means drift reports card/source divergence and tests cover both directions; severity and coverage-ratchet behavior need an upstream design decision.
索引モデルが issue の本文から書いたものです。
説明
Context
- Framework version: 1.6.258
- Project: 050-email-archive (shared-tooling mode)
- Reported: 2026-09-25T06:34:48Z
Description
Field report from 050-email-archive (Pen). Local task T-2245. Surfaced by a real 185-day outage (T-2243).
THE INVARIANT THAT IS NOT HELD
agents/fabric/lib/drift.sh's stale-edge check asks, for each edge a card DECLARES, whether the target resolves on disk (_resolves_on_disk). Nothing asks whether the card's declared edges still match what the source actually imports. An import present in the code and absent from the card is invisible to drift. So a card can be arbitrarily incomplete — or frozen years ago — and 'fw fabric drift' reports clean indefinitely.
CLAUDE.md describes the Component Fabric as 'the source of truth for structural relationships'. It cannot currently detect that it has drifted from the code it maps.
MEASURED HERE (2026-09-25)
Using the framework's OWN detector — enrich.py detect_ts_js_imports — run against the same source file each card describes:
240 of 643 JS cards declare fewer edges than their source actually imports.
fw fabric drift reports 'unregistered: 0, orphaned: 0, stale: 0' across all of them.
Spot-checked to rule out a path-form artifact: scripts/_add-jp-to-cohort-events.js declares exactly one edge (microsoftTokenService.js) and contains zero mention of src/database/models in any form, while the source genuinely requires it (resolves via index.js). The divergence is real, not a spelling mismatch.
WHAT IT COST
Commit da56fd12 moved four service files into services/legacy/ as pure renames with no content change and updated no require path. Three whole-archive import entry points threw MODULE_NOT_FOUND on their first require for 185 days. All three HAD fabric cards WITH depends_on edges — but none of those edges named the importer that broke, and the declared targets (config files) still existed, so drift stayed green the entire time. Card last_verified: 2026-03-18, six days before the breaking commit.
THIS IS NOT A DETECTOR BUG
detect_ts_js_imports is correct and already shipped (T-552, added precisely because a TS project showed 0 edges). Run directly on the broken file it returns the right answer. The gap is that 'enrich' is a manual step with no staleness signal, and 'drift' — the verb whose job is detecting drift — does not include card-vs-source divergence in what it checks.
Strong suspicion this is also the root of the recurring 'N of M fabric cards have no edges' audit warning: same cause, extreme case.
SUGGESTED FIX
Add a fourth section to 'fw fabric drift', alongside unregistered / orphaned / stale: divergent — cards whose declared edges differ from what the enrich detectors derive from the same source. The detectors already exist and already work; this is wiring them into the read path rather than only the write path. Effectively 'enrich --dry-run' surfaced as drift.
Two design points worth deciding upstream rather than by a consumer:
- Direction. Missing edges (code imports X, card omits it) are the dangerous case. Extra edges (card declares X, code no longer imports it) are also drift but lower severity — the existing stale check catches only the subset where X was also deleted from disk.
- Severity. If divergence were WARN rather than FAIL, a project like this one would start at 240 findings. A coverage-percentage metric with a ratchet may be more usable than a per-card finding.
NOT PATCHED LOCALLY. A worker was running concurrently in this project and the governing mandate forbids opening a structural change alongside one. Reporting first, patching after.
Reported via fw upstream report from field installation
- 主要言語
- Shell
- スター
- 16
- フォーク
- 6
- 平均マージ
- 6時間 24分
- マージ済み PR(30日)
- 5
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DimitriGeelen/agentic-engineering-framework のほかの issue
-
area:cli bug severity:low status:fixed-on-bleeding-edge triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
DimitriGeelen/agentic-engineering-framework#100 · コメント 5 件 ·
-
area:cli bug severity:medium status:fixed-on-bleeding-edge triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
DimitriGeelen/agentic-engineering-framework#97 · コメント 5 件 ·
-
area:context bug severity:low status:fixed-on-bleeding-edge triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
DimitriGeelen/agentic-engineering-framework#96 · コメント 5 件 ·
-
area:docs bug severity:medium status:in-progress triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
DimitriGeelen/agentic-engineering-framework#95 · コメント 4 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
DimitriGeelen/agentic-engineering-framework の issue をすべて見る
似ている issue
-
source:reader type:enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
stephrobert/blog-roadmap#115 ·
-
Python Volcengine provider returns failures instead of raising them対応中かも @Ricardo-M-L が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
agent-infra/sandbox#248 ·
-
chore priority:low size:S
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
celo-org/celopedia-skills#98 ·
メンテナーはふだん 1 日以内に返信
-
Git for Windows shouldn't be locked on their `.windows.1` versions対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンgit windows
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
jenkins-infra/packer-images#3179 ·
メンテナーはふだん 1 日以内に返信
-
ready-for-pr
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
kunchenguid/firstmate#7679 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信