octwin-cli 0.8.9 → 0.8.10
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 +13 -0
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,19 @@ Format: [Keep a Changelog](https://keepachangelog.com/) — newest first, bucket
|
|
|
5
5
|
**Added · Changed · Deprecated · Removed · Fixed · Security**. The platform-wide view lives in the
|
|
6
6
|
repo root [`CHANGELOG.md`](../../CHANGELOG.md); this file is the CLI-only cut that ships with the package.
|
|
7
7
|
|
|
8
|
+
## [0.8.10] - 2026-09-07
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **`octwin memos` failed with `400 project required` for a tenant-wide token — the exact
|
|
12
|
+
command the nudge tells you to run.** Every networked command can end with
|
|
13
|
+
*"✉ N memos from the platform — read them: `octwin memos`"*, and running precisely that with
|
|
14
|
+
an unpinned token answered a 400. Measured on staging: the nudge fired during a
|
|
15
|
+
`deploy --project …` (which supplied a project) and then named a command that could not run.
|
|
16
|
+
|
|
17
|
+
A memo has no project dimension to scope by — neither `pack_memos` nor `pack_memo_reads`
|
|
18
|
+
carries a `project_id`, and the read ledger is keyed by tenant — so the three call sites now
|
|
19
|
+
use `/api/self/t/memos`. Passing `--project` still works and is no longer needed.
|
|
20
|
+
|
|
8
21
|
## [0.8.9] - 2026-09-07
|
|
9
22
|
|
|
10
23
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -776,7 +776,7 @@ async function memosWaitingNotice(flags) {
|
|
|
776
776
|
// on a network failure. An observer that can terminate the CLI is not an observer: with an
|
|
777
777
|
// unreachable platform this nudge would have failed the command it was only meant to annotate,
|
|
778
778
|
// and now that the polls run BEFORE the command it would have failed it before it even ran.
|
|
779
|
-
const res = await fetch(`${t.url}/api/self/
|
|
779
|
+
const res = await fetch(`${t.url}/api/self/t/memos?meta=1`, {
|
|
780
780
|
headers: authHeaders(t), signal: AbortSignal.timeout(2_000),
|
|
781
781
|
});
|
|
782
782
|
const status = res.status;
|
|
@@ -2681,7 +2681,7 @@ async function cmdFeedback(flags) {
|
|
|
2681
2681
|
async function cmdMemos(flags) {
|
|
2682
2682
|
const t = resolveTarget(flags);
|
|
2683
2683
|
const all = flags.all === true;
|
|
2684
|
-
const { status, json } = await apiGet(`${t.url}/api/self/
|
|
2684
|
+
const { status, json } = await apiGet(`${t.url}/api/self/t/memos${all ? '?all=1' : ''}`, t);
|
|
2685
2685
|
if (status !== 200) {
|
|
2686
2686
|
die(`could not read memos (HTTP ${status})${errDetail(json)}${authFailureDetail(status, t.url)}`);
|
|
2687
2687
|
}
|
|
@@ -2711,7 +2711,7 @@ async function cmdMemos(flags) {
|
|
|
2711
2711
|
if (!all) {
|
|
2712
2712
|
const ids = rows.filter(m => !m.read_at).map(m => m.id);
|
|
2713
2713
|
if (ids.length > 0) {
|
|
2714
|
-
const res = await apiSend('POST', `${t.url}/api/self/
|
|
2714
|
+
const res = await apiSend('POST', `${t.url}/api/self/t/memos/read`, { ids }, t);
|
|
2715
2715
|
// A failed ack is not a failed command — the author HAS read them. Say so rather
|
|
2716
2716
|
// than dying after printing everything, and the nudge simply fires again.
|
|
2717
2717
|
if (res.status !== 200)
|
package/package.json
CHANGED