feat(config): validate .gittensory.yml against schema (fail clearly pre-review) - #3823
Conversation
…re-review) Surface every parseFocusManifest parse warning as a single grouped, deduped "Manifest validation" collapsible in the unified PR review comment, so an invalid or malformed .gittensory.yml value fails clearly instead of silently falling back to a default. Reuses the warnings every parser already accumulates (no parallel schema). Always on, no new config knob; a fully valid manifest renders byte-identically (no section). Closes JSONbored#2056
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3823 +/- ##
=======================================
Coverage 93.41% 93.41%
=======================================
Files 325 325
Lines 32844 32859 +15
Branches 12030 12035 +5
=======================================
+ Hits 30680 30695 +15
Misses 1530 1530
Partials 634 634
🚀 New features to boost your workflow:
|
|
Tip 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 ✅ Gittensory review result - approve/merge recommendedReview updated: 2026-07-06 19:21:42 UTC
✅ Suggested Action - Approve/Merge
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.
|
Summary
parseFocusManifestparse warning (an unrecognized field, a malformed value that got dropped) is now collected into a single grouped, deduped "Manifest validation" collapsible in the unified PR review comment, so an invalid.gittensory.ymlvalue fails clearly instead of silently falling back to a default.FocusManifest.warnings) — no parallel schema.Closes #2056.
Scope
type(scope): short summaryConventional Commit format, for examplefix(api): restore profile access checks.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlint(not run locally; change touches no workflow files)npm run typechecknpm run test:coveragelocally;codecov/patchrequires ≥99% coverage of the lines AND branches you changed (aim for 100% on your diff so CI variance does not fail near the threshold). Global coverage is a non-blocking trend with a loose 90% backstop, not the gate.npm run test:workersnpm run build:mcp(not run locally; change touches no MCP server/CLI code)npm run test:mcp-pack(not run locally; change touches no MCP server/CLI code)npm run ui:openapi:check/ui:openapi:settings-parityspot-checked (no API/OpenAPI/settings-schema surface touched)npm run ui:lint(not run locally; change touches noapps/gittensory-uifiles)npm run ui:typecheck(not run locally; change touches noapps/gittensory-uifiles)npm run ui:build(not run locally; change touches noapps/gittensory-uifiles)npm audit --audit-level=moderateIf any required check was skipped, explain why:
actionlint,build:mcp/test:mcp-pack,ui:*) have zero surface overlap with this diff, which only touchessrc/signals/focus-manifest.ts,src/review/unified-comment-bridge.ts,src/queue/processors.ts,.gittensory.yml.example+config/examples/gittensory.full.yml(kept byte-identical from theWHERE IT LIVESmarker onward, verified viatest/unit/config-templates.test.ts), and their unit tests — no workflow, MCP, or UI files changed.docs:drift-checkwas run directly and passes.Safety
UI Evidencesection... (N/A — this only changes GitHub PR-comment markdown, notapps/gittensory-ui.).gittensory.yml.example+config/examples/gittensory.full.ymlupdated; no changelog touched.)UI Evidence
N/A — this PR only changes deterministic markdown rendering of the GitHub PR review comment (
src/review/unified-comment-bridge.ts), notapps/gittensory-ui. No visible web UI surface changed.Notes
buildChangedFilesSummaryCollapsible(the collapsible-builder pattern insrc/review/unified-comment-bridge.ts, including its own dedicated test file convention) and the already-loadedFocusManifestobject insrc/queue/processors.ts(restructured one.review-only load into a full-manifest variable so.warningsis available at the comment-build site, without an extra fetch).review.*display knobs (max_findings,comment_verbosity), this feature is intentionally not gated behind a new.gittensory.ymlkey — the issue's acceptance criterion is that an invalid config fails clearly unconditionally, matching#1670's epic goal.