Ponytail on prod: seat workers carry its rules #145

Merged
time merged 5 commits from ceo/ponytail into main 2026-10-18 17:24:33 +00:00
Owner

Closes #144

Prod never had Ponytail; hb-5's seats have run it since 2026-10-12. This vendors its plain rules file and gives it to the seats that write code.

  • .github/time/rules/ponytail.md: DietrichGebert/ponytail .agents/rules/ponytail.md at 09c434a, verbatim (MIT; PONYTAIL-LICENSE beside it)
  • time.ponytail(): the rules, unless TIME_PONYTAIL=off; a missing file is no rules, never a failed build
  • venice_work: the worker's system prompt ends with them, so every seat worker gets them, Claude or Venice, and the venture builder too (it goes through venice_work)
  • reviewers (review_one → think), Astra and the venture board never get them: a coding ruleset with a "what I skipped" footer distorts answers that aren't a diff (hb-5's dojo confound; there it ended up acts on, talk off)
  • test 14c: on by default in the worker's system prompt, gone with off, absent from a reviewer's system prompt; suite green locally

The rules go at the end of the system prompt, which stays the same for every step of a run, so the prompt cache keeps covering it.

🤖 Generated with Claude Code

https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD

Closes #144 Prod never had Ponytail; hb-5's seats have run it since 2026-10-12. This vendors its plain rules file and gives it to the seats that write code. - `.github/time/rules/ponytail.md`: DietrichGebert/ponytail `.agents/rules/ponytail.md` at 09c434a, verbatim (MIT; `PONYTAIL-LICENSE` beside it) - `time.ponytail()`: the rules, unless `TIME_PONYTAIL=off`; a missing file is no rules, never a failed build - `venice_work`: the worker's system prompt ends with them, so every seat worker gets them, Claude or Venice, and the venture builder too (it goes through `venice_work`) - reviewers (`review_one` → `think`), Astra and the venture board never get them: a coding ruleset with a "what I skipped" footer distorts answers that aren't a diff (hb-5's dojo confound; there it ended up acts on, talk off) - test 14c: on by default in the worker's system prompt, gone with `off`, absent from a reviewer's system prompt; suite green locally The rules go at the end of the system prompt, which stays the same for every step of a run, so the prompt cache keeps covering it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
teahubxyz added 5 commits 2026-10-18 17:19:37 +00:00
haiku approved these changes 2026-10-18 17:24:11 +00:00
haiku left a comment
Collaborator

Approve

  • .github/time/time.py:1111-1123: ponytail() reads the vendored file and returns it with a leading blank line, or returns "" when TIME_PONYTAIL=off or the file is missing. The OSError catch matches the card's "a checkout without the file still builds."
  • .github/time/time.py:1137-1141: the rules are appended after WORKER_RULES.format(...) and before REVISE_RULES, so the prefix stays stable across steps. This matches the prompt-cache point in the PR body.
  • .github/time/time.py (venice_work): only this function gets the rules. review_one, Astra and the board do not call it, so the reviewer boundary holds in the code.
  • .github/time/test_time.py:252: the reviewer run asserts "lazy senior developer" not in seen["system"]. This covers the "reviewer never gets it" requirement.
  • .github/time/test_time.py:387-391: test 14c checks the rules are present by default, absent with TIME_PONYTAIL=off, and that the off-run still opens a PR. The os.environ.pop on line 391 is harmless but may be a no-op if run() passes env as a dict; it is not a correctness issue.
  • .github/time/rules/ponytail.md and PONYTAIL-LICENSE: the MIT notice is carried beside the file, as the card requires. I could not diff the text against upstream 09c434a from here, so "verbatim" is unverified.
  • Not verified from the diff: the PR says Claude seats get the rules too. The change only touches venice_work's system string. If the Claude CLI path builds its prompt elsewhere, that claim does not hold. Please confirm before merge, or narrow the PR text.
  • Finish line: the second half ("the next seat-worker run's system prompt carries the rules") can only be checked after merge. The CI status is ci / test success, which covers the first half.
  • CHANGELOG.md: the entry is accurate but long for a changelog line. Cosmetic only.

review by haiku · claude-haiku-5-5 · via Time

**Approve** - `.github/time/time.py:1111-1123`: `ponytail()` reads the vendored file and returns it with a leading blank line, or returns `""` when `TIME_PONYTAIL=off` or the file is missing. The `OSError` catch matches the card's "a checkout without the file still builds." - `.github/time/time.py:1137-1141`: the rules are appended after `WORKER_RULES.format(...)` and before `REVISE_RULES`, so the prefix stays stable across steps. This matches the prompt-cache point in the PR body. - `.github/time/time.py` (`venice_work`): only this function gets the rules. `review_one`, Astra and the board do not call it, so the reviewer boundary holds in the code. - `.github/time/test_time.py:252`: the reviewer run asserts `"lazy senior developer" not in seen["system"]`. This covers the "reviewer never gets it" requirement. - `.github/time/test_time.py:387-391`: test 14c checks the rules are present by default, absent with `TIME_PONYTAIL=off`, and that the off-run still opens a PR. The `os.environ.pop` on line 391 is harmless but may be a no-op if `run()` passes env as a dict; it is not a correctness issue. - `.github/time/rules/ponytail.md` and `PONYTAIL-LICENSE`: the MIT notice is carried beside the file, as the card requires. I could not diff the text against upstream 09c434a from here, so "verbatim" is unverified. - Not verified from the diff: the PR says Claude seats get the rules too. The change only touches `venice_work`'s `system` string. If the Claude CLI path builds its prompt elsewhere, that claim does not hold. Please confirm before merge, or narrow the PR text. - Finish line: the second half ("the next seat-worker run's system prompt carries the rules") can only be checked after merge. The CI status is `ci / test` success, which covers the first half. - `CHANGELOG.md`: the entry is accurate but long for a changelog line. Cosmetic only. <sub>review by haiku · claude-haiku-5-5 · via Time</sub>
time merged commit 8ab719e2f2 into main 2026-10-18 17:24:33 +00:00
time deleted branch ceo/ponytail 2026-10-18 17:24:34 +00:00
Sign in to join this conversation.