@stage5/lumine 0.2.65 → 0.2.66
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/README.md +22 -3
- package/lib/admin-workflows.js +232 -16
- package/lib/admin.js +243 -28
- package/lib/commands.js +6 -1
- package/package.json +1 -1
- package/sdk/BUILD_SDK_INDEX.md +11 -7
- package/sdk/LUMINE_ADMIN.md +171 -42
package/sdk/LUMINE_ADMIN.md
CHANGED
|
@@ -15,9 +15,13 @@ canonical structured data.
|
|
|
15
15
|
server-owned Zero and Ciel user IDs are approved. Usernames and CLI flags are
|
|
16
16
|
not authority.
|
|
17
17
|
- `daily-run start` creates or returns a six-hour `delegated-admin` run with
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
one allowlisted run scope and one public actor. `--scope full` is the full
|
|
19
|
+
daily-management review. `--scope featured` is only an authorization
|
|
20
|
+
envelope for a specifically requested Featured slice; it does not authorize
|
|
21
|
+
or imply the newspaper, queues, conduct review, logs, costs, sponsors,
|
|
22
|
+
carry-over work, or final full-run report. Every run-scoped CLI command loads
|
|
23
|
+
the canonical active run and sends its ID; the API rejects a missing,
|
|
24
|
+
expired, scope-mismatched, or actor-mismatched run.
|
|
21
25
|
- The public content actor is Zero or Ciel. Mikey's operator ID is retained in
|
|
22
26
|
private audit rows and is not embedded in public comment metadata.
|
|
23
27
|
- Delegated HTTP work never authenticates as the bot, opens a bot socket, changes
|
|
@@ -59,6 +63,15 @@ Comment mode is stored only on the current run:
|
|
|
59
63
|
- `draft`: server-generated drafts, no public comment.
|
|
60
64
|
- `post`: drafts plus idempotent publication through the ordinary comment path.
|
|
61
65
|
|
|
66
|
+
A Featured-only run always uses comment mode `off` and grants only Featured
|
|
67
|
+
subject inspection, subject reveal, Featured mutation, and run completion. It can complete
|
|
68
|
+
without a sponsor-integrity scan. Completing it does not advance any full-run
|
|
69
|
+
content/cost/conduct window, queue-coverage record, last-completed identity, or
|
|
70
|
+
carry-over surfacing telemetry. Start one only when Mikey requested that slice; never turn a small
|
|
71
|
+
request into a full review merely because the technical command needs a run.
|
|
72
|
+
The API enforces these scopes, and the CLI also rejects out-of-scope operations
|
|
73
|
+
before calling endpoints outside the Lumine Admin router (notably Build review).
|
|
74
|
+
|
|
62
75
|
### Private AI-bucket maintenance
|
|
63
76
|
|
|
64
77
|
AI identity buckets are private operator bookkeeping, not a Zero/Ciel public
|
|
@@ -210,9 +223,11 @@ coins, streaks, buckets, messages, or public content.
|
|
|
210
223
|
|
|
211
224
|
## Editorial priorities
|
|
212
225
|
|
|
213
|
-
The CLI
|
|
214
|
-
|
|
215
|
-
rewards, effort levels, Featured, skips, comments, and replies.
|
|
226
|
+
The CLI never makes the qualitative judgments in this section; they are the
|
|
227
|
+
standing instruction for the operator or agent and apply to every verb below:
|
|
228
|
+
recommends, rewards, effort levels, Featured, skips, comments, and replies. It
|
|
229
|
+
does enforce deterministic server-provable boundaries documented below, such
|
|
230
|
+
as the posting-date and lifetime-history gates for a new Featured addition.
|
|
216
231
|
|
|
217
232
|
Public text authored as Ciel must be English. This is an operator and generation
|
|
218
233
|
instruction, not a script or keyword test: writing systems do not identify a
|
|
@@ -337,9 +352,9 @@ is. Those go to Mikey.
|
|
|
337
352
|
|
|
338
353
|
## Escalation to Mikey
|
|
339
354
|
|
|
340
|
-
A run is not finished when the mutations are done. Curation surfaces things only
|
|
355
|
+
A full daily management run is not finished when the mutations are done. Curation surfaces things only
|
|
341
356
|
a human owner can decide, and a finding nobody reports is a finding that did not
|
|
342
|
-
happen. **Every run ends with an escalation list**, and it belongs in the run's
|
|
357
|
+
happen. **Every full run ends with an escalation list**, and it belongs in the run's
|
|
343
358
|
final report whether or not anyone asks for it.
|
|
344
359
|
|
|
345
360
|
Keep that list narrow enough to be useful. Escalate concrete child-safety,
|
|
@@ -604,6 +619,7 @@ type DailyRun = {
|
|
|
604
619
|
publicActorUserId: number;
|
|
605
620
|
identityMode: "auto" | "zero" | "ciel";
|
|
606
621
|
commentMode: "off" | "draft" | "post";
|
|
622
|
+
runScope: "full" | "featured";
|
|
607
623
|
sessionKind: "delegated-admin";
|
|
608
624
|
scopes: string[];
|
|
609
625
|
status: "active" | "completed" | "failed" | "expired";
|
|
@@ -704,6 +720,7 @@ identity, or advances rotation.
|
|
|
704
720
|
|
|
705
721
|
```bash
|
|
706
722
|
lumine admin daily-run start --identity auto --comment-mode off --json
|
|
723
|
+
lumine admin daily-run start --scope featured --identity auto --json
|
|
707
724
|
lumine admin daily-run start --identity ciel --comment-mode draft \
|
|
708
725
|
--run-key daily:2026-08-06:review --json
|
|
709
726
|
lumine admin daily-run status --json
|
|
@@ -744,7 +761,7 @@ type DailyRunFail = DailyRunComplete;
|
|
|
744
761
|
|
|
745
762
|
This is the approved Zero/Ciel Build Workshop sponsor role, not the ordinary
|
|
746
763
|
AI Energy sponsor flow. Applications originate only from `lumine sponsor`.
|
|
747
|
-
Website-management agents review them inside an active daily run:
|
|
764
|
+
Website-management agents review them inside an active full daily run:
|
|
748
765
|
|
|
749
766
|
```bash
|
|
750
767
|
lumine admin sponsor applications list --status pending --json
|
|
@@ -773,10 +790,11 @@ cleared.
|
|
|
773
790
|
`disqualify` makes it ineligible. `hold` and `flag` require an evidence note and
|
|
774
791
|
remain open. The scan itself never changes sponsor status or applies a sanction.
|
|
775
792
|
Use the separate, audited `sponsor status set` command for an explicit human
|
|
776
|
-
decision. `daily-run complete` is rejected until the scan has covered its full
|
|
793
|
+
decision. Full `daily-run complete` is rejected until the scan has covered its full
|
|
777
794
|
snapshot and no pending, held, or flagged case remains.
|
|
778
795
|
|
|
779
|
-
|
|
796
|
+
During a full review, record only qualifying escalations as they are confirmed.
|
|
797
|
+
`daily-run report`
|
|
780
798
|
then composes the active run's canonical audit events, successful mutations,
|
|
781
799
|
completed queue scans, recorded escalations, and the most useful brief deltas
|
|
782
800
|
into one result. Generate it before `complete`, because run-scoped reads require
|
|
@@ -784,7 +802,7 @@ the current active run. Queue coverage is written automatically only after an
|
|
|
784
802
|
`--all` traversal reaches canonical exhaustion; an interrupted scan remains in
|
|
785
803
|
its local checkpoint and cannot be misreported as complete.
|
|
786
804
|
|
|
787
|
-
**Every agent-authored final management report includes a `Featured rotation`
|
|
805
|
+
**Every agent-authored final full-management report includes a `Featured rotation`
|
|
788
806
|
section.** Base it on a fresh `featured list`. When capacity exists, make and
|
|
789
807
|
report strong additions during the run under the standing approval above; do
|
|
790
808
|
not defer them as proposals. Then name each current Subject proposed for
|
|
@@ -818,13 +836,17 @@ Starting with a run key that belongs to a finished or expired run fails with
|
|
|
818
836
|
`CLI_ADMIN_RUN_KEY_ALREADY_USED`; supply a fresh `--run-key` (for example
|
|
819
837
|
`daily:2026-08-07:2`) to start again the same day. Reusing the key of the
|
|
820
838
|
live active run returns that run only when the requested `--comment-mode`
|
|
821
|
-
and any explicit `--identity
|
|
839
|
+
and `--scope`, plus any explicit `--identity`, match it; otherwise the start fails with
|
|
822
840
|
`CLI_ADMIN_RUN_SETTINGS_MISMATCH` instead of silently returning a run with
|
|
823
841
|
different scopes. The same check applies when a start without the active
|
|
824
842
|
run's key would fall back to that active run.
|
|
825
843
|
|
|
826
|
-
The default run key is `daily:YYYY-MM-DD` in Asia/Bangkok.
|
|
827
|
-
|
|
844
|
+
The default full-run key is `daily:YYYY-MM-DD` in Asia/Bangkok. Scoped Featured
|
|
845
|
+
runs receive a fresh `scoped:featured:...` key so completing one slice cannot
|
|
846
|
+
consume the day's full-run key or prevent a later explicitly requested slice.
|
|
847
|
+
They also use a dedicated API start endpoint, so an older API cannot ignore the
|
|
848
|
+
scope and silently create a full run; it fails before creating any run instead.
|
|
849
|
+
Supply `--run-key` for a separate explicit run. `--idempotency-key` may be supplied to any
|
|
828
850
|
mutation when a caller needs the same retry identity across processes. The CLI
|
|
829
851
|
generates a fresh key for every mutation invocation; if a mutation fails, its
|
|
830
852
|
JSON error includes `details.retryIdempotencyKey` for a safe exact retry.
|
|
@@ -850,7 +872,7 @@ audit path: canonical todo state and its private `todo.create` / `todo.update`
|
|
|
850
872
|
audit response commit together, and no public bot, public mutation count, or
|
|
851
873
|
rotation signal is involved.
|
|
852
874
|
|
|
853
|
-
Every successful `daily-run start` response automatically includes all
|
|
875
|
+
Every successful full `daily-run start` response automatically includes all
|
|
854
876
|
unfinished items under `data.carryoverTodos`. The same run ID increments an
|
|
855
877
|
item's surfacing telemetry at most once, even when start is retried. This is the
|
|
856
878
|
canonical handoff: read it before discretionary new work, resume what can safely
|
|
@@ -860,6 +882,8 @@ still-unfinished set again. Completing a daily run never silently completes its
|
|
|
860
882
|
todos. A CLI carrying this contract rejects a start response that does not echo
|
|
861
883
|
the canonical handoff, so a newer CLI against an API deployed before the todo
|
|
862
884
|
migration cannot quietly treat unsupported telemetry as an empty list.
|
|
885
|
+
A Featured-only start instead returns an explicitly suppressed, empty handoff
|
|
886
|
+
and performs no todo reads, writes, capacity checks, or surfacing increments.
|
|
863
887
|
|
|
864
888
|
`kind` is `task` or `experiment`. New items may start `open`, `in_progress`, or
|
|
865
889
|
`blocked`; updates may also use `completed` or `cancelled`. A progress note is
|
|
@@ -899,9 +923,10 @@ type AdminTodoList = Success<{
|
|
|
899
923
|
type AdminTodoMutation = Success<{ todo: AdminTodo }>;
|
|
900
924
|
|
|
901
925
|
type CarryoverTodos = {
|
|
926
|
+
included: boolean;
|
|
902
927
|
items: AdminTodo[];
|
|
903
928
|
count: number;
|
|
904
|
-
surfacedForRunId: number;
|
|
929
|
+
surfacedForRunId: number | null;
|
|
905
930
|
newlySurfacedCount: number;
|
|
906
931
|
};
|
|
907
932
|
```
|
|
@@ -1009,6 +1034,18 @@ the spool and can be copied to a separate `--output` file, while `--checkpoint`
|
|
|
1009
1034
|
remains resumable operational state. Subject `--after` is inclusive, and every
|
|
1010
1035
|
opaque cursor is bound to its original filters.
|
|
1011
1036
|
|
|
1037
|
+
An automatic checkpoint filename includes a fingerprint of the exact request,
|
|
1038
|
+
so two scans with the same operation name and run ID but different subjects,
|
|
1039
|
+
server filters, client-side view filters, or result-transform inputs cannot
|
|
1040
|
+
overwrite one another. An exclusive adjacent lock rejects a
|
|
1041
|
+
second process using the same checkpoint while the first scan is active and
|
|
1042
|
+
recovers a lock only when its recorded process no longer exists. Resume still
|
|
1043
|
+
recognizes the pre-fingerprint default filename, validates its stored request
|
|
1044
|
+
fingerprint, and migrates it through the existing checkpoint path.
|
|
1045
|
+
Legacy Build-candidate checkpoints intentionally fail that validation because
|
|
1046
|
+
they did not bind the Site URL used to materialize candidate links; start those
|
|
1047
|
+
scans fresh so one result cannot mix origins.
|
|
1048
|
+
|
|
1012
1049
|
For `--all --json`, stdout remains exactly one JSON value. Scan-start, first-
|
|
1013
1050
|
page, every-tenth-page, and exhaustion progress is written to **stderr** with
|
|
1014
1051
|
only page/scanned/candidate counts and the private checkpoint path. A long
|
|
@@ -1047,7 +1084,7 @@ learned during that review. The receipt binds the draft to the exact reviewed
|
|
|
1047
1084
|
artifact without copying a version number by hand; the server owns the Build,
|
|
1048
1085
|
version, method, and review-time fields around that understanding.
|
|
1049
1086
|
|
|
1050
|
-
During every management
|
|
1087
|
+
During every full daily management review, scan recent Build candidates back through the
|
|
1051
1088
|
run's review window alongside Subjects and the recommendation queue. An app
|
|
1052
1089
|
that is thin, broken, private, unchanged since a prior substantive bot
|
|
1053
1090
|
comment, or not meaningfully understood may be left alone. A new or materially
|
|
@@ -1201,6 +1238,9 @@ lumine admin subject creator set-made-by-poster 123 --json
|
|
|
1201
1238
|
lumine admin subject feature 123 --json
|
|
1202
1239
|
lumine admin subject unfeature 123 --json
|
|
1203
1240
|
lumine admin featured list --json
|
|
1241
|
+
lumine admin featured history --subject-ids 50,40 --all --json
|
|
1242
|
+
lumine admin featured add --subject-ids 50,40 \
|
|
1243
|
+
--posted-after 2026-08-27T00:00:00+07:00 --json
|
|
1204
1244
|
lumine admin featured reorder --subject-ids 30,20,10 --json
|
|
1205
1245
|
lumine admin featured rotate --remove-subject-ids 30,20 \
|
|
1206
1246
|
--add-subject-ids 50,40 --json
|
|
@@ -1233,12 +1273,58 @@ type FeaturedList = Success<{
|
|
|
1233
1273
|
maximum: 20;
|
|
1234
1274
|
}>;
|
|
1235
1275
|
|
|
1276
|
+
type FeaturedHistory = Success<{
|
|
1277
|
+
coverage: {
|
|
1278
|
+
complete: boolean;
|
|
1279
|
+
startedAt: number | null;
|
|
1280
|
+
updatedAt: number | null;
|
|
1281
|
+
};
|
|
1282
|
+
subjects: Array<{
|
|
1283
|
+
id: number;
|
|
1284
|
+
url: string;
|
|
1285
|
+
title: string | null;
|
|
1286
|
+
createdAt: number | null;
|
|
1287
|
+
deleted: boolean | null;
|
|
1288
|
+
featured: { member: boolean; order: number | null };
|
|
1289
|
+
knownFeatured: boolean;
|
|
1290
|
+
neverFeatured: boolean | null;
|
|
1291
|
+
firstRecordedFeaturedAt: number | null;
|
|
1292
|
+
lastRecordedFeaturedAt: number | null;
|
|
1293
|
+
}>;
|
|
1294
|
+
events: Array<{
|
|
1295
|
+
id: number;
|
|
1296
|
+
mutationId: string;
|
|
1297
|
+
subjectId: number;
|
|
1298
|
+
action: "featured" | "unfeatured" | "reordered" | "snapshot";
|
|
1299
|
+
fromPosition: number | null;
|
|
1300
|
+
toPosition: number | null;
|
|
1301
|
+
source: "website" | "lumine-admin" | "coverage-bootstrap";
|
|
1302
|
+
operation: string;
|
|
1303
|
+
actorUserId: number | null;
|
|
1304
|
+
operatorUserId: number | null;
|
|
1305
|
+
adminAuditId: number | null;
|
|
1306
|
+
occurredAt: number;
|
|
1307
|
+
}>;
|
|
1308
|
+
pagination: Pagination;
|
|
1309
|
+
}>;
|
|
1310
|
+
|
|
1236
1311
|
type SubjectFeature = FeaturedList & {
|
|
1237
1312
|
status: "success" | "already_done";
|
|
1238
1313
|
changed: boolean;
|
|
1239
1314
|
};
|
|
1240
1315
|
|
|
1241
1316
|
type SubjectUnfeature = SubjectFeature;
|
|
1317
|
+
type FeaturedAdd = FeaturedList & {
|
|
1318
|
+
status: "success" | "already_done";
|
|
1319
|
+
changed: boolean;
|
|
1320
|
+
data: FeaturedList["data"] & {
|
|
1321
|
+
addition: {
|
|
1322
|
+
addSubjectIds: number[];
|
|
1323
|
+
postedAfter: number;
|
|
1324
|
+
finalSubjectIds: number[];
|
|
1325
|
+
};
|
|
1326
|
+
};
|
|
1327
|
+
};
|
|
1242
1328
|
type FeaturedReorder = SubjectFeature;
|
|
1243
1329
|
type FeaturedRotate = FeaturedList & {
|
|
1244
1330
|
status: "success" | "already_done";
|
|
@@ -1267,6 +1353,34 @@ unknown/deleted IDs, missing current members, non-subject rows, and more than
|
|
|
1267
1353
|
20 subjects. Permanent pins and editorial ordering policy are deliberately not
|
|
1268
1354
|
hardcoded.
|
|
1269
1355
|
|
|
1356
|
+
`featured history` is the compact canonical evidence path. It returns only
|
|
1357
|
+
coverage metadata, per-subject lifetime summaries, and paginated mutation
|
|
1358
|
+
events; it does not repeat full audit before/after board snapshots. An event of
|
|
1359
|
+
any action proves the subject has appeared on Featured. `neverFeatured: true`
|
|
1360
|
+
is returned only when no event exists and the subject was created strictly
|
|
1361
|
+
after the finalized coverage boundary. `null` means the subject predates provable
|
|
1362
|
+
coverage—never convert that unknown into “never Featured.” Both the website
|
|
1363
|
+
editor and Lumine mutations write this append-only history in the same
|
|
1364
|
+
transaction as the canonical board replacement.
|
|
1365
|
+
For a retry whose board transaction committed but whose canonical detail reload
|
|
1366
|
+
failed, the audit-linked history event is the durable receipt: the API re-reads
|
|
1367
|
+
the current board and preserves the original changed-mutation accounting.
|
|
1368
|
+
|
|
1369
|
+
`featured add` is the atomic verb for genuinely new additions. The supplied
|
|
1370
|
+
IDs are placed at the front in descending relevance order while existing
|
|
1371
|
+
members retain their order. The server requires the whole batch to be absent,
|
|
1372
|
+
fit within the 20-subject maximum, have no Featured event, fall inside complete
|
|
1373
|
+
history coverage, and have a creation time strictly after `--posted-after`.
|
|
1374
|
+
That boundary accepts Unix seconds, an ISO-8601 date (interpreted as UTC), or
|
|
1375
|
+
an ISO-8601 timestamp with an explicit `Z`/numeric offset; timezone-free
|
|
1376
|
+
timestamps and permissively normalized dates are rejected.
|
|
1377
|
+
Any failed gate leaves the entire board unchanged. An exact completed retry is
|
|
1378
|
+
replayed from its audit response, while recovery after a committed board change
|
|
1379
|
+
is proven by that request's audit-linked history receipt. A fresh request for
|
|
1380
|
+
an already-present subject fails instead of inferring a retry from board shape.
|
|
1381
|
+
Use the ordinary singular `subject feature` only for an explicit manual
|
|
1382
|
+
override; it does not claim that a subject is new.
|
|
1383
|
+
|
|
1270
1384
|
Featured rotate is the direct, atomic replacement verb for an approved
|
|
1271
1385
|
rotation. `--remove-subject-ids` names the exact current members Mikey approved
|
|
1272
1386
|
for removal; `--add-subject-ids` names the same number of replacements in
|
|
@@ -1617,7 +1731,7 @@ platform absorbs the cost, exactly like their coin-exempt recommends and
|
|
|
1617
1731
|
rewards. When a day's first edition is printed, the server notifies the app's
|
|
1618
1732
|
notification subscribers (users can mute the app or unsubscribe in the app;
|
|
1619
1733
|
the bots never need to send anything). All three mutations require the
|
|
1620
|
-
`news:print` scope (in every run's base scopes) and are audited as `news.print`
|
|
1734
|
+
`news:print` scope (in every full run's base scopes) and are audited as `news.print`
|
|
1621
1735
|
/ `news.claim` / `news.submit` against `news_edition` targets.
|
|
1622
1736
|
|
|
1623
1737
|
```ts
|
|
@@ -1678,7 +1792,7 @@ type NewsClaim = Success<{
|
|
|
1678
1792
|
type NewsSubmit = NewsStatus; // "success"; newspaper includes revisionNumber
|
|
1679
1793
|
```
|
|
1680
1794
|
|
|
1681
|
-
## Bot conduct review (standing duty, every
|
|
1795
|
+
## Bot conduct review (standing duty, every full daily review)
|
|
1682
1796
|
|
|
1683
1797
|
```bash
|
|
1684
1798
|
lumine admin bot-output --json
|
|
@@ -1686,7 +1800,8 @@ lumine admin bot-output --days 3 --json
|
|
|
1686
1800
|
lumine admin bot-output --cursor '<pagination.nextCursor>' --json
|
|
1687
1801
|
```
|
|
1688
1802
|
|
|
1689
|
-
**Every
|
|
1803
|
+
**Every full daily review reads what Zero and Ciel themselves said since the
|
|
1804
|
+
last completed full review.**
|
|
1690
1805
|
The bots talk to children constantly — chat replies, Daily Reflection
|
|
1691
1806
|
responses, autonomous comment-assistant comments — and a harmful message must
|
|
1692
1807
|
never depend on a kid being brave enough to report it (real incident,
|
|
@@ -1694,7 +1809,7 @@ never depend on a kid being brave enough to report it (real incident,
|
|
|
1694
1809
|
streak — "I'm telling you: Stop", guilt framing, ordering him to quit Daily
|
|
1695
1810
|
Reflections — and it surfaced only because the kid showed Mikey).
|
|
1696
1811
|
|
|
1697
|
-
`bot-output` returns, windowed since the operator's last completed run
|
|
1812
|
+
`bot-output` returns, windowed since the operator's last completed full run
|
|
1698
1813
|
(`--days 1..30` overrides): `chatMessages` (every stored Zero/Ciel chat and
|
|
1699
1814
|
reflection reply, with full text and recipient metadata when its best-effort
|
|
1700
1815
|
prompt audit exists) and `comments`
|
|
@@ -1712,7 +1827,7 @@ right after the brief, and **read every row** — the tool deliberately does no
|
|
|
1712
1827
|
filtering, scoring, or keyword matching, because the judgment is the reviewing
|
|
1713
1828
|
agent's.
|
|
1714
1829
|
|
|
1715
|
-
### API runtime-log review (same phase, every
|
|
1830
|
+
### API runtime-log review (same phase, every full daily review)
|
|
1716
1831
|
|
|
1717
1832
|
The bot-conduct review also owns a bounded production API log review. Bot
|
|
1718
1833
|
responses, community-management reads, and delegated mutations can succeed at
|
|
@@ -1882,7 +1997,7 @@ This requires a `comment-mode post` run, sends as that run's selected bot,
|
|
|
1882
1997
|
and only works when that bot and member already have a direct channel. It
|
|
1883
1998
|
never opens a new conversation. The message is audited and idempotent, reopens
|
|
1884
1999
|
the existing DM canonically, and leaves the child's unread pointer untouched.
|
|
1885
|
-
A run report that skipped the conduct review is incomplete.
|
|
2000
|
+
A full-run report that skipped the conduct review is incomplete.
|
|
1886
2001
|
|
|
1887
2002
|
## Daily brief (management insights)
|
|
1888
2003
|
|
|
@@ -1896,16 +2011,17 @@ lumine admin notable add Minecrarft_guy --note "Helped three new builders debug
|
|
|
1896
2011
|
```
|
|
1897
2012
|
|
|
1898
2013
|
Read-only management insights for the delegated workflow, windowed since the
|
|
1899
|
-
operator's last completed run by default (`--days 1..30` overrides;
|
|
1900
|
-
30 days). Call it early in every
|
|
1901
|
-
end every run report with an **"Insights for
|
|
2014
|
+
operator's last completed full run by default (`--days 1..30` overrides;
|
|
2015
|
+
capped at 30 days). Call it early in every full daily review — right after the
|
|
2016
|
+
newspaper check — and end every full-run report with an **"Insights for
|
|
2017
|
+
Mikey"** section carrying only
|
|
1902
2018
|
the deltas and anomalies worth his time, next to the escalation list. Never
|
|
1903
2019
|
dump raw sections at him.
|
|
1904
2020
|
|
|
1905
|
-
### Application AI calendar-month cost (standing duty, every
|
|
2021
|
+
### Application AI calendar-month cost (standing duty, every full daily review)
|
|
1906
2022
|
|
|
1907
|
-
Run `lumine admin ai-costs monthly --json` during every
|
|
1908
|
-
|
|
2023
|
+
Run `lumine admin ai-costs monthly --json` during every full daily management
|
|
2024
|
+
review. This read-only command requires the active delegated run and returns one
|
|
1909
2025
|
server-owned calendar summary from the canonical deduplicated application AI-
|
|
1910
2026
|
cost ledger. It deliberately takes no `--days`: all boundaries are UTC calendar
|
|
1911
2027
|
months, so the result is directly comparable from one run to the next.
|
|
@@ -2004,13 +2120,13 @@ owned. Deploy and verify the compatible `twinkle-api` route before publishing
|
|
|
2004
2120
|
or installing the Lumine CLI release that invokes it; an older API will reject
|
|
2005
2121
|
the new command instead of synthesizing figures locally.
|
|
2006
2122
|
|
|
2007
|
-
### Lumine media feature cost and cleanup watch (standing duty, every
|
|
2123
|
+
### Lumine media feature cost and cleanup watch (standing duty, every full daily review)
|
|
2008
2124
|
|
|
2009
|
-
Run `lumine admin media-costs monthly --json` during every
|
|
2010
|
-
|
|
2125
|
+
Run `lumine admin media-costs monthly --json` during every full daily management
|
|
2126
|
+
review. This read-only, delegated-run-gated command reports the canonical Media
|
|
2011
2127
|
Energy ledger for short clips, livestream input/viewer usage, and replay
|
|
2012
2128
|
storage/viewing. Include in
|
|
2013
|
-
**"Insights for Mikey"**
|
|
2129
|
+
**"Insights for Mikey"** in every full-run report:
|
|
2014
2130
|
|
|
2015
2131
|
- current-month settled estimated cost, active reservations, cross-month
|
|
2016
2132
|
carryover, guarded total, global limit, remaining headroom, and percent used;
|
|
@@ -2040,7 +2156,7 @@ conservative provider-cost estimates. It is not an AWS invoice. Photo capture
|
|
|
2040
2156
|
uses existing Build runtime file storage rather than the paid Media Energy
|
|
2041
2157
|
ledger; `operations.runtimeStorage.readyImages` therefore reports all ready
|
|
2042
2158
|
Build runtime images, not camera captures alone. Reconcile delayed AWS
|
|
2043
|
-
MediaConvert and IVS service charges every
|
|
2159
|
+
MediaConvert and IVS service charges every full review as described below. S3 is shared
|
|
2044
2160
|
with other Twinkle uploads, so report its service-level cost as shared context,
|
|
2045
2161
|
not as photo-only spend.
|
|
2046
2162
|
|
|
@@ -2062,13 +2178,13 @@ Replay storage and write cost is conservatively embedded in an opted-in
|
|
|
2062
2178
|
`live-input` reservation; `replay-viewer` is a separate kind. Report
|
|
2063
2179
|
`operations.replays` (pending, processing, ready, failed, deleting,
|
|
2064
2180
|
delete-failed, overdue finalization/deletion, expired-ready, bytes, and object
|
|
2065
|
-
count) and `operations.replayViewers` on every
|
|
2181
|
+
count) and `operations.replayViewers` on every full review. A replay finalization or
|
|
2066
2182
|
deletion alert is an operational incident because private recording cleanup is
|
|
2067
2183
|
part of the feature contract.
|
|
2068
2184
|
|
|
2069
|
-
### AWS monthly bill expectation (standing duty, every
|
|
2185
|
+
### AWS monthly bill expectation (standing duty, every full daily review)
|
|
2070
2186
|
|
|
2071
|
-
Starting 2026-08-27, every website-management
|
|
2187
|
+
Starting 2026-08-27, every full daily website-management review must also check AWS Cost
|
|
2072
2188
|
Explorer and include the current calendar month's expected AWS bill in
|
|
2073
2189
|
**"Insights for Mikey"**. This is an account-level infrastructure cost check,
|
|
2074
2190
|
not the `aiSpending` application-cost section above. Never substitute one for
|
|
@@ -2140,9 +2256,9 @@ For the media watch, separately identify AWS Elemental MediaConvert and Amazon
|
|
|
2140
2256
|
Interactive Video Service rows when present. Also report Amazon S3 as shared
|
|
2141
2257
|
storage context, without attributing the whole S3 row to Lumine media.
|
|
2142
2258
|
|
|
2143
|
-
### Combined application AI and AWS cost (standing duty, every
|
|
2259
|
+
### Combined application AI and AWS cost (standing duty, every full daily review)
|
|
2144
2260
|
|
|
2145
|
-
Every website-management report must also give Mikey one **Combined AI + AWS
|
|
2261
|
+
Every full daily website-management report must also give Mikey one **Combined AI + AWS
|
|
2146
2262
|
tracked operating cost** view. This is a mixed-source estimate, not an invoice
|
|
2147
2263
|
or a claim to cover every company expense. Keep the independent AI and AWS
|
|
2148
2264
|
figures visible so the total remains auditable.
|
|
@@ -2189,7 +2305,7 @@ farm-signal sections added that day; AI Card summon watch added 2026-08-24):
|
|
|
2189
2305
|
report period can begin up to one day before or after the exact brief window,
|
|
2190
2306
|
so use those bounds when describing it. `generatedAt` is the report
|
|
2191
2307
|
snapshot time. **`endDayInProgress: true` means the trailing bucket was the
|
|
2192
|
-
current UTC day at that snapshot and was still filling** — a daily
|
|
2308
|
+
current UTC day at that snapshot and was still filling** — a full daily review reads
|
|
2193
2309
|
it mid-day, before the after-school peak, so never report that bucket as a full day's
|
|
2194
2310
|
spend. `aiSpending.byDay` contains the canonical daily rows. For a truthful
|
|
2195
2311
|
daily figure, widen the window (`--days 2..7`), exclude the row whose
|
|
@@ -2621,7 +2737,7 @@ audited as `comment.edit` with the previous content in `beforeState` and
|
|
|
2621
2737
|
`data.edit.previousContent`. Edit sparingly:
|
|
2622
2738
|
kids may have already read the original, so a comment that changed meaning
|
|
2623
2739
|
(not just wording) usually deserves a follow-up reply instead of a silent
|
|
2624
|
-
rewrite. Inside a
|
|
2740
|
+
rewrite. Inside a full comment-enabled daily run it still requires that run's `comment:post`
|
|
2625
2741
|
scope; for a one-comment repair, use the narrower correction session above.
|
|
2626
2742
|
|
|
2627
2743
|
## Direct bot chat messages
|
|
@@ -3044,6 +3160,19 @@ Deploy and verify the API's `/cli/admin/subjects/featured/rotation` route before
|
|
|
3044
3160
|
publishing a CLI release that exposes `featured rotate`; an older API rejects
|
|
3045
3161
|
the command without changing Featured state.
|
|
3046
3162
|
|
|
3163
|
+
For scoped runs and Featured history, also apply
|
|
3164
|
+
`add-lumine-admin-run-scope.sql` and `add-featured-subject-history.sql` before
|
|
3165
|
+
the API release. After every serving API worker is verified on that release
|
|
3166
|
+
and no pre-history worker or request remains running or in flight, run
|
|
3167
|
+
`finalize-featured-subject-history-coverage.sql`; only then publish a CLI
|
|
3168
|
+
that exposes `featured add`. The guard fails closed until that finalization.
|
|
3169
|
+
After coverage is finalized, rolling back to an API that does not record
|
|
3170
|
+
history is forbidden because it would create an unprovable lifetime gap.
|
|
3171
|
+
After any scoped run exists, an API whose review-window queries do not filter
|
|
3172
|
+
for `runScope = 'full'` is also rollback-incompatible because it would treat a
|
|
3173
|
+
narrow slice as a completed full review. A forward fix must preserve both
|
|
3174
|
+
contracts.
|
|
3175
|
+
|
|
3047
3176
|
Legacy aliases such as `subjects list`, `subjects get`, `subjects featured`,
|
|
3048
3177
|
`comments get`, and `recommend` remain accepted, but the singular command forms
|
|
3049
3178
|
shown above are the canonical interface.
|