Repository navigation
Description
What happens now
emrg/server/self_media_prompt.md is the prompt of the built-in self-media task type, and it defines a round as four steps — read the trends → choose the topic → draft → archive — with publishing ruled out three times over:
- §0 opens with "No publishing." Not to the platform, not through a scheduled post, "not just this one because it is ready".
- §4 closes with "these readings … are not sent anywhere. Nothing leaves the machine in this round — no post, no message, no upload."
- Forbidden opens with "Never publish anything".
The stated reason is that "publication is a separate capability that needs the host's own decision". Nothing in this repository defines that decision: there is no approval phrase, no review stage, and no configuration key that enables publishing. The ban is the whole of it, so a self-media round can only ever produce a local file, and the piece reaches the platform only when the host carries it there by hand.
The same §0 also merges two different acts into one rule. It forbids account login and credentials together, and then says any step that needs a login is a blocked item. Posting from a browser session that is already signed in on this machine is neither of those, yet under the current text a round that posted from it would be reading its own template as a violation.
What is expected
Five steps in one round, with publishing before archiving: read the trends → choose the topic → draft → publish → archive with its readings, and the publish reading written into the archive.
Publishing reuses the session this machine already holds. The host is already signed in to the platform in a browser here, and the round posts from that session. It never signs in again, never types an account name, a password or a verification code, never reads or stores a cookie or a token, and never changes an account setting. A step that stops at something only the account holder can do — a fresh login prompt, a password confirmation, a second factor — is blocked: the round stops there, says so, and archives what it has. Working around it means handling a credential or an account setting, and both stay forbidden.
One publishing act per round, and the same piece is never posted twice. A round that runs again reads the earlier rounds' archive first and finds the piece already posted; it records that post and stops rather than posting a second copy. The body that goes out is the archived draft word for word — no reflowing, no trimming, no hashtag or call to action added in the posting box that the draft does not carry.
The readings block carries the publish outcome, in one of three states:
| Reading | What it holds |
|---|---|
posted |
the platform accepted the piece: the platform, the posting time, and the post's id or link |
failed |
the attempt ran and the platform refused or errored: the reason it answered |
not attempted |
the round did not try: why — no browser session, a blocked step, a draft-only extra_prompt |
A failed publish is archived and reported exactly as it happened. It is not retried until it works, and it is never recorded as posted.
No text hands the decision to an undefined process. The template no longer says publishing is the host's own decision, and no synonym of the abolished prohibitions survives it. A channel that wants drafts only says so in extra_prompt; absent that, a round that did not publish has not finished.
What the change must satisfy
- The template renders five steps in that order, publishing before archiving.
- The readings block names the
publishfield and all three of its states. - Both sides are stated and both are asserted: the already-signed-in session is usable, and credentials, cookies, tokens and account settings are untouchable. A guard that pins only one side must fail.
- The once-per-round rule and the word-for-word rule are stated in the template and pinned by a test.
- Neither removed prohibition survives as a synonym, and
extra_promptis the only place a draft-only channel is declared. - The suite reddens when the publish step is deleted, when the
publishfield is deleted, and when the once-per-round rule is deleted — one mutation per rule. - CI is green on every platform leg.
Where the change lands
emrg/server/self_media_prompt.md (the round's steps, §0's scope, the new publish step, the readings block, the closing summary and the forbidden list), and the test that currently pins the two abolished phrases verbatim — tests/test_scheduler.py::test_self_media_template_carries_its_four_steps — which becomes the pins for the five-step contract.
Activity
argszero commentedon Nov 5, 2026
Handled by #2727