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.
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
.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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.mdat 09c434a, verbatim (MIT;PONYTAIL-LICENSEbeside it)time.ponytail(): the rules, unlessTIME_PONYTAIL=off; a missing file is no rules, never a failed buildvenice_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 throughvenice_work)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)off, absent from a reviewer's system prompt; suite green locallyThe 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
Approve
.github/time/time.py:1111-1123:ponytail()reads the vendored file and returns it with a leading blank line, or returns""whenTIME_PONYTAIL=offor the file is missing. TheOSErrorcatch matches the card's "a checkout without the file still builds.".github/time/time.py:1137-1141: the rules are appended afterWORKER_RULES.format(...)and beforeREVISE_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 withTIME_PONYTAIL=off, and that the off-run still opens a PR. Theos.environ.popon line 391 is harmless but may be a no-op ifrun()passes env as a dict; it is not a correctness issue..github/time/rules/ponytail.mdandPONYTAIL-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.venice_work'ssystemstring. If the Claude CLI path builds its prompt elsewhere, that claim does not hold. Please confirm before merge, or narrow the PR text.ci / testsuccess, 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