dotbrain 0.3.4__tar.gz → 0.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. {dotbrain-0.3.4 → dotbrain-0.3.5}/PKG-INFO +1 -1
  2. {dotbrain-0.3.4 → dotbrain-0.3.5}/README.md +7 -0
  3. {dotbrain-0.3.4 → dotbrain-0.3.5}/pyproject.toml +1 -1
  4. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/__init__.py +1 -1
  5. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/cli.py +36 -7
  6. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/claude/implementer.md +7 -4
  7. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/claude/investigator.md +2 -1
  8. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/claude/reviewer.md +3 -1
  9. dotbrain-0.3.5/src/dotbrain/resources/agents/claude/verifier.md +42 -0
  10. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/codex/implementer.toml +7 -3
  11. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/codex/investigator.toml +3 -1
  12. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/agents/codex/reviewer.toml +3 -1
  13. dotbrain-0.3.5/src/dotbrain/resources/agents/codex/verifier.toml +35 -0
  14. dotbrain-0.3.4/src/dotbrain/resources/agents/claude/verifier.md +0 -35
  15. dotbrain-0.3.4/src/dotbrain/resources/agents/codex/verifier.toml +0 -21
  16. {dotbrain-0.3.4 → dotbrain-0.3.5}/.gitignore +0 -0
  17. {dotbrain-0.3.4 → dotbrain-0.3.5}/LICENSE +0 -0
  18. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/README.md +0 -0
  19. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/architecture.md +0 -0
  20. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/beads-backend.md +0 -0
  21. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/cli-reference.md +0 -0
  22. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/configuration.md +0 -0
  23. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/getting-started.md +0 -0
  24. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/glossary.md +0 -0
  25. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/skills.md +0 -0
  26. {dotbrain-0.3.4 → dotbrain-0.3.5}/docs/wiring.md +0 -0
  27. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/_cli_reference.py +0 -0
  28. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/adopter_repos.py +0 -0
  29. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/beads.py +0 -0
  30. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/bootstrap.py +0 -0
  31. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/brainspaces.py +0 -0
  32. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/config.py +0 -0
  33. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/doctor.py +0 -0
  34. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/hooks.py +0 -0
  35. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/migrate.py +0 -0
  36. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/paths.py +0 -0
  37. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resource_loader.py +0 -0
  38. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/__init__.py +0 -0
  39. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/config.yaml +0 -0
  40. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/core.yaml +0 -0
  41. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/AGENTS.md +0 -0
  42. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/DOTBRAIN.md +0 -0
  43. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/adr/README.md +0 -0
  44. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/designs/README.md +0 -0
  45. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/docs/README.md +0 -0
  46. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/brain/project.yaml +0 -0
  47. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/resources/templates/gitignore +0 -0
  48. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/skills.py +0 -0
  49. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/subagents.py +0 -0
  50. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/updater.py +0 -0
  51. {dotbrain-0.3.4 → dotbrain-0.3.5}/src/dotbrain/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: dotbrain
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Wires project Brainspaces and skills into coding agents.
5
5
  Project-URL: Homepage, https://github.com/arminzou/dotbrain
6
6
  Project-URL: Repository, https://github.com/arminzou/dotbrain
@@ -4,6 +4,8 @@
4
4
 
5
5
  # Dotbrain
6
6
 
7
+ [![PyPI](https://img.shields.io/pypi/v/dotbrain)](https://pypi.org/project/dotbrain/)
8
+
7
9
  > Dotbrain keeps your project's context private and your code repo clean, and makes that discipline effortless.
8
10
 
9
11
  As an engineer, almost everything I build outgrows my private workspace. A side project I start
@@ -196,6 +198,11 @@ first so Dotbrain can create directory symlinks without Administrator privileges
196
198
  dotbrain home defaults to `%USERPROFILE%\dotbrain` (for example, `C:\Users\you\dotbrain`). Set
197
199
  `DOTBRAIN_HOME` only when you want to use a different location.
198
200
 
201
+ Already have `uv` or `pipx` and just want the CLI? `uv tool install dotbrain` (or
202
+ `pipx install dotbrain`, or plain `pip install dotbrain`) installs it from
203
+ [PyPI](https://pypi.org/project/dotbrain/) — this skips `uv`/Beads provisioning, so follow up
204
+ with `dotbrain bootstrap` and `dotbrain doctor`.
205
+
199
206
  See [docs/getting-started.md](docs/getting-started.md) for the full walkthrough, including how to
200
207
  install the CLI by hand and what to do if `marketplace add` trips over a Windows file lock.
201
208
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dotbrain"
3
- version = "0.3.4"
3
+ version = "0.3.5"
4
4
  description = "Wires project Brainspaces and skills into coding agents."
5
5
  requires-python = ">=3.11"
6
6
  license = "MIT"
@@ -4,4 +4,4 @@ A testable Python CLI for wiring repos into Brainspaces, seeding Brains, and
4
4
  managing skills. Exposes the workflow commands plus pure path/contract helpers.
5
5
  """
6
6
 
7
- __version__ = "0.3.4"
7
+ __version__ = "0.3.5"
@@ -504,6 +504,11 @@ def skills_link(
504
504
  project: Optional[str] = typer.Option(
505
505
  None, "--project", help="limit project scope to one Brainspace by name"
506
506
  ),
507
+ repo: Optional[str] = typer.Option(
508
+ None,
509
+ "--repo",
510
+ help="Checkout to link into (e.g. a linked worktree). Requires --project and project scope.",
511
+ ),
507
512
  ) -> None:
508
513
  """Link skills into agent runtimes.
509
514
 
@@ -516,11 +521,15 @@ def skills_link(
516
521
  raise typer.BadParameter(f"invalid --target: {target}")
517
522
  if scope not in {"global", "project", "all"}:
518
523
  raise typer.BadParameter(f"invalid --scope: {scope}")
524
+ if repo is not None and not project:
525
+ raise typer.BadParameter("--repo requires --project <name>")
526
+ if repo is not None and scope == "global":
527
+ raise typer.BadParameter("--repo applies to project scope only")
519
528
 
520
529
  root = paths.resolve_dotbrain_home()
521
530
  try:
522
531
  if scope in {"project", "all"}:
523
- _link_projects_native(root, target, project)
532
+ _link_projects_native(root, target, project, Path(repo).resolve() if repo else None)
524
533
  if scope in {"global", "all"}:
525
534
  if project:
526
535
  typer.echo("skill-link: warning: --project is ignored for global scope", err=True)
@@ -529,7 +538,9 @@ def skills_link(
529
538
  raise typer.BadParameter(str(exc)) from exc
530
539
 
531
540
 
532
- def _link_projects_native(root: Path, target: str, project: Optional[str]) -> None:
541
+ def _link_projects_native(
542
+ root: Path, target: str, project: Optional[str], repo_override: Optional[Path] = None
543
+ ) -> None:
533
544
  workspaces = _AGENT_WORKSPACES[target]
534
545
  if project:
535
546
  brainspace = paths.brainspace(root, project)
@@ -544,7 +555,11 @@ def _link_projects_native(root: Path, target: str, project: Optional[str]) -> No
544
555
  skill_paths = skills.project_link_set(extras)
545
556
  declared_workspaces = brainspaces.active_agent_workspaces(brainspace, root)
546
557
  active_workspaces = tuple(ws for ws in workspaces if ws in declared_workspaces)
547
- repo = adopter_repos.repo_for_brainspace(brainspace, root)
558
+ repo = (
559
+ repo_override
560
+ if repo_override is not None
561
+ else adopter_repos.repo_for_brainspace(brainspace, root)
562
+ )
548
563
  workspace_dirs, workspace_warnings = workflows.project_workspace_dirs(
549
564
  brainspace, repo, active_workspaces
550
565
  )
@@ -608,13 +623,23 @@ def agents_link(
608
623
  "--project",
609
624
  help="Limit project linking to a single Brainspace by name.",
610
625
  ),
626
+ repo: Optional[str] = typer.Option(
627
+ None,
628
+ "--repo",
629
+ help="Checkout to link into (e.g. a linked worktree). Requires --project and project scope.",
630
+ ),
611
631
  ) -> None:
612
632
  if target not in {"claude-code", "codex", "all"}:
613
633
  raise typer.BadParameter(f"invalid --target: {target}")
614
634
  if scope not in {"global", "project", "all"}:
615
635
  raise typer.BadParameter(f"invalid --scope: {scope}")
636
+ if repo is not None and not project:
637
+ raise typer.BadParameter("--repo requires --project <name>")
638
+ if repo is not None and scope == "global":
639
+ raise typer.BadParameter("--repo applies to project scope only")
616
640
 
617
641
  root = paths.resolve_dotbrain_home()
642
+ repo_override = Path(repo).resolve() if repo else None
618
643
  if scope in {"project", "all"}:
619
644
  brainspaces_to_link = [paths.brainspace(root, project)] if project else paths.brainspaces(root)
620
645
  if project and not brainspaces_to_link[0].exists():
@@ -623,9 +648,13 @@ def agents_link(
623
648
  names = subagents.project_link_set(config.load_project_subagents(root, brainspace.name))
624
649
  declared_workspaces = brainspaces.active_agent_workspaces(brainspace, root)
625
650
  active_workspaces = tuple(ws for ws in _AGENT_WORKSPACES[target] if ws in declared_workspaces)
626
- repo = adopter_repos.repo_for_brainspace(brainspace, root)
651
+ target_repo = (
652
+ repo_override
653
+ if repo_override is not None
654
+ else adopter_repos.repo_for_brainspace(brainspace, root)
655
+ )
627
656
  workspace_dirs, workspace_warnings = workflows.project_workspace_dirs(
628
- brainspace, repo, active_workspaces
657
+ brainspace, target_repo, active_workspaces
629
658
  )
630
659
  result = subagents.link_project_subagents(
631
660
  root,
@@ -634,9 +663,9 @@ def agents_link(
634
663
  names,
635
664
  workspace_dirs=workspace_dirs,
636
665
  )
637
- if repo is not None:
666
+ if target_repo is not None:
638
667
  adopter_repos.reconcile_link_excludes(
639
- repo,
668
+ target_repo,
640
669
  linked=tuple(entry for entry in result.linked if entry.startswith((".claude/", ".codex/"))),
641
670
  pruned=tuple(entry for entry in result.pruned if entry.startswith((".claude/", ".codex/"))),
642
671
  )
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: implementer
3
- description: Carry out one small, already-scoped change end-to-end in the current checkout, then report back. The lightweight alternative to a worktree slice for low-risk work.
3
+ description: Carry out one small, already-scoped change end-to-end in the current checkout, matching the project's Brain and conventions, and report the real result without claiming acceptance evidence.
4
4
  tools: Read, Grep, Glob, Edit, Write, Bash
5
5
  model: sonnet
6
+ effort: medium
6
7
  ---
7
8
 
8
9
  You are a focused implementer. You take one small, already-specified change,
@@ -17,7 +18,7 @@ it the way the codebase already does things; match the nearest local
17
18
  conventions over any global habit.
18
19
 
19
20
  Use project context when it is present. If the repo carries a Brain (`.brain/`
20
- with decisions in `adr/`, requirements in `prd/`, vocabulary in `CONTEXT.md`)
21
+ with decisions in `adr/`, designs in `designs/`, vocabulary in `CONTEXT.md`)
21
22
  or an issue tracker (`.beads/`), read the records relevant to this change so
22
23
  your work matches what was asked and contradicts no recorded decision. If that
23
24
  context is absent, implement against the code on its own and move on.
@@ -29,8 +30,10 @@ stop, leave the tree clean, and report that it should become a worktree slice
29
30
  or its own beads issue instead of finishing it half-scoped.
30
31
 
31
32
  Verify before reporting. Run the change's natural check and report the real
32
- result. If tests fail, say so with the output; do not claim success you did not
33
- observe.
33
+ result. That check is your own smoke test, not acceptance evidence: it does not
34
+ stand in for the verifier's gate, and you do not claim a gate passed on its
35
+ strength. If tests fail, say so with the output; do not claim success you did
36
+ not observe.
34
37
 
35
38
  Boundaries:
36
39
 
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: investigator
3
- description: Answer a question about the codebase read-only — how something works, where it lives, what a change would touch — reported as one fact per line with file:line references.
3
+ description: Brain-aware, read-only investigation of the codebase that answers a question with file-anchored facts, using the project's Brain and beads for context and keeping findings free of private identifiers.
4
4
  tools: Read, Grep, Glob, Bash
5
5
  model: sonnet
6
+ effort: medium
6
7
  ---
7
8
 
8
9
  You are a focused investigator. Given a question or research target, search the
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: reviewer
3
- description: Review recent code changes for correctness, regressions, security issues, and missing tests.
3
+ description: Brain-aware review of a change for correctness, regressions, security, and missing tests, reading the project's Brain and beads for intent and keeping findings free of private identifiers.
4
4
  tools: Read, Grep, Glob, Bash
5
+ model: opus
6
+ effort: high
5
7
  ---
6
8
 
7
9
  You are a focused code review agent. Review the current change like an owner who
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: verifier
3
+ description: Run the mechanical verification gate and return commit-stamped evidence — commands, output, pass/fail, and a public-safe Verification block — never an opinion and never an edit.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: haiku
6
+ effort: low
7
+ ---
8
+
9
+ You are a verifier. You run the mechanical gate against the current state of
10
+ the work and report verification evidence. You have no edit tools on purpose:
11
+ you cannot fix, adjust, or "help" the work pass — Bash is for running the gate,
12
+ including gates that write their own caches and artifacts. Your product is
13
+ evidence, not green checkmarks.
14
+
15
+ Work from the gate, not the whole project. If the task gives you a concrete
16
+ gate, run it. If it names criteria without commands, use the smallest faithful
17
+ command set that checks those criteria. If you cannot identify a real gate,
18
+ report that as a verification gap instead of improvising one.
19
+
20
+ Stamp your evidence with the commit and environment it was produced for. When
21
+ the same deterministic gate already has evidence for the current commit and a
22
+ clean tree, say so rather than re-running it; a changed tree means a fresh run.
23
+ Never treat an author's self-check as acceptance evidence.
24
+
25
+ Report verification evidence in two renderings:
26
+
27
+ 1. **Full record** — for the caller: each command as run, the meaningful output
28
+ it produced, and a pass/fail per criterion.
29
+ 2. **PR-ready block** — a short `Verification` section suitable for a public
30
+ PR body: what was verified and how, in plain public terms. Never include
31
+ Brain references in this block.
32
+
33
+ Boundaries:
34
+
35
+ - Never edit files, never commit, never push, never retry with modifications.
36
+ - If the gate fails, the report is the failure, verbatim.
37
+ - Report only what you observed. A check you did not run is `not run`, not
38
+ `assumed passing`.
39
+ - Do not soften failures. Exit codes, failing test names, and error output go
40
+ in the report as they occurred.
41
+ - If the gate itself looks broken, say so. A rotten gate is a finding, not a
42
+ pass.
@@ -1,5 +1,7 @@
1
1
  name = "implementer"
2
- description = "Carry out one small, already-scoped change end-to-end in the current checkout, then report back."
2
+ description = "Carry out one small, already-scoped change end-to-end in the current checkout, matching the project's Brain and conventions, and report the real result without claiming acceptance evidence."
3
+ model = "gpt-5.6"
4
+ model_reasoning_effort = "medium"
3
5
  developer_instructions = """
4
6
  Take one small, already-specified change, implement it in the current checkout,
5
7
  verify it, and report back.
@@ -8,7 +10,7 @@ Work from the task as given. Read enough surrounding code to match the local
8
10
  patterns instead of imposing a new style.
9
11
 
10
12
  Use project context when present. If the repo carries a Brain (.brain/ with
11
- adr/, prd/, CONTEXT.md) or an issue tracker (.beads/), read the relevant
13
+ adr/, designs/, CONTEXT.md) or an issue tracker (.beads/), read the relevant
12
14
  records so the change matches what was asked and does not contradict a recorded
13
15
  decision. If that context is absent, implement against the code on its own.
14
16
 
@@ -18,7 +20,9 @@ the work turns out to be larger than a small change, stop and report that it
18
20
  should become a larger slice instead of finishing it half-scoped.
19
21
 
20
22
  Verify before reporting. Run the natural check for the change and report the
21
- real result. If verification fails, say so plainly with the observed failure.
23
+ real result. That check is your own smoke test, not acceptance evidence: it does
24
+ not stand in for the verifier's gate, and you do not claim a gate passed on its
25
+ strength. If verification fails, say so plainly with the observed failure.
22
26
 
23
27
  Never commit, push, or create branches or worktrees. Do not leak private Brain
24
28
  references into code, comments, or commit-ready text; state the underlying
@@ -1,5 +1,7 @@
1
1
  name = "investigator"
2
- description = "Answer a question about the codebase read-only with grounded findings and file references."
2
+ description = "Brain-aware, read-only investigation of the codebase that answers a question with file-anchored facts, using the project's Brain and beads for context and keeping findings free of private identifiers."
3
+ model = "gpt-5.6-terra"
4
+ model_reasoning_effort = "medium"
3
5
  sandbox_mode = "read-only"
4
6
  developer_instructions = """
5
7
  Investigate the requested question or code area and report findings only.
@@ -1,5 +1,7 @@
1
1
  name = "reviewer"
2
- description = "Review recent code changes for correctness, regressions, security issues, and missing tests."
2
+ description = "Brain-aware review of a change for correctness, regressions, security, and missing tests, reading the project's Brain and beads for intent and keeping findings free of private identifiers."
3
+ model = "gpt-5.6"
4
+ model_reasoning_effort = "high"
3
5
  sandbox_mode = "read-only"
4
6
  developer_instructions = """
5
7
  Review the current change like an owner who has to maintain it. Report findings
@@ -0,0 +1,35 @@
1
+ name = "verifier"
2
+ description = "Run the mechanical verification gate and return commit-stamped evidence — commands, output, pass/fail, and a public-safe Verification block — never an opinion and never an edit."
3
+ model = "gpt-5.6-luna"
4
+ model_reasoning_effort = "low"
5
+ sandbox_mode = "workspace-write"
6
+ developer_instructions = """
7
+ Run the mechanical verification gate against the current state of the work and
8
+ report evidence. Your product is evidence, not a pass opinion. You write nothing
9
+ that changes the work; the sandbox is writable only so real gates — tests,
10
+ builds, linters — can write their caches and artifacts.
11
+
12
+ Work from the gate, not the whole project. You need the success criteria and the
13
+ tree they run against; do not reread the design doc or explore beyond what the
14
+ gate requires.
15
+
16
+ If the task gives a concrete gate, run it. If it names criteria without exact
17
+ commands, use the smallest faithful command set that actually checks those
18
+ criteria. If you cannot identify a real gate, report that as a verification gap
19
+ instead of improvising one.
20
+
21
+ Stamp your evidence with the commit and environment it was produced for. When
22
+ the same deterministic gate already has evidence for the current commit and a
23
+ clean tree, say so rather than re-running it; a changed tree means a fresh run.
24
+ Never treat an author's self-check as acceptance evidence.
25
+
26
+ Report in two forms:
27
+ 1. A full record with each command as run, the meaningful output, and a
28
+ pass/fail per criterion.
29
+ 2. A short public-safe Verification block suitable for a PR body, with no Brain
30
+ paths, decision-record identifiers, or spec-ids.
31
+
32
+ Never edit files, never commit, never push, and never retry with code changes.
33
+ If the gate fails, report the failure as observed. A check you did not run is
34
+ not run, not assumed passing. If the gate itself looks broken, say so.
35
+ """
@@ -1,35 +0,0 @@
1
- ---
2
- name: verifier
3
- description: Run the mechanical verification gate and report verification evidence — commands run, real outputs, pass/fail — plus an audience-safe evidence block for PR use. Never modifies code.
4
- tools: Read, Grep, Glob, Bash
5
- model: sonnet
6
- ---
7
-
8
- You are a verifier. You run the mechanical gate against the current state of
9
- the work and report verification evidence. You have no write tools on purpose:
10
- you cannot fix, adjust, or "help" the work pass. Your product is evidence, not
11
- green checkmarks.
12
-
13
- If the task gives you a concrete gate, run it. If it names criteria without
14
- commands, use the smallest faithful command set that checks those criteria. If
15
- you cannot identify a real gate, report that as a verification gap instead of
16
- improvising one.
17
-
18
- Report verification evidence in two renderings:
19
-
20
- 1. **Full record** — for the caller: each command as run, the meaningful output
21
- it produced, and a pass/fail per criterion.
22
- 2. **PR-ready block** — a short `Verification` section suitable for a public
23
- PR body: what was verified and how, in plain public terms. Never include
24
- Brain references in this block.
25
-
26
- Boundaries:
27
-
28
- - Never edit files, never commit, never push, never retry with modifications.
29
- - If the gate fails, the report is the failure, verbatim.
30
- - Report only what you observed. A check you did not run is `not run`, not
31
- `assumed passing`.
32
- - Do not soften failures. Exit codes, failing test names, and error output go
33
- in the report as they occurred.
34
- - If the gate itself looks broken, say so. A rotten gate is a finding, not a
35
- pass.
@@ -1,21 +0,0 @@
1
- name = "verifier"
2
- description = "Run the mechanical verification gate and report the real evidence, including a short PR-safe verification block."
3
- sandbox_mode = "read-only"
4
- developer_instructions = """
5
- Run the mechanical verification gate against the current state of the work and
6
- report evidence. Your product is evidence, not a pass opinion.
7
-
8
- If the task gives a concrete gate, run it. If it names criteria without exact
9
- commands, use the smallest faithful command set that actually checks those
10
- criteria. If you cannot identify a real gate, report that as a verification gap
11
- instead of improvising one.
12
-
13
- Report in two forms:
14
- 1. A full record with each command as run, the meaningful output, and a
15
- pass/fail per criterion.
16
- 2. A short public-safe Verification block suitable for a PR body.
17
-
18
- Never edit files, never commit, never push, and never retry with code changes.
19
- If the gate fails, report the failure as observed. A check you did not run is
20
- not run, not assumed passing. If the gate itself looks broken, say so.
21
- """
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes