@chrono-meta/fh-gate 2.5.1 โ 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CATALOG.md +41 -0
- package/CLAUDE.md +45 -10
- package/README.ja.md +4 -3
- package/README.ko.md +4 -3
- package/README.md +4 -3
- package/README.zh.md +4 -3
- package/docs/USER_GUIDE.md +118 -0
- package/docs/platform_sustainability.md +174 -0
- package/knowledge/shared/GLOSSARY.md +26 -1
- package/knowledge/shared/harness-core/fh_detail_protocols.md +44 -2
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +117 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +20 -0
- package/package.json +5 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +25 -0
- package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +44 -0
- package/plugins/fh-meta/skills/fh/SKILL.md +31 -0
- package/plugins/fh-meta/skills/goal-quench/SKILL_detail.md +1 -1
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +7 -1
- package/plugins/fh-meta/skills/harvest-loop/SKILL.md +32 -0
- package/scripts/adapters/fixtures/mate_agent_boundary_known_negative.md +31 -0
- package/scripts/adapters/fixtures/mate_agent_boundary_known_positive.md +56 -0
- package/scripts/cluster_capability_scan.sh +18 -5
- package/scripts/digest_landing_check.sh +39 -8
- package/scripts/package_coverage_check.sh +9 -0
- package/scripts/selfcheck.sh +29 -1
- package/scripts/test_satellite_publish_gate_lanes.sh +0 -339
|
@@ -90,7 +90,12 @@ Identity marker: every greeting response opens with **๐ฟ๏ธ then an identity-r
|
|
|
90
90
|
**Branch test (mechanical โ local state only)**: returning = session files exist (any `tracks/**/session_*.md` or `tracks/_meta/*.md` beyond `.gitkeep`) **OR** mapped project tracks exist (`tracks/{name}/` dirs โ **any underscore-prefixed dir doesn't count** (`tracks/_*`, general rule not a closed list: `_meta`/`_audit`/`_contrib`/`_chamber`โฆ); covers mapped-but-not-yet-synced users). **Never infer the branch from git log or CATALOG residue** โ a fresh clone carries full commit history but zero session files: it is a NEW install (origin: fresh-clone sonnet sim rendered the returning menu off commit messages, `fh_signal_2026-06-11` FP8).
|
|
91
91
|
|
|
92
92
|
**New user** (neither condition holds โ fresh clone/install): 2-door starter, never the returning menu โ
|
|
93
|
-
> ๐ฟ๏ธ **Welcome to FH.** *Looks like you're new here!
|
|
93
|
+
> ๐ฟ๏ธ **Welcome to FH.** *Looks like you're new here! What would you like to do?*
|
|
94
|
+
> - **โ Create your first project** โ guided
|
|
95
|
+
> - **โก Map an existing project**
|
|
96
|
+
> - **๐ Read the guide / ask me anything**
|
|
97
|
+
>
|
|
98
|
+
> *โฆand I can run `/install-wizard` to finish initial setup.*
|
|
94
99
|
|
|
95
100
|
- **โ Create your first project** โ Step 3-0 (guided: name โ `tracks/` โ `.claudeignore` โ cascade)
|
|
96
101
|
- **โก Map an existing project** โ `auto_project_mapping.md`; after a successful mapping, offer the ยง6 Full-Harness promotion prompt
|
|
@@ -100,8 +105,33 @@ Identity marker: every greeting response opens with **๐ฟ๏ธ then an identity-r
|
|
|
100
105
|
> ๐ฟ๏ธ **Welcome to FH.** *forge-harness is a tool hub for rapidly setting up Claude Code projects. It supports plugin recommendations, project setup, and harness diagnostics. What would you like to work on?*
|
|
101
106
|
|
|
102
107
|
**Returning user** (branch test above) โ open with the fixed 4-door menu (the doors are stable; the contents are composed live). A summary copy lives in CLAUDE.md ยงActive Onboarding โ keep branch tests and door labels in sync when editing:
|
|
103
|
-
> ๐ฟ๏ธ **Welcome back to FH.** *What would you like to start
|
|
108
|
+
> ๐ฟ๏ธ **Welcome back to FH.** *What would you like to start?*
|
|
109
|
+
> - **โ Map a project**
|
|
110
|
+
> - **โก Create a new project**
|
|
111
|
+
> - **โข Accelerate or diagnose a mapped project** (work ยท Full-Harness ยท skills/agents/plugins ยท ์ง๋จ) โ {field candidates}
|
|
112
|
+
> - **โฃ Cross-project synergy**
|
|
113
|
+
> - **๐ Guide / Q&A**
|
|
104
114
|
>
|
|
115
|
+
๐ฅ **One door per line โ never join them with `ยท` into a single run-on line** (operator, 2026-08-20).
|
|
116
|
+
A `ยท`-joined menu wraps at an arbitrary terminal width, so the reader cannot see where one door ends
|
|
117
|
+
and the next begins. The vertical list satisfies **G-GREET-02** (๐ฟ๏ธ + welcome on the SAME line),
|
|
118
|
+
**G-GREET-03** (fixed 4-door set) and **G-GREET-05** (welcome literals) unchanged โ those probes pin
|
|
119
|
+
the door *set*, the *literals*, and the *welcome line*, **not the menu's line count**. Layout is the
|
|
120
|
+
render layer; the probes are the verdict layer. The ๐ง developer door is likewise its own row at the
|
|
121
|
+
bottom of the list, never appended to another line.
|
|
122
|
+
|
|
123
|
+
**๐ door (unnumbered, always rendered)** โ opens `docs/USER_GUIDE.md` and takes FH-usage questions.
|
|
124
|
+
๐ฅ **Do not renumber.** โ โโฃ are the fixed set; ๐ง was the only unnumbered exception and ๐ joins it at
|
|
125
|
+
that layer. A guide is *reference before work*, not *the start of work*, so it does not belong in the
|
|
126
|
+
numbered set. **G-GREET-03 (fixed 4-door) and G-GREET-05 (welcome literals) both stay satisfied** โ no
|
|
127
|
+
number was added and no welcome phrase was touched.
|
|
128
|
+
๐ฅ **"Open" means path + a 3-line table of contents FIRST.** Never dump the file inline โ burning tokens
|
|
129
|
+
every session is precisely what this door exists to avoid. Then, and only then, branch on `uname -s`
|
|
130
|
+
to *suggest* an opener (Darwinโ`open` ยท Linuxโ`xdg-open` ยท MINGW/MSYSโ`start`); if none exists, skip
|
|
131
|
+
silently โ the path already landed, so nothing is lost. โ ๏ธ `open` is macOS-only and FH ships via npm,
|
|
132
|
+
so it must never be the default path. Operating detail (allowed corpus ยท say "not found" when absent)
|
|
133
|
+
lives in `/fh` Step 3.5.
|
|
134
|
+
|
|
105
135
|
> (When **FH-dev state exists** โ the operator โ the welcome line is **"The FH operator โ good to see you."** in place of "Welcome back to FH.")
|
|
106
136
|
|
|
107
137
|
- **โ Map a project** โ routes to `auto_project_mapping.md`; after a successful mapping, offer the ยง6 Full-Harness promotion prompt
|
|
@@ -170,6 +200,18 @@ priority: high|medium|low
|
|
|
170
200
|
---
|
|
171
201
|
# FH Improvement Signal โ {date} ({source})
|
|
172
202
|
|
|
203
|
+
## Session Retrospective โ ๋ง๊ฐ ํ๊ณ ๋ก ์์ฑ๋ ์ ํธ๋ง. ์ํ 8์ค. ์ด๋ฒคํธ ์ ํธ๋ ์ด ์ ์์
|
|
204
|
+
- ์ ์ : {์ด์์๊ฐ ๋๋ฅผ ์ ์ ํ ๊ฑด์} โ ๊ฐ ํ ์ค, ๋ฌด์์ ์ด๋ป๊ฒ ํ๋ ธ๋
|
|
205
|
+
- ์๋ ฅ {N} / ํ๋ ฅ {M} โ ํ๋ ฅ์ **์ก์ ์ถ ์ด๋ฆ**์ผ๋ก (๋ ์ธ ยท ๋๋๋ฆผ ยท cross-family ยท ์ฒซ์ค์ฌ์ฉ ยท โ ยท ์ด์์ ยท CI)
|
|
206
|
+
- ์ ๋๋ฆฐ ์ถ: {์ด๋ฆ, ๋๋ ใ์์ใ}
|
|
207
|
+
- ๋ฐ๋ณต: {์ด๋ฒ์ด N๋ฒ์งธ์ธ ์ค์ โ memory ํค ๋๋ ใ์ ๊ทใ}
|
|
208
|
+
|
|
209
|
+
๐ฅ **๋ฑ๊ธ์ ์ ์ง ๋ง๋ผ.** ยซ์ธ์
์ด ์ ๋๋ค/๋ชป ๋๋คยป ๋ ์ํ์ด๊ณ ๊ฒ์ ๊ฐ๋ฅํ๋ค. ์ ๋ ๊ฒ์ **์ฌ๊ฑด๊ณผ
|
|
210
|
+
๊ทธ๊ฒ์ ์ก์ ์ถ์ ์ด๋ฆ**๋ฟ์ด๋ค. ํ์ ์ ์ ์ ์ผ๋ฉด ์ํํ ๋์์ด ์๋ค. ใ์ ์ ๊ฑด์ใ๋ ํธ๋์คํฌ๋ฆฝํธ
|
|
211
|
+
์ฌ์ค์ด์ง ํ๋จ์ด ์๋๋ผ์ ๊ฒ์์ด ์ด๋ ต๊ณ , ์๋ ฅ/ํ๋ ฅ ๋ถ๋ฆฌ๋ ยซ๋ด๊ฐ ๋ค ์ก์๋คยป ๋ฅผ ์ฐ๊ธฐ ๋ถํธํ๊ฒ ๋ง๋ ๋ค.
|
|
212
|
+
โ ๏ธ ์
๋ค ์ํ์ **์ด๋ ต๊ฒ** ํ ๋ฟ **๋ซ์ง ์๋๋ค** โ ๋ซํ๋ ๊ฒ์ peer ๋ cross-family ๊ฐ ์ด ํ๊ณ ๋ฅผ
|
|
213
|
+
์ฝ์ ๋์ด๊ณ ๊ทธ๊ฑด ์ด ํ์์ ๋ฒ์ ๋ฐ์ด๋ค.
|
|
214
|
+
|
|
173
215
|
## Friction Point
|
|
174
216
|
-
|
|
175
217
|
|
|
@@ -530,6 +530,123 @@ ceiling will never propose the redesign that was the point of incubating.
|
|
|
530
530
|
*nursery* is allowed to do to it while it is still inside. The first is an exit condition; the second
|
|
531
531
|
is a working posture.
|
|
532
532
|
|
|
533
|
+
### 3-e. Two moves observed in one incubation session โ ยซ์ฑ์ด๋คยป is not the whole job (operator-approved, 2026-08-19)
|
|
534
|
+
|
|
535
|
+
โ ๏ธ **Scope, up front**: this section records a **failure taxonomy measured on one field harness in
|
|
536
|
+
one session**, and the move it names. It is **not** a claim about what incubation essentially *is*.
|
|
537
|
+
A cross-family review of the first draft killed that framing, and it was right to
|
|
538
|
+
(ยง3-e-PROVENANCE below).
|
|
539
|
+
|
|
540
|
+
Operator's framing going in: *"qasp๊ฐ ์์ง ๋จ์ ์ ๋ค์ด ์์ผ๋ fh๋ pmh์ ์ธํ๋ฒ ์ดํ
๋ชจ๋๋ก
|
|
541
|
+
์ฌ์ฉ์(pmh๊ฐ ์ค์๊ฐ ๊ฒ์ฆ ๋ฐ ๋ณด๊ฐ)์๋ ๋ถ์กฑํ ์ ์ ๋ฉ๊พธ์ด์ ์๋ํ ๊ธฐ๋ฅ๋ค์ด โฆ ๋ฐํ ๊ฐ๋ฅํ
|
|
542
|
+
์ํ๋ค์ด๋ผ๊ณ ๋๋ ๋ณด๊ณ ์์ด. ์ธํ๋ฒ ์ดํฐ ๊ธฐ๋ฅ์ ํ์ฅ์ด์ง."*
|
|
543
|
+
|
|
544
|
+
That holds **for the class of gap it names**. The session then measured a class outside it:
|
|
545
|
+
|
|
546
|
+
| | |
|
|
547
|
+
|---|---|
|
|
548
|
+
| โ **์ฑ์ด๋ค** | The target **declares** it cannot do something โ `UNCALIBRATED`, an unwired slot, a domain lock. The incubator supplies the capability at more tokens, more time. |
|
|
549
|
+
| โก **์ ์ธ๋๊ฒ ๋ง๋ ๋ค** | The target produces **plausible output that is wrong**. โ has nothing to grab. The move here is to *manufacture the declaration* โ or, more often than expected, **to move an existing declaration into the path someone reads.** |
|
|
550
|
+
|
|
551
|
+
#### ๐ฅ The five cases split three ways โ and the first draft got this wrong
|
|
552
|
+
|
|
553
|
+
The draft asserted *"none of the five signals a shortfall upstream."* **That is false, and the
|
|
554
|
+
falsification came from this repo's own artifacts** (cross-family review flagged it; source check
|
|
555
|
+
confirmed and went further than the reviewer did):
|
|
556
|
+
|
|
557
|
+
```
|
|
558
|
+
์ง์ง ๋ฌด์ โ ์ฑ๋์ด ์์๋ค "๋ฉด์ "ยท"๋ฌด๋ฃ" ์๊ธฐ์ต์ 2๊ฑด
|
|
559
|
+
(scanner did not exist until the session built it)
|
|
560
|
+
์ ํธ๋ ์๋๋ฐ ์ ์ฝํ๋ค ๋ผ์ฐํ
๊ณ ์ โ caller_zero_baseline.json ์ด 2๊ฑด
|
|
561
|
+
ORPHAN ์ผ๋ก ๊ธฐ๋ก ์ค์ด์๋ค(tracked ยท CI ๊ฐ ์ฝ๋๋ค)
|
|
562
|
+
ํธ๋์คํ โ ์ ํ ๋ฌธ์๊ฐ "ํ์์ด ๊ฐฑ์ ๋ณธ" ์ด๋ผ๋
|
|
563
|
+
ํฌ์ธํฐ๋ฅผ ๋จ๊ฒผ๊ณ , ๊ทธ ํ์์ด ์นจ๋ฌตํ๋ค
|
|
564
|
+
์ฑ๋์ ๋ง๋ค์๋๋ ์ ์ธ๋๋ค p6 ๋ถ๋ฅํ 0/6 โ `_UNMAPPED_SEEN` ๊ด์ธก ์ฑ๋์ด 1๊ฑด
|
|
565
|
+
ํ๋ฃจ ์ ์ปค๋ฐ์ผ๋ก ๋์
๋ผ ๋ฆฌํฌํธ๊น์ง ๋ฐฐ์ ๋๊ณ ,
|
|
566
|
+
๊ทธ ๋ค์ ๋ ์๋ฆฌ๋๋ค
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
**The third row is the load-bearing one, and the draft had it backwards** โ it cited p6 as an example
|
|
570
|
+
of silence when p6 is the **existence proof of โก succeeding**: someone built the channel, the silent
|
|
571
|
+
thing declared itself, โ closed it the next day. One case, one day apart, in-repo.
|
|
572
|
+
|
|
573
|
+
โ So โก is not one move but two, and the second is more common than expected:
|
|
574
|
+
|
|
575
|
+
- **(a) build the channel where none exists** โ the 2 self-suppression cases
|
|
576
|
+
- **(b) put the channel where the reader is** โ the 2 unread-signal cases. This is
|
|
577
|
+
`gate_locality_principle.md` applied to *declarations* rather than to gates: a declaration nobody
|
|
578
|
+
reads is not a declaration. **Neither of those two was fixed by adding information; both were fixed
|
|
579
|
+
by moving where it surfaces.**
|
|
580
|
+
|
|
581
|
+
#### What was actually built, stated narrowly
|
|
582
|
+
|
|
583
|
+
Function โก was realized on that session as **authoring-time static instruments** โ
|
|
584
|
+
`scripts/self_suppression_scan.py` (trigger vocabulary swallowed by negation vocabulary),
|
|
585
|
+
`scripts/domain_coupling_scan.py` (hardcoded domain vocabulary), plus anchors that go red when the
|
|
586
|
+
instrument itself dies.
|
|
587
|
+
|
|
588
|
+
๐ฅ **This is not a runtime declaration mechanism and must not be read as one.** Nothing there makes a
|
|
589
|
+
*running* audit announce ยซthis output is confidently wrongยป. What was demonstrated: **an incubator
|
|
590
|
+
holding ยง3-d's whole-repo authority built instruments the target had not built for itself.** Whether
|
|
591
|
+
the target *could* have is not established โ the observed reason was ordinary (nobody had looked),
|
|
592
|
+
not structural.
|
|
593
|
+
|
|
594
|
+
#### Ordering: conditional, not a law
|
|
595
|
+
|
|
596
|
+
The draft said *"โก is prior to โ "*. Weakened deliberately: **where a defect is undeclared, โ has no
|
|
597
|
+
target, so โก has to come first for that defect.** That is a statement about one defect's handling
|
|
598
|
+
order, not a phase ordering for incubation, and one session cannot support the stronger reading.
|
|
599
|
+
|
|
600
|
+
Likewise the draft's *"the second is worse than the first"* (silent-wrong vs crash) is **withdrawn** โ
|
|
601
|
+
severity depends on the operating context, and nothing here measured it.
|
|
602
|
+
|
|
603
|
+
#### ๐ฅ โก presupposes decorrelated input โ this belongs in the definition, not the caveats
|
|
604
|
+
|
|
605
|
+
Self-detection on that session was **2 of 16**, and both of the two were *reading something already
|
|
606
|
+
written down* (a baseline file that said `ORPHAN`; a loop that finished suspiciously fast), not
|
|
607
|
+
inference. The rest came from cross-family review (two families, zero overlap), revert probes, the
|
|
608
|
+
full suite, a caller-zero ratchet, a peer session, and a company session.
|
|
609
|
+
|
|
610
|
+
โ **โก as described is a property of an incubation regime that has decorrelated review attached, not
|
|
611
|
+
of a lone incubation session.** A single session should not be assumed able to run it.
|
|
612
|
+
|
|
613
|
+
๐ฅ **And ยซdecorrelatedยป is decided by what you SEND, not by which family you send it to.** A panel
|
|
614
|
+
that all receives the same payload keeps the same blind spot no matter how many reviewers sign it.
|
|
615
|
+
The payload for โก is **the frozen diff *and* the change's own marker** โ the diff carries the code,
|
|
616
|
+
the marker carries the *claims* (which axes ran, which controls were alive, what residual is
|
|
617
|
+
admitted). A reviewer who never sees the marker cannot catch ยซan axis asserted with no traceยป or
|
|
618
|
+
ยซa residual implied but unlistedยป, because those defects are not in the code.
|
|
619
|
+
|
|
620
|
+
**Measured on this section itself, the same day**: the grounding arm was sent a **5-item fact list**
|
|
621
|
+
instead of repo access, and consequently reported every well-grounded statement outside that list as
|
|
622
|
+
invention โ one usable finding out of six. The family was fine; **the payload was the defect.**
|
|
623
|
+
โ [[feedback_decorrelation_axis_is_what_you_send]]. The plumbing that supplies this is
|
|
624
|
+
`auto-decorrelation` Step 5 (payload = frozen diff + marker), scoped to **consistency**, not honesty
|
|
625
|
+
โ asking whether the record matches the diff is a channel check; asking whether the record is *true*
|
|
626
|
+
is a verdict, and ยงMechanization Boundary keeps verdicts out of code.
|
|
627
|
+
|
|
628
|
+
#### The failure mode โก carries
|
|
629
|
+
|
|
630
|
+
The instruments were wrong **seven times** in that session. Six produced **plausible wrong numbers**;
|
|
631
|
+
one died loudly (`No such file`, `rc=1`) and was caught instantly. Once, a control was the only thing
|
|
632
|
+
standing between ยซthe corpus has none of this shapeยป and the truth, ยซthe detection surface does not
|
|
633
|
+
see that shapeยป.
|
|
634
|
+
|
|
635
|
+
โ **An instrument built to expose silent wrongness is itself a source of silent wrongness.** The
|
|
636
|
+
prescription measured there: **put the control in the same commit as the instrument.** Where that was
|
|
637
|
+
done the error surfaced immediately; where it was not, it surfaced afterwards, if at all.
|
|
638
|
+
|
|
639
|
+
#### ยง3-e-PROVENANCE โ what this section's own review caught
|
|
640
|
+
|
|
641
|
+
- **cross-family (codex, gpt-5.5)**: killed the ยซessence of incubationยป framing, the
|
|
642
|
+
ยซnone of the fiveยป claim, the ยซprior toยป ordering, and the ยซworse thanยป severity rule. All four
|
|
643
|
+
were adopted. Self-detection on this section: **0**.
|
|
644
|
+
- **grounding pass (agy, gemini-3.1-pro)**: mostly measured **the author's own dispatch error** โ it
|
|
645
|
+
was given a 5-item fact list rather than repo access, so every well-grounded statement outside that
|
|
646
|
+
list was reported as invention. One finding survived: *"all of them wrong"* overstated p6
|
|
647
|
+
(a finding whose true category happened to be the fallback would not be wrong), now softened.
|
|
648
|
+
๐ฅ Recorded because the lesson is about **the reviewer's input scope**, not about the reviewer.
|
|
649
|
+
|
|
533
650
|
## 4. Compose โช disrupt โ two operating modes over other harnesses
|
|
534
651
|
|
|
535
652
|
| Mode | What | FH mechanism |
|
|
@@ -2332,3 +2332,23 @@
|
|
|
2332
2332
|
finding: "๐ฅ **FH ๊ฐ ๋ชฐ๋๋ ๊ฒ ๋ท, ๊ทธ์ค ๋์ ์ค๊ณ ๊ฒฐํจ์ด๋ค.** โ **์์ฑ์ด ๋ฏธ๋ฑ๋ก redaction sink** โ gstack ์ ใํ ๋ชจ๋ธ dispatchใ๋ฅผ ์ด๋ฏธ sink ๋ก ๋ถ๋ฅยท์ค์บํ๋๋ฐ ์์ฑ ๊ฒฝ๋ก๋ ๊ทธ ์ค์บ๋๋ฅผ ํ ์ค๋ ์ ํ๋ค. ๐ฅ FH ์ publish_gate ๋ **์ฐ์ถ๋ฌผ**์ ์ค์บํ๊ณ **์
๋ ฅ**์ ์๋ฌด๋ ์ ๋ณธ๋ค(๋ฐฉํฅ์ด ๋ฐ๋๋ค) โ ๋ฌด์ธ acceptEdits ์ ํญ๋ฐ๋ฐ๊ฒฝ์ด **๋ ํฌ ๋ฐ** โ ๊ทธ์ชฝ `.claude/skills/gstack` ์ฌ๋งํฌ๊ฐ ๋ผ์ด๋ธ ๊ธ๋ก๋ฒ ์ค์น๋ณธ์ด๋ผ ๋์ ์คํ ์ค์ธ ๋จ์ CC ์ธ์
์ ๊นฌ๋ค โ **AI ์๊ฒ period ๋ก ๋ซํ ํ์ผ**(ETHOS.md)์ด ์๊ณ ์ ์์กฐ์ฐจ ์๋ฐ โ ํ๋กํ ์คํค๋ง์ ใ๊ธ์ง ํ์ผใ์ด ํ์์ฌ์ผ ํ๋ค โ ์ฐ์ถ ์๋ฆฌ๋ฅผ ๋ฐ๋ช
ํ ํ์ ์์(`~/.gstack-dev/plans/` ๊ฐ ์ด๋ฏธ ์๋ฏธ๋ก ์ด ๊ฐ๋ค) + ๊ทธ ๋ ํฌ๋ ยซgit status ์ค์ผ = ์ฌ๊ฑดยป. ์ ๋ฐ โ ์ `checked(๊ฒน์นจ ์์)` โ Renovate(๊ตฌ์กฐ) ยท Sourcegraph Agentic Batch Changes(ยซrepository specific instructionsยป, 2026-06 ์์ฉ) ยท gh-aw(์ฐฉ์ง ํํ) ๊ฐ ๊ฐ ์กฐ๊ฐ์ ์ ํํ๋ค. **net-new ๊ฐ ์๋๋ผ ์กฐํฉ**์ด๊ณ ๊ทธ ์ฌ์ค์ด ใ์๋กญ๋คใ์ ๊ฐ๋๋ฅผ ๊น๋๋ค."
|
|
2333
2333
|
note: "๐ฅ **ํ์๋ถ์ด ๋ฐ๋ก ์๋ค**: gstack ์ ยซ์ง๊ธฐ ์ ์ ๊ฒ์ยป ๊ท์จ์ ์ ๋ฐ โ (์ ํ์์ฐ)์ ์ ๋ฐ โก์ **์
๋ ฅ**์ผ๋ก ์๊ตฌํ๋ค โ FH ๋ ๋์ ๋ฐ๋ก ๋๋ ธ๋๋ฐ ๋์์ ์์์ ์์ผ๋ฉด ํ ๋ฌธ์๋ค. โ ์ ๋ ์ง๋ฌธ์ด ยซ๋ยป์ด๋ผ๋ ๊ฒ์ด FH ์ชฝ ๊ตฌ์ฑ์ด์ง ๋ณดํธ์ด ์๋๋ผ๋ ๋ป์ด๊ณ , ์ด๊ฑด 6์ถ ์ ์ ์์ฒด์ ๋ฟ๋๋ค. โ ๏ธ ์ ๋ฐ โ ์ ์ค๋ํซ ๊ธฐ๋ฐ์ด๊ณ 1์ฐจ ๋ฌธ์ ์ ์ ์ง๋
์ด ์๋๋ค โ Sourcegraph ์ ๊ทธ ๋ฌธ๊ตฌ๊ฐ ใ๋ ํฌ๊ฐ ์ด ๊ฒใ์ธ์ง ใcode graph ์์ฑใ์ธ์ง ์ ๊ฐ๋ ธ๊ณ , ๊ทธ ํ ์ค์ด ๊ฐ๋ฆฌ๋ฉด ๊ฒน์นจ์ด ยซ๋ถ๋ถยป์์ ยซ์ ๋ฉดยป์ผ๋ก ๋ฐ๋๋ค. **๋ฏธํ์ธ์ผ๋ก ๋จ๊ฒผ๋ค.** ์ ํธ = tracks/_meta/fh_signal_2026-08-19_satellite-thirdparty-axis.md"
|
|
2334
2334
|
cost: 157,378 tokens (subagent_tokens ยท tool_uses 20 ยท 313s)
|
|
2335
|
+
|
|
2336
|
+
- date: 2026-08-19
|
|
2337
|
+
agent: claude-code-guide ยท general-purpose ร2 ยท general-purpose(sonnet, blind sim) ยท codex sidecar
|
|
2338
|
+
model: opus (orchestrator) / sonnet (blind sim) / gpt-5.5 (sidecar)
|
|
2339
|
+
purpose: "์์ฑ ํ๋กํ ์คํค๋ง ๊ฒ์ดํธ + ์จ๋ณด๋ฉยท๋ง๊ฐํ๊ณ ์ค๊ณ + ๊ฒ์ดํธ ์ ๋๊ฒ์ฆ + ํ๋ก์ด ํฐ์ด ๋ฐํ ํ์ธ โ ํ ์ธ์
5๊ฑด์ ํด๋์ค๋ก ๋ฌถ์ด 1์ํธ๋ฆฌ"
|
|
2340
|
+
prompt_summary: "โ ํค๋๋ฆฌ์ค ๊ถํ ์๋ฏธ๋ก ์ **1์ฐจ ์ถ์ฒ ์ง๋
**์ผ๋ก(์ถ์ธก ๊ธ์ง, ํ์ธ ๋ถ๊ฐ๋ ๋ช
์) โก ๋ง๊ฐ ํ๊ณ ์์คํ ์ค๊ณ โ ๊ธฐ์กด ์์ฐ ์ปค๋ฒ๋ฆฌ์ง๋ถํฐ ๊ฐ๋ผ๋ผ โข ์จ๋ณด๋ฉ ๊ฐ์ด๋/Q&A ์ค๊ณ โ ยซ์ด๋ฏธ ๋๋ ๊ฒยป์ด๋ฉด ๊ทธ๋ ๊ฒ ๊ฒฐ๋ก ๋ด๋ผ โฃ **์ํ ๋์์ ์ ์๋ ค์ค** ๋ธ๋ผ์ธ๋ 4์ํฉ sim โค cross-family: fail-open ๊ตฌ๋ฉยท๋๋๋ฆผ ์ฐํ๋ฅผ ์ฐพ์๋ผ"
|
|
2341
|
+
outcome: accepted
|
|
2342
|
+
finding: "๐ฅ **cross-family ๊ฐ S๊ธ 1๊ฑด** โ `FD_PROFILE` ๋ฏธ์ค์ ์ผ๋ก ๊ฒ์ดํธ๋ฅผ ํต์งธ๋ก ๋ ์ ์์๊ณ **๋ด๊ฐ ์ด ๋ ์ธ์ด ๊ทธ ์ฐํ๋ฅผ ์ด๋ก์ผ๋ก ๊ณ ์ **ํ๊ณ ์์๋ค(์๋ ฅ ์ ๋ฐ 0). A๊ธ 4๊ฑด๋ ์ ๋ถ ์ค๋ฌผ: acceptEdits ๊ฐ `sedยทmv` ๋ฅผ ์๋์น์ธํด `sed -i` ๋ก ๊ธ์งํ์ผ ์์ ๊ฐ๋ฅ ยท ์ ๋๊ฒฝ๋ก๊ฐ `.//abs` ๋ก ์กฐ๋ฆฝ ยท ๋ ์ธ์ด JSON ๊ตฌ์กฐ๋ฅผ ์ ๋ณด๊ณ ๋ฌธ์์ด๋ง grep ยท ใegress ๋ฐฉํ๋ฒฝใ ์ฃผ์ฅ ๊ณผ์ฅ. โ
**๋ธ๋ผ์ธ๋ sonnet sim 4/4 ๋ฐํ**(๋ฌธ ๋ ๋ ยท ์ธ๋ผ์ธ ๋คํ ๊ฑฐ๋ถ ยท Linux ๋ถ๊ธฐ ยท ์๋ ์คํฌ์ ใ0๊ฑด ๊ทผ๊ฑฐใ)์ด๋ฉด์ **์ง์ง ๊ฒฐํจ 1๊ฑด ์ ๋ฐ** โ CLAUDE.md ์๋ฌธ์ด ์ ๊ท์๋ฅผ CHEATSHEET ๋ก ์ค๋ผ์ฐํ
. โ
์ค๊ณ 2๊ฑด์ ๋ ๋ค **ใ์ ์์ฐ ์ ์ค ์์ใ์ผ๋ก ์๋ ด**ํ๊ณ , ๊ทธ์ค ํ๋๋ ์์ฒญ๋ฐ์ ํ์(install-wizard 3๋ถ ๋์)์ด **์ด ์ฉ๋์ ์ค์ฉ**์ด๋ผ๊ณ ๋ฐ์ฆํ๋ค."
|
|
2343
|
+
note: "๐ฅ **๋ธ๋ผ์ธ๋ sim ์ ๊ณ๊ธฐ ์์กด์ ํ์ธํ๋ค**(tool_uses=7) โ 2026-08-16 ์ `tool_uses: 0` ์ฃฝ์ sim ๊ณผ ๊ตฌ๋ถ๋๋ค. ๊ทธ๋ฌ๋ **reps=1 ๋ก ์ด ๋ ํฌ ์์ฒด ๋ฐ(repsโฅ3) ๋ฏธ๋ฌ**์ด๊ณ , ใ๋ฐํํ๋คใ๋ ๊ด์ธก 1ํ์ง ์ผ๋ฐํ๊ฐ ์๋๋ค. โ ๏ธ ํ
tally ๋ 51 ์ธ๋ฐ ์ด ์ํธ๋ฆฌ ํฌํจ 4์ํธ๋ฆฌ๋ค โ tally ๋ ์ฌ์๋ยท๋ด๋ถ ์คํฐ๊น์ง ์ธ๋ฏ๋ก **1:1 ๋์์ด ์๋๋ค**(๊ฐ๋ณ ๊ธฐ๋ก์ด ์๋๋ผ ํด๋์ค ์ง๊ณ๋ก ๋จ๊ธด๋ค)."
|
|
2344
|
+
cost: "claude-code-guide 124,771 ยท ์ค๊ณ 138,542 + 159,983 ยท ๋ธ๋ผ์ธ๋ sim 140,094 ยท codex 64,443 tokens"
|
|
2345
|
+
|
|
2346
|
+
- date: 2026-08-20
|
|
2347
|
+
agent: general-purpose ร2 (harness-doctor ยท pmh-dev ๋ต์ต) ยท codex sidecar ยท agy sidecar ยท headless sonnet ร6 (๋ธ๋ผ์ธ๋ sim ์ํ)
|
|
2348
|
+
model: opus (orchestrator) / gpt-5.5 (codex) / gemini-3.1-pro (agy) / sonnet (sim)
|
|
2349
|
+
purpose: "2.6.0 ์ฌ์ถํ ์ค๋น โ ์๋น์ ์ค์น selfcheck ๋ณต๊ตฌ ยท 30์ผ ๊ตฌ์กฐ ์ง๋จ ยท pmh-dev ์ ํ๋ถ ์กฐ์ฌ ยท ๋ฉ๋ด ์ธ๋กํ ๊ฒ์ฆ. ํ ์ธ์
5ํด๋์ค๋ฅผ 1์ํธ๋ฆฌ๋ก ๋ฌถ๋๋ค"
|
|
2350
|
+
prompt_summary: "โ harness-doctor 30์ผ ์บ๋์ค โ known-pair ๋ณด์ ํ ์ซ์, ๋ชป ์ฐ ์นธ์ UNMEASURED ๋ก โก pmh-dev 3๋ถ๋ฅ(net-new / PMH ์์ฌ / FH ์์ฌ), residency ๊ฐ organization-private ์ธ ํญ๋ชฉ์ ์ธ์ฉ ๊ธ์ง โข codex: diff ๋ฅผ ๋ฐ๊ณ **์๋ฆฌ๋ฅผ ๋ฐ์ฆ**ํด๋ผ(fail-open ์ธ๊ฐ ยท ๊ฒฐ๋ฐ์ด ๋จ์๋) โฃ agy: ์ฝ๋ ์๋ **๊ธฐ๋ก์ ์ฃผ์ฅ**์ ๊ฒ์ฆํด๋ผ(ํ๋ณธ์ด ๊ฒฐ๋ก ์ ์งํฑํ๋ ยท ๋ฏธ์ธก์ ์ 0์ผ๋ก ๋ ๋ํ๋) โค ์ํ ๋์ ์ ์๋ ค์ค ๋ธ๋ผ์ธ๋ ๋ ๋ sim, ARM/CONTROL ๊ฐ 3ํ"
|
|
2351
|
+
outcome: accepted
|
|
2352
|
+
finding: "๐ฅ **cross-family ์ง์ 3๊ฑด ์ ๋ถ ์ค์ฌยท์ ๋ถ ์ฑํยท์๋ ฅ ์ ๋ฐ 0.** codex(diff ์ถ)๊ฐ ๋ด ์๋ฆฌ์ ๋ฐ์ชฝ์ ์ก์๋ค โ L13c ๋ผ๋ฒจ์ ์ ๋๋ก ๋ฐ๊ฟจ๋๋ฐ **์์ฐ์๋ ๋ฆฌํฐ๋ด์ ๋ธ๋ค**, ์ฆ ์๋ฆฌ๊ฐ divergent-normalizer ๋ฅผ ์๋ก ๋ง๋ค๊ณ ์์๋ค(๋๋๋ฆผ + known-pair ์ฌํ: ์์ 20/0 ยท ์ ๋ 19/1). agy(์ฃผ์ฅ ์ถ)๊ฐ ๋ โ โข๋ฌธ ์๊ธฐ๋ชจ์, ๊ทธ๋ฆฌ๊ณ **detail ํ์ผ์ ์ ๊ท์ฌ์ฉ์ ๋ฌธ์ด ์ ๋ฐ๋ผ์จ ๋ฐ์ชฝ-ํฝ์ค**(๋ด ํ์ธ grep ์ด ๋ฐ์ดํ ํ์ ๊ฑฐ์ง ใ์์ใ์ ๋๋ค). ๐ฅ **๋ ๊ณ์ด ์ง์ ์ด ํ๋๋ ์ ๊ฒน์ณค๋ค(์ฝ๋ 1 / ์ฃผ์ฅ 2)** โ ์ถ ๋ถ๋ฆฌ์ ๊ฐ์ด ์ค์ธก์ผ๋ก ๋์จ ์๋ฆฌ๋ค. harness-doctor: FAIL(M-tier 1 = ์์ฃผ 140,217์) ยท S 9 ยท R 4, ยซ๋ชป ์ฐ ๊ฒยป 8ํญ ๋ช
์. pmh-dev: ํก์ ํ๋ณด 3(Wave 1-D ยท HEAVY ๋ถ๋ฅ๊ธฐ ๋ ์ธ ยท Step 0.35), ๊ทธ์ค **A1 ์ PMH ๋ฌธ์๊ฐ ์๋ ๊ธฐ๊ณ๋ฅผ ์๋ค๊ณ ์ ์๋ค**(`axis2-defense` ํ
ํํธ 0, ์ปจํธ๋กค `crossfamily` 21) โ ์ฐ๋ฌธ๋ง ์ฎ๊ธฐ๋ฉด ํฌํ
๊ธฐ๊ณ-์ฃผ์ฅ์ ๋ค์ฌ์จ๋ค. ๋ธ๋ผ์ธ๋ sim ARM 3/3 vs CONTROL 3/3 ์์ ๋ถ๋ฆฌ."
|
|
2353
|
+
note: "๐ฅ **๊ณ๊ธฐ๊ฐ ๋ชป ๋ณด๋ ์๋ฆฌ๋ฅผ ํ์๊ด์ด ๋ดค๋ค.** ์๋น์-์์ฃผ ๊ณ๊ธฐ๋ ใ๋์๊ฐ๋ใ๋ฅผ ์ฌ์ง ใ๊ณ ์น ๊ฒ ์ณ์๊ฐใ๋ฅผ ๋ชป ์ฐ๋ค โ SKIP ์ผ๋ก ๋น ์ง๋ ํ์ ๊ทธ ๊ณ๊ธฐ๊ฐ **๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ณด๋** ์๋ฆฌ์ด๊ณ codex ์ง์ ์ด ์ ํํ ๊ฑฐ๊ธฐ ์์๋ค. โ ๏ธ codex ์ธ์
์ด **์ต์ข
์ฐ๋ฌธ ํ์ ์์ด ๋๋ฌ๋ค**(4ํด, ๋ง์ง๋ง์ด ๋๊ตฌ ์ถ๋ ฅ) โ ์ง์ ์ ์ค๊ฐ ํด์์ ๊ฑด์ก๋ค. ใ์ง์ ์์ใ์ด ์๋๋ผ **๋ถ๋ถ ์ฐ์ถ**๋ก ๊ณ์ํ๋ค. โ ๏ธ ํ
tally ๋ 67 ์ธ๋ฐ ์ด ์ํธ๋ฆฌ ํฌํจ ์์๋ค โ tally ๋ ์ฌ์๋ยท๋ด๋ถ ์คํฐ๊น์ง ์ธ๋ฏ๋ก 1:1 ๋์์ด ์๋๋ค(ํด๋์ค ์ง๊ณ)."
|
|
2354
|
+
cost: "harness-doctor 196,158 ยท pmh ๋ต์ต 186,940 tokens (subagent_tokens) ยท codex/agy/sim ์ CLI ๋ผ ํ ํฐ ๋ฏธ๋
ธ์ถ = UNMEASURED"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "FH runtime adapters โ run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"CLAUDE.md",
|
|
54
54
|
".claude/registry/agent_cards.json",
|
|
55
55
|
".claude/registry/README.md",
|
|
56
|
+
"docs/USER_GUIDE.md",
|
|
56
57
|
"docs/CONTRIBUTING.md",
|
|
57
58
|
"bin/fh-codex-doctor.js",
|
|
58
59
|
"bin/fh-gate.js",
|
|
@@ -88,12 +89,15 @@
|
|
|
88
89
|
"scripts/adapters/qasp_web_rules.sh",
|
|
89
90
|
"scripts/adapters/fixtures/qasp_web_rules_known_positive.json",
|
|
90
91
|
"scripts/adapters/fixtures/qasp_web_rules_known_negative.json",
|
|
92
|
+
"scripts/adapters/fixtures/mate_agent_boundary_known_positive.md",
|
|
93
|
+
"scripts/adapters/fixtures/mate_agent_boundary_known_negative.md",
|
|
91
94
|
"scripts/test_adapter_lanes.sh",
|
|
92
95
|
"scripts/test_fh_gate_regressions.sh",
|
|
93
96
|
"templates/local_fh_context.md",
|
|
94
97
|
"docs/ETHOS.md",
|
|
95
98
|
"docs/WHY.md",
|
|
96
99
|
"docs/OUTPUT_EVIDENCE.md",
|
|
100
|
+
"docs/platform_sustainability.md",
|
|
97
101
|
"knowledge/shared/GLOSSARY.md",
|
|
98
102
|
"knowledge/shared/patterns",
|
|
99
103
|
"knowledge/shared/plugin-catalog",
|
|
@@ -129,7 +133,6 @@
|
|
|
129
133
|
"scripts/chamber_candidate_collect.sh",
|
|
130
134
|
"scripts/chamber_witness.sh",
|
|
131
135
|
"scripts/digest_landing_check.sh",
|
|
132
|
-
"scripts/test_satellite_publish_gate_lanes.sh",
|
|
133
136
|
"scripts/relay_channel.sh",
|
|
134
137
|
"scripts/test_relay_channel_lanes.sh",
|
|
135
138
|
"scripts/fh_session_load.sh",
|
|
@@ -10,6 +10,31 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
|
10
10
|
|
|
11
11
|
## Plugin Level
|
|
12
12
|
|
|
13
|
+
### [2.6.0] โ 2026-08-20
|
|
14
|
+
|
|
15
|
+
**๋ฐฐํฌ๋ณธ์ด ์๋น์ ์ค์น์์ `SELFCHECK: FAIL` ์ด์๋ค โ ๊ทธ๋ฆฌ๊ณ ์์ธ ๋ท์ด ์ ๋ถ ยซ๊ณ๊ธฐ๊ฐ ์ ์์ ๋จธ์ ์ ๊ฒฐ๋ฐยป ์ด์๋ค.** ์ด ๋ฆด๋ฆฌ์ค์ ์ค์ฌ์ ์ ๊ธฐ๋ฅ์ด ์๋๋ผ ๊ทธ ๋ณต๊ตฌ๋ค. ๋ฐ๊ฒฌ ๊ฒฝ๋ก๋ ์ฌ์ถํ ์ค๋น ์ค์ ์ ์คํ์ด๋ค: `npm pack` โ ์ถ์ถ โ **`node_modules/@chrono-meta/fh-gate` ์ค๊ฒฝ๋ก์์ ์์ฃผ**. ๋ ์ง์คํธ๋ฆฌ์์ ๋ฐ์ **์ค๋ฌผ 2.5.1** ๋ก๋ ์ฌํํ๋ค(์ปจํธ๋กค).
|
|
16
|
+
|
|
17
|
+
- **์์ฑ ๋ ์ธ ๋์ด ์ฃผ์ฒด ์์ด ์ถํ๋๋ค.** `test_satellite_publish_gate_lanes.sh`(2.5.1 ์ ์ด๋ฏธ ์ค๋ฆผ) ยท `test_satellite_profile_schema_lanes.sh`(์ด๋ฒ ๋ฒ์์ ์ถ๊ฐ๋จ)์ ์ฃผ์ฒด๋ `frontier_digest_daily.sh` ์ธ๋ฐ ๊ทธ๊ฑด ์๋์ ์ผ๋ก ์ถํ ๋์์ด ์๋๋ค(์๋น์ ๊ณ์ ์ผ๋ก `claude` CLI ๋ฅผ ํ์ด๋ค). ์ค์ธก: publish_gate **4 passed / 21 failed**, `rc=127`. ๐ฅ **ํต๊ณผํ ์ชฝ์ด ๋ ๋๋นด๋ค** โ "dispatch ์์ฒด๊ฐ ์ ์ผ์ด๋จ โ
" ์ ๋ฌ๋๊ฐ **์์ด์** ํต๊ณผํ ๊ฑฐ์ง ์ด๋ก์ด๋ค. ์ ํ ์ฌ๋ก(`test_frontier_digest_retry.sh`, *"Anchor follows subject"*)๋๋ก `ACCEPTED_ABSENT` ๋ก ๋ด๋ฆฌ๊ณ , `selfcheck.sh` ๋ **์ฃผ์ฒด** ๋ถ์ฌ๋ฅผ ๋ณด๊ณ `_absent_subject_verdict` ๋ก ์์ํ๋ค โ ์ด๋ฆ ์๋ SKIP
|
|
18
|
+
- **`digest_landing_check --self-test` ๊ฐ ํด๋ ์ด๋ฆ์ ๊ฒฐ๋ฐ๋ผ ์์๋ค.** ์ปจํธ๋กค์ด `basename "$FH"` ๋ก ์ ๋๋๋๋ฐ ํฝ์ค์ฒ ์นด๋๊ฐ ๋ฆฌํฐ๋ด `forge-harness` ๋ฅผ ๋ด๊ณ ์์ด, **๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ด `forge-harness` ์ผ ๋๋ง** ์ปจํธ๋กค์ด ์ด์๋ค. known-pair(๊ฐ์ ๋ฐ์ดํธ, ์ด๋ฆ๋ง ๊ต์ฒด): `forge-harness/` **15/15 PASS** ยท `some-consumer-app/` **5/15 FAIL**. ๋ ์ธ๋ณ๋ก ์ปจํธ๋กค์ ํฝ์ค์ฒ ํ ํฐ์ ๊ณ ์ ํ๋ค. ๐ฅ ยซ10 ์ ๊ธฐ๋ํ๋ยป ๋ ์ธ๋ค๋ ๊ณ ์ ํ๋ค โ ๊ณ ์ ์ ์๋ 10 ์ ๋์ง๋ง **์๋ํ ์ฌ์ ๊ฐ ์๋๋ผ ์ปจํธ๋กค ์ฌ๋ง** ๋๋ฌธ์ด์๋ค. ๐ฅ N1ยทโ
N-ctlยทโ
N-ctl-re ๋ ์ผ๋ถ๋ฌ ์ ๋/์ฌ๋ง์ ์ฃผ์ฅํ๋ฏ๋ก **๊ณ ์ ํ์ง ์์๋ค**
|
|
19
|
+
- **`cluster_capability_scan` L13c โ ์ ์ ๋ง ๊ฒฐ๋ฐ์ด์๋ค.** `discover` ๊ฐ `tracks/`(gitignored, ๋ฐฐํฌ๋ฌผ์ ๊ตฌ์กฐ์ ๋ถ์ฌ)๋ฅผ ์ ์ ํ๋ฏ๋ก, ๋ถ์ฌ๋ **FAIL ์ด ์๋๋ผ ์ด๋ฆ ์๋ SKIP**(๋ฏธ์ธก์ โ 0๊ฑด)์ผ๋ก ๋ธ๋ค. ๐ฅ **์ดํ์ ์ฌ๊ธฐ์ ํ๋๋ฅผ ๋ ยซ๊ณ ์ณค๊ณ ยป, ๊ทธ๊ฒ ํ๋ ธ๋ค** โ ๊ธฐ๋ ๋ฌธ์์ด `^forge-harness\(hub\)` ๋ฅผ ํด๋๋ช
๊ฒฐ๋ฐ์ผ๋ก ์ฝ๊ณ `basename` ์ ๋๋ก ๋ฐ๊ฟจ๋๋ฐ, **์์ฐ์(`:128`)๋ ๊ทธ ๋ฆฌํฐ๋ด์ ๋ธ๋ค.** ์ ๋๋ก ๋ฐ๊พธ๋ฉด ์ด๋ฆ์ด ๋ค๋ฅธ ํธ๋ฆฌ์์ ๊ธฐ๋์ ์ฐ์ถ์ด ๊ฐ๋ ค **๊ฑฐ์ง FAIL** ์ด ๋๋ค โ ์ด ํ์ผ์ด ์๊ธฐ ์ฃผ์์์ ๊ฒฝ๊ณ ํ๋ divergent-normalizer ๋ฅผ ์๋ฆฌ๊ฐ ์๋ก ๋ง๋ ๊ผด์ด๋ค. ๋๋๋ ธ๋ค. ๊ทธ ๋ผ๋ฒจ์ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ด ์๋๋ผ **ํ๋ธ์ ์์ ์๋ณ์**์ด๊ณ , ์์ชฝ์ด ๊ฐ์ ์์๋ฅผ ์ฐ๋ ํ ๊ฒฐ๋ฐ์ด ์๋๋ค. **cross-family(codex/gpt-5.5)๊ฐ ์ก์๋ค โ ์๋ ฅ ์ ๋ฐ 0.** known-pair ๋ก ์ฌํ: ์ด๋ฆ์ด ๋ค๋ฅธ ํธ๋ฆฌ + `tracks/` ์กด์ฌ์์ ์์ํ **20 PASS / 0 FAIL** ยท ์ ๋ํ **19 PASS / 1 FAIL**. ๋ด ์๋น์ ํ
์คํธ๋ ๊ทธ ํ์ **๊ตฌ์กฐ์ ์ผ๋ก ๋ชป ๋ฟ์๋ค**(๊ฑฐ๊ธฐ์ L13c ๊ฐ SKIP ์ด๋ผ)
|
|
20
|
+
- **mate ์ด๋ํฐ์ known-pair ํฝ์ค์ฒ๊ฐ ์ ์ค๋ ธ๋ค.** ๊ฒ์ดํธ๋ ์ถํ๋๋๋ฐ ๋ณด์ ์์ด ์๋น์ ๋จธ์ ์ ์์ด `HARNESS_ERROR(10)`. `mate_agent_boundary_known_{positive,negative}.md` ๋ฅผ `files[]` ์ ์ถ๊ฐ โ ์ด๊ฑด **์ถํํ๋ ์ชฝ**์ด ๋ง๋ค(์ฃผ์ฒด๊ฐ ์ด๋ฏธ ์ถํ๋๋ฏ๋ก)
|
|
21
|
+
- ๊ฒ์ฆ: ์๋ฆฌ ํ ์๋น์ ์ค์น **`SELFCHECK: PASS` (rc=0)**. ๐ฅ ์ค๊ฐ์ ๋ด ๊ณ๊ธฐ๊ฐ ํ ๋ฒ ํ๋ ธ๋ค โ `grep '^FAIL'` ๋ก ์ธ์ด ยซFAIL=0 ์ธ๋ฐ FAILยป ์ด๋ผ๋ ๊ฐ์ง ๋ชจ์์ ๋ง๋ค์๋ค. ์ด ์ค์ํธ๋ค์ `โ` ๋ก ์ฐ๋๋ค
|
|
22
|
+
|
|
23
|
+
**์จ๋ณด๋ฉ ๋ฉ๋ด๋ฅผ ์ธ๋ก๋ก ํธ๋ค.** `ยท` ๋ก ์ด์ด๋ถ์ธ ํ ์ค ๋ฉ๋ด๋ ํฐ๋ฏธ๋ ํญ์์ ์์๋ก ์ ํ ๋ฌธ ๊ฒฝ๊ณ๊ฐ ์ ๋ณด์ธ๋ค(์ด์์ ์ง์ ). `G-GREET-02`(๐ฟ๏ธ+ํ์๋ฌธ ๊ฐ์ ์ค)ยท`G-GREET-03`(๊ณ ์ 4๋ฌธ)ยท`G-GREET-05`(๋ฌธ๊ตฌ ๋ฆฌํฐ๋ด) **์
๋ค ๋ถ๋ณ** โ ๊ทธ ํ๋ก๋ธ๋ค์ด ๋ฐ์ ๊ฒ์ ๋ฌธ ์งํฉยท๋ฆฌํฐ๋ดยทํ์๋ฌธ ์ค์ด์ง ๋ฉ๋ด์ ์ค ์๊ฐ ์๋๋ค. ํ๋ก์ด ํฐ์ด ๋ธ๋ผ์ธ๋ sim(๋ ํฌ ๋ฐ cwdยทํค๋๋ฆฌ์คยทreps=3): **ARM 3/3 ์ธ๋ก ยท CONTROL 3/3 ๊ฐ๋ก**, ๊ฐ์ ์คํ์์ G-GREET-02 ๋ 3/3 ์ ์ง.
|
|
24
|
+
|
|
25
|
+
**BREAKING ์์ โ ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์ ์ ์ ์ด๋๋ค.** ์นด๋๋ ยซ์์ฑ ๋ฐ์ด ํ๋กํ ๋ฏธ์ ์ธ์ด๋ฉด ๋งํ๋คยป ๋ฅผ `BREAKING (gate):` ํ๋ณด๋ก ์ฌ๋ ค๋๋๋ฐ, ๊ทธ ๊ฒ์ดํธ๊ฐ ์ฌ๋ `frontier_digest_daily.sh` ๊ฐ **์ถํ ๋์์ด ์๋๋ผ** ์๋น์์ ๊ฒ์ดํธ ์์ฉ์ ์ ๋ฐ๋๋ค. ์ค๋ ์๋ฆฌ๋ FAILโPASS ๋ผ ์ํ ๋ฐฉํฅ์ด๋ค.
|
|
26
|
+
|
|
27
|
+
๐ฅ **์ด ๋ฆด๋ฆฌ์ค๊ฐ ์ค์ค๋ก ๋ธ ๊ตํ**: ๊ฒฐํจ ๋ท ์ค **์
์ ์ง๋จ์ด ๋ง์๊ณ ํ๋๋ ํ๋ ธ๋๋ฐ, ํ๋ฆฐ ํ๋๋ฅผ ์๋ ฅ์ผ๋ก๋ ๋ชป ์ก์๋ค.** ์๋น์-์ค์น ์์ฃผ๋ผ๋ ๊ณ๊ธฐ๋ ใ๋์๊ฐ๋ใ๋ฅผ ์ฌ์ง ใ๊ณ ์น ๊ฒ ์ณ์๊ฐใ๋ฅผ ๋ชป ์ฐ๋ค โ SKIP ์ผ๋ก ๋น ์ง๋ ํ์ ๊ทธ ๊ณ๊ธฐ๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ณด๋ ์๋ฆฌ๋ค. ์ก์ ๊ฒ์ **๋ค๋ฅธ ๊ณ์ด์ diff ๋ฅผ ๋ณด๋ธ ๊ฒ**์ด๋ค.
|
|
28
|
+
|
|
29
|
+
**๊ฐ์ ๋ฆด๋ฆฌ์ค์ ํจ๊ป ๋๊ฐ๋ ๊ฒ โ `harness-doctor` 30์ผ ์บ๋์ค ์๋ฆฌ (#468).** ์ง๋จ์ด ๋ธ ๊ฒ ์ค **์ง๊ธ ์ถํ๋ฌผ์ ์ด์ ์๋ ๊ฒ**๋ง ๊ณจ๋๋ค.
|
|
30
|
+
- **ํฌํ
ใ500์ค / 16์คํฌใ ์๊ณ ์ ๊ฑฐ** (`docs/platform_sustainability.md`, ์ด๋ฒ์ ์ถํ ๋์์ ํธ์
). ์ค์ ๋ 1,414์ค / 40์คํฌ์ด๊ณ , `harness-doctor` ๋ meta ํ๊น์์ ์ค์ ํ์ ยซํ์ ์๋ยป์ผ๋ก **๋นํ์ฑํ**ํ์ง ํฐ ์ซ์๋ก ๊ฐ์ง ์๋๋ค. ๐ฅ ๋ค์ด ๋ณธ์ฒด๋ณด๋ค ์ปธ๋ค โ ์ด ํฌํ
์ ์ฌํ๋ถ์์ด *"`500` ์ ์ด ํ์ผ ์ด๋์๋ ์๋ค(grep 0 hits)"* โ ยซ๋ฐ์ด ์ง์ด๋๋คยป ๋ก ๊ฒฐ๋ก ๋๋๋ฐ **๊ทธ grep ์ด ์๊ธฐ ํ์ผ๋ง ๋ดค๋ค.** ๊ตํ์ ยซํ๊ฐํ๋คยป๊ฐ ์๋๋ผ **ยซ๋ถ์ฌ ๊ฒ์ฌ๋ฅผ ํ๋ฆฐ ์ฝํผ์ค์ ๋๋ ธ๋คยป**
|
|
31
|
+
- **CATALOG ๋ฏธ๋ฑ์ฌ ์ ๋ณธ 7๊ฑด ๋ฑ์ฌ** (์ปจํธ๋กค `harness_6axis_framework`=2, ๋์ 7๊ฑด ์ ๋ถ 0). ๊ทธ์ค `fh_three_layer_canon.md` ๋ CLAUDE.md ๊ฐ **ํ๋
**์ผ๋ก ์ง์ ํ ๋ฌธ์๋ค โ ์์ธ์ด ๋ชป ์ฐพ๋ ํ์ ๋ฌธ์๋ ํ์ผ๋ช
์ ์ด๋ฏธ ์๋ ์ธ์
์ด ์๋ ํ ๋ถ์ฌ์ ๊ตฌ๋ณ๋์ง ์๋๋ค
|
|
32
|
+
- **`[[wikilink]]` ๊ท์ฝ ์ ์ธ** (`knowledge/shared/GLOSSARY.md` ์ ์ค ์ ). ์ถํ `.md` 156๊ฐ์ ์ ํ๋ฆฌ๋ ํ๊น **59 / ์ถํ 98**, ์ ์ธ์ด ์๋ฌด ๋ฐ๋ ์์๋ค. ๐ฅ ์ด๊ฑด **๊นจ์ง ์ฐธ์กฐ๊ฐ ์๋๋ผ ์ถ์ฒ ํ์**๋ค โ ๊ณ ์น๋ ค ๋ค์ง ๋ง๋ผ. ๋ฉ๋ชจ๋ฆฌ ์คํ ์ด๋ ์ด์์๋ณยท์ธ์
์ค์ฝํ๋ผ vendoring ์ ์๋ฆฌ๊ฐ ์๋๋ผ residency ์๋ฐ์ด๋ค
|
|
33
|
+
- ๐ฅ **`CLAUDE.md` ๊ฐ ์๊ธฐ ๊ธฐ๊ณ๋ฅผ ๊ฑฐ์ง ์์ ํ๊ณ ์์๋ค.** *"standpoint ๋ Prose-only today โ ๊ฒ์ฆํ๋ pre-commit ํ
๋ ํฝ์ค์ฒ๋ ์๋ค"* โ `validate_standpoint_leg()` ๋ `pre-commit:798` ์ ์ ยท `:1575` ํธ์ถ์ด๊ณ `test_marker_standpoint_lanes.sh` ๋ `selfcheck.sh:531` ๋ฐฐ์ ์ด๋ค. **๊ฐ์ ํ์ผ์ด ์ ๋ฐ๋๋ ์ ๊ณ ์์๋ค.** ์ด ๊ณ์ด์ ๋ ์ธ์ด ๊ตฌ์กฐ์ ์ผ๋ก ๋ชป ์ก๋๋ค โ ๊ท์น์ **์๊ธฐ์์ **์ ๊ทธ ๊ท์น์ด ์์ ํ๋ **๊ธฐ๊ณ**์ ๋์กฐํ๋ ๊ฒ์ฌ๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ stale ํ ยซ์์ง ์ ์ง์๋คยป ๋ ๊ฐ์ฅ ์กฐ์ฉํ ๋๋ฆฌํํธ๋ค: ์ ์งํ ๊ฒธ์์ฒ๋ผ ์ฝํ๋ฉด์ **์ด๋ฏธ ์๋ ์ปจํธ๋กค์ ์ฌ์ฉ์ ์ต์ ํ๋ค**
|
|
34
|
+
- **M-1(์์ฃผ 140k)์ ์ ๋ซ์๋ค.** ์์ฃผ ์์ฅ 32์ ์ ์ ๊ฒฐ๊ณผ **MยทSยทR ์ ๋ถ 0** โ ์ ๋จ์ ๋ ๋ฒ๊ฐ ์๋ค๋ ๊ฒ์ด ์ค์ธก์ด๋ค. ์ ์ผํ ๋ ๋ฒ๋ capability-level merge(ํ๋ณด 6๋ฌถ์)์ด๊ณ , **๊ทธ ๋ณํฉ์ด ์ค์ ๋ก ๋ฌธ์๋ฅผ ์ค์ด๋์ง๋ UNMEASURED**
|
|
35
|
+
|
|
36
|
+
**๋ช
์ ์์ฌ**: `package_coverage_check.sh` ๋ ใ์ฐธ์กฐ๋ ๊ฒฝ๋ก๊ฐ ์ถํ๋๋ใ๋ฅผ ๋ณด์ง ใ**์ถํ๋ ๋ ์ธ์ ์ฃผ์ฒด๊ฐ ์ถํ๋๋**ใ๋ฅผ ์ ๋ณธ๋ค โ ๋ค ๊ฒฐํจ ์ค ์
์ rc=0 ์ผ๋ก ํต๊ณผ์์ผฐ๋ค. ๊ทธ ๊ฐญ์ ์ด๋ฒ์ ์ ๋ซ์๋ค.
|
|
37
|
+
|
|
13
38
|
### [2.5.1] โ 2026-08-19
|
|
14
39
|
|
|
15
40
|
**์ง์
์ ํจ๋ฆฌํฐ โ ๊ท์น์ด ์ถํ๋ผ์ผ ๋ฐํํ๋ค.** 2.5.0 ์งํ `โฃ-b` ๋๋ฆฌํํธ ๊ฒ์ฌ๊ฐ **AGENTS.md ์ ๊ณต์ ์ฒดํฌ์์ ๊ท์จ์ด ์๋ค**๋ฅผ ๋๋ค. CLAUDE.md ์๋ ์๊ณ Codex ์ง์
์ ์๋ ์๋ ์ํ์๊ณ , ๊ทธ ์ํ์์๋ ๋น-Claude ๋ฐํ์์ ๊ทธ ๊ท์น์ด **๋ณด์ด์ง ์๋๋ค**(gate-locality). ์ด ๋ฆด๋ฆฌ์ค๋ ๊ทธ ํ ํญ๋ชฉ์ ์๋น์์๊ฒ ์ค์ ๋ก ๋ณด๋ด๊ธฐ ์ํ ๊ฒ์ด๋ค.
|
|
@@ -202,6 +202,50 @@ re-checks** it against the artifact (phantom-quench back-trace) before accepting
|
|
|
202
202
|
source-grounded is **dropped, not judged**. No sidecar-only verdict (no weak-local-judge regression).
|
|
203
203
|
Local 4090 = **canary tier** (evidence-of, never terminal verdict).
|
|
204
204
|
|
|
205
|
+
๐ฅ **What you SEND decides which axis you get โ put the MARKER in the payload, not just the diff**
|
|
206
|
+
(2026-08-19). Sidecars have been receiving the *diff* only. That buys a review of the **code** and
|
|
207
|
+
buys nothing on the **record**: the Axes 2+3 marker is self-attested, and this repo has already
|
|
208
|
+
written down that the closing move is *"cross-family reading that marker"* โ then never wired the
|
|
209
|
+
marker into the thing that recruits cross-family. Measured twice: (a) a release marker's false
|
|
210
|
+
`not-applicable` passed the new typed lanes untouched, because **form was correct**; (b) this skill's
|
|
211
|
+
own dispatch on 2026-08-19 sent a diff and no marker, so the round could not have caught a false
|
|
212
|
+
axis claim even in principle.
|
|
213
|
+
|
|
214
|
+
**So the payload is two parts**: the frozen diff **and** the marker for this change โ **as it stands
|
|
215
|
+
at dispatch time**: `axes-run:` ยท `controls:` ยท `standpoint:` ยท `thirdparty:` ยท `residual:`.
|
|
216
|
+
|
|
217
|
+
๐ฅ **`crossfamily:` is NOT in the payload โ it is this round's OUTPUT.** Step 6 below says every rung
|
|
218
|
+
*emits* that value and "the rung is not done until its verdict is recorded", so requiring it in the
|
|
219
|
+
thing you send is circular: you would be shipping a field this dispatch has not produced yet. Send the
|
|
220
|
+
marker with that line **absent or `UNKNOWN`**, and fill it from the result. (Caught by a blind
|
|
221
|
+
floor-tier sim of this very paragraph, 2026-08-19 โ the first draft listed `crossfamily:` among the
|
|
222
|
+
payload fields and no reader could have satisfied it.) Ask the sidecar one extra
|
|
223
|
+
question: *"does the record match the diff โ is any axis claimed that the diff shows no trace of, and
|
|
224
|
+
is any residual missing that the diff implies?"*
|
|
225
|
+
|
|
226
|
+
โ ๏ธ **Scope, deliberately narrow.** This asks whether the record is **consistent with the artifact**.
|
|
227
|
+
It does NOT ask the sidecar to score honesty โ ยซis this marker truthfulยป is a *conclusion*, and
|
|
228
|
+
ยงMechanization Boundary forbids freezing that into machinery. Consistency is checkable from two
|
|
229
|
+
documents; honesty is not.
|
|
230
|
+
โ ๏ธ **You cannot observe that the sidecar READ it โ say so rather than implying otherwise.** Putting the
|
|
231
|
+
marker in the payload and the sidecar actually using it are different events, and nothing here
|
|
232
|
+
distinguishes them: a silently-ignored marker looks exactly like a marker that was read and raised
|
|
233
|
+
nothing. The cheap partial anchor is to require the return to **quote one marker line it checked** โ
|
|
234
|
+
a reply that quotes nothing did not demonstrably read it. That is evidence-of-reading, not proof, and
|
|
235
|
+
it does not close ยงMechanization Boundary's named self-attestation residual. Three independent
|
|
236
|
+
readers flagged this same gap on the day the paragraph was written (a peer session, and two blind
|
|
237
|
+
floor-tier sims), which is why it is stated here instead of left to the reader to notice.
|
|
238
|
+
|
|
239
|
+
โ ๏ธ **Prose, not a check** โ measured recurrence is 2, below this repo's own Nโฅ3 bar
|
|
240
|
+
(`[[feedback_mechanize_at_repetition_prose_before]]`). On the third occurrence, mechanize it here.
|
|
241
|
+
โ ๏ธ **Residency still governs**: a marker can name company assets. Sanitize before any external-family
|
|
242
|
+
dispatch, exactly as with the diff โ the marker is not exempt because it is metadata.
|
|
243
|
+
|
|
244
|
+
*Origin*: sister-asset read of `raphaelchristi/harness-evolver`'s `harness-critic` agent, whose whole
|
|
245
|
+
role is auditing the **evaluator** rather than the artifact. Its detection signatures (score jumps,
|
|
246
|
+
suspiciously fast convergence) do **not** port โ FH markers carry no score โ but the *target* does.
|
|
247
|
+
Full assessment incl. what was deliberately not imported: `tracks/_audit/proposal_2026-08-19_sister_harness-evolver.md`.
|
|
248
|
+
|
|
205
249
|
**Target freeze โ a prior drop reason, checked before any of the above (2026-08-17).** Grounding a
|
|
206
250
|
finding against *today's* tree proves nothing if the sidecar reviewed *yesterday's*. Pin before
|
|
207
251
|
dispatch and verify on return:
|
|
@@ -46,6 +46,37 @@ the session card and CATALOG, exactly as the greeting path would.
|
|
|
46
46
|
End with "pick a door, say a phrase, or just state your task". Do not auto-run anything โ this
|
|
47
47
|
command is a map, not a dispatcher.
|
|
48
48
|
|
|
49
|
+
|
|
50
|
+
## Step 3.5 โ ๊ฐ์ด๋ ยท Q&A (๐ ๋ฌธ์ ๊ณจ๋์ ๋๋ง ์ง์
)
|
|
51
|
+
|
|
52
|
+
๐ฅ **Q&A ๋ net-new ๊ธฐ๋ฅ์ด ์๋๋ค.** FH ์ ๋ํด ๋ฌป๊ณ ๋ตํ๋ ๊ฒ์ ์ด๋ฏธ ๋๋ค(CLAUDE.md ๊ฐ ์์ฃผ๋ผ
|
|
53
|
+
์ธ์
์ด ๋ฌธยท๊ฒ์ดํธยท์คํฌ์ ์๋ค). ์ด ์ ์ด ๋ํ๋ ๊ฒ์ **ํ๋๋ฟ**์ด๋ค โ ใ๋ฌด์์ ๊ทผ๊ฑฐ๋ก ๋ตํ๋,
|
|
54
|
+
๊ทธ๋ฆฌ๊ณ ์์ผ๋ฉด ์๋ค๊ณ ๋งํ๋คใ๋ **๊ณ์ฝ**. ๊ทธ๋์ ์ ์คํฌ์ ๋ง๋ค์ง ์๊ณ ์ฌ๊ธฐ ๋ถ์ธ๋ค.
|
|
55
|
+
|
|
56
|
+
**โ ๊ฐ์ด๋** โ `docs/USER_GUIDE.md` ์ **๊ฒฝ๋ก์ 3์ค ๋ชฉ์ฐจ**๋ฅผ ์ถ๋ ฅํ๋ค. ์น์ธํ๋ฉด ํ๋ซํผ opener ๋ฅผ
|
|
57
|
+
์ ์ํ๋ค(`uname -s`: Darwinโ`open` ยท Linuxโ`xdg-open` ยท MINGW/MSYSโ`start`). opener ๊ฐ ์์ผ๋ฉด
|
|
58
|
+
์กฐ์ฉํ ๊ฑด๋๋ด๋ค โ ๊ฒฝ๋ก๋ ์ด๋ฏธ ๋๊ฐ์ผ๋ฏ๋ก ์์ค์ด ์๋ค.
|
|
59
|
+
๐ฅ **์ ๋ฌธ ์ธ๋ผ์ธ ์ถ๋ ฅ ๊ธ์ง.** ์๋ ์คํ๋ ์ ํ๋ค.
|
|
60
|
+
|
|
61
|
+
**โ Q&A** โ 1๋ฌธ 1๋ต. ๊ทผ๊ฑฐ๋ ์๋ ์ฝํผ์ค **์์์๋ง** ์ฐพ๋๋ค:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
1 docs/USER_GUIDE.md ์ฌ์ฉ๋ฒ ยท FAQ
|
|
65
|
+
2 CHEATSHEET.md ๋ช
๋ น ยท ํธ๋ฆฌ๊ฑฐ ๋ฌธ๊ตฌ
|
|
66
|
+
3 knowledge/shared/GLOSSARY.md ์ฉ์ด
|
|
67
|
+
4 README.md ยงGet started/ยงLearn more ์ค์น ยท ์ง์
๊ฒฝ๋ก
|
|
68
|
+
5 CATALOG.md ใ์์ ์ ๋ญ ํ์งใ
|
|
69
|
+
6 ์ค์น๋ SKILL.md frontmatter ใ๋ฌด์จ ์คํฌ ์์ดใ
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**degrade โ ์ฝํผ์ค์ ์์ผ๋ฉด**
|
|
73
|
+
๐ฅ **์ง์ด๋ด์ง ์๋๋ค.** ใ๋ชป ์ฐพ์ โ ์ฝํผ์ค N๊ฐ๋ฅผ ๋ดค๊ณ ์ฌ๊ธฐ์ ์๋คใ + **๋ค์ ํ ๊ฑธ์**(์ด๋ ํ์ผ์
|
|
74
|
+
์ด์ง ยท `/install-doctor` ๊ฐ์ ์ค์ ์ง๋จ ๊ฒฝ๋ก)์ ์ค๋ค. ใ์๋ง ์ด๋ด ๊ฒ์ด๋คใ ํํ์ ๋ต์ **๊ธ์ง**๋ค.
|
|
75
|
+
์ด๊ฑด ยงInstrument Calibration ์ ยซ๋ฏธ์ธก์ ์ 0์ผ๋ก ๋ ๋ํ์ง ์๋๋คยป ์ ๊ฐ์ ๊ท์จ์ด๋ค.
|
|
76
|
+
๋ต๋ง๋ค `file:line` ์ ๋จ๋ค โ ๊ทผ๊ฑฐ ์๋ ๋ฌธ์ฅ์ ํฌํ
์ด๋ค.
|
|
77
|
+
|
|
78
|
+
โ ๏ธ ์ฝํผ์ค ๋ฐ ์ง๋ฌธ(๋๋ฉ์ธ ์์
ยท ์ฝ๋)์ ์ด ์ ์ด ์๋๋ผ ํ์๋๋ก ์ฒ๋ฆฌํ๋ค. Q&A ๋ **FH ์ฌ์ฉ๋ฒ**์ฉ์ด๋ค.
|
|
79
|
+
|
|
49
80
|
## Done When
|
|
50
81
|
|
|
51
82
|
| Condition | Check class |
|
|
@@ -214,7 +214,7 @@ fi
|
|
|
214
214
|
No Stop hook is required. After the Codex goal/session completes, resolve changed files with git and run:
|
|
215
215
|
|
|
216
216
|
```bash
|
|
217
|
-
FH_BACKEND=codex npx @chrono-meta/fh-gate "{changed-files}" quick codex-goal
|
|
217
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate "{changed-files}" quick codex-goal
|
|
218
218
|
```
|
|
219
219
|
|
|
220
220
|
For high-stakes or external-facing work, use `full` instead of `quick`. Treat `BLOCKED` or `ESCALATE` the same as the Claude path: fix and re-run the gate, or surface the decision to the user.
|
|
@@ -149,7 +149,13 @@ running tool itself). Full procedure: `knowledge/shared/harness-core/measurement
|
|
|
149
149
|
`M-n ยท <verbatim row text or its threshold> ยท <measured value>`. If you cannot quote the row, **you do not
|
|
150
150
|
have a finding** โ downgrade to an observation. Origin (2026-07-20, instrument defect n+4, the *fourth* in
|
|
151
151
|
a single run): a run fired `M-1 ยท CLAUDE.md 816 lines โ exceeds the FH threshold of 500`. The string `500`
|
|
152
|
-
|
|
152
|
+
did not occur anywhere in this file at the time (a later grep finds 2 โ both in this narrative, added by
|
|
153
|
+
this very post-mortem; the self-referential claim drifted and is corrected here rather than re-asserted).
|
|
154
|
+
๐ฅ **And that grep was scoped wrong**: it searched this file only. The 500 was NOT invented from nothing โ
|
|
155
|
+
`docs/platform_sustainability.md` carried it as a live standard until 2026-08-20, contradicting this row.
|
|
156
|
+
The lesson is not "the run hallucinated" but **"the absence check was run against the wrong corpus"**
|
|
157
|
+
([[feedback_absence_measurement_needs_control]] โ a no-hit grep is evidence only when its scope covers
|
|
158
|
+
where the thing would actually live). The meta-harness row it claimed to read says raw
|
|
153
159
|
line count is **"Not a verdict."** So the run invented a threshold *and* fired a row this skill explicitly
|
|
154
160
|
disables for meta-harnesses โ the exact recurrence of the 2026-07-15 inversion documented below, which had
|
|
155
161
|
already been patched *in the skill*. The patch held; the **run** ignored it. A verdict grounded in a
|
|
@@ -54,6 +54,38 @@ Session end
|
|
|
54
54
|
โ edit-manifest VERIFY: check pending predictions in edit_manifest.yaml
|
|
55
55
|
โ memory-hygiene scan: staleness check on memory/*.md entries (skip if < 7 days)
|
|
56
56
|
โ
|
|
57
|
+
[Step 0-d] Session Retrospective (close_retro ๊ฐ granted ์ผ ๋๋ง)
|
|
58
|
+
๐ฅ ์ ์คํฌ์ ๋ง๋ค์ง ์๋๋ค โ ํ๊ณ ์ฐ์ถ์ ๊ทธ๋๋ก Step 2(contention-layer) โ Step 3 โ 3.5(๋ฑ๊ธ)
|
|
59
|
+
๋ก **์ด๋ฏธ ์๋ ํ์ดํ๋ผ์ธ**์ ํ๋ค. ใ๊ฐ์ ํฌ์ธํธ ์ ๋ฆฌใ๊ฐ ๊ฑฐ๊ธฐ์ ๊ณต์ง๋ก ๋ถ๋๋ค.
|
|
60
|
+
|
|
61
|
+
์ง์
์กฐ๊ฑด (๊ธฐ๊ณ์ , ์ด ์์๋ก):
|
|
62
|
+
1. `tracks/_meta/user_adaptation_profile.md` frontmatter ์ `close_retro`
|
|
63
|
+
granted โ ์คํ
|
|
64
|
+
declined โ ๊ฑด๋๋ด๋ค. **๋ค์ ๋ฌป์ง ์๋๋ค**(operational_adaptation.md no-re-nag)
|
|
65
|
+
unset / UAP ๋ถ์ฌ / ephemeral โ **์คํํ์ง ์๊ณ , ์ง์ด๋ด์ง๋ ์๋๋ค.**
|
|
66
|
+
์ด์์ ๋งฅ๋ฝ์ด๋ฉด(= `CLAUDE.local.md` ์กด์ฌ, `psa_detect_operator_context()` ์ ๊ฐ์
|
|
67
|
+
ํ๋ณ์) **์ต์ด ๋ง๊ฐ 1ํ๋ง** ์ ์ํ๊ณ ๋ต์ UAP ์ ๊ธฐ๋กํ๋ค. ๊ทธ ์ด์ ๋ฌป์ง ์๋๋ค.
|
|
68
|
+
๐ฅ `CLAUDE.local.md` ์กด์ฌ๊ฐ ํ๋ณ์์ธ ์ด์ ๋ ๊ทธ๊ฒ์ด **gitignored** ๋ผ fresh cloneยทCI ์ฒดํฌ์์ยท
|
|
69
|
+
์ํฌํธ๋ฆฌ ์ด๋์๋ ์ ๋ฐ๋ผ์ค๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ๊ฐ๋ ํ๋ณด: ใtracks/_meta ๊ฐ ๋น์ด์์ง ์์ใ โ
|
|
70
|
+
`.gitkeep` ์ด tracked ๋ผ **fresh clone ์ด ๋ง์กฑ์ํจ๋ค**(psa_scan_lib.sh ์ฃผ์์ ์ค์ธก).
|
|
71
|
+
๐ฅ **์ด์์ ๋งฅ๋ฝ์ด๋ผ๊ณ ์๋ granted ๊ฐ ์๋๋ค.** ํ์ผ์ด ์กด์ฌํด์ ์น์ธ๋๋ ๊ฒ ์๋๋ผ
|
|
72
|
+
**์ด์์ ๋ฐํ๊ฐ ์ธ์ฉ๋ผ ๊ธฐ๋ก๋๋ ์๊ฐ** ์น์ธ๋๋ค. ์ ์๋ ์ธ์
์ด ์๊ธฐ ๊ถํ์ ๋ํ๋ ํํ๋ค.
|
|
73
|
+
|
|
74
|
+
์ฐ์ถ: ์ค๋์ `tracks/_meta/fh_signal_{date}_{source}.md` ์ `retro: close` ๋ฅผ ๋ฌ๊ณ
|
|
75
|
+
`## Session Retrospective` 4ํ๋๋ฅผ ์ฑ์ด๋ค(ํ์ ์ ๋ณธ = fh_detail_protocols.md).
|
|
76
|
+
ใ์์ใยทใ0ใ๋ ์ ํจํ ๊ฐ์ด๊ณ , **๋น์ฐ๋ ๊ฒ๋ง ์ ๋๋ค.**
|
|
77
|
+
|
|
78
|
+
Done When:
|
|
79
|
+
+ ์ค๋์ signal ํ์ผ์ด ์กด์ฌํ๊ณ `retro: close` ๋ฅผ ๋ฌ๊ณ ์๋ค โ mandatory-pass
|
|
80
|
+
+ Session Retrospective 4ํ๋๊ฐ ์ ๋ถ ์ฑ์์ก๋ค โ mandatory-pass
|
|
81
|
+
+ ์ ์ ๊ฑด์๋ **์ธ์์ง ํ์ํ์ง ์์๋ค** โ measured
|
|
82
|
+
+ FH Registration Candidate ๊ฐ ๋น๋ฉด ๊ทธ ์ด์ ๊ฐ ํ ์ค ์ ํ ์๋ค โ mandatory-pass
|
|
83
|
+
|
|
84
|
+
โ ๏ธ `session_close_check.sh` ์ ๊ธฐ๊ณ ๊ฒ์ฌ๋ฅผ **๋ถ์ด์ง ์๋๋ค.** ๊ฐ์ธ๊ฒ ๋ถ์ผ ์ ์๋ ํํ๋
|
|
85
|
+
ยซ์ค๋์ signal ์ด ์๋ยป ์ธ๋ฐ ๊ทธ๊ฑด *์กด์ฌ*๋ง ์ฌ๊ณ *ํ๊ณ ํ๋*๋ ๋ชป ์ฐ๋ค โ CLAUDE.md ๊ฐ โฃ ๋ฉ๋ชจ๋ฆฌ
|
|
86
|
+
์์์ ๋ํด ๊ฐ์ ์ด์ ๋ก ๊ฒ์ฌ๋ฅผ ๋บ๋ค(ยซa check that can be satisfied without doing the work
|
|
87
|
+
is a decorationยป). ๊ฐ์ ํ๋จ์ ๊ทธ๋๋ก ์ ์ฉํ๋ค.
|
|
88
|
+
|
|
57
89
|
[Step 0] Regression Guard
|
|
58
90
|
โ Check: does anything from this session conflict with or regress a validated skill?
|
|
59
91
|
โ โ Regression detected: flag, route to contention-layer
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# [CALIBRATION FIXTURE โ known-negative] ์ ๋ณด๊ฒฝ๊ณ ๋ถ๋ณ์์ด **๋น ์ง** ํฉ์ฑ ๋ช
์ธ์
|
|
2
|
+
|
|
3
|
+
> ๐ฅ **์ด๊ฒ์ ์คํ๋๋ ์์ด์ ํธ ์ ์๊ฐ ์๋๋ค.** `scripts/blackbox_invariant_check.sh` ์
|
|
4
|
+
> ์บ๋ฆฌ๋ธ๋ ์ด์
์ ์ค **๋งํ์ผ ํ๋ ์ชฝ**(expect = FAIL, exit 1)์ด๋ค. ์ง์
|
|
5
|
+
> `agent_boundary_known_positive.md`.
|
|
6
|
+
>
|
|
7
|
+
> ์ด ํ์ผ์ด ํ์ํ ์ด์ : ์์ฑ๋ง ์ธ์ฐ๋ฉด ใ๋ถ๋ณ์์ด ์ด์์๋คใ์ ใ๊ฒ์ฌ๊ธฐ๊ฐ ์๋ฌด๊ฒ๋ ์ ๋ณธ๋คใ๊ฐ
|
|
8
|
+
> ๊ฐ์ ์ด๋ก์ผ๋ก ๋ณด์ธ๋ค. ์์ฑ arm ์ ๊ณ๊ธฐ์ **ํ๋ณ๋ ฅ์ด ์๋์ง**๋ฅผ ์ฌ๋ ์๋ฆฌ๋ค.
|
|
9
|
+
>
|
|
10
|
+
> **์๋์ ์ผ๋ก ์๋ฐํ๋ค** โ ๋ถ๋ณ์ ๋ฌธ์ฅ๋ค์ ์ ๋ถ ๋บ๋ค. ์ค ์๋ณ์๋ ๋ด์ง ์๋๋ค(๊ทธ๊ฑด T1 ์ด
|
|
11
|
+
> ์ก๋ ๋ณ๊ฐ์ ์๋ฐ์ด๊ณ , ์ฌ๊ธฐ์ ๊ทธ๊ฒ๊น์ง ํธ๋ฆฌ๊ฑฐํ๋ฉด ์ด๋ ์ถ์ด ๋ง์๋์ง ํ๋ ค์ง๋ค).
|
|
12
|
+
|
|
13
|
+
## ์
๋ ฅ ์ธํฐํ์ด์ค
|
|
14
|
+
|
|
15
|
+
์ธ๋ถ findings ๋ฅผ ๋ฐ๋๋ค. `finding_id` ๋ ๋ถํฌ๋ช
์๋ณ์๋ค(์ดํ ์ ์ฝ ์์).
|
|
16
|
+
`location` ์ ํน์ ์ ๋์ด๊ฐ ๋ณด์ด๋ฉด ํ๊ธฐํ๋ค(denylist).
|
|
17
|
+
|
|
18
|
+
## ํฌ์ ๊ท์น
|
|
19
|
+
|
|
20
|
+
์ฃผ์
ํ์ดํ๊ฐ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ์ง์ด๋ค. ๋ฐ์ ์
๋ ฅ์ ๊ทธ๋๋ก ๋ด์ ํ์๋ก ์ ๋ฌํ๋ค.
|
|
21
|
+
๊ธ์ง ๋์์ ์ด ๋ ํฌ ๋ฐ์ ํ์ผ์ด๋ค.
|
|
22
|
+
|
|
23
|
+
## ์์ ๊ท์น
|
|
24
|
+
|
|
25
|
+
1. ํ์ ๊ทผ๊ฑฐ๋ ์ธ์ฉ ๊ฐ๋ฅํ ์ฆ๊ฑฐ๋ก ๋จ๊ธด๋ค.
|
|
26
|
+
2. ์ฆ๊ฑฐ ์๋ ์ถ์ ์ ์ ๋ขฐ๋๋ฅผ ์ฌ๋ฆฌ์ง ์๋๋ค.
|
|
27
|
+
3. ์คํจ๋ฅผ ์ฑ๊ณต์ผ๋ก ์ผํค์ง ์๋๋ค.
|
|
28
|
+
4. ์ฌํ ์ ์ฐจ ์์ด ์์ ์์ ์ ์ํ์ง ์๋๋ค.
|
|
29
|
+
5. ๋๋ฉ์ธ ๋ฐ์ดํฐ๋ ๋ก๊ทธ์ ๋จ๊ธฐ์ง ์๋๋ค.
|
|
30
|
+
6. ReadยทGrepยทGlob ์ผ๋ก ๊ธ์ง๋ ์์ค๋ฅผ ์ด์ง ์๋๋ค.
|
|
31
|
+
7. ์ ๋ขฐ๋๋ ๊ทผ๊ฑฐ์ ๊ฐ๋์ ๋ฐ๋ผ ์ ํ๋ค.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# [CALIBRATION FIXTURE โ known-positive] ์ ๋ณด๊ฒฝ๊ณ ๋ถ๋ณ์ ํฉ์ฑ ๋ช
์ธ์
|
|
2
|
+
|
|
3
|
+
> ๐ฅ **์ด๊ฒ์ ์คํ๋๋ ์์ด์ ํธ ์ ์๊ฐ ์๋๋ค.** `scripts/blackbox_invariant_check.sh` ์
|
|
4
|
+
> ์บ๋ฆฌ๋ธ๋ ์ด์
์ ์ค **ํต๊ณผํด์ผ ํ๋ ์ชฝ**(expect = PASS, exit 0)์ด๋ค. ์ง์
|
|
5
|
+
> `agent_boundary_known_negative.md` ์ด๊ณ ๊ทธ์ชฝ์ ๋งํ์ผ ํ๋ค(expect = FAIL, exit 1).
|
|
6
|
+
>
|
|
7
|
+
> **์ ์ค๋ฌผ ๋ช
์ธ์๋ฅผ ์ฐ์ง ์๋**: ์ค๋ฌผ์ ํ์ด ๊ณ์ ๊ณ ์น๋ ์ด์์๋ ๋ฌธ์๋ผ, ๊ทธ๊ฒ์ ์์ฑ
|
|
8
|
+
> arm ์ผ๋ก ์ฐ๋ฉด ๊ณ๊ธฐ์ ํ์ ์ด ๋จ์ ํธ์ง์ ๋ฐ๋ผ ์กฐ์ฉํ ๋ค์งํ๋ค(๊ฐ์ฌ ๋์์ ์ผ๋ ค์ผ ํ๋ค).
|
|
9
|
+
> ์ค๋ฌผ ๋ช
์ธ์๋ ์ธ์ ์๋ ๊ธฐ๋ณธ ๋์์ผ๋ก ๊ณ์ ๊ฒ์ฌ๋๋ค โ ์ด ํ์ผ์ด ๊ทธ๊ฒ์ ๋์ฒดํ์ง ์๋๋ค.
|
|
10
|
+
>
|
|
11
|
+
> ์๋ณ์๋ ์ ๋ถ ํฉ์ฑ์ด๋ค. ์ค์ ์๋น์คยท๋ ํฌยทํ๋ ์ด๋ฆ์ ํ ๊ฑด๋ ๋ด์ง ์๋๋ค.
|
|
12
|
+
|
|
13
|
+
## ์
๋ ฅ ์ธํฐํ์ด์ค
|
|
14
|
+
|
|
15
|
+
์ธ๋ถ ์ ์ ๋ถ์์์ ์จ findings ๋ฅผ ๋ฐ๋, ์ด ์์ด์ ํธ๋ ๊ทธ findings ์ **์๋ณธ ์์ค**๋ฅผ ์ ๋
|
|
16
|
+
์ฝ์ง ์๋๋ค. ์ฃผ์
์ธก์ด ํฌ์ํ ๊ฒฐ๊ณผ๋ง ๋ณธ๋ค.
|
|
17
|
+
|
|
18
|
+
- `finding_id` โ ๋ถํฌ๋ช
์๋ณ์. ์ดํ ์ ์ฝ: `^[a-f0-9]{6,64}$` ๋ง ํ์ฉํ๋ค.
|
|
19
|
+
์์ ๋ฌธ์์ด์ด๋ฉด ๊ฒฝ๋กยท๋ฐ์ท๋ฅผ ์ค์ด ๋๋ฅด๋ ์ฐํ ์ด๋ฐ ์ฑ๋์ด ๋๋ค.
|
|
20
|
+
- `location` โ allowlist ์ ๊ท์ `^<FE-REDACTED>::[0-9]+$` ๋ง ํ์ฉํ๋ค.
|
|
21
|
+
denylist(โํน์ ์ ๋์ด๊ฐ ๋ณด์ด๋ฉด ํ๊ธฐโ)๋ ์๋๊ฒฝ๋กยท`file:///` ๋ฑ์ผ๋ก ๋ซ๋ฆฐ๋ค.
|
|
22
|
+
|
|
23
|
+
## ํฌ์ ๊ท์น
|
|
24
|
+
|
|
25
|
+
**ํฌ์์ ์ํํ๋ ์ฃผ์ฒด๋** ์ฃผ์
์ธก(ํ์ดํ๋ผ์ธ)์ด๋ค. ์ํ ์ฃผ์ฒด๋ฅผ ์ ์ง ์์ผ๋ฉด redact ๊ท์น์ด
|
|
26
|
+
์ํ์ ์๋ ๊ณต์ํ๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์ด ์์ด์ ํธ๋ ์
๋ ฅ์ **"๊ทธ๋๋ก" ์ ๋ฌํ์ง ์๋๋ค** โ
|
|
27
|
+
ํฌ์๋ ํํ๋ง ํ์๋ก ๋๊ธด๋ค.
|
|
28
|
+
|
|
29
|
+
๊ธ์ง ๋์์ **์์น๊ฐ ์๋๋ผ ์ถ์ฒ**๋ก ์ ์ํ๋ค. ๋ ํฌ ์์ ๋ณต์ฌ๋ ์ฌ๋ณธ, ๋น๋ ์ฐ์ถ๋ฌผ,
|
|
30
|
+
`sourcesContent` ๋ฅผ ๋ด์ ์์ค๋งต ์ ๋ถ ๋์ผํ๊ฒ ๊ธ์ง๋ค. "๋ ํฌ ๋ฐ"์ผ๋ก ์ ์ํ๋ฉด ๋ ํฌ ์
|
|
31
|
+
์ฌ๋ณธ์ด ํต์งธ๋ก ๋ฉด์ ๋๋ค.
|
|
32
|
+
|
|
33
|
+
### ํ์ฌ ๋ฐฐ์ ์ํ
|
|
34
|
+
|
|
35
|
+
์ด ํฌ์ ํ์ดํ๋ **์์ง ์ฝ๋๋ก ๊ตฌํ๋์ด ์์ง ์๋ค.** ๋ฏธ๊ตฌํ ํต์ ๋ฅผ ๊ตฌํ๋ ๊ฒ์ฒ๋ผ ์ ์ผ๋ฉด
|
|
36
|
+
๊ทธ ์์ฒด๊ฐ ๋๊ด ๋ฐฉํฅ ๊ฒฐํจ์ด๋ค.
|
|
37
|
+
|
|
38
|
+
๊ทธ๋์ **์ฌ๋กฏ์ ํ์ฌ ์ฌ์ฉํ์ง ์๋๋ค.** ์ ์๋์ง ์์ ์ ์ฐจ์ must-never ๋ถ๋ณ์์ ์น์ง
|
|
39
|
+
์๊ธฐ ์ํด, ํ์ฑํ **๊ฒฝ๋ก๋ฅผ ๋์ง ์๋๋ค.**
|
|
40
|
+
|
|
41
|
+
## ์์ ๊ท์น
|
|
42
|
+
|
|
43
|
+
1. ํ์ ๊ทผ๊ฑฐ๋ ์ธ์ฉ ๊ฐ๋ฅํ ์ฆ๊ฑฐ๋ก ๋จ๊ธด๋ค.
|
|
44
|
+
2. ์ฆ๊ฑฐ ์๋ ์ถ์ ์ ์ ๋ขฐ๋๋ฅผ ์ฌ๋ฆฌ์ง ์๋๋ค.
|
|
45
|
+
3. ์คํจ๋ฅผ ์ฑ๊ณต์ผ๋ก ์ผํค์ง ์๋๋ค.
|
|
46
|
+
4. ์ฌํ ์ ์ฐจ ์์ด ์์ ์์ ์ ์ํ์ง ์๋๋ค.
|
|
47
|
+
5. ๋๋ฉ์ธ ๋ฐ์ดํฐ๋ ๋ก๊ทธ์ ๋จ๊ธฐ์ง ์๋๋ค.
|
|
48
|
+
6. **๋ฉ๋ชจ๋ฆฌ ์ฐ๊ธฐ ๊ธ์ง** โ **์ถ์ฒ๊ฐ ํ์ดํธ๋ฐ์ค๋ฉด ์ ์ฅํ์ง ์๋๋ค.** ์ ์ฅ๋ ๊ฐ์ ๋ค์ ํธ์ถ์
|
|
49
|
+
์๋ ์ฃผ์
๋๋ฏ๋ก, ์ฝ์ง ์์ ๊ธฐํ์กฐ์ฐจ ์์ด ์ธ์
๊ฒฝ๊ณ๋ฅผ ๋์ด ์ค์ผ์ด ์ง์๋๋ค.
|
|
50
|
+
7. ์ํ ๋ถ๋ณ์: ์ธ๋ถ findings ๊ทผ๊ฑฐ๋ง ์๊ณ ๋ฐํ์ ์ฆ๊ฑฐ(XML)๊ฐ ์์ผ๋ฉด ์ ๋ขฐ๋๋ MEDIUM ์
|
|
51
|
+
๋์ง ๋ชปํ๋ค. ์ด ์กฐํญ์ **๋ค๋ฅธ ๋ชจ๋ ์กฐํญ์ ์ฐ์ **ํ๋ค.
|
|
52
|
+
8. ๊ธ์ง๋ ์์ค์ **๋ฅ๋ ํ์**์ ํ์ง ์๋๋ค. ์ด ๊ธ์ง๋ **๋๊ตฌ ๋ฌด๊ด**์ด๋ค โ ReadยทGrepยทGlob
|
|
53
|
+
๋ฟ ์๋๋ผ `Bash` ๋ฅผ ๊ฒฝ์ ํ ์ด๋๋ ๊ฐ์ ์๋ฐ์ด๋ค. ๋๊ตฌ๋ฅผ ์ด๊ฑฐํ๋ ํํ๋ก ์ ์ผ๋ฉด ์ด๊ฑฐ๋์ง
|
|
54
|
+
์์ ๊ฒฝ๋ก๊ฐ ๊ทธ๋๋ก ์ฐํ๋ก๊ฐ ๋๋ค.
|
|
55
|
+
ํ์ ์ฑ๋(๋ฆฌํฌํธยท์ฒจ๋ถ)์์ **์กฐ์ฐ**ํ ๊ฒฝ์ฐ๋ ๋ณ๊ฐ๋ค: ์ด๊ธฐ ์ ์๋ ์ ์ ์์ผ๋ฏ๋ก
|
|
56
|
+
"์ฝ์ง ๋ง๋ผ"๋ ์ดํ ๋ถ๊ฐ๋ฅํ ์๋ฌด๊ฐ ๋๋ค. ์กฐ์ฐ ์์๋ ์ค๋จํ๊ณ ๋ณด๊ณ ํ๋ค.
|
|
@@ -590,12 +590,25 @@ EOF
|
|
|
590
590
|
# ([[feedback_ci_measures_state_not_transition]] ์ ๋ฐ์ดํฐ ํ๋ณธ).
|
|
591
591
|
# ์ต์ปค๋ฅผ **์ถ์ ๋๋ ํ์ผ**๋ก ์ฎ๊ธด๋ค โ `.claude/capabilities/*.cap` ์ ์ปค๋ฐ๋ผ ์์ด
|
|
592
592
|
# ์ด๋ ์ฒดํฌ์์์์๋ ์กด์ฌํ๋ค. ์์ง ๊ฒฝ๋ก๊ฐ ์ฃฝ์ผ๋ฉด ์ด ์นด์ดํธ๊ฐ 0 ์ด ๋์ด ๋นจ๊ฐ์ง๋ค.
|
|
593
|
+
# ๐ฅ 2026-08-20 โ ์ด ๋ ์ธ์ **๋ ๊ตฐ๋ฐ๊ฐ ์ ์์ ์ฒดํฌ์์์ ๊ฒฐ๋ฐ**๋ผ ์์๊ณ , ์๋น์ ์ค์น์์
|
|
594
|
+
# ์ ๊ฑด ์ ์์ด์๋ค(์ค์ธก: ๋ ์ง์คํธ๋ฆฌ ์ค๋ฌผ 2.5.1 ์์ `discover` rc=10 โ selfcheck FAIL).
|
|
595
|
+
# โ ์ ์ : `discover` ๋ `tracks/` ๋งคํ ๋ชฉ๋ก์ ์ ์ ํ๋๋ฐ `tracks/` ๋ gitignored ๋ผ
|
|
596
|
+
# **๋ฐฐํฌ๋ฌผ์ ๊ตฌ์กฐ์ ์ผ๋ก ์กด์ฌํ ์ ์๋ค.** ๋ถ์ฌ๋ ยซ๋ฅ๋ ฅ 0ยป ์ด ์๋๋ผ **๋ฏธ์ธก์ **์ด๋ฏ๋ก
|
|
597
|
+
# FAIL ์ด ์๋๋ผ ์ด๋ฆ ์๋ SKIP ์ผ๋ก ๋ธ๋ค([[feedback_not_found_is_not_zero_family]]).
|
|
598
|
+
# โ ๐ฅ **์ดํ์ด ์ฌ๊ธฐ์ ํ๋ ธ๊ณ , cross-family(codex/gpt-5.5)๊ฐ ์ก์๋ค โ ์๋ ฅ ์ ๋ฐ 0.**
|
|
599
|
+
# ๊ธฐ๋ ๋ฌธ์์ด `^forge-harness\(hub\)` ๋ฅผ ยซํด๋๋ช
๊ฒฐ๋ฐยป ์ผ๋ก ์ฝ๊ณ `basename` ์ ๋๋ก
|
|
600
|
+
# ๋ฐ๊ฟจ๋๋ฐ, **์์ฐ์(:128)๋ ๋ฆฌํฐ๋ด `forge-harness(hub)` ๋ฅผ ๋ธ๋ค.** ์ฆ ์ ๋๋ก ๋ฐ๊พธ๋ฉด
|
|
601
|
+
# ์ด๋ฆ์ด ๋ค๋ฅธ ํธ๋ฆฌ์์ ๊ธฐ๋์ ์ฐ์ถ์ด ๊ฐ๋ ค **๊ฑฐ์ง FAIL** ์ด ๋๋ค โ ์ด ํ์ผ์ด ๋ฐ๋ก ์์์
|
|
602
|
+
# ๊ฒฝ๊ณ ํ๋ divergent-normalizer ๋ฅผ ์๋ฆฌ๊ฐ ์๋ก ๋ง๋ ๊ผด์ด๋ค. ๋๋๋ ธ๋ค.
|
|
603
|
+
# ์ง๋จ ์ ์ : ์ด ๋ผ๋ฒจ์ ยซ๋๋ ํฐ๋ฆฌ ์ด๋ฆยป์ด ์๋๋ผ **ํ๋ธ์ ์์ ์๋ณ์**๋ค. ์์ชฝ์ด ๊ฐ์
|
|
604
|
+
# ์์๋ฅผ ์ฐ๋ ํ ์ด๋ ์ฒดํฌ์์์์๋ ์ผ์นํ๋ฏ๋ก ๊ฒฐ๋ฐ์ด ์๋๋ค. ๊ฒฐ๋ฐ์ โ ํ๋์๋ค.
|
|
605
|
+
local _hubroot
|
|
606
|
+
_hubroot="$(cd -P "$(dirname "$SELF")/.." && pwd)"
|
|
607
|
+
tracked_n="$(_cap_files "$_hubroot/.claude/capabilities" | wc -l | tr -d ' ')"
|
|
593
608
|
out="$(bash "$SELF" discover 2>&1)"; rc=$?
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
tracked_n="$(_cap_files "$(cd -P "$(dirname "$SELF")/.." && pwd)/.claude/capabilities" | wc -l | tr -d ' ')"
|
|
598
|
-
if [ "${tracked_n:-0}" -lt 1 ]; then
|
|
609
|
+
if [ ! -d "$_hubroot/tracks" ]; then
|
|
610
|
+
echo " โญ L13c SKIP โ tracks/ ๋ถ์ฌ๋ผ discover ์ ์ ์ ๊ฐ ์๋ค(gitignored, ๋ฐฐํฌ๋ฌผ์ ๊ตฌ์กฐ์ ๋ถ์ฌ). ๋ฏธ์ธก์ ์ด์ง ยซ0๊ฑดยป ์๋"
|
|
611
|
+
elif [ "${tracked_n:-0}" -lt 1 ]; then
|
|
599
612
|
f=$((f+1)); echo " โ L13c ์ ์ ํ์ โ ์ถ์ ๋๋ .claude/capabilities/*.cap ์ด 0๊ฑด์ด๋ค(์ต์ปค ๋์ ๋ถ์ฌ)"
|
|
600
613
|
elif printf '%s' "$out" | grep -qE '^forge-harness\(hub\)[[:space:]]+OK[[:space:]]+'"$tracked_n"'[[:space:]]'; then
|
|
601
614
|
p=$((p+1)); echo " โ
L13c ์ค๋ฌผ ์์ง์ด ์ด์ ์๋ค โ ํ๋ธ ์์ ์ ์ถ์ ์ ์ธ ${tracked_n}๊ฑด์ ์ค์ ๋ก ์ง์๋ค"
|