@chrono-meta/fh-gate 2.1.0 → 2.3.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/capabilities/adapters/qasp-new-code-anchor.cap +5 -2
- package/.claude/capabilities/adapters/qasp-web-rules.cap +130 -0
- package/.claude/rules/fh_4axis_gate.md +30 -0
- package/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +10 -3
- package/knowledge/shared/harness-core/harness_terminal_correlation_and_recommendations.md +36 -2
- package/knowledge/shared/harness-core/ship_readiness_gate.md +36 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +36 -0
- package/package.json +8 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-commons/skills/ko-tech-writer/fixtures/known_negative.md +19 -0
- package/plugins/fh-commons/skills/ko-tech-writer/fixtures/known_positive.md +20 -0
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +98 -0
- package/scripts/adapters/fixtures/qasp_web_rules_known_negative.json +7 -0
- package/scripts/adapters/fixtures/qasp_web_rules_known_positive.json +7 -0
- package/scripts/adapters/qasp_web_rules.sh +171 -0
- package/scripts/capability_effect_probe.sh +104 -0
- package/scripts/chamber_run.sh +15 -2
- package/scripts/ko_tech_writer_calibrate.py +127 -0
- package/scripts/publish_freshness_check.sh +21 -2
- package/scripts/selfcheck.sh +2 -1
- package/scripts/test_adapter_lanes.sh +37 -1
- package/scripts/test_ko_tech_writer_lanes.sh +61 -0
- package/scripts/test_marker_axes_run_lanes.sh +19 -0
- package/templates/.git-hooks/pre-commit +20 -0
|
@@ -168,6 +168,25 @@ controls: n/a — 측정 없음
|
|
|
168
168
|
standpoint: tier1b(qasp)')
|
|
169
169
|
check "$S7c" PASS "★컨트롤: 포인터에 대상이 붙어도 standpoint: 줄이 있으면 통과 (과차단 방지)"
|
|
170
170
|
|
|
171
|
+
# ── ⓓ3자대면 자기 필드 `thirdparty:` (2026-08-17 신설) ─────────────────────────
|
|
172
|
+
# ⓑ 와 같은 형태이므로 **ⓑ가 실측으로 겪은 fail-open 을 미리 막았는지**를 같이 고정한다.
|
|
173
|
+
S7d=$(mk "$D_SIX" 'axes-run: ⓐ=none ⓑ=none ⓒ=none ⓓ=→thirdparty ⓔ=none ⓕ=none
|
|
174
|
+
controls: n/a — 측정 없음')
|
|
175
|
+
check "$S7d" BLOCK "★ⓓ=→thirdparty 인데 thirdparty: 줄이 없음 → 차단 (죽은 포인터)"
|
|
176
|
+
|
|
177
|
+
S7e=$(mk "$D_SIX" 'axes-run: ⓐ=none ⓑ=none ⓒ=none ⓓ=thirdparty ⓔ=none ⓕ=none
|
|
178
|
+
controls: n/a — 측정 없음')
|
|
179
|
+
check "$S7e" BLOCK "★화살표 없는 ⓓ=thirdparty 도 차단 (ⓑ가 뚫렸던 그 표기 fail-open)"
|
|
180
|
+
|
|
181
|
+
S7f=$(mk "$D_SIX" 'axes-run: ⓐ=none ⓑ=none ⓒ=none ⓓ=→thirdparty(promptfoo·DeepEval) ⓔ=none ⓕ=none
|
|
182
|
+
controls: n/a — 측정 없음
|
|
183
|
+
thirdparty: none-found(promptfoo·DeepEval·mutation testing 훑음)')
|
|
184
|
+
check "$S7f" PASS "★컨트롤: 포인터에 대상이 붙어도 thirdparty: 줄이 있으면 통과 (과차단 방지)"
|
|
185
|
+
|
|
186
|
+
S7g=$(mk "$D_SIX" 'axes-run: ⓐ=none ⓑ=none ⓒ=none ⓓ=none ⓔ=none ⓕ=none
|
|
187
|
+
controls: n/a — 측정 없음')
|
|
188
|
+
check "$S7g" PASS "★컨트롤: ⓓ=none 이면 thirdparty: 줄이 없어도 통과 (포인터를 안 쓴 경우)"
|
|
189
|
+
|
|
171
190
|
S8=$(mk "$D_SIX" 'axes-run: ⓐ=codex ⓑ=→standpoint ⓒ=none ⓓ=none ⓔ=실사용 ⓕ=되돌림
|
|
172
191
|
axes-run: ⓐ=거짓말 ⓑ=x ⓒ=x ⓓ=x ⓔ=x ⓕ=x
|
|
173
192
|
controls: alive — ok
|
|
@@ -866,6 +866,26 @@ validate_marker_axes_run() { # $1 = marker path
|
|
|
866
866
|
echo " standpoint: not-applicable"
|
|
867
867
|
return 1
|
|
868
868
|
fi
|
|
869
|
+
|
|
870
|
+
# ⓓ3자대면도 같은 형태 — 값은 `thirdparty:` 자기 필드가 나른다 (2026-08-17 신설).
|
|
871
|
+
# 🟥 왜 자기 필드가 필요한가: `axes-run` 한 칸은 **토큰**만 담는다. ⓓ가 실제로 내는 것은
|
|
872
|
+
# «무엇을 검색해서 무엇을 찾았나» 라 한 토큰에 안 들어간다. 자리가 없으면 안 적히고,
|
|
873
|
+
# 안 적히면 다음 세션이 «이 축을 돌렸나»를 물을 수도 확인할 수도 없다.
|
|
874
|
+
# 실측(2026-08-17): 이 축을 처음 제대로 돌린 세션에서 발표 주장 **6건**이 선행자산에
|
|
875
|
+
# 걸렸는데, 그 결과를 기록할 필드가 없었다.
|
|
876
|
+
# ⚠️ ⓑ 와 **똑같은 fail-open 을 반복하지 않는다** — 화살표를 필수로 보지 않고
|
|
877
|
+
# «ⓓ 값이 thirdparty 를 참조하는가» 로 넓힌다(ⓑ가 그렇게 뚫렸던 실측이 바로 위에 있다).
|
|
878
|
+
# 같은 명시 잔여도 그대로 상속한다: 참조어가 다른 토큰에 있으면 안 잡힌다.
|
|
879
|
+
if echo "$line" | grep -qE "(^|[[:space:]])ⓓ=[^[:space:]]*thirdparty" \
|
|
880
|
+
&& ! grep -qE '^[[:space:]]*thirdparty:[[:space:]]*[^[:space:]]' "$m" 2>/dev/null; then
|
|
881
|
+
echo " ❌ MARKER — 'ⓓ=→thirdparty' 라고 적었는데 'thirdparty:' 줄이 없다"
|
|
882
|
+
echo " 포인터가 가리키는 곳이 비어 있으면 그건 기록이 아니라 죽은 포인터다."
|
|
883
|
+
echo " thirdparty: checked(promptfoo·DeepEval 훑음 — 겹침 없음)"
|
|
884
|
+
echo " thirdparty: none-found(<무엇을 검색했나>) ← 찾았는데 없음. «안 봤다»와 다르다"
|
|
885
|
+
echo " thirdparty: UNKNOWN ← 안 봤다"
|
|
886
|
+
echo " thirdparty: not-applicable"
|
|
887
|
+
return 1
|
|
888
|
+
fi
|
|
869
889
|
fi
|
|
870
890
|
|
|
871
891
|
line=$(grep -m1 -E '^[[:space:]]*controls:' "$m" 2>/dev/null \
|