Say it once when the trial ends and the diagram freezes (0.18.0) - #150
Conversation
….18.0) An elapsed trial stops two things: new decisions are no longer stored, and the "How it works" diagram stops updating. Both were entirely silent. The capture keeps succeeding (a 200 skip with count 0, never an error, nothing already captured lost), so from inside the agent it simply looked like it was still working. The CLI now prints one line the first time a session hits that skip: the diagram has stopped updating, and where to keep it live. It rides the existing once-per-session throttle used by the free-plan limit line - same file, same ring, same best-effort posture - so it can never interrupt or fail a capture, and a session with no identifiable id stays silent rather than risk repeating itself on every capture. It is written as a correctness notice rather than a pitch. That a map you rely on has stopped being true is worth saying on its own; the link is there because it is the fix, not because it is the point. A nag inside someone's coding agent is the fastest way to get uninstalled. A captureSkipped reason this version does not recognise prints nothing. A wrong line about someone's own account is worse than no line. The matching staleness note on query / how answers is composed and served by the worker, so the wording and the numbers stay tunable without a publish - no client change here for it.
|
Self-review of this diff. REVIEWER: [MEDIUM — checked, correct as written] The throttle ring is SHARED with the connect nudge. REVIEWER: [MEDIUM — deliberate] The unrecognised-reason branch is a validator, not an oversight. REVIEWER: [NIT — accepted] The line carries a billing URL. Checked and found correct, for the record:
CLI suite 647 → 651, all passing; root CI note: the red check is the |
The silence this closes
An elapsed trial stops two things: new decisions are no longer stored, and the "How it works" diagram stops updating. The capture endpoint reports it as a 200 skip (
captureSkipped: 'trial_expired', count 0) — deliberately never an error, because a capture hook that starts failing is a capture hook that gets uninstalled, and nothing already captured is lost.The cost of that design is that from inside the agent it looked like everything still worked. This closes it with one line, once per session.
What it says, and why it is worded that way
A correctness notice, not a pitch. That a map you rely on has stopped being true is worth saying on its own merits; the link is there because it is the fix, not because it is the point. A nag inside someone's coding agent is the fastest way to get uninstalled — so: one line, on stderr, never mid-flow.
How it is throttled
It reuses the existing once-per-session ring that the free-plan limit line already uses (
claimSessionOnce, same file, same 0600 state file). Consequences inherited for free:It takes priority over the connect / next-step nudges, exactly as the free-plan line does: a frozen repo is connected and healthy, so nothing else would say it.
Validators
Four cases in
cli/src/connectNudge.test.ts:CLI suite 647 → 651, all passing. Repo typecheck clean.
Not in this release
The matching staleness note on
query//backthread:howanswers — "answering from your diagram as of<date>, N commits since aren't included" — is composed and served by the server, so its wording and its numbers stay tunable without a publish. It needs no client change and will appear on already-installed versions.Version bumped to 0.18.0 across the four lockstep files with the committed bundle rebuilt, per
RELEASING.md.