Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ sudo install -m 755 target/release/thirdshift /usr/local/bin/thirdshift

Editing a skill in `skills/` has no effect until you rebuild and reinstall ([ADR-0001](docs/adr/0001-rust-binary-with-embedded-skills.md)).

The [Prompts and skills page](https://thirdshift.app/prompts/) is generated from the prompts, the `claude` arguments and the skills, and `cargo test` fails until it is regenerated after a change to any of them. Regenerate it with `UPDATE_PROMPTS_PAGE=1 cargo test prompts_page`.

Running the test suite (`cargo test`) also needs **`python3`** on `PATH`: the integration tests swap in fake `gh` and `claude`, which are Python scripts in `tests/fakes/`.

## Releasing
Expand Down
Binary file added docs/screenshots/issue-68/prompts-ci-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/issue-68/prompts-tdd-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/issue-68/prompts-top-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/issue-68/prompts-top-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ <h3 id="unit-1"><span class="tag" aria-hidden="true"></span>1 · C · Prepare</h
<article class="unit-col ink-m" aria-labelledby="unit-2">
<h3 id="unit-2"><span class="tag" aria-hidden="true"></span>2 · M · Implement</h3>
<p>A headless Claude Code session, with the Factory skills loaded, implements the issue in the worktree, test-first where it can, and commits.</p>
<ul class="factory-skills" aria-label="Factory skills"><li>implement</li><li>tdd</li></ul>
<ul class="factory-skills" aria-label="Factory skills"><li><a href="/prompts/#skill-implement">implement</a></li><li><a href="/prompts/#skill-tdd">tdd</a></li></ul>
<ol class="stderr-lines" aria-label="stderr lines from unit 2">
<li><span class="prefix">thirdshift:</span> logging the session to /home/jacob/.thirdshift/logs/JacobStephens2-thirdshift-issue-24-20260925T134143Z-implement.jsonl</li>
<li><span class="prefix">thirdshift:</span> implement: session started</li>
Expand All @@ -187,7 +187,7 @@ <h3 id="unit-2"><span class="tag" aria-hidden="true"></span>2 · M · Implement<
<article class="unit-col ink-y" aria-labelledby="unit-3">
<h3 id="unit-3"><span class="tag" aria-hidden="true"></span>3 · Y · Review</h3>
<p>The same session reviews its work against the Base branch, fixes the Standards findings and Spec findings it agrees with, and lists the rest as Unaddressed findings in the pull request body. Then it opens the pull request, ready for review.</p>
<ul class="factory-skills" aria-label="Factory skills"><li>code-review</li><li>pr</li></ul>
<ul class="factory-skills" aria-label="Factory skills"><li><a href="/prompts/#skill-code-review">code-review</a></li><li><a href="/prompts/#skill-pr">pr</a></li></ul>
<ol class="stderr-lines" aria-label="stderr lines from unit 3">
<li><span class="prefix">thirdshift:</span> implement: skill thirdshift:code-review</li>
<li><span class="prefix">thirdshift:</span> implement: $ git rev-parse main &amp;&amp; git log main..HEAD --oneline &amp;&amp; git diff main...HEAD --stat; ls .agents/skills…</li>
Expand All @@ -212,7 +212,7 @@ <h3 id="unit-3"><span class="tag" aria-hidden="true"></span>3 · Y · Review</h3
<article class="unit-col ink-k" aria-labelledby="unit-4">
<h3 id="unit-4"><span class="tag" aria-hidden="true"></span>4 · K · Finish</h3>
<p>thirdshift pushes, checks the pull request, merges the Base branch in and watches CI. A merge conflict or failing CI starts a Repair, at most 3. A Resume can happen in any session and isn't a Repair. The Run ends once the pull request is open, ready, mergeable and passing CI. This Run needed no Repair.</p>
<ul class="factory-skills" aria-label="Factory skills"><li>resolving-merge-conflicts <span>in a Repair</span></li></ul>
<ul class="factory-skills" aria-label="Factory skills"><li><a href="/prompts/#skill-resolving-merge-conflicts">resolving-merge-conflicts</a> <span>in a Repair</span></li></ul>
<ol class="stderr-lines" aria-label="stderr lines from unit 4">
<li><span class="prefix">thirdshift:</span> pushing issue-24</li>
<li><span class="prefix">thirdshift:</span> checking the PR</li>
Expand Down
18 changes: 18 additions & 0 deletions site/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,21 @@ for (const button of document.querySelectorAll(".install button.copy")) {
setTimeout(() => { button.textContent = "Copy"; }, 1600);
});
}

// The Prompts and skills page's commit label: the commit of main the deploy
// published, from the commit.txt it writes. Without one (e.g. served locally),
// the label keeps its generic text.
const commitLabel = document.querySelector("[data-commit]");
if (commitLabel) {
fetch("/commit.txt")
.then((response) => (response.ok ? response.text() : ""))
.then((text) => {
const commit = text.trim();
if (!/^[0-9a-f]{40}$/.test(commit)) return;
const code = (text) => Object.assign(document.createElement("code"), { textContent: text });
const link = Object.assign(document.createElement("a"), { href: `https://github.com/JacobStephens2/thirdshift/commit/${commit}` });
link.append(code(commit.slice(0, 7)));
commitLabel.replaceChildren("commit ", link, " of ", code("main"));
})
.catch(() => {});
}
Loading