From forgeplan-brownfield-pack
Validates hypotheses against multiple independent sources to assign confidence scores. Triggers — "extract hypothesis triangulator", "brownfield hypothesis triangulator", "/hypothesis-triangulator".
How this skill is triggered — by the user, by Claude, or both
Slash command
/forgeplan-brownfield-pack:hypothesis-triangulatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Validates hypotheses against multiple independent sources to assign confidence scores.
Validates hypotheses against multiple independent sources to assign confidence scores.
Hypotheses from C3 are initially drafted. Without triangulation, agents can't tell a strong hypothesis from a weak one. Docs end up mixing solid claims with guesses.
hypothesis artifacts in state drafted or inferred.Updated hypothesis artifacts with new confidence + triangulation_sources filled.
Additionally, triangulation reports:
git log --all --follow <file> — when did feature arrive?git log -p --grep '<term>' — was feature name ever mentioned in commit messages?git blame <file> <line> — who added this guard? When?docs/, README.md, *.md outside .forgeplan/.MarginalV2) → migration pattern.CARETD) → legacy unreliable.verified.| Evidence | Result |
|---|---|
| Domain Owner confirms | verified |
| ≥ 3 independent sources aligned, no contradicting | strong-inferred |
| 2 aligned sources, no contradicting | inferred |
| 1 source only, no contradicting | inferred (weak) |
| Contradicting sources | park for interview |
| No sources | remain drafted; escalate |
| Source rules out hypothesis | refuted |
queryFor a hypothesis, query each source in sequence.
aggregateApply aggregation rules to compute new confidence.
updateUpdate artifact state and record triangulation log.
escalateFor hypotheses that cannot be resolved (drafted → drafted after full query), add to interview packet via C7.
for each hypothesis in state drafted or inferred:
signals = []
# Query git
git_signal = query_git(hypothesis.observation)
signals.append(('git', git_signal))
# Query legacy docs
docs_signal = query_legacy_docs(hypothesis.subject)
signals.append(('docs', docs_signal))
# Query comments
comments_signal = query_code_comments(hypothesis.code_refs)
signals.append(('comments', comments_signal))
# Query naming
naming_signal = query_naming_patterns(hypothesis.code_refs)
signals.append(('naming', naming_signal))
# Aggregate
confidence = aggregate(signals)
# Update
hypothesis.confidence = confidence
hypothesis.triangulation_sources = signals
if confidence == 'drafted' and all signals empty:
park_for_interview(hypothesis)
hypotheses_triangulated / total_hypotheses: target 100%.hypotheses_verified_by_interview / hypotheses_parked: tracks DO engagement.confidence_distribution: healthy shape (e.g., 20% verified, 30% strong-inferred, 30% inferred, 20% parked).See references/triangulate-prompt.md for source-specific queries.
| Failure | Detection | Mitigation |
|---|---|---|
| Git repo shallow (squashed history) | Few commits in blame | Use available sources only; note limitation |
| Legacy docs stale | Docs reference removed code | Discount docs as tier-3; use for intent hints only |
| Comment is a lie | Comment says "do X" but code does Y | Favor code; flag discrepancy as a problem |
| Aggregation over-confident | All sources weak but aligned → claims strong-inferred | Require diverse sources (3 different categories), not 3 of same |
Hypothesis: "The duration=5 hardcoded for LO stevedores (FreightSeaParser.js:483) is a placeholder awaiting domain owner value."
Triangulation:
// TODO: Придумать лучшее решение added with the code → supports placeholder hypothesis.inferred. Park for Domain Owner: "What should duration be for LO stevedores?"Fixture: 10 hypotheses with known triangulation outcomes → expect ≥ 9 correct.
npx claudepluginhub forgeplan/marketplace --plugin forgeplan-brownfield-packProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.