devrites 7.3.2 → 7.3.3

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.
@@ -117,7 +117,11 @@ def generate(source, target):
117
117
  for path in (target / "skills").rglob("*.md"):
118
118
  text = rewrite(path.read_text())
119
119
  if path == target / "skills/rite-doctor/SKILL.md":
120
- text = text.replace(" File presence without effective loading is `WARN`;", DSH_DOCTOR + " File presence without effective loading is `WARN`;")
120
+ anchor = " File presence without effective loading is `WARN`;"
121
+ count = text.count(anchor)
122
+ if count != 1:
123
+ raise ValueError(f"{path}: expected exactly one DSH doctor insertion anchor, found {count}")
124
+ text = text.replace(anchor, DSH_DOCTOR + anchor, 1)
121
125
  text = re.sub(r"(?<=\S) {2,}$", r"\\", text, flags=re.MULTILINE)
122
126
  path.write_text("\n".join(line.rstrip() for line in text.splitlines()).rstrip() + "\n")
123
127
  agents = target / "agents"
@@ -47,8 +47,8 @@ gen_omp_markdown_file() {
47
47
  -e 's#Skills name exact fresh roles; hosts select matching native profiles and#On omp, every `task` item (each `tasks[]` member) sets `agent` to the exact native profile;\nuse `agent: "devrites-code-reviewer"`, `agent: "devrites-test-analyst"`, or\n`agent: "devrites-slice-wright"` for those roles, including rechecks and repairs.\nKeep `.frontend`, `.backend`, and `.SLICE-001` on dispatch labels, not `agent`.\nAn omitted `agent` selects the default worker; `agent: "reviewer"` is generic. Hosts#' \
48
48
  -e 's#`Agent` call#`task` call#g' \
49
49
  -e 's#Claude: N concurrent Task wrights \(`acceptEdits`, cwd=worktree\)\.#omp: one `tasks[]` batch of N wrights; `task` has no `cwd` or `acceptEdits`, so each task names its absolute worktree path and the wright works only there.#g' \
50
- -e 's#^Claude grants only the exact wright `acceptEdits`;#omp has no permission modes: only the wright'"'"'s `tools` allowlist has `edit`/`write`, and the root stays source-read-only by instruction. Claude grants only the exact wright `acceptEdits`;#' \
51
- -e 's#^Claude grants only wright `acceptEdits`;#omp: only the wright'"'"'s `tools` allowlist has `edit`/`write`; the root stays source-read-only by instruction. Claude grants only wright `acceptEdits`;#' \
50
+ -e 's#^Claude grants only the exact wright `acceptEdits`;#omp has no permission modes: only the wright'"'"'s `tools` allowlist has `edit`/`write`; `bash` is not a filesystem sandbox. Read-only behavior stays instruction-enforced. Claude grants only the exact wright `acceptEdits`;#' \
51
+ -e 's#^Claude grants only wright `acceptEdits`;#omp: only the wright'"'"'s `tools` allowlist has `edit`/`write`; `bash` is not a filesystem sandbox. Read-only behavior stays instruction-enforced. Claude grants only wright `acceptEdits`;#' \
52
52
  -e 's#`AskUserQuestion`#`ask`#g' \
53
53
  -e 's#Invoke it with Claude'"'"'s `Skill` tool or Codex'"'"'s$#Invoke it with#' \
54
54
  -e 's#Use the `Skill` tool on Claude Code or$#Load it with#' \
@@ -195,8 +195,8 @@ _omp_append_extension_tools() {
195
195
 
196
196
  # Generate an omp Markdown agent from a Claude Code markdown agent.
197
197
  # omp loads project/plugin agents from agents/*.md (YAML frontmatter + body).
198
- # The tools allowlist carries the Claude permission boundary: only
199
- # devrites-slice-wright, the /overhaul agents (overhaul-*), and /rite-fast fast-builder get write/edit; reviewers stay read-only.
198
+ # Only devrites-slice-wright, overhaul-*, and fast-builder get write/edit.
199
+ # Reviewers with bash are read-only by instruction, not filesystem-sandboxed.
200
200
  gen_omp_agent() {
201
201
  local _src="$1" _out="$2"
202
202
  local _name _desc _tools_raw _tools _skills _desc_tmp _desc_omp _body_tmp _body_omp
@@ -127,8 +127,8 @@ _pi_map_tools() {
127
127
 
128
128
  # Generate a pi-subagents Markdown agent from a Claude Code markdown agent.
129
129
  # pi-subagents loads project agents from .pi/agents/**/*.md (YAML frontmatter +
130
- # body). The tools allowlist carries the Claude permission boundary: only
131
- # devrites-slice-wright, the /overhaul agents (overhaul-*), and /rite-fast fast-builder get write/edit; reviewers stay read-only.
130
+ # body). Only devrites-slice-wright, overhaul-*, and fast-builder get write/edit.
131
+ # Reviewers with bash are read-only by instruction, not filesystem-sandboxed.
132
132
  # inheritProjectContext keeps AGENTS.md/CLAUDE.md visible, matching Claude
133
133
  # Code subagent semantics. A canonical `skills:` block list passes through.
134
134
  gen_pi_agent() {
@@ -205,7 +205,7 @@ This project has DevRites installed for pi.
205
205
  - In DevRites guidance, **invoke** means run a skill inline in the current context; **dispatch** means start a fresh agent with `subagent({ agent, task })` (or `runs.run`/`runs.all` in a `workflowScript`), wait for it, and reconcile its result.
206
206
  - An asynchronous launch receipt is not a reviewer result or completion. Keep the returned native run/workflow handle and use the public management/status/completion API exposed by the installed tool schema to wait for and collect its terminal result. Reconcile that result before `devrites-engine dispatch ... return`; never re-dispatch to retrieve output. Host configuration may force asynchronous execution even with `async: false`.
207
207
  - Routine native result collection uses the exposed public tool; it does not require a bespoke workflow capture helper, private transcripts, or source excavation. Preserve confidentiality and any one-shot limits. Failed, malformed, or unavailable terminal results remain `gap`, never a passed review.
208
- - Among the lifecycle `devrites-*` specialists, only `devrites-slice-wright` may edit source or tests; every other specialist in that family is read-only by tool allowlist. The shipped profiles are the full role-to-permission map; `/rite-doctor` step 3 checks them. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path.
208
+ - Among the lifecycle `devrites-*` specialists, only `devrites-slice-wright` may edit source or tests; others lack `edit`/`write`, but `bash` makes read-only behavior instruction-enforced, not a filesystem sandbox. `/rite-doctor` step 3 checks loaded profiles/tools. Exact paths are instruction-enforced: put project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject extra paths.
209
209
  - The explicit `/overhaul` skill ships its own `overhaul-*` agents outside the DevRites lifecycle. They carry the full write tool set, are dispatched only by that skill, and follow its own approval gate and path contracts instead of the lifecycle writer rules above.
210
210
  - The explicit `/rite-fast` skill ships its own `fast-*` agents. Only `fast-builder` carries write tools; `fast-planner`, `fast-checker`, and `fast-critic` stay read-only. `/rite-fast` dispatches them itself and applies its own exact-path contracts.
211
211
  - DevRites runtime helpers run through the installed `devrites-engine` binary.