vinta-ai-workflows 0.7.0-alpha10 → 0.7.0-alpha11

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 (2) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,7 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [0.7.0] — YYYY-MM-DD
9
9
 
10
+ <!-- pre-release: 0.7.0-alpha11 on 2026-09-15 -->
10
11
  <!-- pre-release: 0.7.0-alpha10 on 2026-09-15 -->
11
12
  <!-- pre-release: 0.7.0-alpha9 on 2026-09-14 -->
12
13
  <!-- pre-release: 0.7.0-alpha8 on 2026-09-14 -->
@@ -320,6 +321,66 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
320
321
 
321
322
  ### Fixed
322
323
 
324
+ - **`vinta-ai-maestro with` waits for the lock instead of giving up on it.** Its
325
+ usage said it blocked until the resource was granted, and it did — for about
326
+ five minutes, which is where Node's own `fetch` stops waiting for a response.
327
+ A test suite behind a capacity-1 semaphore beats that regularly. What the
328
+ agent saw was "could not reach the lease daemon", and what agents did with
329
+ that, repeatedly, was run the command without a lease: exactly the stampede
330
+ the pool exists to prevent, arrived at by an agent behaving reasonably.
331
+
332
+ The wait is the client's now. The daemon answers `202 still queued` within
333
+ seconds and **leaves its own queue behind it**, so nothing is granted to a
334
+ request that has gone away; the client loops until it is granted, saying so
335
+ once and then occasionally, so a transcript shows a wait rather than a
336
+ silence. Only answers that waiting cannot change — a resource this run does
337
+ not declare, a run that is no longer live — end it.
338
+
339
+ And when it does end that way, the refusal says what not to do about it.
340
+ "The resource lease was not granted" is an error with no alternative in it;
341
+ the rule against working around it now travels with the message rather than
342
+ sitting only in a prompt the agent read twenty minutes earlier. The prompt
343
+ says it too, including that waiting is the expected outcome and not a failure.
344
+
345
+ - **A retry gets a fresh fix budget.** `fix_rounds` was set to 0 when a node was
346
+ created and never again, so a phase that spent its whole budget on attempt 1
347
+ began attempt 2 already exhausted — one review, one fix, and the exhaustion
348
+ transition fired straight back. Seen with `max_fix_rounds: 4`: the retry got a
349
+ single round before the operator was asked again, forty seconds of work
350
+ standing in for four rounds of it. A retry that inherits the reason the last
351
+ attempt ran out is not a retry. It resets wherever a node is re-driven from
352
+ its pipeline's initial state — a capacity refusal, an automatic retry, the
353
+ operator's answer, the `retry` verb — which is one place rather than four.
354
+
355
+ - **The last fix is reviewed rather than failed unread.** `standard-phase`
356
+ checked the budget on the way *out* of `fix`, so the final fixer's work went
357
+ straight to `failed` with nothing looking at it. Two phases in one run ended
358
+ on a fixer reporting "all gates green, committed, tree clean" and were failed
359
+ anyway. The check now sits in front of the fixer, on both doors into it: every
360
+ fixer that runs is reviewed, and the review after the last one can still pass
361
+ the phase. Guarding only the review side left a red gate under a passing
362
+ reviewer looping forever, which is the other half of the same change.
363
+
364
+ `max_fix_rounds` still means the number of fixers a phase may spend. `0` now
365
+ means none, where before it let one run and failed the phase regardless.
366
+
367
+ - **Agents are told not to background their work.** An implementer started five
368
+ commands with `run_in_background: true` and closed its turn with "I'll wait for
369
+ the test result notification before continuing to the outer gate". There is no
370
+ notification: a headless session ends when the turn ends and whatever it
371
+ backgrounded is killed with it. Three sessions ended with no report and no
372
+ commit, and the reviewer failed each for uncommitted work — true, and not the
373
+ cause. Nothing had said so, and believing a tool that offers backgrounding will
374
+ still be there afterwards is not unreasonable.
375
+
376
+ - **The reviewer runs the gates instead of taking their word for it.** The prompt
377
+ asked it to confirm the outer gate was green, which an agent can do by reading
378
+ the implementer's report — one reused reviewer session reached a verdict in
379
+ under four minutes without running the project's tests at all. It is now asked
380
+ to run them, to say what they returned, and to treat being unable to run them
381
+ as a finding. Re-review rounds are asked again, because a session that
382
+ remembers running them last round is remembering a different tree.
383
+
323
384
  - **A retried phase keeps the commits the attempt before it made.** A failed
324
385
  phase re-enters its pipeline at the initial state, which runs `git_branch`
325
386
  again — and `checkout -B` moves an existing branch unconditionally, so attempt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vinta-ai-workflows",
3
- "version": "0.7.0-alpha10",
3
+ "version": "0.7.0-alpha11",
4
4
  "description": "Bootstrap AI tooling (AGENTS.md, skills, sub-agents) across Claude Code, Codex, Cursor, and VS Code + GitHub Copilot.",
5
5
  "type": "module",
6
6
  "bin": {