@nanobpm/nano-workforce 0.189.0 → 0.189.2
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 +12 -0
- package/SPEC.md +16 -0
- package/app/adjudications.test.ts +735 -0
- package/app/adjudications.ts +378 -0
- package/app/agentCompletion.test.ts +282 -10
- package/app/agentCompletion.ts +163 -23
- package/app/agentic/permission-bridge.test.ts +2 -2
- package/app/answer-escalation.test.ts +415 -2
- package/app/answerContextMapping.test.ts +83 -0
- package/app/convergenceAdjudicationResume.test.ts +274 -0
- package/app/github.test.ts +46 -1
- package/app/github.ts +10 -0
- package/app/service.test.ts +264 -2
- package/app/service.ts +104 -4
- package/app/terminalReaderBehaviour.test.ts +21 -0
- package/db/migrations/109_pr_adjudications.sql +61 -0
- package/db/migrations/110_task_completions_auto_applied.sql +34 -0
- package/operations/completeUserTask.test.ts +5 -5
- package/operations/listEscalations.test.ts +1 -1
- package/package.json +1 -1
- package/resources/processes/convergence-loop.bpmn +9 -0
- package/resources/processes/merge-loop.bpmn +1 -0
- package/workers/answer-escalation/worker.ts +191 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [0.189.2](https://github.com/nanobpm/nano-workforce/compare/v0.189.1...v0.189.2) (2026-09-18)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **poller:** fetch newest GitHub reviews ([#797](https://github.com/nanobpm/nano-workforce/issues/797)) ([c488410](https://github.com/nanobpm/nano-workforce/commit/c488410645d1df55ca5121448364c8f89ed4a7a6)), closes [#793](https://github.com/nanobpm/nano-workforce/issues/793)
|
|
6
|
+
|
|
7
|
+
## [0.189.1](https://github.com/nanobpm/nano-workforce/compare/v0.189.0...v0.189.1) (2026-09-17)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **convergence:** persist wait-answer human adjudications so an already-answered question does not re-escalate ([#807](https://github.com/nanobpm/nano-workforce/issues/807)) ([9dfeacd](https://github.com/nanobpm/nano-workforce/commit/9dfeacd4c4dffdbb8da02acf1beb5ea5d62aa1ea)), closes [#800](https://github.com/nanobpm/nano-workforce/issues/800) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#256](https://github.com/nanobpm/nano-workforce/issues/256) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806) [#806](https://github.com/nanobpm/nano-workforce/issues/806)
|
|
12
|
+
|
|
1
13
|
## [0.189.0](https://github.com/nanobpm/nano-workforce/compare/v0.188.1...v0.189.0) (2026-09-17)
|
|
2
14
|
|
|
3
15
|
### Features
|
package/SPEC.md
CHANGED
|
@@ -139,6 +139,22 @@ step, then retry the same round with the human's `answer`. They differ only by e
|
|
|
139
139
|
which the UI uses to label the card. Neither ends the run — a human always gets
|
|
140
140
|
a chance to unblock and resume.
|
|
141
141
|
|
|
142
|
+
**Durable adjudication auto-resume (issue #806).** A human's answer to a `wait-answer`
|
|
143
|
+
is remembered durably, keyed by `(PR, canonical question fingerprint)` — the
|
|
144
|
+
`record-answer` step persists it (`pr_adjudications`), and before the poller surfaces a
|
|
145
|
+
*new* `wait-answer` it checks for a settled adjudication of the **same** question. On a
|
|
146
|
+
match it auto-resumes the round with the recorded answer through the canonical
|
|
147
|
+
`completeUserTaskAttributed` door — attributed to the original adjudicator, marked
|
|
148
|
+
`auto_applied` and recorded reversible so a human can still override — instead of
|
|
149
|
+
re-parking a human on an already-settled question (PR #800 saw the same design question
|
|
150
|
+
escalate at round 2 and again at round 13). This is the one exception to "every
|
|
151
|
+
`needs_input`/`blocked` parks `wait-answer`": a question with an existing adjudication for
|
|
152
|
+
this PR resumes without a fresh human park. A *materially different* question still
|
|
153
|
+
escalates, resolution failure fails open to the human, and re-submitting the PR
|
|
154
|
+
(`submitPr`) invalidates its adjudications so a fresh run re-decides. Only the convergence
|
|
155
|
+
loop feeds and reads this memory — a merge-loop answer (same `pr.answer-escalation` step)
|
|
156
|
+
is tagged `answerContext = "merge"` and never recorded as a convergence adjudication.
|
|
157
|
+
|
|
142
158
|
Guard: after progress classification, a **progressing** round with round ≥
|
|
143
159
|
MAX_ROUNDS forces an escalation ("not converged after N rounds") so a human
|
|
144
160
|
decides rather than looping forever. The guard sits *after* `check-progress`
|