@chrono-meta/fh-gate 1.4.77 → 1.4.78
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/rules/fh_4axis_gate.md +63 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +96 -260
- package/CLAUDE.md +2 -7
- package/docs/codex-compat.md +4 -1
- package/knowledge/shared/harness-core/agents_md_runtime_details.md +233 -0
- package/knowledge/shared/harness-core/multi_model_sidecar_strategy.md +1 -1
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +14 -0
- package/knowledge/shared/rules/operational_adaptation.md +1 -130
- package/package.json +7 -5
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/skills/install-doctor/SKILL.md +88 -0
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +1 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL_detail.md +117 -3
- package/scripts/fh_node_check.sh +184 -0
- package/scripts/fh_session_load.sh +59 -28
- package/scripts/package_coverage_check.sh +22 -0
- package/scripts/selfcheck.sh +30 -15
- package/scripts/sidecar_calibrate.sh +190 -0
- package/scripts/test_node_check_lanes.sh +179 -0
- package/scripts/test_sidecar_calibrate_lanes.sh +218 -0
- package/templates/settings.SessionStart.snippet.json +54 -0
- package/scripts/consent_registry_check.sh +0 -390
- package/scripts/test_consent_registry.sh +0 -255
- package/templates/consent_classes.yaml.example +0 -75
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# consent_classes.yaml — the consent-class registry.
|
|
2
|
-
#
|
|
3
|
-
# Copy to `tracks/_meta/consent_classes.yaml` (gitignored, per-environment) to enable
|
|
4
|
-
# accept-side consent promotion. See `knowledge/shared/rules/operational_adaptation.md`
|
|
5
|
-
# §Consent promotion.
|
|
6
|
-
#
|
|
7
|
-
# WHY A REGISTRY AT ALL (cross-family review, 2026-07-29)
|
|
8
|
-
# The first draft let the running session name the class it was counting approvals against.
|
|
9
|
-
# That defeats the class-inflation guard before it fires: the class does not need to be WIDENED
|
|
10
|
-
# later if it was born wide. Recording three approvals as `sim-conductor` instead of
|
|
11
|
-
# `dispatch read-only sim on a local artifact` silently grants every future sim-conductor mode.
|
|
12
|
-
# So classes are DECLARED here, reviewed by a human, and the session may only count against
|
|
13
|
-
# an entry that already exists. A session may propose a new entry; it may not mint one mid-run.
|
|
14
|
-
#
|
|
15
|
-
# THE FLOOR IS READ FROM THIS FILE, NOT JUDGED AT RUNTIME
|
|
16
|
-
# `sinks` is the field the irreversibility floor is decided from. A session asking itself
|
|
17
|
-
# "is this reversible?" is the wrong arbiter — it is the party that wants to stop being asked.
|
|
18
|
-
# Absent entry / absent file / unparseable entry => NO promotion, keep asking. Unknown is not
|
|
19
|
-
# reversible.
|
|
20
|
-
#
|
|
21
|
-
# TAINT
|
|
22
|
-
# A class inherits the floor if it FEEDS an irreversible sink, not only if it crosses one.
|
|
23
|
-
# `local-commit` below is the worked example: committing is locally reversible, but if a
|
|
24
|
-
# post-commit hook, sync daemon, or CI workflow publishes from that commit, the chain crossed
|
|
25
|
-
# go-public and the class must be marked tainted. Declare `feeds:` honestly — the whole point
|
|
26
|
-
# is that no single step in a bad chain looks dangerous on its own.
|
|
27
|
-
|
|
28
|
-
classes:
|
|
29
|
-
# ---- promotion-eligible example -------------------------------------------------
|
|
30
|
-
- name: dispatch-readonly-sim-local-artifact
|
|
31
|
-
owner: fh-meta:sim-conductor # the gate/skill that does the asking
|
|
32
|
-
mode: blind-target-tier-sim
|
|
33
|
-
target: a single local file under the current repo
|
|
34
|
-
capabilities: [read, dispatch] # read · local-write · network · dispatch · repo-mutation
|
|
35
|
-
sinks: [] # crosses nothing irreversible
|
|
36
|
-
feeds: [] # enables/queues nothing irreversible
|
|
37
|
-
promotion_eligible: true
|
|
38
|
-
lease_days: 30 # standing consent is a renewable lease, never permanent
|
|
39
|
-
|
|
40
|
-
# ---- NOT promotion-eligible: sink is irreversible --------------------------------
|
|
41
|
-
- name: npm-publish
|
|
42
|
-
owner: Pre-Publish Surface Gate
|
|
43
|
-
mode: registry-publish
|
|
44
|
-
target: the package tarball file set
|
|
45
|
-
capabilities: [read, network]
|
|
46
|
-
sinks: [go-public] # irreversible => never promotes, at any count
|
|
47
|
-
feeds: []
|
|
48
|
-
promotion_eligible: false
|
|
49
|
-
reason: "publish is effectively irreversible — a package is live the instant it ships and may
|
|
50
|
-
be cached or forked before any scrub (CLAUDE.md §Pre-Publish Surface Gate)."
|
|
51
|
-
|
|
52
|
-
# ---- NOT promotion-eligible: TAINTED (this is the one that looks safe) -----------
|
|
53
|
-
- name: local-commit
|
|
54
|
-
owner: FH 4-axis commit gate
|
|
55
|
-
mode: git-commit
|
|
56
|
-
target: the working tree
|
|
57
|
-
capabilities: [local-write, repo-mutation]
|
|
58
|
-
sinks: [] # committing itself is reversible
|
|
59
|
-
feeds: [go-public] # ...but CI/sync publishes from it
|
|
60
|
-
promotion_eligible: false
|
|
61
|
-
reason: "taint — reversible in isolation, feeds an irreversible sink. Every step in the
|
|
62
|
-
workflow-edit -> release-notes -> commit -> CI-publish chain is individually
|
|
63
|
-
reversible; the chain is not."
|
|
64
|
-
|
|
65
|
-
# ---- NOT promotion-eligible: unclassified ---------------------------------------
|
|
66
|
-
- name: run-arbitrary-shell
|
|
67
|
-
owner: (none — catch-all)
|
|
68
|
-
mode: unrestricted
|
|
69
|
-
target: unbounded
|
|
70
|
-
capabilities: [read, local-write, network, dispatch, repo-mutation]
|
|
71
|
-
sinks: [unknown] # unknown is NOT reversible
|
|
72
|
-
feeds: [unknown]
|
|
73
|
-
promotion_eligible: false
|
|
74
|
-
reason: "sinks cannot be enumerated, so the floor cannot be decided mechanically. A class
|
|
75
|
-
whose blast radius is unbounded is never a candidate, regardless of approval count."
|