-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy path.fabrika.jsonc
More file actions
77 lines (69 loc) · 4.8 KB
/
Copy path.fabrika.jsonc
File metadata and controls
77 lines (69 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{
// Binds this file to its JSON Schema so an editor autocompletes keys and reds a typo or a
// wrong-typed value while you type, instead of at fabrika runtime. The schema is generated from
// the config-key fragments by `fabrika config schema --write` — never hand-edited (#6488).
"$schema": "./.fabrika.schema.json",
// Who may clear one extra repair round on a PR (`fabrika build clear`). Founder-ruled 2026-08-18
// on #5959: the grant-author set is repo configuration, not a compiled-in "founder" concept —
// GitHub usernames and teams, both `@`-prefixed as GitHub writes them. In phoenix it is the
// three founder accounts. One grant buys exactly one round.
// The governed roots — declared verbatim per the shipped default (config/keys/governed-roots.ts):
// phoenix's four roots plus this file. Declared explicitly 2026-08-26 after the two-derivations
// mismatch (#4730-class) parked PRs #7085/#7114: ship gate raises governance from raw paths
// (#5036) while review scope/post dropped the namespace absent this declaration — the gate
// demanded what the reviewer verb could not emit.
"governedRoots": [".decisions/", ".claude/", ".github/", "claude-plugins/", ".fabrika.jsonc"],
"capClearAuthors": ["@usirin", "@notusirin", "@cansirin"],
// Who may declare a campaign or flip its lifecycle state (`fabrika campaign open` / `campaign
// state`). It narrows the repo's collaborator ACL and never replaces it: an entry here still
// needs `write` or above on the repo (ADR 0294). Founder-declared 2026-08-20 on #6811 — the
// shipped default is empty, which refuses every declaration, so phoenix names the founder.
"campaignAuthors": ["@usirin"],
// Docs whose subject IS path hygiene: they must spell the forbidden path shapes out, so
// `fabrika build check --surface prose` skips its leak scan on them. Repo-relative path
// suffixes, matched by suffix the way `fabrika guard leak-guard scan` matches its own
// self-exempt list (#5687). This is phoenix's second declaration of one policy, and it is the
// MARKDOWN half: the gate also self-exempts shell and TypeScript files the prose surface never
// scans. The two are held equal by a test, not by this comment —
// `packages/fabrika-cli/src/guard/leak.golden.test.ts` reds when either side moves (ADR 0251).
// A repo without these docs declares an empty list, or no key at all, and nothing is exempt.
"docLeakExempt": [
"/CLAUDE.md",
"/agents/triager.md",
"/packages/leak-guard/README.md",
"/skills/report/SKILL.md",
"/skills/review-doc/SKILL.md",
"/skills/triage/SKILL.md"
],
// NOTHING READS THIS KEY. A §CP read that fails is the caller's exit 11 in every repo, and a
// proven-absent CODEOWNERS is the `unknown` hold — the founder reverted the per-repo policy on
// #5631, back to ADR 0220 §4. The strict value is kept declared so this repo cannot drift if the
// key is ever wired up again; what becomes of the key itself is the founder's to rule.
"unreadableCodeowners": "refuse",
// The repo's own commands that compile and lint its code. `fabrika build check --surface code`
// runs each one in the lane's tree, and both flags here are phoenix's: `--force` is turbo's
// cache-bypass (a bare `tsc` rejects it), and `lint:worktree` is a phoenix script name. Nothing
// is compiled into the CLI, so a repo declaring nothing gets a named refusal rather than these
// two commands (#6015).
"codeValidators": [
{ "command": ["pnpm", "typecheck", "--force"] },
{ "command": ["pnpm", "lint:worktree"] }
],
// The install that reconciles a tree with the lockfile it carries. `fabrika lane integrate` runs
// it in the epic run's assembly worktree after a clean child merge and before the validators
// above, so they compile against the merged lockfile rather than the install the worktree was
// placed with (#7188). `--frozen-lockfile` is pnpm's fail-closed flag: an install that cannot
// honor the merged lockfile refuses instead of rewriting it, and the integration reads that as
// a FAIL.
"dependencyReconciler": { "command": ["pnpm", "install", "--frozen-lockfile"] },
// The repo's own commands that machine-read `.github/workflows/**`. `fabrika build check
// --surface workflows` runs each one over a workflows-touching diff, on top of `actionlint` when
// the tree has one (#5991), and `reads` names the exact workflow files that command opens — the
// only thing that tells the verb WHICH changed workflow a passing run actually covers.
//
// Phoenix declares none, and the empty list is the ruling rather than a gap: founder ruling on
// #5991, 2026-08-18 — the surface stands on `actionlint` alone. So a local tree without
// `actionlint` opens no workflow file and `--surface workflows` refuses `11`, UNKNOWN — never
// green — and `ci.yml`'s own jobs stay the deciding authority on these files.
"workflowValidators": []
}