@chrono-meta/fh-gate 2.2.0 โ†’ 2.4.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.
Files changed (38) hide show
  1. package/.claude/capabilities/adapters/qasp-new-code-anchor.cap +5 -2
  2. package/.claude/capabilities/adapters/qasp-web-rules.cap +130 -0
  3. package/.claude/rules/fh_4axis_gate.md +55 -0
  4. package/.claude-plugin/marketplace.json +2 -2
  5. package/CLAUDE.md +51 -6
  6. package/README.ja.md +14 -2
  7. package/README.ko.md +14 -1
  8. package/README.md +16 -2
  9. package/README.zh.md +12 -1
  10. package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +231 -7
  11. package/knowledge/shared/harness-core/harness_incubator_doctrine.md +215 -1
  12. package/knowledge/shared/harness-core/ship_readiness_gate.md +168 -1
  13. package/knowledge/shared/learnings/subagent_invocations_log.yaml +24 -0
  14. package/package.json +9 -1
  15. package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
  16. package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
  17. package/plugins/fh-meta/CHANGELOG.md +110 -0
  18. package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +20 -0
  19. package/plugins/fh-meta/skills/steel-quench/SKILL.md +25 -2
  20. package/scripts/adapters/fixtures/qasp_web_rules_known_negative.json +7 -0
  21. package/scripts/adapters/fixtures/qasp_web_rules_known_positive.json +7 -0
  22. package/scripts/adapters/mate_agent_boundary.sh +27 -7
  23. package/scripts/adapters/qasp_web_rules.sh +171 -0
  24. package/scripts/capability_effect_probe.sh +104 -0
  25. package/scripts/capability_registry_check.sh +69 -3
  26. package/scripts/relay_channel.sh +151 -6
  27. package/scripts/selfcheck.sh +18 -0
  28. package/scripts/target_freeze.sh +239 -0
  29. package/scripts/test_adapter_lanes.sh +54 -1
  30. package/scripts/test_marker_axes_run_lanes.sh +19 -0
  31. package/scripts/test_marker_standpoint_lanes.sh +83 -0
  32. package/scripts/test_marker_thirdparty_lanes.sh +73 -0
  33. package/scripts/test_regression_guard_ci_lanes.sh +170 -0
  34. package/scripts/test_relay_channel_lanes.sh +146 -17
  35. package/scripts/test_target_freeze_lanes.sh +203 -0
  36. package/templates/.git-hooks/pre-commit +262 -0
  37. package/templates/PRE-PUBLISH-CHECKLIST.md +22 -0
  38. package/templates/regression_guard.sh +32 -4
@@ -224,6 +224,37 @@ pass):
224
224
  **๐ŸŸฅ DECIDE IN THIS ORDER โ€” first match wins. Do not pick by matching a description.**
225
225
 
226
226
  ```
227
+ Q0. WHICH TARGETS? โ€” settle the target CLASS(es) before reaching for a tier.
228
+ ๐ŸŸฅ NOT first-match. Q0 can return MORE THAN ONE target, and each one owes its own tier.
229
+ A release that also alters a named peer's contract owes both arms; recording only the
230
+ first shadows the second (caught by cross-family review, 2026-08-17).
231
+
232
+ โ“ Does a NAMED PEER HARNESS carry this surface?
233
+ Mechanical test, in this order โ€” do not decide from memory or from a name list:
234
+ ยท a local repo of a cluster peer carries the file this delta changes
235
+ (`for d in ~/projects/*; do test -f "$d/<changed-path>"; done`), OR
236
+ ยท the peer is declared in `.claude/capabilities` / the cluster registry, OR
237
+ the change edits an adapter under `scripts/adapters/` naming it
238
+ YES โ†’ target = that repo (one per peer) โ†’ run Q1 for each
239
+ โ“‘ Does this delta change CONSUMER-VISIBLE BEHAVIOR โ€” what a consumer's gate blocks or
240
+ passes, what a consumer's session is instructed to do, what an install receives?
241
+ YES โ†’ target = a CLEAN INSTALL of the packed artifact โ†’ run Q1
242
+ ๐ŸŸฅ This binds NOW, at the change, pre-push (ยงSequencing) โ€” NOT deferred to
243
+ the eventual release. Deferral was the first draft's hole: "not a release
244
+ yet" would have let a behavior change ship unexamined and left the releaser
245
+ holding a delta they did not write.
246
+ โ“’ Neither โ“ nor โ“‘ โ†’ `not-applicable` STOP.
247
+
248
+ ๐ŸŸฅ A consumer install IS another harness โ€” settled, not open. What Q0 scopes is not WHO
249
+ RECEIVES the change but WHERE IT HAS TO BE EXECUTED, and ๐ŸŸฅ **not ยซis this file shippedยป**:
250
+ almost everything here is shipped, so shipped-ness cannot be the discriminator (see
251
+ ยซTarget classยป below). The discriminator is โ“‘'s *behavior* clause โ€” the same effect-based
252
+ trigger this section already uses, applied to the consumer as a target rather than as an
253
+ audience.
254
+ Reading Q1/Q2 when the target is an install tree rather than a repo: Q1's "executed in the
255
+ target's repo" = "executed inside the extracted/installed tree"; Q2's local-wiring question
256
+ is answered NO for a bare extraction (`tier2`), YES only if a real consumer node's own
257
+ settings/state were in play (`tier2b`).
227
258
  Q1. Did anything EXECUTE in the target's repo โ€” a command, a script, a suite?
228
259
  NO, I only read files โ†’ tier1b(<harness>) STOP.
229
260
  NO, I did not touch its repo โ†’ tier1 STOP.
@@ -269,6 +300,24 @@ tier1b(<target-harness>) STATIC standpoint read โ€” the reviewer read the TA
269
300
  nearer value existed. A missing rung does not stay empty โ€” it gets
270
301
  filled by the next one up. Real but weak: see ยซexecution is the
271
302
  load-bearing halfยป below before crediting it.
303
+ ๐ŸŸฅ ยซFROM THE TARGET'S REPOยป IS LOAD-BEARING, and a field case the
304
+ day this rung shipped shows why. A session changed FH code that would
305
+ make two peer harnesses' capability declarations start being REJECTED
306
+ โ€” genuinely applicable โ€” and reached for `tier1b` because it had
307
+ *read files*. The files it read were FH-local records ABOUT those
308
+ peers (`tracks/_meta/relay/*.cap`), not the peers' own files. Reading
309
+ your own repo's description of a peer is NOT a standpoint read; the
310
+ whole point of the axis is whose ground truth the review was checked
311
+ against, and that was still your own. The honest value there is
312
+ `DEGRADED_NOT_RUN(<peers>)` โ€” applicable, target reachable, nothing
313
+ done at the target. Note the direction of the risk has INVERTED since
314
+ this rung was added: tier1b was created because a real static read had
315
+ no home and got recorded one rung too high; the new failure mode is
316
+ local reading being recorded as tier1b because "I read something"
317
+ feels the same. ๐ŸŸฅ Two different questions get merged here and must
318
+ not be: *does a target exist and is it affected* is **Q0**; *what did
319
+ you actually do at that target* is the **tier**. "The impact is real"
320
+ answers the first and says nothing about the second.
272
321
  tier2(<target-harness>) peer-simulated โ€” the reviewer EXECUTED CODE in the TARGET's own repo
273
322
  (a local clone, real content) and observed the result.
274
323
  ๐ŸŸฅ DISCRIMINATOR โ€” ยซreading the target's real files is NOT this rungยป.
@@ -305,8 +354,18 @@ tier2b(<target-harness>) same operator, target's real runtime โ€” the SAME h
305
354
  tier3(<target-harness>) actual peer โ€” a DIFFERENT human operator of the target harness ran
306
355
  the change in their real runtime. The only tier with both local
307
356
  wiring AND reviewer independence from the author.
308
- not-applicable the change has no target-harness standpoint to borrow (no
309
- shared-body surface, no cross-repo consumer contract) โ€” distinct
357
+ not-applicable the change has no target-harness standpoint to borrow โ€” Q0 found
358
+ neither a named peer harness NOR a release/publish surface, so there
359
+ is no repo and no install to run this from. ๐ŸŸฅ Read the second half
360
+ literally: ยซno cross-repo consumer contractยป does NOT mean ยซthis file
361
+ is never shippedยป. Almost everything here is shipped (measured
362
+ 2026-08-17: 192/200 recent commits touch an npm-shipped path, and that
363
+ 96% is a LOWER bound โ€” `package.json` is packed without appearing in
364
+ `files[]`). Reading shipped-ness as the trigger makes this value
365
+ reachable in under 4% of commits, i.e. effectively unreachable, and an
366
+ unreachable value teaches authors to delete what they are counting
367
+ (`[[feedback_unreachable_done_when_trains_evasion]]`). The trigger is
368
+ the RELEASE, not the path โ€” distinct
310
369
  from a degrade value; this is a scoping fact, not a miss. Carries the
311
370
  same substantive-grounds-on-the-same-line discipline as a degrade
312
371
  value below โ€” asserting non-applicability without naming what was
@@ -382,11 +441,22 @@ data point.
382
441
  **Mechanization status โ€” `standpoint:` is prose-only today, and this must not be read as more than
383
442
  that.** `crossfamily:`'s degrade triad is hard-blocked at commit (`templates/.git-hooks/pre-commit`,
384
443
  `scripts/test_marker_crossfamily_lanes.sh` โ€” grep-verified: ~20 crossfamily references in the hook,
385
- validated fixtures). `standpoint:` has **zero** matches in that hook and no fixture suite โ€” nothing
386
- stops an author from writing `not-applicable` with a thin justification, or omitting the field
387
- entirely, and no marker-shape check catches it. ยงMarker required fields in
388
- `.claude/rules/fh_4axis_gate.md` does not yet list `standpoint:` either (add it there when this
389
- mechanizes). This is the honest current state, not a placeholder apology: the field exists so a
444
+ validated fixtures). `standpoint:` has **no value-enum validation and no fixture suite** โ€” nothing stops an author from
445
+ writing `not-applicable` with a thin justification, and no marker-shape check catches a wrong value.
446
+
447
+ ๐ŸŸฅ **Two sentences that stood here were STALE and are corrected (2026-08-17, re-measured โ€” a
448
+ cross-family reviewer flagged the second, the first fell out of checking it).** They read
449
+ *"`standpoint:` has **zero** matches in that hook"* and *"ยงMarker required fields in
450
+ `.claude/rules/fh_4axis_gate.md` does not yet list `standpoint:` either"*. Both are false as of this
451
+ date: `grep -c standpoint templates/.git-hooks/pre-commit` โ†’ **15**, and the hook *does* enforce one
452
+ property (when `axes-run` carries `โ“‘=โ†’standpoint`, the `standpoint:` line must exist and be non-empty
453
+ โ€” `pre-commit:780-782`); `.claude/rules/fh_4axis_gate.md` lists the field at **ยง133 and ยง192**.
454
+ **What is still true is the narrower claim**: the *value* is unvalidated โ€” ยซthe line existsยป is
455
+ enforced, ยซthe value is rightยป is deliberately reserved (ยงMechanization Boundary). Do not read the
456
+ corrected sentence as "now mechanized"; read it as "the channel is checked, the judgment is not".
457
+ The distinction this stale text destroyed is exactly the one that matters here, and it destroyed it
458
+ in the *pessimistic* direction โ€” under-claiming coverage is not a safe error either, because it
459
+ invites someone to rebuild a lane that already exists. This is the honest current state, not a placeholder apology: the field exists so a
390
460
  human reader can ask for it and so the *next* occurrence of a false `not-applicable` has something
391
461
  concrete to point at โ€” mechanize on that first recorded false value
392
462
  (`[[feedback_mechanize_at_repetition_prose_before]]`), not before. **Ownership**: this field lives
@@ -449,6 +519,160 @@ proposal (pmh-dev issue #68, verified verbatim in that thread: *"๋Œ€์ƒ ํ›„๋ณด
449
519
  behavioral reading after that same review found the file-class reading false for at least one real
450
520
  pair.
451
521
 
522
+ **Target class โ€” ยซ๋ˆ„๊ฐ€ ๋ฐ›๋‚˜ยป is not the question; ยซ์–ด๋””์„œ ๋Œ๋ ค์•ผ ํ•˜๋‚˜ยป is (operator decision,
523
+ 2026-08-17).** The trigger above says *effect, not file-class*, and that was still not enough: three
524
+ independent marker-audit legs, run the same day against three different markers, all failed at the
525
+ same place โ€” each reasoned *"it ships, therefore there are consumers, therefore a cross-repo consumer
526
+ contract exists, therefore applicable"*. That reading is not obviously wrong; the enum's own words
527
+ (*"no cross-repo consumer contract"*) invite it. What kills it is the size: **192 of the last 200
528
+ commits touch an npm-shipped path (96%, a lower bound โ€” `package.json` ships without being listed in
529
+ `files[]`, so at least one of the 8 remaining is a false negative too)**. A value reachable in under
530
+ 4% of commits is not a scoping value โ€” it prices the axis at a rate this section's own **Trigger**
531
+ paragraph already rejects as over-triggering (*"almost every commit would qualify, which is the
532
+ over-pricing this trigger is trying to avoid, not invoke"*). That is the argument, and it was
533
+ already in this document.
534
+
535
+ โš ๏ธ **A citation is withdrawn here.** The first draft justified this with
536
+ `[[feedback_unreachable_done_when_trains_evasion]]` โ€” *"an unreachable condition teaches people to
537
+ delete what they are counting"*. An adversarial round showed the direction is **inverted**: that
538
+ memory is about an unreachable **pass condition** a person must reach, whereas `not-applicable` is an
539
+ **exemption**. An unreachable exemption does not make anyone delete anything; it makes the obligation
540
+ fire almost always, and the failure mode is over-pricing and formality, not evasion. Same discomfort,
541
+ different mechanism โ€” do not re-import the citation.
542
+
543
+ ๐ŸŸฅ **State precisely what that 96% does and does not establish โ€” it is narrower than it looks, and a
544
+ cross-family reviewer caught the first draft overreaching on exactly this.** It is a *file-class*
545
+ count, which this very section rejects as a trigger. It is admissible for **one** claim: the legs'
546
+ argument *was* the file-class argument (*"it ships, therefore consumers, therefore applicable"*), so
547
+ the number measures **that argument's reach**, and shows that adopting it collapses `not-applicable`
548
+ to under 4%. It does **NOT** establish how often the *behavioral* trigger (Q0-โ“‘) actually fires โ€”
549
+ that number is **unmeasured**, and the step from "touched a shipped path" to "a consumer standpoint
550
+ obligation arose" is precisely the step Q0-โ“‘ exists to make someone take by hand. Anyone citing 96%
551
+ as the applicability rate is citing it wrong.
552
+
553
+ **Corrected figure, and the instrument defect behind it โ€” surfaced only because an adversarial round
554
+ demanded the hand-check.** The first pass reported **192/200 (96%)** with 8 non-touching commits. Two
555
+ faults, in opposite directions:
556
+ - **Instrument**: the scan ran `--first-parent` *including merge commits*, and `--name-only` emits no
557
+ file list for a merge โ€” so merges were silently scored *non-touching*. Re-run with `--no-merges`:
558
+ the ratio held at 192/200, but the non-touching set collapsed to **6 real cases** (2 commits
559
+ legitimately carry no files).
560
+ - **Hand-check of all 6** (this repo's own publish-a-number rule; N=6 made it trivially cheap):
561
+ **2 are `package.json`-only**, which npm packs regardless of `files[]` โ€” they *are* shipped. The
562
+ other 4 are genuinely unshipped (`.gitignore` ยท `knowledge/shared/learnings/โ€ฆ` ยท two `scripts/`
563
+ paths absent from `files[]`).
564
+
565
+ โ‡’ **Measured: 194/200 = 97%, every exception hand-verified.** โš ๏ธ One direction stays unexamined: the
566
+ scan applies **today's** `files[]` to **past** commits, and that manifest has only grown, so older
567
+ commits are over-counted as shipped. That FP direction is **unmeasured** โ€” read 97% as *"under the
568
+ current manifest"*, never as a historical claim.
569
+
570
+ ๐ŸŸฅ **And read the reachability argument in BOTH directions, which the first draft did not.** It
571
+ measured only what the *rejected* reading does to `not-applicable` (collapses it to <4%). It never
572
+ measured what the *adopted* reading does โ€” Q0-โ“‘ is a judged behavioral test, so no scan settles it,
573
+ and the honest statement is that **the new rate is unknown in both tails**: the value could stay rare
574
+ (if most shipped-path commits do change consumer-visible behavior) or become near-universal (if most
575
+ do not), and a near-universal exemption is a rubber stamp, which is its own failure โ€” not the one
576
+ this edit was fixing. Watch the next 20 markers rather than assuming this landed in the middle.
577
+ โš ๏ธ **The ยซunreachable โ‡’ trapยป premise is also weaker here than the first draft implied**: `tier1` is
578
+ explicitly *"NOT itself a failure"*, so even under the rejected reading an author had a cheap honest
579
+ value to write and was not cornered into deleting anything.
580
+
581
+ โš ๏ธ **Two different denominators, both of which happen to be 200 โ€” do not merge them.** The 192/200 is
582
+ over the **last 200 commits**. The 177/200 below is over the **200 markers in
583
+ `tracks/_meta/.axes_23_passed_*.marker`**. Commits and markers are different populations (a marker
584
+ covers a delta, not a commit; unmarked commits exist), and their coincident size is an accident of
585
+ this corpus. No ratio may be carried from one to the other.
586
+
587
+ So the split is by **execution site**:
588
+
589
+ | Q0 target class | What discharges the standpoint arm | Binds at |
590
+ |---|---|---|
591
+ | named peer harness (qasp ยท pmh ยท mate ยท gstack ยท sibling hub) | the enum as written โ€” `tier1b`/`tier2`/`tier2b`/`tier3` against that repo | the change, pre-push |
592
+ | generic consumer install | run the **packed artifact in a clean install** โ€” see the split below; the *presence* half already runs at ship time, the *execution* half does not exist yet | the **release/publish** delta |
593
+ | neither | `not-applicable` | โ€” |
594
+
595
+ **๐ŸŸฅ What that arm is actually covered by today โ€” corrected in the same session that wrote it, by
596
+ reading the lanes instead of naming them.** The first draft of this table said the consumer-install
597
+ arm was *"already mechanized"* by `publish_freshness_check.sh` ยท `package_coverage_check.sh
598
+ --vs-tarball` ยท `test_capability_entrypoint_shipping.sh`. Reading those three shows they answer a
599
+ narrower question than the arm asks:
600
+
601
+ ```
602
+ covered, AT PUBLISH `prepublishOnly` = prepublish_scope_note ยท publish_freshness_check ยท
603
+ version_lockstep_check ยท package_coverage_check --vs-tarball ยท
604
+ public_surface_scan_files โ† read from package.json, not recalled
605
+ covered, BUT IN CI test_capability_entrypoint_shipping.sh is NOT in that chain โ€” it runs under
606
+ the selfcheck anchor loop (`npm test`/CI). Naming it as a ship-time lane was
607
+ wrong; a green CI is not a publish gate (ยงLocal Execution First).
608
+ NOT covered (exec) extract the tarball into a clean directory, run the gate as a consumer would,
609
+ observe it behaves as intended. Measured 2026-08-17: of the lanes that invoke
610
+ `npm pack`, ZERO extract or execute the result โ€” `--vs-tarball` compares a
611
+ FILE LIST (`npm pack --dry-run --json`), it never unpacks.
612
+ ```
613
+
614
+ This matters because it is the same asymmetry this section already argues for: *"execution is the
615
+ load-bearing half"*. An arm discharged by presence checks alone is a `tier1b`-shaped arm wearing a
616
+ `tier2` label โ€” the exact substitution the `tier1b` rung was added to stop. **So: the presence half
617
+ is mechanized and free; the execution half is a named residual, discharged by hand
618
+ (`npm pack` โ†’ extract to a clean dir โ†’ run the gate โ†’ record the command and the output, per the
619
+ `tier2` discriminator) until a lane exists.** Do not cite this arm as fully mechanized. The
620
+ decision's ยซno new machineryยป framing was correct about the *presence* half and overstated about
621
+ the whole โ€” recorded here rather than quietly narrowed, because a reader reaching for this table
622
+ mid-release is exactly the reader who would otherwise skip the half that has no lane.
623
+
624
+ **What this decision costs, stated rather than hidden.** Of the three legs, **leg B was right and
625
+ the other two were wrong to generalize it**: the `release_2.3.0` marker's `not-applicable` IS a
626
+ defect under this closure (a release delta whose own grounds line concede *"์†Œ๋น„์ž install ์˜ ๊ฒŒ์ดํŠธ
627
+ ์ˆ˜์šฉ์€ ๋ฐ”๋€๋‹ค (BREAKING 2๊ฑด)"* โ€” that is the trigger being met, written out in the field that denies
628
+ it), while an ordinary commit touching a shipped script correctly stays `not-applicable`. Row 1
629
+ (PR #368) needs no reclassification: its target was a sibling hub with its own repo, a named peer.
630
+ โš ๏ธ Those three legs were **not decorrelated** โ€” same family, same prompt shape, same canon โ€” so their
631
+ 3/3 agreement is closer to one observation than three; it is cited here as *the pattern that exposed
632
+ the definitional hole*, never as three confirmations
633
+ (`[[feedback_decorrelation_axis_is_what_you_send]]`).
634
+
635
+ **Measured after this edit shipped, and it REFUTES the residual this paragraph first carried.** The
636
+ original text read: *"177 of the 200 corpus markers carry no `standpoint:` line at all โ€ฆ that pool is
637
+ larger than the one measured and remains unexamined."* It has now been examined, and the pool is not
638
+ larger โ€” it barely exists:
639
+
640
+ ```
641
+ 201 markers ยท 24 carry `standpoint:` ยท 177 do not
642
+ 172 predate the field itself (born 2026-08-14, PR #370 landed 14:13) โ€” structural, not a miss
643
+ 2 written the same day but BEFORE 14:13 (12:29 ยท 12:39) โ€” also structural
644
+ 3 written after the field existed (16:41 ยท 19:10 ยท 21:06) โ† the entire real pool
645
+ 0 absences dated 2026-08-15 or later โ€” adoption is 100% from day two onward
646
+ ```
647
+
648
+ ๐ŸŸฅ **The first step was decomposition, not adjudication.** Counting "no field" as "not recorded"
649
+ folds *the field did not exist yet* into *the author skipped it* โ€” the same `not-found โ‰  0` collapse
650
+ this session hit three separate times (`[[feedback_not_found_is_not_zero_family]]`). Splitting by the
651
+ field's own birth timestamp is what turned 177 into 3.
652
+
653
+ **Hand-check of all 3, judged from the real diffs** (their markers use the pre-2026-08-17 four-letter
654
+ `axes-run` notation, where `b` means first-real-use and NOT standpoint โ€” reading the marker's own
655
+ self-description instead of the diff would have inverted two axes):
656
+
657
+ | commit | delta | verdict under Q0 |
658
+ |---|---|---|
659
+ | #375 `cedd8ac` | `version_lockstep_check.sh` +11 lines, **all comment** | `not-applicable` would have been correct โ€” a **missing line**, not a wrong judgment |
660
+ | #374 `0690ba7` | 7 files, +409 โ€” shipped gate scripts plus `templates/degrade_direction_scan.sh` | ๐ŸŸฅ **genuinely under-recorded** (Q0-โ“‘, and `templates/` propagates to field harnesses) |
661
+ | #373 `549a4bc` | `ko-tech-writer/SKILL.md` +63/โˆ’12 (shipped plugin) | ๐ŸŸฅ **genuinely under-recorded** (Q0-โ“‘) |
662
+
663
+ **The direction matches ยง6's earlier finding: over-claiming 0, under-recording only.** A gate that
664
+ tightens *"were you really tier2?"* cannot catch this direction by construction.
665
+
666
+ โš ๏ธ **Retroactive-application caveat**: Q0 was written 2026-08-17 and these three are 2026-08-14, so
667
+ their authors could not have applied it. What survives the caveat is narrower and still real โ€” the
668
+ **field existed** by then, so the absent line is a gap independent of Q0.
669
+
670
+ **Consequence for sequencing**: the argument for postponing mechanization was *"absence is the
671
+ dominant reality, so validating values would only tighten a recording minority."* That premise is
672
+ **dead** โ€” recording is 100% from 2026-08-15 onward. โš ๏ธ The refutation does **not** travel to peers:
673
+ pmh-dev's 42 markers carry the field 0 times, and whether that is late arrival or non-adoption is
674
+ **unmeasured** there. `thirdparty:` likewise stands at 2 corpus instances โ€” unmeasured, not clean.
675
+
452
676
  **Relationship to `harness_verification_core_extended.md`'s core/extended axis**: tier2 and tier3
453
677
  are both "extended" in that document's sense (they require a cluster member's engine or repo to
454
678
  discharge) โ€” this field does not compete with that doctrine, it subdivides one corner of it.
@@ -110,6 +110,11 @@ this chamber's field emit terminus); an **FH-internal utility** (a skill/script/
110
110
  field harness) instead routes through the **New-Skill Pre-Commit gate + `asset-placement-gate`** (the
111
111
  same gate every FH asset passes). KILL emits nothing โ€” the workspace stays as the evidence record.
112
112
 
113
+ > ๐ŸŸฅ **2026-08-17 ์ดํ›„ ์ด ๋ฌธ๋‹จ์€ ๋‹จ๋…์œผ๋กœ ์ฝ์œผ๋ฉด ํ‹€๋ฆฐ๋‹ค.** ์•„๋ž˜ ยซclears **all four**ยป ์ค‘
114
+ > **(1) net-new ๋Š” ๋” ์ด์ƒ KILL ์‚ฌ์œ ๊ฐ€ ์•„๋‹ˆ๋‹ค**(โ†’ `CURATED` ๋ผ์šฐํŒ…) โ€” ยง3-SCREEN-2026-08-17 ๋กœ
115
+ > ๋Œ€์ฒด๋๊ณ , (2) ๋Š” `NOT-APPLICABLE` ๋ผ์šฐํŒ…์ด๋‹ค. **(3)ยท(4) ๋Š” KILL ๋กœ ๊ทธ๋Œ€๋กœ ์œ ํšจํ•˜๋‹ค.**
116
+ > ์•„๋ž˜ ๋ณธ๋ฌธ์€ ๊ทธ ์ •์ • ์ด์ „์˜ ์›๋ฌธ์ด๋ฉฐ ์ด๋ ฅ์œผ๋กœ ๋ณด์กดํ•œ๋‹ค.
117
+
113
118
  **EMIT-worthiness โ€” the measured screening criterion (runs #5โ€“#6, 2026-07-14)**: six chamber runs, EMIT
114
119
  0/6, all KILL. A candidate is emit-worthy only if it clears **all four** of โ€” (1) **net-new** (not a
115
120
  reinvention of an existing FH/official asset, nor a cosmetic re-wrap of code that already ships โ€” runs
@@ -132,6 +137,90 @@ standalone graduations โ€” not yet *birthing*. **Graduation order** (run #6's po
132
137
  hub-state-dependent capability graduates hub-internal โ†’ proven in use โ†’ THEN extracted portable, never
133
138
  speculated standalone-first โ€” the only path every successfully-portable FH asset actually took.
134
139
 
140
+ ---
141
+
142
+ ### ๐ŸŸข ยง3-SCREEN-2026-08-17 โ€” **(1) net-new ๋Š” ๋” ์ด์ƒ KILL ์‚ฌ์œ ๊ฐ€ ์•„๋‹ˆ๋‹ค** (์šด์˜์ž ๊ฒฐ์ •)
143
+
144
+ > *"์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์ด ๊ตฌ์ƒํ•œ ํ•˜๋„ค์Šค๋ฅผ ์ธํ๋ฒ ์ดํŒ…์œผ๋กœ ํ•ด์„œ ์ถœํ•˜ํ•˜๋ ค๋Š”๋ฐ, ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ
145
+ > **ยซ์ด๋ฏธ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด์•ผยป๋ผ๊ณ  ๋ฆฌ์ ์‹œํ‚ค๋ฉด ์“ฐ๊ณ  ์‹ถ์€ ์ƒ๊ฐ์ด ๋“ค๊นŒ?** ๊ทธ๊ฒƒ๋ณด๋‹ค๋Š” ยซ์ด๋ฏธ ์ด๋Ÿฌํ•œ
146
+ > ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์žˆ๋Š”๋ฐ **๋„ˆ๋งŒ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ์ถœ๋ฐœํ•ด๋ณด์ž**ยป๊ฐ€ ๋˜์–ด์•ผ ํ• 
147
+ > ๊ฒƒ ๊ฐ™์•„. **์ธํ๋ฒ ์ดํŒ…์ด ํ•„์š”์—†๋‹ค๋ฉด ํ๋ ˆ์ดํŒ…์œผ๋กœ ๊ฐ€๋ฉด ๋˜๋Š” ๊ฑฐ๊ณ .**"*
148
+ > ยท *"**๊ทธ ์‚ฌ๋žŒ์ด ๋งŒ๋“ค๋ ค๋Š” ๊ฑธ ์ธํ๋ฒ ์ดํ„ฐ๊ฐ€ ๋ง‰์„ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ. ๊ทธ๋ƒฅ ๋งŒ๋“ค๊ฒŒ ๋‘๋ฉด ๋˜์ง€.**"*
149
+ > ยท *"์ธํ๋ฒ ์ดํ„ฐ๋Š” **ํ›ˆ์ˆ˜๋ฅผ ๋†“๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ**, ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋‚˜ ํ•˜๋„ค์Šค๋ฅผ
150
+ > **์ถœํ•˜ ์ „๋ถ€ํ„ฐ ๋ฏธ๋ฆฌ ๊ตด๋ ค๋ณด๊ณ  ์‚ฌ์šฉํ•ด๋ณด๊ฒŒ ํ•˜๋Š” ์—๋ฎฌ๋ ˆ์ด์…˜**๊ณผ ๊ทธ๋กœ ์ธํ•ด ์ž์‹ ๋งŒ์˜ ๊ฒƒ์„
151
+ > **์„ฑ์ˆ™ํ•˜๊ฒŒ ์ถœํ•˜์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์žฅ์น˜**"*
152
+
153
+ **๋ฐ”๋€Œ๋Š” ๊ฒƒ โ€” ๊ธฐ์ค€์€ ๋‚จ๊ณ , ๊ทธ ๊ธฐ์ค€์˜ ยซํŒ์ • ๊ฒฐ๊ณผยป๊ฐ€ ๋ฐ”๋€๋‹ค:**
154
+ ```
155
+ ์ „ net-new ๋ฏธ๋‹ฌ โ†’ KILL (ํ›„๋ณด๊ฐ€ ํšŒ์ˆ˜๋œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋นˆ์†์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค)
156
+ ํ›„ net-new ๋ฏธ๋‹ฌ โ†’ **CURATED** (์„ ํ–‰ ๋ชฉ๋ก + ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ + ๊ทธ๊ฒƒ์ด ์•ˆ ๋ฎ๋Š” ๋ธํƒ€๋ฅผ ์ค€๋‹ค)
157
+ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ยซ๊ทธ๊ฑฐ ์“ธ๊ฒŒยป ๋ฉด ๊ฑฐ๊ธฐ์„œ ๋(ํ๋ ˆ์ดํŒ… ์ข…๋ฃŒ)
158
+ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ยซ๋‚ด ๊ฑธ ๋งŒ๋“ค๋ž˜ยป ๋ฉด **์ธํ๋ฒ ์ดํ„ฐ๋กœ ๋“ค์–ด๊ฐ„๋‹ค**
159
+ ```
160
+ ๐ŸŸฅ **์ „ํ™˜์ ์€ ํŒ์ •์ด ์•„๋‹ˆ๋ผ ์˜์‚ฌ๋‹ค.** ์ธํ๋ฒ ์ดํ„ฐ๋Š” ใ€Œ์ด๊ฒŒ ์ƒˆ๋กœ์šด๊ฐ€ใ€๋ฅผ ๋ฌป์ง€ ์•Š๊ณ  ใ€Œ๋„ˆ ๋งŒ๋“ค ๊ฑฐ๋ƒใ€๋ฅผ
161
+ ๋ฌป๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ ํ–‰ ๋ชฉ๋ก์€ **ํšŒ์ˆ˜ ํ†ต๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ ์žฌ๋ฃŒ ๋ชฉ๋ก**์ด๋‹ค โ€” ์•„๋ž˜ ยง3-SCREEN-b.
162
+
163
+ ๐ŸŸฅ **์ดˆํŒ์ด ์—ฌ๊ธฐ์„œ ๊ฒŒ์ดํŠธ๋ฅผ ๋ฌด๋ ฅํ™”ํ–ˆ๊ณ , ์ ๋Œ€๊ฒ€์ฆ์ด ์ปค๋ฐ‹ ์ „์— ์žก์•˜๋‹ค. ๊ทธ ์ •์ •์„ ๋‚จ๊ธด๋‹ค.**
164
+ ์ดˆํŒ์€ ยซ์ง„์งœ KILLยป ์„ ์…‹์œผ๋กœ ์ค„์ด๋ฉฐ **(3) ์„ ใ€Œprecision ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ(์›๋ฆฌ์  ๋ถˆ๊ฐ€)ใ€์œผ๋กœ
165
+ ๋ฐ”๊พธ๊ณ  (4) ๋ฅผ ใ€Œํ˜•ํƒœ ๋ผ์šฐํŒ…ใ€์œผ๋กœ ๊ฒฉํ•˜**ํ–ˆ๋‹ค. ๋‘˜ ๋‹ค ํ‹€๋ ธ๋‹ค:
166
+ - **(3) ์˜ ์›๋ฌธ์€ ยซ์›๋ฆฌ์  ๋ถˆ๊ฐ€ยป ๊ฐ€ ์•„๋‹ˆ๋ผ ยซ์‹ค์ธก ๋ฏธ๋‹ฌยป ์ด๋‹ค** โ€” *"run #5's rule scored **5/5
167
+ false-positive** on 111 real files; run #6's heuristic scored **14/22 false-fire**"*.
168
+ ์ดˆํŒ ๋ฌธ์žฅ๋Œ€๋กœ๋ฉด **๋Ÿฐ #5ยท#6 ์ด KILL ์ด ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค**(๋‘˜ ๋‹ค precision ์„ *๋งŒ๋“ค ์ˆ˜๋Š”* ์žˆ์—ˆ๋‹ค).
169
+ - **ํ•ฉ์‚ฐ์ด ์ง„์งœ ๋ฌธ์ œ์˜€๋‹ค**: ์ด ์ ˆ์ด ์ฑ”๋ฒ„์˜ ์‹ค์ฆ๋œ ๊ฐ’์–ด์น˜๋ฅผ ์…‹์œผ๋กœ ์ ๋Š”๋ฐ
170
+ (*"preventing **reinventions** ยท **low-precision births** ยท **premature standalone
171
+ graduations**"*), ์ดˆํŒ์ด ์žฌ๋ฐœ๋ช…โ†’CURATE ยท (3)โ†’์›๋ฆฌ์ ๋ถˆ๊ฐ€ ยท (4)โ†’ํ˜•ํƒœ๋ผ์šฐํŒ… ์œผ๋กœ
172
+ **์…‹ ๋‹ค ๋บ๋‹ค.** ๋‚จ๋Š” entry ์Šคํฌ๋ฆฐ์ด ใ€Œ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค๊ฒ ๋‹ค๊ณ  ํ•˜๋‚˜ใ€ ํ•˜๋‚˜๋ฟ์ด ๋๋‹ค.
173
+
174
+ **๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•œ๋‹ค โ€” entry ์™€ exit ๋ฅผ ์„ž์ง€ ์•Š๋Š”๋‹ค** (ยง3-c ๊ฐ€ *"two different questions,
175
+ **do not merge them**"* ์ด๋ผ๊ณ  ๋ช…์‹œํ•œ ๊ทธ ๋ถ„๋ฆฌ):
176
+
177
+ ```
178
+ โ”€โ”€ ENTRY (๋“ค์–ด๊ฐˆ ๋•Œ, ์ด ์ ˆ) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
179
+ (1) net-new ๋ฏธ๋‹ฌ โ†’ **CURATED** ๋ผ์šฐํŒ…. KILL ์•„๋‹˜ (ยง3-SCREEN-2026-08-17)
180
+ (2) artifact-shaped ๋ฏธ๋‹ฌ โ†’ **NOT-APPLICABLE**. ํŒ๋‹จ-๋ฐฉ๋ฒ•์€ ์ด ์ธํ๋ฒ ์ดํ„ฐ์˜ ์‚ฐ์ถœ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค
181
+ (3) precision **์‹ค์ธก ๋ฏธ๋‹ฌ** โ†’ **KILL ์œ ์ง€** ๐ŸŸฅ ยซ๋ชป ๋งŒ๋“ ๋‹คยป ๊ฐ€ ์•„๋‹ˆ๋ผ ยซ๋Œ๋ ค๋ดค๋”๋‹ˆ ๋‚˜๋นด๋‹คยป ๋‹ค
182
+ (4) hub-state ์˜์กด โ†’ **KILL ์œ ์ง€** ๐ŸŸฅ premature standalone graduation ๋ฐฉ์ง€๊ฐ€ ์ด ์ถ•์˜ ์ผ์ด๊ณ ,
183
+ ยง3 ๋ง๋ฏธ์˜ Graduation order(hub-internal โ†’ proven โ†’ extract)๊ฐ€ ๊ทธ ์ฒ˜๋ฐฉ์ด๋‹ค
184
+ โ˜… ์‚ฌ์šฉ์ž๊ฐ€ ยซ์•ˆ ๋งŒ๋“ค๋ž˜ยป โ†’ **์ข…๋ฃŒ**(ํ๋ ˆ์ดํŒ…์œผ๋กœ ๋. KILL ์›์žฅ์— ์„ธ์ง€ ์•Š๋Š”๋‹ค)
185
+
186
+ โ”€โ”€ EXIT (๋‚˜์˜ฌ ๋•Œ, ยง3-c) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
187
+ ยซ์„ค ์ˆ˜ ์—†๋‹คยป(inability-to-run) โ†’ **KILL**. ์•ฝํ•จ์€ KILL ์•„๋‹˜(ยง3-c โ‘ฃ)
188
+ ```
189
+ ๐ŸŸฅ **์›๋ฆฌ์ ์œผ๋กœ precision ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ**(ํŒ๋ณ„ ์Œ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ)์€ KILL ์ด ์•„๋‹ˆ๋ผ
190
+ **`NOT-APPLICABLE`** ์ด๋‹ค โ€” ํ›„๋ณด์˜ ์‹คํŒจ๊ฐ€ ์•„๋‹ˆ๋ผ **์ด ์ธํ๋ฒ ์ดํ„ฐ์˜ ๋ฐ”๊ฐ€ ์•ˆ ๋งž๋Š” ๊ฒƒ**์ด๋‹ค.
191
+
192
+ โš ๏ธ **ยง3-c ์˜ ํ•œ ๋ฌธ์žฅ์ด ์ด ์ •์ •์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค**: *"clear this one and fail the first
193
+ (**alive, but a reinvention**)"* โ€” ๊ทธ ๋ถ„๊ธฐ๋Š” ์ด์ œ KILL ์ด ์•„๋‹ˆ๋ผ **CURATED ๋กœ ๋ผ์šฐํŒ…**๋œ๋‹ค.
194
+
195
+ **โš ๏ธ ๊ฒฝ๊ณ„๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.** ์žฌ๋ฐœ๋ช…์ด๋ผ๋Š” *์‚ฌ์‹ค*์€ ์—ฌ์ „ํžˆ ์ธก์ •ํ•˜๊ณ  ๊ธฐ๋กํ•œ๋‹ค. ๋ฐ”๋€ ๊ฒƒ์€
196
+ ๊ทธ ์‚ฌ์‹ค์„ **๋ˆ„๊ตฌ์—๊ฒŒ ๋ฌด์—‡์œผ๋กœ ์ฃผ๋А๋ƒ**๋‹ค: ๊ฒŒ์ดํŠธ์˜ ํŒ์ • ๊ทผ๊ฑฐ โ†’ ์ œ์ž‘์ž์˜ ์ถœ๋ฐœ์ .
197
+
198
+ ### ยง3-SCREEN-b โ€” **์„ ํ–‰์€ ์žฌ๋ฃŒ๋‹ค** (์ธํ๋ฒ ์ดํŒ… ๊ฐ€์†ํ™”, ์šด์˜์ž)
199
+
200
+ > *"์•ž์„œ ์ฐพ์•˜๊ฑฐ๋‚˜ ์ •๋ง ์ƒˆ๋กœ์šด ๊ฑฐ๋ผ๋ฉด ๊ฒ€์ƒ‰ํ•œ ๋ ˆํฌ ์ค‘์—์„œ **๋ฐฐ์›Œ์˜ฌ ๋งŒํ•œ ๊ฒƒ๋“ค์„ ์ผ๋ถ€๋งŒ ๋นŒ๋ ค์™€์„œ
201
+ > ๊ฐœ๋ฐœํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ**์ด ๊ณง ์ธํ๋ฒ ์ดํŒ… **๊ฐ€์†ํ™”**์˜ ๋ฐฉ๋ฒ•์ด ๋˜๊ธฐ๋„ ํ•˜๊ฒ ์ง€. ์ œ๋กœ๋ถ€ํ„ฐ ์ž์‹ ๋งŒ์˜
202
+ > ์•„์ด๋””์–ด๋งŒ์œผ๋กœ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ **ํ”„๋Ÿฐํ‹ฐ์–ด์—์„œ ๋ฐฐ์›Œ์˜ด์œผ๋กœ์„œ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ํ”„๋Ÿฐํ‹ฐ์–ด๊ธ‰ ๊ฐ€๋Šฅ์„ฑ์„
203
+ > ํ’ˆ์€ ์ฑ„ ํƒœ์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ.** ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฝ”๋“œ๋ฅผ ๋‹ค ์ƒˆ๋กœ ์งœ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ **๊ตฌ๊ธ€๋งํ•˜๋Š” ์ „ํ†ต**์ด
204
+ > ์žˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ."*
205
+
206
+ ๐ŸŸฅ **๊ฐ€์žฅ ๋‚ ์นด๋กœ์šด ํ˜•ํƒœ**: **์žฌ๋ฐœ๋ช… ์œ„ํ—˜์ด ๋†’๋‹ค๋Š” ๊ฒƒ์€, ๊ทธ๋งŒํผ ๋นŒ๋ ค์˜ฌ ์„ ํ–‰์ด ๋งŽ๋‹ค๋Š” ๋œป์ด๋‹ค.**
207
+ ์˜› taxonomy ๋Š” ์ด๊ฒƒ์„ **๊ฑฐ๊พธ๋กœ** ์ฝ์—ˆ๋‹ค โ€” ์žฌ๋ฃŒ๊ฐ€ ํ’๋ถ€ํ• ์ˆ˜๋ก ์ฃฝ์˜€๋‹ค.
208
+ ```
209
+ ์ „ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐœ๊ฒฌ โ†’ KILL ๊ทผ๊ฑฐ โ†’ ๋ฐฐ์ถœ ํ™•๋ฅ  0 ยท ์‚ฌ์šฉ์ž๋Š” ๋นˆ์†
210
+ ํ›„ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐœ๊ฒฌ โ†’ ๋นŒ๋“œ ์žฌ๋ฃŒ โ†’ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ํ”„๋Ÿฐํ‹ฐ์–ด๊ธ‰ ยท ์‚ฌ์šฉ์ž๋Š” ๋ชฉ๋ก์„ ๋“ค๊ณ  ๊ฐ„๋‹ค
211
+ ```
212
+ **๊ฐ™์€ ์ •๋ณด, ์†Œ๋น„์ฒ˜๋งŒ ๋ฐ”๊พธ๋ฉด ์ •๋ฐ˜๋Œ€๋กœ ์ž‘๋™ํ•œ๋‹ค.** ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ยง3-c ์˜ EMIT ๋ฐ”(ยซ์„ค ์ˆ˜ ์žˆ๋‚˜ยป)๋ฅผ
213
+ **๋” ์‰ฝ๊ฒŒ ๋„˜๊ฒŒ ๋งŒ๋“ ๋‹ค** โ€” ์ฆ‰ ํ๋ ˆ์ดํŒ…์€ ์ธํ๋ฒ ์ดํŒ…์˜ **๊ด€๋ฌธ์ด ์•„๋‹ˆ๋ผ ์„ฑ๊ณต๋ฅ ์„ ์˜ฌ๋ฆฌ๋Š” ์žฅ์น˜**๋‹ค.
214
+
215
+ **์‹ค๋ฌผ ๋Œ€์กฐ(์ฑ”๋ฒ„ ๋Ÿฐ #13 `n-eff-probe`, 2026-08-17)**: K1(์žฌ๋ฐœ๋ช…)์œผ๋กœ KILL ๋๊ณ , ๊ทธ ๊ทผ๊ฑฐ์˜€๋˜
216
+ ์„ ํ–‰ 5๊ฑด(capture-recapture ยท double-fault measure ยท Snyk VulnBench ยท BenchGuard ยท SAST overlap)์€
217
+ ์ƒˆ taxonomy ์—์„œ **๋ถ€ํ’ˆ ๋ชฉ๋ก**์ด๋‹ค โ€” ํ†ต๊ณ„๋Ÿ‰์€ ๊ธฐ์„ฑํ’ˆ์„ ์“ฐ๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค ๊ฒƒ์ด ใ€Œํฌ๋กœ์Šค-๋…ธ๋“œ ๋ฐฐ์„  +
218
+ ํ”ฝ์Šค์ฒ˜ใ€ ํ•˜๋‚˜๋กœ ์ค„์–ด๋“ ๋‹ค. **ํŒ์ •์„ ์†Œ๊ธ‰ํ•ด ๋ฌด๋ฅด์ง€๋Š” ์•Š๋Š”๋‹ค**(์‚ฌ์ „๋“ฑ๋ก ์›์น™). ๋ฐ”๋€ ๊ฒƒ์€
219
+ **๋‹ค์Œ ํ›„๋ณด๊ฐ€ ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€**๋‹ค.
220
+
221
+ > **์ •๋ณธ**: `tracks/_meta/fh_signal_2026-08-17_incubator-is-not-a-gate.md`
222
+ > โ€” ํ๋ฆ„ ์ „์ฒด ยท ํ๋ ˆ์ดํŒ…์˜ ์ž๋ฆฌ(โ‘ค ์ฆํญ์ž) ยท ์ง„์ž…๋กœ B(์ถ•์  ๊ธฐ๋ฐ˜ ์ œ์•ˆ) ยท ์›์žฅ ๊ณผ์†Œ๊ณ„์ƒ ์‹ค์ธก.
223
+
135
224
  **Chamber scope โ€” what belongs in the chamber at all (run #7, 2026-07-14)**: run #7 tested a hub-internal
136
225
  reactivation of the cluster-wizard signal and KILLed it โ€” decisively on its own merits (its "narrow
137
226
  net-new" claim collapsed against the real shipped registry and an already-existing synergy skill), but
@@ -218,7 +307,89 @@ meta harness easy to birth (a declaration starts one) โ”‚ needs endless tendi
218
307
 
219
308
  A meta-harness cannot clear a bar that reads *"walks on day one"* โ€” not because it is worse, but
220
309
  because unbounded growth is its point. FH itself is the standing evidence: it is tended continuously,
221
- by design. **Therefore a meta-harness candidate is not a chamber candidate.**
310
+ by design. ~~**Therefore a meta-harness candidate is not a chamber candidate.**~~
311
+
312
+ ### ๐ŸŸฅ ยง3-a-1-2026-08-17 โ€” ์œ„ ๊ฒฐ๋ก  ๋ฌธ์žฅ์€ **ํ๊ธฐํ•œ๋‹ค. ๋ฒ”์œ„๊ฐ€ ๊ณผํ–ˆ๋‹ค** (์šด์˜์ž ๊ฒฐ์ •)
313
+
314
+ **ํ๊ธฐ ์‚ฌ์œ  โ‘  โ€” ์•„๋ž˜์ชฝ ๋ฒ”์œ„๋Š” ์ด๋ฏธ ๋„“ํ˜€์ ธ ์žˆ์—ˆ๊ณ , ์ด ํŒŒ์ผ์ด ๊ทธ ํ™•์žฅ์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์•˜๋‹ค.**
315
+ `ship_readiness_gate.md ยงโ’ท-layering`(2026-08-16, ์šด์˜์ž ๋ฐœํ™” ๊ธฐ๋ฐ˜)์ด โ‘ก ์˜ ๋ฒ”์œ„๋ฅผ ์ด๋ ‡๊ฒŒ ์ ๋Š”๋‹ค:
316
+ > *"โ‘ก ํ”„๋กœ์ ํŠธ ์ธํ๋ฒ ์ดํ„ฐ | **์œ ๋‹›์„ ๋‚ณ๋Š”๋‹ค โ€” ํ•˜๋„ค์Šค๋งŒ์ด ์•„๋‹ˆ๋‹ค.** โ€ฆ ๋ฒ”์œ„๊ฐ€ **ํ•˜๋„ค์Šค ยท ์Šคํ‚ฌ ยท
317
+ > ์—์ด์ „ํŠธ** ยท ํ•˜๋„ค์Šค ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๋ ˆํฌ๊นŒ์ง€๋‹ค"*
318
+
319
+ ๐ŸŸฅ **์ดˆํŒ์€ ์ด๊ฑธ ยซ8์ผ ์ „์— ๋’ค์ง‘ํ˜”๋Š”๋ฐ ์•ˆ ๊ณ ์ณ์กŒ๋‹ค = half-fix ์ „ํŒŒ ๊ฒฐํ•จยป ์ด๋ผ๊ณ  ์ ์—ˆ๋‹ค. ํ‹€๋ ธ๊ณ ,
320
+ ์ ๋Œ€๊ฒ€์ฆ์ด ์žก์•˜๋‹ค** โ€” ๊ทธ ์ค„์ด ๋„“ํžŒ ๊ฒƒ์€ ์‚ฌ๋‹ค๋ฆฌ์˜ **์•„๋ž˜์ชฝ**(์Šคํ‚ฌยท์—์ด์ „ํŠธยท์ผ๋ฐ˜ ๋ ˆํฌ)์ด๊ณ ,
321
+ ํ๊ธฐ ๋Œ€์ƒ ๋ฌธ์žฅ์€ **์œ„์ชฝ**(meta-**harness**)์— ๋Œ€ํ•œ ์ง„์ˆ ์ด๋ผ **๋‘˜์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์–‘๋ฆฝํ•œ๋‹ค**
322
+ (ํ•˜์œ„๋ฅผ ํฌํ•จํ•œ๋‹ค๊ณ  ์ƒ์œ„๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค). ๊ฒŒ๋‹ค๊ฐ€ ๊ทธ ์ค„์— **ใ€Œmd ๊ทœ์œจใ€์€ ์—†๋‹ค** โ€” ๊ทธ๊ฑด
323
+ 2026-08-17 ์šด์˜์ž ๋ฐœํ™”์—์„œ๋งŒ ๋‚˜์˜จ๋‹ค. **๊ฒฐํ•จ ๊ท€์†์„ ์ฒ ํšŒํ•˜๊ณ  ์‚ฌ์œ ๋ฅผ ์•ฝํ™”ํ•œ๋‹ค**: ๋’ค์ง‘ํžŒ ๊ฒŒ
324
+ ์•„๋‹ˆ๋ผ **๋ฒ”์œ„ ํ™•์žฅ์ด ์ด ํŒŒ์ผ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ฒƒ**์ด๋‹ค. (๊ทธ๋ฆฌ๊ณ  ํ๊ธฐ ์ž์ฒด๋Š” ์‚ฌ์œ  โ‘ข ์œผ๋กœ ์„ ๋‹ค.)
325
+
326
+ **ํ๊ธฐ ์‚ฌ์œ  โ‘ก โ€” ๋…ผ๊ฑฐ๊ฐ€ ์‹ค์ œ๋กœ ๋ฎ๋Š” ๋ฒ”์œ„๋Š” ยซํ•˜๋„ค์Šค ๊ธ‰ยป ๋ฟ์ด๋‹ค.**
327
+ ์œ„ ๋…ผ๊ฑฐ๋Š” *"unbounded growth ๊ฐ€ ๋ณธ์งˆ์ด๋ผ day-one walk ๋ฅผ ๋ชป ๋„˜๋Š”๋‹ค"* ์ธ๋ฐ, ๊ทธ๊ฑด **meta-harness**
328
+ ์— ๋Œ€ํ•œ ์ง„์ˆ ์ด๋‹ค. ์Šคํ‚ฌ ยท ์—์ด์ „ํŠธ ยท md ๊ทœ์œจ์€ **day-one walk ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค โ€” ๐ŸŸฅ ๋‹จ ๋ฏธ๊ฒ€์ฆ์ด๋‹ค.**
329
+
330
+ โš ๏ธ **์ดˆํŒ์€ ยซ์‹ค์ œ๋กœ ๋„˜๊ณ  ์žˆ๋‹คยป ๊ณ  ์ ์—ˆ๋Š”๋ฐ ๊ทผ๊ฑฐ๊ฐ€ ์—†์—ˆ๊ณ , ๋ฐ˜๋ก€๊ฐ€ ๊ฐ™์€ ๋ ˆํฌ์— ์žˆ๋‹ค.**
331
+ day-one walk ์˜ ์ •์˜๋Š” *"on the first run, with the user adding nothing, the thing produces
332
+ something useful"* ์ด๊ณ  ๋ฐ˜๋Œ€๋ง์ด `built-but-not-wired`, ๊ทธ๋ฆฌ๊ณ  *"**wiring is part of the birth**"*
333
+ ๋‹ค. **md ๊ทœ์œจ์€ ๊ตฌ์กฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋ถ€๊ฐ€ ์—†๋‹ค**(์‚ด๋ฆฌ์–ธ์Šค). ์‹ค์ œ ๋ฐ˜๋ก€:
334
+ `.claude/rules/fh_4axis_gate.md` ์˜ `standpoint:` ํ•„๋“œ โ€” *"Still validated by nothing โ€” zero hook
335
+ lines, no fixture suite"* ์˜€๊ณ , `tier1b` ๋“ฑ๊ธ‰์ด **์—†์–ด์„œ ์ •์  ๋ฆฌ๋ทฐ๊ฐ€ tier2 ๋กœ ๊ธฐ๋ก**๋๋‹ค.
336
+ `axes-run` ๊ธฐํ˜ธ ํ‚ค๋„ 53๊ฑด ์ค‘ 2๊ฑด์ด ์˜› ์˜๋ฏธ๋กœ ์“ฐ์˜€๋‹ค. **ํƒœ์–ด๋‚ฌ๊ณ  ์•ˆ ๊ฑธ์€ md ๊ทœ์œจ๋“ค**์ด๋‹ค.
337
+
338
+ โ‡’ **์œ ๋‹› ํด๋ž˜์Šค๋ณ„ day-one walk ํŒ์ •์ž๋ฅผ ๋”ฐ๋กœ ๊ฑด๋‹ค**:
339
+ ```
340
+ ์Šคํ‚ฌ ยท ์—์ด์ „ํŠธ ์ฒซ ๋Ÿฐ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋”ํ•˜๊ณ  ์“ธ ๋งŒํ•œ ์‚ฐ์ถœ์ด ๋‚˜์˜ค๋Š”๊ฐ€
341
+ md ๊ทœ์œจ ๐ŸŸฅ **๋ธ”๋ผ์ธ๋“œ floor-tier sim ์ด ์‹ค์ œ๋กœ ๊ทธ ๊ทœ์œจ์„ ๋ฐœํ™”ํ•˜๋Š”๊ฐ€**
342
+ (CLAUDE.md ยงSkeleton, Not Muscle โ€” "done ์€ ๋ธ”๋ผ์ธ๋“œ ์„ธ์…˜์ด ์‹ค์ œ๋กœ ๋ฐœํ™”ํ•˜๋Š” ๊ฒƒ")
343
+ ```
344
+
345
+ **ํ๊ธฐ ์‚ฌ์œ  โ‘ข โ€” ๊ทธ ์…‹์ด ์ด ์ธํ๋ฒ ์ดํ„ฐ์˜ ์ตœ๋Œ€ ์‚ฐ์ถœ์ด๋‹ค** (์šด์˜์ž, 2026-08-17):
346
+ > *"**FH ์˜ ์Šคํ‚ฌ ์ƒ๋‹น์ˆ˜๋Š” ํ›„์ž์‹(์ถ•์  ๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ ** ์ „์ž๋„ ๊ฑฐ๊ธฐ์— ํ•ด๋‹นํ•˜์ง€.
347
+ > FH ์Šคํ‚ฌ์€ **๋‚ด ์•„์ด๋””์–ด๋กœ ๋ฐœ๋ช…**ํ•œ ๊ฑฐ๋‹ˆ๊นŒ."* ยท
348
+ > *"์ธํ๋ฒ ์ดํ„ฐ์˜ **์ตœ๋Œ€ ๋ ˆ๋ฒ„๋Š” ํ•˜๋„ค์Šค**์ด์ง€๋งŒ ๊ทธ **ํ•˜์œ„์˜ ๊ฒƒ๋“ค์€ ๋‹ค ํฌํ•จ**๋œ๋‹ค.
349
+ > ์Šคํ‚ฌ ยท ์—์ด์ „ํŠธ ยท **md ๊ทœ์œจ** ๋“ฑโ€ฆ"* ยท
350
+ > *"์ธํ๋ฒ ์ด์…˜ ๋Œ€์ƒ์€ ๋งˆ๊ฐ์‹œ์  ์ •๋ฆฌ ์‹œ **FH ์ž์ฒด๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.**"*
351
+
352
+ ### ๐ŸŸฅ ๊ทธ๋Ÿฌ๋ฉด ๊ฒฝ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค โ€” ํŒ๋ณ„ ๊ธฐ์ค€ (์šด์˜์ž)
353
+
354
+ ๊ฒฝ๊ณ„ ์—†์ด ํ๊ธฐ๋งŒ ํ•˜๋ฉด ์ธํ๋ฒ ์ดํ„ฐ ์ •์˜๊ฐ€ **ยซFH ๊ฐ€ ํ•œ ๋ชจ๋“  ๊ฒƒยป**์ด ๋˜์–ด ๊ณ„์ƒ์ด ๋ฌดํ•œ๋Œ€๊ฐ€ ๋˜๊ณ ,
355
+ ๊ทธ๊ฑด 1๊ฑด๋งŒ ์„ธ๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ด ๋ชป ์“ด๋‹ค. ๊ธฐ์ค€์€ ์ด๊ฒƒ์ด๋‹ค:
356
+
357
+ > *"**์Šคํ‚ฌ ์—†์ด๋„ FH ๋Š” ๋™์ž‘ํ•˜์ง€๋งŒ, ๊ทธ๊ฑธ ๋‹จ์ถ•์‹œํ‚ฌ ์œ ๋‹›์„ ๋‚ณ์€ ๊ฒƒ๊นŒ์ง€๋Š” ์ธํ๋ฒ ์ดํŒ…์œผ๋กœ ๋ด์•ผ
358
+ > ํ•œ๋‹ค.**"*
359
+
360
+ ```
361
+ โŒ ใ€ŒFH ๊ฐ€ ๊ทธ ์ผ์„ ํ–ˆ๋‚˜ใ€ โ€” ์ด๋Ÿฌ๋ฉด ์ „๋ถ€๊ฐ€ ์ธํ๋ฒ ์ดํŒ…์ด๋ผ ์ธก์ • ๋ถˆ๋Šฅ
362
+ โญ• ์กฐ๊ฑด 1 ใ€Œ๊ทธ ์ผ์„ **๋‹จ์ถ•์‹œํ‚ค๋Š” ์œ ๋‹›์„ ๋‚ณ์•˜๋‚˜**ใ€
363
+ โญ• ์กฐ๊ฑด 2 ใ€Œ๊ทธ ์œ ๋‹›์ด **์ž๊ธฐ ์†Œ๋น„์ฒ˜๋ฅผ ์ƒˆ๋กœ ๊ฐ–๋Š”๊ฐ€**ใ€ โ† ๐ŸŸฅ **ํฌ๊ธฐ ์ถ•. ๋‘˜ ๋‹ค ํ•„์š”ํ•˜๋‹ค**
364
+ (๋ณ„๋„ ๋ ˆํฌ ยท ํ”Œ๋Ÿฌ๊ทธ์ธ ์—”ํŠธ๋ฆฌ ยท ๋…๋ฆฝ ํ˜ธ์ถœ๋ฉด โ€” ยซํ˜ธ์ถœ๋ถ€๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ฒผ๋‚˜ยป)
365
+
366
+ ๋ฒ”์œ„ ํ•˜๋„ค์Šค โ† ์ตœ๋Œ€ ๋ ˆ๋ฒ„
367
+ โŠƒ ์Šคํ‚ฌ ยท ์—์ด์ „ํŠธ ยท **md ๊ทœ์œจ**
368
+ โŠƒ ํ•˜๋„ค์Šค ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๋ ˆํฌ
369
+ ```
370
+ ๐ŸŸฅ **์กฐ๊ฑด 1 ๋งŒ์œผ๋กœ๋Š” ๊ณ„์ƒ์ด ๋ฌดํ•œ๋Œ€๊ฐ€ ๋œ๋‹ค โ€” ์ ๋Œ€๊ฒ€์ฆ์ด ๋ฐ˜๋ก€๋ฅผ ๋ƒˆ๋‹ค.**
371
+ > `templates/.git-hooks/pre-commit` ์— ํ•„๋“œ ๊ฒ€์‚ฌ ํ•œ ์ค„ ์ถ”๊ฐ€ โ†’ โ“ md ๊ทœ์œจ์ด๊ณ  โ“‘ ๊ทธ ์ผ์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ 
372
+ > โ“’ ใ€Œ์œ ๋‹›ใ€์œผ๋กœ ์…€ ์ˆ˜ ์žˆ๋‹ค = **์„ธ ์กฐ๊ฑด ์ถฉ์กฑ.** ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๊ฑด ํ‰๋ฒ”ํ•œ Mode D ์ž๊ธฐ๊ฐœ๋ฐœ์ด๊ณ 
373
+ > **4์ถ• ๊ฒŒ์ดํŠธ๊ฐ€ ์ด๋ฏธ ๊ด€ํ• ํ•œ๋‹ค.** ์—ฌ๊ธฐ์— ยซ๋Œ€์ƒ์ด FH ์ž์ฒด์ผ ์ˆ˜ ์žˆ๋‹คยป ๊ฐ€ ๋ถ™์œผ๋ฉด
374
+ > **๋ชจ๋“  FH ์„ธ์…˜์˜ ๋Œ€๋ถ€๋ถ„ ์ปค๋ฐ‹์ด ์ธํ๋ฒ ์ดํŒ…**์ด ๋œ๋‹ค.
375
+
376
+ **์กฐ๊ฑด 2 ๊ฐ€ ๊ทธ๊ฑธ ์ž๋ฅธ๋‹ค**: ๊ธฐ์กด ํ›…์— ์ค„์„ ๋”ํ•˜๋Š” ๊ฒƒ์€ **์†Œ๋น„์ฒ˜๊ฐ€ ์ด๋ฏธ ์žˆ๋˜ ๊ฒƒ**์ด๋ผ ํƒˆ๋ฝํ•˜๊ณ ,
377
+ `dashboard-dev`ยท`ko-tech-writer`(ํ”Œ๋Ÿฌ๊ทธ์ธ ์—”ํŠธ๋ฆฌ ์‹ ์„ค)ยท`the-bible`(๋ณ„๋„ ๋ ˆํฌ)์€ ํ†ต๊ณผํ•œ๋‹ค.
378
+ **ใ€Œ์ผ์„ ํ–ˆ๋‹คใ€์™€ ใ€Œ์œ ๋‹›์ด ํƒœ์–ด๋‚ฌ๋‹คใ€๋ฅผ ๊ฐ€๋ฅด๋Š” ๊ฒƒ์ด ์กฐ๊ฑด 1, ใ€Œ์œ ๋‹›ใ€๊ณผ ใ€Œ๊ธฐ์กด ๊ฒƒ์˜ ํ™•์žฅใ€์„
379
+ ๊ฐ€๋ฅด๋Š” ๊ฒƒ์ด ์กฐ๊ฑด 2** ๋‹ค.
380
+
381
+ โš ๏ธ **๊ทธ๋ž˜๋„ ๋‚จ๋Š” ์ž”์—ฌ**: ์กฐ๊ฑด 2 ๋Š” ใ€Œ์†Œ๋น„์ฒ˜๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ฒผ๋‚˜ใ€๋ผ๋Š” **์‚ฌํ›„ ๊ด€์ธก**์ด๋ผ, ๋งŒ๋“œ๋Š” ์ค‘์—๋Š”
382
+ ํŒ์ •์ด ์œ ๋ณด๋œ๋‹ค. ์‚ฌ์ „ ํŒ์ •์ด ํ•„์š”ํ•˜๋ฉด ยซ์ด๊ฒƒ์ด ํƒœ์–ด๋‚˜๋ฉด ์–ด๋””์„œ ๋ถˆ๋ฆฌ๋Š”๊ฐ€ยป ๋ฅผ INTENT ์— ์ ๊ฒŒ ํ•˜๋Š”
383
+ ๊ฒƒ์ด ๋Œ€์‘์ด์ง€๋งŒ **๋ฏธ๊ตฌ์ถ•**์ด๋‹ค.
384
+
385
+ ### ์œ„ โš ๏ธ ํšŒ๊ณ  ๊ด€์ฐฐ์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜ โ€” **์žฌ๋ถ„๋ฅ˜ํ•˜๋˜ ํ๊ธฐํ•˜์ง€ ์•Š๋Š”๋‹ค**
386
+
387
+ ์•„๋ž˜ ํšŒ๊ณ  ๊ด€์ฐฐ(ยซKILL ๋œ ๊ฒƒ ์ค‘ chamber-internal metering ยท hub-internal orchestration ยท
388
+ cluster wizardry ยท org relay ๋Š” meta-shaped ์˜€๋‹คยป)์€ **์—ฌ์ „ํžˆ ์œ ํšจํ•œ ๊ด€์ฐฐ**์ด๋‹ค. ๋‹ค๋งŒ ๊ทธ
389
+ ์ฒ˜๋ถ„์ด ๋ฐ”๋€๋‹ค: **ใ€Œ์Šค์ฝ”ํ”„ ๋ฐ–์ด๋ผ KILLใ€์ด ์•„๋‹ˆ๋ผ ใ€Œmeta-*harness* ๊ธ‰์ด๋ผ day-one walk ๋ฐ”๋ฅผ
390
+ ๋‹ค๋ฅด๊ฒŒ ๋ฐ›์•„์•ผ ํ•œ๋‹คใ€**์ด๋‹ค. `NOT-APPLICABLE` ๋ถ„๋ฆฌ(์•„๋ž˜ ๋ฌธ๋‹จ)๋Š” ๊ทธ๋Œ€๋กœ ํ•„์š”ํ•˜๊ณ , ์˜คํžˆ๋ ค
391
+ ์ด ์ •์ •์œผ๋กœ **๋” ํ•„์š”ํ•ด์ง„๋‹ค** โ€” ์ด์ œ ํ†ต์ด ์…‹์ด๋‹ค: `KILL`(๋ชป ์„ ๋‹ค) ยท `CURATED`(์„ ํ–‰์ด ์žˆ๋‹ค,
392
+ ยง3-SCREEN-2026-08-17) ยท `NOT-APPLICABLE`(meta-harness ๊ธ‰์ด๋ผ ์ด ๋ฐ”๊ฐ€ ์•ˆ ๋งž๋Š”๋‹ค).
222
393
 
223
394
  โš ๏ธ **Retrospective observation, not a finding.** Re-reading the run ledger along this axis: of the
224
395
  KILLed candidates, those aimed at chamber-internal metering, hub-internal orchestration, cluster
@@ -387,6 +558,49 @@ one harness sees runtime behaviour and not source structure, another sees source
387
558
  runtime. **The meta-harness's job is not to dig a deeper well; it is to make outputs flow across the
388
559
  boundary between wells.**
389
560
 
561
+ ### 4-c. The return leg, and why the cluster exists at all (operator, 2026-08-17)
562
+
563
+ ยง4-b says outputs **flow across** the boundary. It does not say what happens to what flows *in*,
564
+ nor why FH pays for the crossing. Both were load-bearing and neither was written down. Operator's
565
+ formulation, in three parts โ€” and the third is the one that makes the first two a strategy rather
566
+ than a nice habit:
567
+
568
+ ```
569
+ 1 BORROW-EXECUTE (standing) FH does not endlessly BUILD the capability it lacks.
570
+ It reaches into a cluster harness and RUNS theirs.
571
+ 2 INTERNALIZE (selective) Of the insight that comes back, only what is genuinely worth
572
+ adopting is PROPOSED and absorbed. Never automatic.
573
+ 3 THE POINT IS TIME Not capability breadth. What FH buys by not-building is time to
574
+ sharpen its OWN edge โ€” and that is what lets it keep pace with a
575
+ fast-moving model layer instead of being outrun by it.
576
+ ```
577
+
578
+ ๐ŸŸฅ **Without (3), (1) inverts on reading.** "We borrow instead of building" reads as *"FH need not
579
+ have capabilities"* โ€” which turns the cluster into dependency. The operator's claim is the opposite:
580
+ **borrowing is how FH protects its own sharpness.** State (3) whenever (1) is cited.
581
+
582
+ **The asymmetry in (2) is the whole filter.** Borrowing is constant; absorbing is rare and gated by
583
+ a proposal. Automatic absorption produces a collage of other harnesses' capabilities wearing FH's
584
+ name โ€” the exact opposite of (3), because a collage has no edge to sharpen.
585
+
586
+ **First recorded run of the full loop (2026-08-17, gstack โ†’ qasp, FH as governor).** FH did not
587
+ build a DX/product lens; it stood up the gstack persona (`/plan-devex-review`, `/qa-only`) against a
588
+ qasp change and observed. The review returned three findings FH's and qasp's lenses structurally do
589
+ not ask (guide-promises-vs-delivered-bundle ยท the shipped document's readability ยท release-doc
590
+ drift). Then the filter ran, and **it rejected more than it accepted**:
591
+
592
+ | finding | disposition |
593
+ |---|---|
594
+ | anchor should be *discovery-based*, not a hand-kept list | **rejected** โ€” measured against FH and the transfer did not hold; a control showed the suites believed unwired do run by another path |
595
+ | guide promises โ‰  delivered bundle | **rejected** โ€” `package_coverage_check.sh` already covers it |
596
+ | release docs did not follow | **rejected** โ€” ยงโ‘ฃ-b entry-point drift covers half; not enough delta |
597
+ | **a shipped document is never read as a reader before it ships** | **accepted** โ€” and NOT because gstack said so: FH reached the same place independently the same day from a different axis, recording that *"readability is measured only by rendering it or by a person; a static scan catches what is ABSENT, never what is UNREADABLE"* with 12 findings and **0** caught by static scanners. **Two independent arrivals is the internalization signal.** One source alone leaves it a candidate. |
598
+
599
+ โš ๏ธ **Honest scope**: one run, one target, one third harness. This is an existence proof that the
600
+ loop closes, not a rate. And the filter rejecting 3 of 4 is the expected shape โ€” if it accepted
601
+ everything it would not be a filter, it would be a funnel.
602
+
603
+
390
604
  Three rules, in falling order of how easily they are broken:
391
605
 
392
606
  1. **Crossing must not overwrite the receiving harness's identity.** If harness B is deliberately