Context
Part of #4737 (parent epic — surfacing phase). Depends on the deterministic
aggregate sub-score and the LLM-tier ModelReview extension (sibling sub-issues in this epic).
The problem
Neither tier is visible to a maintainer until something renders them. This repo already has one managed
PR panel (src/github/comments.ts) with a per-row show/hide toggle mechanism
(.gittensory.yml fields: — keys linkedIssue | relatedWork | reviewLoad | validationEvidence | openPrQueue | contributorContext | gateResult, all default-shown) and an established static-template
pattern for a headline number that needs to bypass the public sanitizer safely ("**Readiness score: ${readiness.total}/100**", src/signals/engine.ts:4459).
Fix
Add a new panel section combining both tiers: the deterministic band (static template label — safe,
bypasses the sanitizer the same way readiness does) plus, where the LLM tier is also enabled, its ordinal
judgment and a sanitized one-line rationale. Add a corresponding new key to the fields: toggle list
(e.g. improvementSignal) so a maintainer can hide it like any other row, default-shown when the feature
itself is enabled for the repo.
Requirements
- Static template copy for the band/label itself (e.g. "Improvement: moderate"), matching the
readiness-score precedent — this is what keeps it sanitizer-safe regardless of the underlying words
used for band names.
- The LLM tier's
rationale text still goes through the existing sanitizer pipeline even though it
was prompt-engineered to avoid trigger words (sibling sub-issue) — defense in depth, don't skip the
existing gate just because the prompt tries to avoid it.
- Render only the tiers that are actually enabled/available for this repo (deterministic-only if the LLM
tier is off; nothing at all if improvementSignal itself is off) — no placeholder/empty section.
- Follow the existing "Nits"-style collapsible-detail convention already used elsewhere in the panel
(see any existing PR panel comment) if the structured findings list is long, rather than dumping every
finding inline.
- Update
.gittensory.yml.example's fields: documentation block with the new key.
Acceptance criteria
Context
Part of #4737 (parent epic — surfacing phase). Depends on the deterministic
aggregate sub-score and the LLM-tier
ModelReviewextension (sibling sub-issues in this epic).The problem
Neither tier is visible to a maintainer until something renders them. This repo already has one managed
PR panel (
src/github/comments.ts) with a per-row show/hide toggle mechanism(
.gittensory.ymlfields:— keyslinkedIssue | relatedWork | reviewLoad | validationEvidence | openPrQueue | contributorContext | gateResult, all default-shown) and an established static-templatepattern for a headline number that needs to bypass the public sanitizer safely (
"**Readiness score: ${readiness.total}/100**",src/signals/engine.ts:4459).Fix
Add a new panel section combining both tiers: the deterministic band (static template label — safe,
bypasses the sanitizer the same way readiness does) plus, where the LLM tier is also enabled, its ordinal
judgment and a sanitized one-line rationale. Add a corresponding new key to the
fields:toggle list(e.g.
improvementSignal) so a maintainer can hide it like any other row, default-shown when the featureitself is enabled for the repo.
Requirements
readiness-score precedent — this is what keeps it sanitizer-safe regardless of the underlying words
used for band names.
rationaletext still goes through the existing sanitizer pipeline even though itwas prompt-engineered to avoid trigger words (sibling sub-issue) — defense in depth, don't skip the
existing gate just because the prompt tries to avoid it.
tier is off; nothing at all if
improvementSignalitself is off) — no placeholder/empty section.(see any existing PR panel comment) if the structured findings list is long, rather than dumping every
finding inline.
.gittensory.yml.example'sfields:documentation block with the new key.Acceptance criteria
improvementSignalresolvestrue for the repo, and the LLM-tier judgment additionally when that sub-feature is also active.
fields:toggle key wired through the same show/hide mechanism as its six siblings, documentedin
.gittensory.yml.example.of what findings/rationale feed it (mirrors this repo's existing "public output contains no
wallet/hotkey/trust/reward terms" invariant-test style).
contributor rules require UI evidence for any visible-surface change — hold this PR to the same
bar even though it's maintainer-authored).