Skip to content

Retire the dead blockedPaths key and fix stale templates that document it as live #5294

Description

@JSONbored

Context

blockedPaths was fully retired from the FocusManifest TypeScript type (commit f13d95c01, #2974, 2026-07-04) — packages/gittensory-engine/src/focus-manifest.ts's FocusManifest type (lines 886-906) has no blockedPaths field, parseFocusManifest never reads it, and there's no manifest_blocked_path finding code at all. Real path-based enforcement now lives entirely in settings.hardGuardrailGlobs. Despite this:

  1. Live drift — all 3 production repo configs still carry blockedPaths: [] (jsonbored__gittensory.gittensory.yml:118, jsonbored__metagraphed.gittensory.yml:148, jsonbored__awesome-claude.gittensory.yml:107).
  2. Root cause — the 2026-07-04 retirement commit updated ~20 files but missed two checked-in, self-host-operator-facing bootstrap templates — .gittensory.yml.example and config/examples/gittensory.full.yml (byte-synced per test/unit/config-templates.test.ts) — which still document blockedPaths: with non-empty example values (vendor/**, .github/workflows/**) and false claims that it "feed[s] advisory-only guidance findings" (.gittensory.yml.example:51), "surfaces in onboarding guidance and gittensory's own risk-reason commentary" (lines 61-68), and becomes "an enforceable blocker" under gate.manifestPolicy: block (lines 271-273) — all three claims are false, contradicted by test/unit/predicted-gate.test.ts:348-370 and test/unit/focus-manifest.test.ts:583-588. This is very likely why operators keep copy-pasting the dead key into live configs.
  3. Self-contradicting docs pagedocs.self-hosting-configuration.tsx:594-604 claims live guidance behavior in one sentence and correctly notes retirement in the very next one.
  4. Structural CI gaptest/unit/config-templates.test.ts's zero-warnings test calls the lenient parseFocusManifestContent (never warns on unrecognized fields by design), not lintManifestText (the only function with the retired-field check, src/selfhost/config-lint.ts:67-69, reachable only via the manual npm run selfhost:config-lint CLI with zero production callers). So the one test that already parses this exact stale template structurally cannot flag it.

Note: an unrelated, fully-live blockedPaths field exists on the separate MinerGoalSpec schema (.gittensory-miner.yml) — keep any fix scoped to the top-level .gittensory.yml/FocusManifest field only.

Requirements

  • Two parts: a PR fixing the root cause (templates + CI regression test), and a separate direct VPS edit (strip the dead key from live configs) — do not conflate them into one change.

Deliverables

PR (JSONbored/gittensory):

  • .gittensory.yml.example and config/examples/gittensory.full.yml — fix all three false-claim locations (lines 51, 61-68, 271-273 and their full.yml mirrors): either replace with an accurate "legacy, fully retired, no runtime effect — use settings.hardGuardrailGlobs" note, or delete the block entirely.
  • docs.self-hosting-configuration.tsx:594-604 — remove the false "surfaces in onboarding guidance" sentence; keep only the accurate retirement sentence.
  • test/unit/config-templates.test.ts — extend the "parses gittensory.full.yml with zero warnings" test to also assert lintManifestText(...) returns zero warnings, so a retired field reintroduced into the shipped templates fails CI automatically going forward.
  • (Optional) Remove the dead "manifest_blocked_path" string from processors.ts:7320's policyCodes Set.

Direct VPS edit (edge-nl-01, separate from the PR):

  • Strip blockedPaths: [] from all 3 live private-config files.

Expected Outcome

The templates no longer document a dead feature with false behavioral claims; CI automatically catches this class of "retirement commit missed a template" bug going forward; the live configs no longer carry the dead key.

Links & Resources

  • Evidence: packages/gittensory-engine/src/focus-manifest.ts:886-906,3071-3090 (zero blockedPaths references); src/selfhost/config-lint.ts:65-88; .gittensory.yml.example:51,61-68,271-273; config/examples/gittensory.full.yml:64-67,74-81,284-286; apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx:585,594-604; src/services/decision-pack.ts:1024-1056; src/queue/processors.ts:7320

Part of #5270 (roadmap epic).

Metadata

Metadata

Assignees

Labels

maintainer-onlyOwner-only work — yields no Gittensor points.

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions