@appchy/jarvis 0.1.68 → 0.1.69
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/dist/bin.js +1 -1
- package/harness/harness/task.py +6 -1
- package/harness/test_work.py +31 -0
- package/package.json +4 -4
package/dist/bin.js
CHANGED
|
@@ -10115,7 +10115,7 @@ import { createRequire as createRequire2 } from "module";
|
|
|
10115
10115
|
var _require = createRequire2(import.meta.url);
|
|
10116
10116
|
var VERSION2 = _require("../package.json").version ?? "0.0.0";
|
|
10117
10117
|
var IS_DEV = String(_require("../package.json").name ?? "").endsWith("-dev");
|
|
10118
|
-
var SHA = "
|
|
10118
|
+
var SHA = "f0e0cf3";
|
|
10119
10119
|
var BUILT = "2026-09-10";
|
|
10120
10120
|
var BUILD = SHA ?? "source";
|
|
10121
10121
|
var BUILD_LABEL = `${SHA ? `${VERSION2} (${SHA}${BUILT ? ` ${BUILT}` : ""})` : `${VERSION2} (source)`}${IS_DEV ? " \u2014 development build" : ""}`;
|
package/harness/harness/task.py
CHANGED
|
@@ -176,7 +176,12 @@ def cmd_place(args) -> int:
|
|
|
176
176
|
die(f"placing a single task needs --epic: it lands inside an epic of "
|
|
177
177
|
f"'{version_name}', never loose. Epics in that version: "
|
|
178
178
|
f"{', '.join(e.name for e in version.epics) or 'none yet'}")
|
|
179
|
-
|
|
179
|
+
# The bucket IS the status, so landing everything in `queue/` does not move a
|
|
180
|
+
# task, it silently un-starts it. Nine came out queued on one repo — six blocked
|
|
181
|
+
# and three in progress — and the obvious repair is closed, because `work move
|
|
182
|
+
# <task> blocked` is refused for a task with no recorded question. Work arriving
|
|
183
|
+
# from the backlog has no bucket to keep and starts queued.
|
|
184
|
+
dest = epic.folder / (task.status if task.status in BUCKETS else "queue") / name
|
|
180
185
|
if dest.exists():
|
|
181
186
|
die(f"{rel(dest, root)} already exists")
|
|
182
187
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
package/harness/test_work.py
CHANGED
|
@@ -1778,6 +1778,37 @@ def test_doctor_passes_a_degraded_but_legal_install_and_fails_a_real_break():
|
|
|
1778
1778
|
assert f"{tree.cli()} init" in out.getvalue()
|
|
1779
1779
|
|
|
1780
1780
|
|
|
1781
|
+
def test_place_carries_a_tasks_bucket_into_the_new_cut():
|
|
1782
|
+
# The bucket IS the status, so landing everything in `queue/` does not move a
|
|
1783
|
+
# task, it un-starts it — silently, and for blocked work the obvious repair is
|
|
1784
|
+
# closed, because `work move <task> blocked` is refused without a recorded
|
|
1785
|
+
# question. Nine tasks came out queued on one repo doing a re-cut.
|
|
1786
|
+
import os
|
|
1787
|
+
for bucket in ("in-progress", "blocked"):
|
|
1788
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
1789
|
+
here = _tree(tmp, name="01-here")
|
|
1790
|
+
root = Path(tmp)
|
|
1791
|
+
there = root / "versions" / "02-there"
|
|
1792
|
+
there.mkdir(parents=True)
|
|
1793
|
+
(there / "version.md").write_text(
|
|
1794
|
+
"---\ncreated: 2026-08-01\norder: 02\noutcome: b\n---\n\n# 02-there\n")
|
|
1795
|
+
from_epic = _epic(here, "one")
|
|
1796
|
+
_epic(there, "two")
|
|
1797
|
+
(from_epic / bucket).mkdir()
|
|
1798
|
+
_task(from_epic / bucket, "moving")
|
|
1799
|
+
|
|
1800
|
+
os.environ["WORK_DIR"] = tmp
|
|
1801
|
+
try:
|
|
1802
|
+
task.cmd_place({"name": "moving", "version": "02-there", "epic": "two"})
|
|
1803
|
+
finally:
|
|
1804
|
+
os.environ.pop("WORK_DIR")
|
|
1805
|
+
|
|
1806
|
+
landed = list(root.rglob("*/moving/task.md"))
|
|
1807
|
+
assert len(landed) == 1, f"expected one landing, got {landed}"
|
|
1808
|
+
assert landed[0].parent.parent.name == bucket, \
|
|
1809
|
+
f"place un-started it: {bucket} -> {landed[0].parent.parent.name}"
|
|
1810
|
+
|
|
1811
|
+
|
|
1781
1812
|
def test_doctor_reads_a_ledger_as_an_id_and_leaves_prose_alone():
|
|
1782
1813
|
import io, contextlib
|
|
1783
1814
|
with tempfile.TemporaryDirectory() as tmp:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appchy/jarvis",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.69",
|
|
4
4
|
"description": "Jarvis — local AI coding assistant CLI",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -58,15 +58,15 @@
|
|
|
58
58
|
"vitest": "^2.1.0",
|
|
59
59
|
"@jarvis/agents": "1.0.0",
|
|
60
60
|
"@jarvis/anthropic": "1.0.0",
|
|
61
|
-
"@jarvis/board": "0.1.0",
|
|
62
61
|
"@jarvis/data": "0.1.0",
|
|
63
62
|
"@jarvis/errors": "1.0.0",
|
|
64
63
|
"@jarvis/logger": "1.0.0",
|
|
64
|
+
"@jarvis/board": "0.1.0",
|
|
65
65
|
"@jarvis/rpc": "1.0.0",
|
|
66
66
|
"@jarvis/types": "1.0.0",
|
|
67
67
|
"@jarvis/typescript-config": "1.0.0",
|
|
68
|
-
"@jarvis/
|
|
69
|
-
"@jarvis/
|
|
68
|
+
"@jarvis/vitest-config": "1.0.0",
|
|
69
|
+
"@jarvis/ui": "0.1.0"
|
|
70
70
|
},
|
|
71
71
|
"scripts": {
|
|
72
72
|
"dev": "tsx watch src/bin.ts start --foreground",
|