Ship aps 0.2.0 agent-ready CLI (pre-public 0.x) - #2
Conversation
Add GOAL.md for the agent-ready AppState dogfood harness milestone, link it from the README, and archive CHG-0002 under SpecSync 5.1.1 now that PR #1 has landed on main. Co-authored-by: Leif <leif.algo@pm.me>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Rename the mistaken v1.1 milestone to 0.2.0 and deliver the APS checklist: --json on core commands, APS_HOME/--state-dir, watch --count/--timeout/--jsonl, structured profile FileState, Linux smoke CI, and matching SpecSync contracts. Co-authored-by: Leif <leif.algo@pm.me>
|
Fair point on versioning: staying on 0.x until public. Renamed the milestone to aps 0.2.0 (CLI The other agent did not leave GitHub issues (no access / empty transcript). Treated the GOAL checklist as the ticket set (APS-01..11) and shipped all of them in this PR:
|
0xLeif
left a comment
There was a problem hiding this comment.
Review of fcdf829 (0.2.0 feature drop) - verified locally, not just read.
What's good
- GOAL.md renumbering is right: "aps 0.2.0", "Stay on 0.x until the repo is public; do not imply a 1.0 release", and the APS-01..11 tickets table matches the GitHub issues (#3-#11).
- All gates green locally: build clean, 25/25 tests,
smoke.shok,specsync check --force+specsync change checkpass (CHG-0004 evidence exact, 6/6 file coverage). - CI:
build-test-smoke,linux-smoke(new, ubuntu-latest),trustall pass. - Empirically verified:
--jsonkeeps Ints/Bools typed (profilenests correctly),--state-dir>APS_HOMEprecedence works, bounded watch exits,profileround-trips across processes. - Bonus: smoke.sh now isolates itself via
APS_HOME=$(mktemp -d)- closes hardening issue #13.
Blocking: watch --jsonl reports stale values on cross-process writes
Reproduced live: aps watch profile --jsonl --count 2 in one process, aps set profile '{"name":"leif","version":4}' from another - the second event still reported version:3.
Cause: the jsonl closure in Sources/aps/Aps.swift builds its payload via CLIOutput.typedValue(for:store:) -> store.get -> AppState's in-memory FileState cache. That is the same cache that forced the direct-disk polling fix in 8a76d01. watchBlocking detects the change correctly (plain watch prints the fresh value), but the jsonl path ignores the fresh value parameter already in the closure and re-reads through the cache. Affects note and profile.
Fix shape: parse the event value from the value string passed to onChange (per-key decode for profile) instead of re-querying the store, so plain and jsonl paths are consistent by construction.
Related gap: there is no test for the jsonl event path (grep jsonl Tests/ is empty). A testWatchDetectsExternalFileStateWrite-style test through the event builder would have caught this. Issue #8 stays open until both land.
Nits
WatchEvent.timestampusesDate()instead of the injectedAPSClock- breaks the DI pattern the demo is supposed to show off (#8 asked for the injected clock).linux-smoke.ymlbuilds + smokes but does notswift test. Satisfies GOAL.md; issue #10 asked for build+test+smoke. Your call which contract wins.setup-swift@v2andcheckout@v4are tag-pinned here while trust.yml SHA-pins; consistent with ci.yml, just noting.
When this merges with the jsonl fix, issues #3, #4, #5, #7, #9, #10, #11, #13 can close.
|
Addressed the blocking Fix: jsonl events now parse the fresh Coverage: Nits:
27/27 tests + smoke green locally. |
Build jsonl events from the fresh onChange string instead of re-querying AppState's FileState cache. Stamp events with the injected APSClock, add coverage for the event builder, and run swift test in linux-smoke. Co-authored-by: Leif <leif.algo@pm.me>
Cursor and Kimi fan out across issues; claim with one agent label per ticket before starting work, and drop the label when the PR is up or work stops. Co-authored-by: Leif <leif.algo@pm.me>
|
Locked in the multi-agent claim protocol: Labels
Rules (now in PR #2 is labeled Gap: this GitHub App token still gets |
Summary
Stay on 0.x until public. This PR ships aps 0.2.0 and archives the merged 0.1 SpecSync change.
Tickets closed (APS-01..11)
--jsonon get/set/dump/keys/reset + typed JSON testsAPS_HOME+--state-dir+ path testswatch --count/--timeout/--jsonl.github/workflows/linux-smoke.yml(build + test + smoke)profilestructuredFileState(ProfileDocument)GOAL.mdat 0.2.0Review fix
watch --jsonluses the freshonChangevalue (no FileState cache lag)WatchEventtimestamps viaAPSClockTest plan
swift test(27)./Scripts/smoke.shspecsync check --force