devrites 3.2.3 → 3.2.4
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.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/engine/hooks_agent_dispatch.go +1 -1
- package/engine/tests/hook_test.go +4 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +6 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +6 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +6 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [3.2.4](https://github.com/ViktorsBaikers/DevRites/compare/v3.2.3...v3.2.4) (2026-07-25)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **agents:** handle hidden v2 agent_type schema ([31ece9a](https://github.com/ViktorsBaikers/DevRites/commit/31ece9aad686fa3a3fa0308d5a3ede11f5b58c07))
|
|
10
|
+
|
|
5
11
|
## [3.2.3](https://github.com/ViktorsBaikers/DevRites/compare/v3.2.2...v3.2.3) (2026-07-25)
|
|
6
12
|
|
|
7
13
|
### Fixed
|
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ final commit, push, and tag, and it requires a typed `GO` confirmation.
|
|
|
25
25
|
Unattended runs may create local WIP checkpoint commits along the way, but only
|
|
26
26
|
Ship collapses and pushes them.
|
|
27
27
|
|
|
28
|
-
**Status:** [`v3.2.
|
|
28
|
+
**Status:** [`v3.2.4`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v3.2.4): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
29
29
|
|
|
30
30
|
## Quick start
|
|
31
31
|
|
|
@@ -802,7 +802,7 @@ func incompleteDispatchReason(armed map[string]struct{}, attempts []*agentDispat
|
|
|
802
802
|
return "DevRites could not determine this skill's required agents because its installed required-agent-roles contract is invalid. Reinstall or repair the DevRites skill pack before continuing."
|
|
803
803
|
}
|
|
804
804
|
return fmt.Sprintf(
|
|
805
|
-
"DevRites dispatch for %s is not complete. On MultiAgent V2 call spawn_agent with agent_type=%s, a unique task_name, and fork_turns=\"none\" so Codex loads .codex/agents/%s.toml natively. On V1 use agent_type=%s with fork_turns=\"none\" and name that role TOML in the message. Wait for the returned child and use its non-empty result. Do not call wait before spawn_agent and do not synthesize the agent result.",
|
|
805
|
+
"DevRites dispatch for %s is not complete. On MultiAgent V2 call spawn_agent with agent_type=%s, a unique task_name, and fork_turns=\"none\" so Codex loads .codex/agents/%s.toml natively. GPT-5.6 V2 may omit agent_type from the visible tool schema even though the runtime accepts it; send agent_type anyway rather than using a default child. On V1 use agent_type=%s with fork_turns=\"none\" and name that role TOML in the message. Wait for the returned child and use its non-empty result. Do not call wait before spawn_agent and do not synthesize the agent result.",
|
|
806
806
|
role, role, role, expectedAgentType(role),
|
|
807
807
|
)
|
|
808
808
|
}
|
|
@@ -1218,7 +1218,10 @@ func TestCodexAgentDispatchBlocksFalseWaitAndStop(t *testing.T) {
|
|
|
1218
1218
|
if err := json.Unmarshal([]byte(strings.TrimSpace(out)), &stopDecision); err != nil {
|
|
1219
1219
|
t.Fatalf("invalid Stop response: %v\n%s", err, out)
|
|
1220
1220
|
}
|
|
1221
|
-
if stopDecision.Decision != "block" ||
|
|
1221
|
+
if stopDecision.Decision != "block" ||
|
|
1222
|
+
!strings.Contains(stopDecision.Reason, "spawn_agent") ||
|
|
1223
|
+
!strings.Contains(stopDecision.Reason, "visible tool schema") ||
|
|
1224
|
+
!strings.Contains(stopDecision.Reason, "send agent_type anyway") {
|
|
1222
1225
|
t.Fatalf("false completion not blocked: %#v", stopDecision)
|
|
1223
1226
|
}
|
|
1224
1227
|
|
|
@@ -67,11 +67,12 @@ field from the installed skill at `UserPromptSubmit` and arms a fail-closed comp
|
|
|
67
67
|
receipt for every listed role; the engine derives roles from skill metadata.
|
|
68
68
|
Conditional scouts and reviewers remain owned by their explicit phase triggers.
|
|
69
69
|
|
|
70
|
-
Claude
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
role, instructions, wait, completion, and
|
|
74
|
-
`explorer`/`worker` with injected rules and
|
|
70
|
+
Claude: `Agent`; Codex: `spawn_agent`. V2 calls the named `agent_type` with
|
|
71
|
+
unique `task_name` and `fork_turns="none"`. GPT-5.6 may hide `agent_type` from the
|
|
72
|
+
schema, but runtime accepts it and loads the TOML; never use `default`. V2 bypasses
|
|
73
|
+
hooks, so Stop/reconcile verify role, native instructions, wait, completion, and result.
|
|
74
|
+
V1 uses guarded `explorer`/`worker` with injected rules and receipt. Prose
|
|
75
|
+
isn't evidence.
|
|
75
76
|
|
|
76
77
|
## File-backed dispatch contract
|
|
77
78
|
|
|
@@ -67,11 +67,12 @@ field from the installed skill at `UserPromptSubmit` and arms a fail-closed comp
|
|
|
67
67
|
receipt for every listed role; the engine derives roles from skill metadata.
|
|
68
68
|
Conditional scouts and reviewers remain owned by their explicit phase triggers.
|
|
69
69
|
|
|
70
|
-
Claude
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
role, instructions, wait, completion, and
|
|
74
|
-
`explorer`/`worker` with injected rules and
|
|
70
|
+
Claude: `Agent`; Codex: `spawn_agent`. V2 calls the named `agent_type` with
|
|
71
|
+
unique `task_name` and `fork_turns="none"`. GPT-5.6 may hide `agent_type` from the
|
|
72
|
+
schema, but runtime accepts it and loads the TOML; never use `default`. V2 bypasses
|
|
73
|
+
hooks, so Stop/reconcile verify role, native instructions, wait, completion, and result.
|
|
74
|
+
V1 uses guarded `explorer`/`worker` with injected rules and receipt. Prose
|
|
75
|
+
isn't evidence.
|
|
75
76
|
|
|
76
77
|
## File-backed dispatch contract
|
|
77
78
|
|
|
@@ -67,11 +67,12 @@ field from the installed skill at `UserPromptSubmit` and arms a fail-closed comp
|
|
|
67
67
|
receipt for every listed role; the engine derives roles from skill metadata.
|
|
68
68
|
Conditional scouts and reviewers remain owned by their explicit phase triggers.
|
|
69
69
|
|
|
70
|
-
Claude
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
role, instructions, wait, completion, and
|
|
74
|
-
`explorer`/`worker` with injected rules and
|
|
70
|
+
Claude: `Agent`; Codex: `spawn_agent`. V2 calls the named `agent_type` with
|
|
71
|
+
unique `task_name` and `fork_turns="none"`. GPT-5.6 may hide `agent_type` from the
|
|
72
|
+
schema, but runtime accepts it and loads the TOML; never use `default`. V2 bypasses
|
|
73
|
+
hooks, so Stop/reconcile verify role, native instructions, wait, completion, and result.
|
|
74
|
+
V1 uses guarded `explorer`/`worker` with injected rules and receipt. Prose
|
|
75
|
+
isn't evidence.
|
|
75
76
|
|
|
76
77
|
## File-backed dispatch contract
|
|
77
78
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code and Codex",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
|