taskchef 5.3.0 → 5.4.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "5.3.0",
3
+ "version": "5.4.1",
4
4
  "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
package/README.md CHANGED
@@ -123,10 +123,10 @@ Every delegated instruction begins with a unique
123
123
  `<!-- taskchef_id=<UUID> -->` marker followed by a blank line. The valid HTML
124
124
  comment stays invisible in rendered Markdown.
125
125
  If worktree creation does not return a thread ID immediately, TaskChef records
126
- the marked delegation as unresolved, then waits briefly for the durable task.
127
- It prefers a native Codex client-ID resolver when available and otherwise makes
128
- two exact-marker checks during a short bounded window. If it still cannot
129
- identify exactly one task, the recorded marker remains available for recovery.
126
+ the marked delegation as unresolved, then makes at most two exact-marker checks
127
+ during a short bounded window. Candidate reads use one programmatic batch per
128
+ check. If the batch cannot execute or TaskChef cannot identify exactly one
129
+ task, the recorded marker remains available for recovery.
130
130
 
131
131
  ### Ask for a live report
132
132
 
package/SPEC.md CHANGED
@@ -181,7 +181,8 @@ For each assignment, `$taskchef-delegate`:
181
181
  1. runs `dispatch prepare` and native Codex project discovery concurrently;
182
182
  the preparation command resolves the canonical workspace, loads and
183
183
  validates configured projects, and generates the full UUID, preparation
184
- timestamp, and exact marker in one process
184
+ timestamp, and exact marker in one process; it never takes a pre-creation
185
+ thread snapshot
185
186
  2. selects one unambiguous configured target and matches its exact path against
186
187
  the already-loaded native projects
187
188
  3. prefixes the instruction with the prepared exact
@@ -193,28 +194,31 @@ For each assignment, `$taskchef-delegate`:
193
194
  temporary record file, and requests canonical-workspace write permission on
194
195
  the first attempt when the command sandbox does not allow that path
195
196
  6. when creation returns only a provisional client ID, immediately appends the
196
- marked entry with `threadId: null`, then prefers one native client-ID wait or
197
- resolution call with a 30-second timeout when Codex exposes one
198
- 7. when no native operation is available, takes at most two recent-thread
197
+ marked entry with `threadId: null`; the current supported Codex surface has
198
+ no provisional-ID resolver, so the skill performs no post-creation tool
199
+ availability inspection
200
+ 7. takes at most two recent-thread
199
201
  snapshots on a nominal 10- and 30-second schedule after the provisional
200
202
  result; a late first checkpoint runs immediately, and the second starts at
201
203
  least 20 seconds after the first actually started. It filters candidates by
202
204
  available host/project/time/worktree metadata, uses title only as an advisory
203
- ordering hint, and accepts only one thread whose structured delegated input
204
- starts with the exact marker
205
+ ordering hint, issues all independent candidate reads in exactly one
206
+ programmatic batch per snapshot, and accepts only one thread whose structured
207
+ delegated input starts with the exact marker; inability to execute that
208
+ required batch leaves the nullable record unresolved instead of switching to
209
+ serial reads
205
210
  8. atomically fills the nullable thread ID after an exact match
206
211
  9. returns after recording or after reporting that bounded resolution was
207
212
  unresolved, without waiting for executor work completion.
208
213
 
209
- The exact random marker makes a pre-creation thread snapshot unnecessary.
210
- Creation-time filtering allows five seconds of clock skew. Candidate reads run
211
- concurrently where the host permits and inspect only structured
212
- `codexDelegation.input`, never untrusted title, summary, preview, or plain-text
213
- marker echoes. A native resolver result is verified against the same structured
214
- marker before persistence. Zero exact matches remain unresolved; multiple exact
215
- matches are ambiguous. Snapshot, candidate-read, native-resolution, or
216
- task-resolution errors leave the already-recorded nullable entry intact. The
217
- fallback is bounded by two snapshots rather than an absolute wall-clock cutoff:
214
+ The exact random marker remains the sole correlation proof. Creation-time
215
+ filtering allows five seconds of clock skew. Candidate reads use exactly one
216
+ programmatic batch per snapshot and inspect only
217
+ structured `codexDelegation.input`, never untrusted title, summary, preview, or
218
+ plain-text marker echoes. Zero exact matches remain unresolved; multiple exact
219
+ matches are ambiguous. Snapshot, candidate-read, or task-resolution errors
220
+ leave the already-recorded nullable entry intact. The workflow is bounded by
221
+ two snapshots rather than an absolute wall-clock cutoff:
218
222
  mandatory recording or tool latency can shift both attempts later, but cannot
219
223
  erase an attempt or reduce the minimum 20-second interval between their start
220
224
  times.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "5.3.0",
3
+ "version": "5.4.1",
4
4
  "description": "A non-blocking interactive dispatcher for visible Codex tasks.",
5
5
  "license": "MIT",
6
6
  "author": "Favo Yang",
@@ -21,7 +21,7 @@ for all deterministic workspace and task-record operations.
21
21
  - Never use hooks, callbacks, schedules, daemons, indefinite polling, or
22
22
  background monitors.
23
23
  - Use only bounded provisional-ID resolution after `create_thread` returns a
24
- provisional client ID. Prefer a native Codex wait or resolver when available.
24
+ provisional client ID. Use the fixed marker-based workflow below.
25
25
  - Never wait for delegated work after executor creation.
26
26
  - Never collect transcripts or hidden reasoning.
27
27
 
@@ -35,7 +35,8 @@ for all deterministic workspace and task-record operations.
35
35
  `$taskchef-bootstrap` if the workspace is missing or unhealthy.
36
36
  The CLI resolves `--workspace`, then `TASKCHEF_WORKSPACE`, then
37
37
  `~/.agents/taskchef`; do not substitute the current project. Reject the
38
- dispatcher workspace itself as a target.
38
+ dispatcher workspace itself as a target. Never take a pre-creation thread
39
+ snapshot.
39
40
  2. Split the request into the smallest independently useful outcomes. Include
40
41
  constraints, expected testing, and reporting in every instruction.
41
42
  3. Classify against configured `name`, every URL in the `githubRepos` list, and
@@ -54,9 +55,8 @@ for all deterministic workspace and task-record operations.
54
55
  Prefix the complete executor instruction with
55
56
  exactly `<!-- taskchef_id=<full UUID> -->` as the first line, followed by a
56
57
  blank line and the instruction body. Preserve this
57
- marked instruction for recording, and note the creation time.
58
- Do not take a pre-creation thread snapshot; the exact random marker is the
59
- correlation key.
58
+ marked instruction for recording, and note the creation time. The exact
59
+ random marker is the sole correlation proof.
60
60
  6. Create one real Codex task using the exact configured project, a local
61
61
  environment on its executor host, the marked instruction, and a short title.
62
62
  7. When `create_thread` returns a durable `threadId`, immediately run
@@ -77,12 +77,11 @@ for all deterministic workspace and task-record operations.
77
77
  Immediately record the marked instruction with `threadId: null` using the
78
78
  command from step 7, then resolve the durable ID with this bounded workflow:
79
79
 
80
- - If the current Codex tool surface provides a dedicated operation that
81
- accepts the provisional ID and waits for or resolves its durable thread
82
- ID, call it exactly once with a timeout of at most 30 seconds. Do not invent
83
- an operation or pass the provisional ID to tools that require `threadId`.
84
- - When no native operation is available, take at most two `list_threads`
85
- snapshots with limit 50. The nominal schedule is 10 and 30 seconds after
80
+ - The supported Codex surface has no provisional-ID resolver. Do not inspect
81
+ the tool surface for one after creation and do not pass the provisional ID
82
+ to tools that require `threadId`.
83
+ - Take at most two post-creation `list_threads` snapshots with limit 50. The
84
+ nominal schedule is 10 and 30 seconds after
86
85
  the provisional result. Treat the first checkpoint as due, not expired: if
87
86
  nullable recording or other required work finishes after 10 seconds, take
88
87
  the first snapshot immediately. Start the second snapshot no sooner than
@@ -95,21 +94,23 @@ for all deterministic workspace and task-record operations.
95
94
  those fields are present. Use the title only to prioritize reads; Codex
96
95
  may normalize it, so never exclude a candidate because its title differs.
97
96
  - Read every remaining candidate with `read_thread`, requesting one turn and
98
- no command output. Read candidates concurrently when the tool surface
99
- permits. Inspect only the structured
97
+ no command output. Issue all independent reads together in exactly one
98
+ programmatic batch per snapshot. Do not probe for batching support and do
99
+ not fall back to serial tool-call round trips. When the required batch
100
+ cannot be executed, preserve the nullable record as unresolved. Inspect
101
+ only the
102
+ structured
100
103
  `userMessage.content[].codexDelegation.input`; do not trust titles,
101
104
  summaries, previews, plain-text echoes, or assistant output as proof.
102
105
  - Accept a candidate only when the structured input's first line is exactly
103
106
  the task's `<!-- taskchef_id=<full UUID> -->` marker and exactly one
104
107
  candidate matches. Require an immediately following blank line. Reject old
105
108
  heading-style markers, malformed comments, missing blank separators, and
106
- marker-like text anywhere else. Apply the same marker verification to a
107
- thread ID returned by a native resolver. Reject any returned or discovered
108
- thread ID equal to the provisional identifier or in its `local:` namespace.
109
- Then use
109
+ marker-like text anywhere else. Reject any discovered thread ID equal to
110
+ the provisional identifier or in its `local:` namespace. Then use
110
111
  the task-resolution command under **Later resolution** to atomically fill
111
112
  the nullable field.
112
- - Treat native-resolution, snapshot, candidate-read, wait, and task-resolution
113
+ - Treat snapshot, candidate-read, wait, and task-resolution
113
114
  failures as indeterminate. If the workflow ends with zero exact matches,
114
115
  multiple matches, or errors, leave the already-recorded `threadId: null`,
115
116
  clearly report the unresolved reason and provisional diagnostic ID, and