docs+fixes(selfhost/ci/chat): claude token docs, ui-only CI gating fix, chat-qa test fix - #5201
Conversation
…e screenshots note Two drift fixes found while auditing the recent secrets-migration and screenshot-allowlist changes: - The security and AI-providers docs pages only described the inline .env path for CLAUDE_CODE_OAUTH_TOKEN; add the secrets/*.txt file alternative now that docker-compose.yml supports it. - config/examples/gittensory.full.yml and .gittensory.yml.example both still called `screenshots` a "plain symmetric override" -- #4990 made it allowlist-required (force-off only outside the rollout allowlist), the same asymmetry as safety/grounding. Update both mirrored comment blocks to match.
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
gittensory-ui | ac58521 | Commit Preview URL Branch Preview URL |
Jul 12 2026, 09:11 AM |
validate-code's "Build engine package" step only ran on push, or when backend/engine changed -- not when only ui changed. But the very next "UI typecheck" step (gated separately on ui) transitively needs that build: apps/gittensory-ui's tsconfig pulls in src/mcp/local-write-tools.ts, which imports @jsonbored/gittensory-engine, whose dist/ is gitignored and only exists after this step runs. Any PR touching only apps/gittensory-ui/** (a docs-only page edit, for example) hit TS2307 here with no code being wrong -- confirmed live on PR #5201's own validate-code run. Add the missing `|| needs.changes.outputs.ui == 'true'` condition.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #5201 +/- ##
==========================================
+ Coverage 87.46% 94.34% +6.88%
==========================================
Files 473 473
Lines 39966 39966
Branches 14570 14570
==========================================
+ Hits 34955 37705 +2750
+ Misses 3600 1585 -2015
+ Partials 1411 676 -735
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
|
Caution 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥 🛑 Gittensory review result - fixes requiredReview updated: 2026-07-12 09:20:19 UTC
🛑 Suggested Action - Manual Review
Review summary Nits — 6 non-blocking
Why this is blocked
CI checks failing
Review context
Contributor next steps
Signal definitions
[BETA] Chat with GittensoryAsk Gittensory a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands Visual previewClick any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy. 🟩 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.
|
#5149 added PRIVATE_LANE_SIGNAL_PATTERN and correctly wired it into redactGroundingText, applied to objective/summary/publicSafeSummary/ freshnessWarnings -- the only fields compactChatSignalBundle() ever reads. But its own new integration test overrode action.why instead, a field that function never reads at all (by design: raw action rationale/blockedBy is omitted entirely from the chat grounding bundle, not merely redacted -- see the comment above PRIVATE_DECISION_BLOCKER_PATTERN). The override never reached the prompt, so neither assertion exercised the new pattern; it happened to still report a false pass shape until CI caught the real failure downstream. Point the override at publicSafeSummary, the field that actually flows into the prompt, so the test validates what it claims to. No src/ change: redactGroundingText and its regex were already correct, proven by the adjacent pure-function unit test a few lines down in the same file, which was passing throughout.
Summary
Three fixes, each individually small, bundled here because each was a real blocker discovered while trying to ship the first one (all detailed in Notes):
docs.self-hosting-security.tsx/docs.self-hosting-ai-providers.tsxdocument thesecrets/claude_code_oauth_token.txtfile alternative forCLAUDE_CODE_OAUTH_TOKEN(added todocker-compose.ymlin feat(selfhost): add claude code token to native Docker secrets #5144).config/examples/gittensory.full.yml/.gittensory.yml.example(mirrored bodies) fix a stale claim thatscreenshotsis a "plain symmetric override" — fix(review): keep screenshots allowlist-bound #4990 made it allowlist-required (force-off only outside the rollout allowlist), same asymmetry assafety/grounding..github/workflows/ci.yml'svalidate-code"Build engine package" step only ran onpush, or whenbackend/enginechanged — notui, even though the very next "UI typecheck" step (gated onui) transitively needs it (apps/gittensory-ui's tsconfig pulls insrc/mcp/local-write-tools.ts, which imports@jsonbored/gittensory-engine). Any PR touching onlyapps/gittensory-ui/**hitTS2307here on otherwise-correct code — this PR's own firstvalidate-coderun did exactly that. Added the missinguicondition.test/unit/ai-chat-qa.test.ts's new lane-signal redaction test (fix(chat): redact private lane signals from Q&A #5149) overrodeaction.why, a fieldcompactChatSignalBundle()never reads — by design, raw action rationale/blockedByis omitted entirely from the chat grounding bundle, not merely redacted. The override never reached the prompt, so the test asserted on content that could never appear.redactGroundingTextand its newPRIVATE_LANE_SIGNAL_PATTERNregex were already correct the whole time (proven by the adjacent pure-function unit test, which passed throughout) — this was a test-only bug, not a privacy regression. Pointed the override atpublicSafeSummary, the field that actually flows into the prompt.Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run typecheck(root)npm run ui:typechecknpm run ui:lint(found and auto-fixed one pre-existing-pattern Prettier nit in my own new JSX text; zero errors after)npx tsx scripts/gittensory-config-lint.ts .gittensory.yml.exampleand same forconfig/examples/gittensory.full.yml— both pass (pre-existing, unrelatedblockedPaths is retiredwarning only)npm run docs:drift-checknpm run actionlint(workflow YAML change)npx vitest run test/unit/ai-chat-qa.test.ts— all 31 tests pass after the fixnpm run test:coverage(full) /test:workers/build:mcp/test:mcp-pack/ui:openapi:check/ui:build/npm audit— not run in full locally; relying on this PR's own CI for the full suite since none of these three changes touchsrc/**production logic (only a workflow file, docs pages, example-config comments, and one test file)If any required check was skipped, explain why:
src/**logic changed anywhere in this diff (the chat-qa fix is test-only;redactGroundingTextitself is untouched). Relying on CI for the full matrix rather than re-running it all locally given the narrow blast radius.Safety
redactGroundingText/PRIVATE_LANE_SIGNAL_PATTERNlogic was already correct and untouched; only the test's fixture override target was wrong. TracedcompactChatSignalBundle()line-by-line to confirmwhy/blockedByare deliberately never read (onlypublicSafeSummary,objective,summary,freshnessWarningsare), matching the file's own documented design intent.UI Evidence
Text-only docs changes (prose + one troubleshooting-row string) — no layout/visual change, no screenshots. The CI/test files are not user-facing.
Notes
validate-coderun failed withTS2307— https://github.com/JSONbored/gittensory/actions/runs/29187025975/job/86634920100. Confirmed pre-existing (not caused by this PR's docs diff) by checkingmain's ownpush-triggered runs passvalidate-code(thepushbranch of the condition always builds the engine); only a PR touching solelyui-classified paths hits the gap.validate-tests (4)shard still failed — inherited frommain, which is currently red for the same reason (confirmed viamain's last several push runs, e.g. the run for commitf166c07aaitself). Traced to the test, not the redaction code; fixed here so both this PR andmaingo green.