Follow-up to #551 (merge-readiness aggregate gate). The DB-settable mergeReadinessGateMode shipped, but the config-as-code parity was deferred: .gittensory.yml can't yet set the composite via gate.mergeReadiness.
Why deferred
The other gate modes map from the manifest in src/signals/focus-manifest.ts (e.g. if (gate.slopMode !== null) effective.slopGateMode = gate.slopMode;). Adding gate.mergeReadiness needs the manifest gate-schema parser extended to recognize + normalize the new key — more than the one-line mapping, so it was split out to keep #551 focused.
Deliverables
Context
src/signals/focus-manifest.ts (~488 the gate-mode mapping, ~479 resolveEffectiveSettings). Relates #551, #555 (focus-manifest-as-gate).
Follow-up to #551 (merge-readiness aggregate gate). The DB-settable
mergeReadinessGateModeshipped, but the config-as-code parity was deferred:.gittensory.ymlcan't yet set the composite viagate.mergeReadiness.Why deferred
The other gate modes map from the manifest in
src/signals/focus-manifest.ts(e.g.if (gate.slopMode !== null) effective.slopGateMode = gate.slopMode;). Addinggate.mergeReadinessneeds the manifest gate-schema parser extended to recognize + normalize the new key — more than the one-line mapping, so it was split out to keep #551 focused.Deliverables
mergeReadiness: off|advisory|blockto the.gittensory.ymlgateschema + parser (focus-manifest.ts)effective.mergeReadinessGateModeinresolveEffectiveSettings(manifest wins over DB, mirroring the other gate modes)gate.mergeReadiness: blockin yml drives the compositeContext
src/signals/focus-manifest.ts (~488 the gate-mode mapping, ~479 resolveEffectiveSettings). Relates #551, #555 (focus-manifest-as-gate).