feat(config): add review.linkedIssueSatisfaction knob (off/advisory/block, default off) (#2173)#3665
Conversation
…lock, default off) (JSONbored#2173) Config-as-code slice for JSONbored#1961: parse + normalize the per-repo knob through the FocusManifestReviewConfig parse path only. Default null (unset) ⇒ byte-identical to today. Does NOT touch the merge/close decision — that maintainer-only slice reads the resolved mode separately. - focus-manifest.ts: LinkedIssueSatisfactionMode ('off'|'advisory'|'block') + linkedIssueSatisfaction field; normalizeOptionalEnum parse (warn+ignore on malformed), default null; reviewConfigToJson round-trip (omitted when null ⇒ byte-identical) + present + EMPTY literals. - .gittensory.yml.example: documented review.linkedIssueSatisfaction (distinct from the existing linkedIssuePolicy, which only checks a link EXISTS). - Tests: absent→null (omitted), each valid mode round-trips + marks present, malformed + non-string → warn+null. Ships the .gittensory.yml parity per the config-as-code rule (enforced by the existing "documents review.*" parity test).
…rror (JSONbored#2173) The config-templates test (JSONbored#1682) asserts gittensory.full.yml is byte-identical to .gittensory.yml.example from the WHERE IT LIVES marker onward; mirror the new doc block.
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-06 00:36:47 UTC
⏸️ Suggested Action - Manual Review Review summary Nits — 5 non-blocking
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3665 +/- ##
=======================================
Coverage ? 93.29%
=======================================
Files ? 314
Lines ? 32057
Branches ? 11748
=======================================
Hits ? 29906
Misses ? 1517
Partials ? 634
🚀 New features to boost your workflow:
|
Closes #2173 (config slice for #1961). Re-submit of #3659, which was auto-closed on a stale CI run — the gate closed it based on the pre-fix run before the fix's re-run finished. The fix is included here and the full suite is green locally (
npm run validate).Wires the
review.linkedIssueSatisfactionconfig-as-code knob through theFocusManifestReviewConfigparse path only — parse + normalize + default-off. Defaultnull(unset) ⇒ byte-identical to today. Does not touch the merge/close decision (a separate maintainer slice reads the resolved mode).What's here
focus-manifest.ts—LinkedIssueSatisfactionMode('off' | 'advisory' | 'block') +linkedIssueSatisfactiononFocusManifestReviewConfig; parsed with the sharednormalizeOptionalEnum(warn + ignore on malformed), defaultnull;reviewConfigToJsonround-trip (omitted whennull⇒ byte-identical) +present+ theEMPTYliterals..gittensory.yml.example+config/examples/gittensory.full.yml— documented the knob in both synced mirrors (theconfig-templatesparity test enforces they match).Validation
Full local suite (
npm run validate=tsc --noEmit && vitest run):Covers: absent →
null(omitted on serialize), each valid mode round-trips + markspresent, malformed / non-string → warn +null, plus thedocuments review.*doc-parity andconfig-templatessync tests.