I put a system in place of manual work.
The method is order, not inspiration. What I do → why → what proves it. The third field is mandatory. Without it, the first two are just a retelling.
Delivery gates
“Done” lives only at step four of four.
- 1. Change prepared
- 2. Available checks passed
- 3. Types and build on the Mac
- 4. Production checked
How a task is set
- The failure criterion is written before the work. Not after. Why: on 26.08 plausible work was handed in three times — brute force instead of an index, noise instead of an answer.
- A check must be able to turn red. Why: the key check showed green for years because of an unpaired quote.
- A green log is not a good output. Why: a lens pass finished “successfully”, and 1307 cards came out without a title.
source — PRAVILA.md
Three centers · the review card is not one of them
- Center 1 · Machine without a human. Proof that the system works while I’m away from the desk. /mashina →
- Center 2 · Grid of life and time. The site is about the operator, not about the system. /zhizn →
- Center 3 · Owner’s console. A workplace; the showcase is secondary. The home page leads there. /pult →
Why. At first I put the card in the middle, and the site was built around it. That was my mistake. Cards are a finished layer: the pipeline makes them on its own, at night.
What proves it. I made the decision on 11.09 while going over the mockups: pages /pult /mashina /zhizn /baza /kartochka and a new /izolyator screen; the home page redirects to /pult. The build in app/ is ticket 36.
Registers
A chat is not storage: the outcome is appended to a file as a line right away, not at the end of the session.
- Decisions. What is closed and what not to do again. A negative result settles nowhere else, and a month later someone — usually an agent — proposes what was already rejected.
content/resheniya.md - Requests. My request stays open until it is closed by a fact: a commit, a link, a working thing. On 10.09 I moved 81 open requests to the archive in one move — not deleted.
content/prosby.md - Mines. A failure as a line: what broke → how it showed → the rule → what catches it. Stepped on once — from then on the machine catches it, not memory.
content/miny.md - Growth. About me, not about the system. A line is written only with proof: a commit, a file, a tool run, a number. “Understood” and “realized” don’t go here.
content/rost.md
Return codes
Every script of ours answers with one of three.
- 0 · DONE. There is a result, the postcondition holds.
- 1 · NOT DONE. Broken: network, 429, spending ceiling, exception, wrong invocation.
- 2 · EMPTY. The tool ran, and there is no result for a normal reason: nothing to find, the list is empty, “don’t know”.
Why. Without a contract, “found nothing” and “broke” look the same. argparse exits with code 2 on a wrong invocation — and a typo in a flag read as a normal empty run. So a wrong invocation is 1 for me, not 2.
Boundary. Code 2 means “empty” only for a single line python3 scripts/<name>.py without a pipeline. For grep, diff, ls code 2 is an error.
Code 0 is not proof either. git commit returned 1, git push returned 0, and both “passed”. So a request states what must be on disk after the command: “# expect: <path> exists”. The executor answers PROVEN or NOT PROVEN.
scripts/kody.py · constants SDELANO = 0, NE_VYPOLNENO = 1, PUSTO = 2 · scripts/ispolnitel.sh · function postuslovie
The executor queue
- Queue.
shina/ochered/<name>.cmd— one command per line, # marks a comment. - Executor.
scripts/ispolnitel.shon the Mac works through the file. - Result.
shina/logi/ochered/<name>.out - Processed or refused.
shina/ochered-sdelano/·shina/ochered-otkaz/
Why. An agent in the cloud doesn’t touch the Mac by hand. Git goes only through the queue.
Rules, in the order of processing
- Whitelist. A command outside the list is not executed and not skipped silently: the .out gets a refusal line with the exact reason. Forbidden:
&&,;,$(...), backticks,>,<,sudo,&. - Stop on error. A line with a code other than 0 stops the file. The remaining lines don’t run, and the file moves to
shina/ochered-otkaz. Until 11.09 a file kept going after any code. - Ceilings. 10 files per run, 300 seconds per command. A file header can raise the ceiling, but no higher than 1800 seconds. Code 137 means cut off by the ceiling.
- Locks. A run writes its pid to
shina/logi/ochered/ispolnitel.zamok. A second instance, while the first one is alive, writes BUSY and exits. A dead lock is removed automatically — otherwise the queue would stall forever and stay silent. - Kill switch. While the file
shina/ochered/STOPexists, the queue is not processed. - Receipt. A refusal is not silent:
scripts/kvitanciya.pywrites a line toshina/logi/kvitancii.jsonland reports to Telegram. Before 07.09, 27 refusals were lost this way — the author of the request learned nothing. - Honest line. The file has landed — that means “accepted, waiting for the Mac”. Not “started”.
- Stop at the entrance. More than 3 unfinished items in the queue — no new job is added. Decision of 11.09. In the bot the /use command counts this. The button on the site so far holds only the ceiling of 10 jobs per hour; the general >3 stop is not on it yet.
The task text never gets into a command — only into comment lines. The executor runs lines through eval, and a single quote in the text would change what gets executed.
Isolator · what the system turned away
Why. A refusal nobody sees gets repeated.
- Requests in refusal.
shina/ochered-otkaz - The agent’s memory of refusals. Before a task it is read by
python3 scripts/shina.py nachni. An entry becomes memory only when the warning fired before the repeat.
reasons — /izolyator →
What didn’t make it from the previous text
The previous method had a different name: nine abilities, a nine-week deck, a repair act. Its numbers were taken on the date of that page and were never reconciled with the registers. I don’t repeat them here.
Author — briefly
My name is Alexander.