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
12 changes: 12 additions & 0 deletions .ai/workflows/bug-fix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ states:
session: fresh
transitions:
complete: merge
blocked: merge-review

merge:
type: agent
Expand All @@ -124,6 +125,17 @@ states:
session: fresh
transitions:
complete: done
blocked: merge-review

# Parks the issue when improvement or merge reports the PR cannot merge yet.
# Approve once the PR is mergeable to run merge; rework reruns improvement.
merge-review:
type: gate
linear_state: review
rework_to: improvement
max_rework: 5
transitions:
approve: merge

done:
type: terminal
Expand Down
14 changes: 13 additions & 1 deletion .ai/workflows/feature.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ states:
transitions:
approve: improvement

# Mechanical: acts only on explicitly approved Glean candidate IDs.
# Mechanical: creates the approved Glean follow-ups, then checks the PR.
improvement:
type: agent
prompt: .ai/prompts/improvement.md
Expand All @@ -109,6 +109,7 @@ states:
session: fresh
transitions:
complete: merge
blocked: merge-review

# Mechanical: independently re-check approvals and CI, then merges.
merge:
Expand All @@ -122,6 +123,17 @@ states:
session: fresh
transitions:
complete: done
blocked: merge-review

# Parks the issue when improvement or merge reports the PR cannot merge yet.
# Approve once the PR is mergeable to run merge; rework reruns improvement.
merge-review:
type: gate
linear_state: review
rework_to: improvement
max_rework: 5
transitions:
approve: merge

done:
type: terminal
Expand Down
13 changes: 9 additions & 4 deletions apps/stokowski/test/stokowski/compatibility_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,19 @@ defmodule Stokowski.CompatibilityTest do
commit_rows = inventory["commits"]
expected_commits = Enum.map(commit_rows, & &1["sha"])

assert {checkout, 0} = System.cmd("git", ["-C", vendor, "rev-parse", "HEAD"])
assert String.trim(checkout) == pin
assert {_output, 0} =
System.cmd("git", ["-C", vendor, "cat-file", "-e", "#{pin}^{commit}"],
stderr_to_stdout: true
)

assert List.last(expected_commits) == pin
assert length(expected_commits) == MapSet.size(MapSet.new(expected_commits))

# actions/checkout intentionally leaves a submodule with only its pinned object.
# This is a point-in-time audit: `pin` documents history up to a past commit,
# not the vendor's current HEAD, so the submodule can advance without touching
# this fixture. We only require that `pin` still exists in the vendored history.
# Compare the exact ancestry whenever the baseline object is available locally;
# the fixture's structural and checkout-pin assertions still run in shallow CI.
# the fixture's structural assertions still run in shallow CI.
case System.cmd("git", ["-C", vendor, "cat-file", "-e", "#{baseline}^{commit}"],
stderr_to_stdout: true
) do
Expand Down
2 changes: 1 addition & 1 deletion vendor/linear-cli
Submodule linear-cli updated 60 files
+7 −0 .ai/prompts/diagnose.md
+7 −0 .ai/prompts/explore.md
+123 −0 .ai/prompts/glean.md
+153 −25 .ai/prompts/global.md
+101 −0 .ai/prompts/ground_check.md
+27 −24 .ai/prompts/implement.md
+99 −0 .ai/prompts/improvement.md
+26 −8 .ai/prompts/investigate.md
+23 −15 .ai/prompts/merge.md
+7 −0 .ai/prompts/reproduce.md
+50 −8 .ai/prompts/review.md
+49 −85 .ai/skills/linear/SKILL.md
+142 −0 .ai/workflows/bug-fix.yaml
+74 −0 .ai/workflows/exploration.yaml
+140 −0 .ai/workflows/feature.yaml
+74 −0 .ai/workflows/spike.yaml
+1 −1 .github/workflows/ci.yaml
+34 −4 .github/workflows/main.yaml
+3 −0 .gitignore
+1 −1 .release-please-manifest.json
+1 −1 .version.txt
+5 −2 AGENTS.md
+8 −0 CHANGELOG.md
+42 −4 Readme.adoc
+64 −2 app/lib/linear_cli/cli.ex
+197 −0 app/lib/linear_cli/cli/commands/issues/filter.ex
+2 −2 app/lib/linear_cli/cli/commands/issues/move.ex
+188 −2 app/lib/linear_cli/cli/commands/issues/mutations.ex
+6 −47 app/lib/linear_cli/cli/commands/issues/read.ex
+20 −10 app/lib/linear_cli/cli/prompt.ex
+2 −0 app/lib/linear_cli/linear.ex
+73 −2 app/lib/linear_cli/linear/issue.ex
+32 −3 app/lib/linear_cli/linear/paginate.ex
+3 −1 app/lib/linear_cli/linear/user.ex
+1 −1 app/mix.exs
+2 −2 app/mix.lock
+114 −0 app/test/linear_cli/cli/commands/issues/move_test.exs
+805 −0 app/test/linear_cli/cli/commands/issues/mutations_test.exs
+122 −0 app/test/linear_cli/cli/profile_defaults_test.exs
+41 −0 app/test/linear_cli/cli/prompt_test.exs
+58 −0 app/test/linear_cli/linear/issue_test.exs
+79 −0 app/test/linear_cli/linear/paginate_test.exs
+11 −0 app/test/support/issue_commands_helpers.ex
+58 −0 ci/recover_release.sh
+51 −8 documents/ash-domain-erd.adoc
+38 −0 documents/phase-12-confirmation-decision.adoc
+1 −0 lib/mix/tasks/ci.ex
+80 −0 lib/mix/tasks/toolchain.update.ex
+5 −2 mise.toml
+7 −5 mix.exs
+13 −0 mix.lock
+55 −0 test/mix/tasks/toolchain.update_test.exs
+103 −0 test/recover_release_test.exs
+1 −1 vendor/stokowski
+20 −5 workflow.claude.yaml
+20 −5 workflow.codex.yaml
+97 −0 workflow.glean.yaml
+20 −9 workflow.opus.yaml
+1 −1 workflow.yaml
+1 −0 workflows
37 changes: 34 additions & 3 deletions workflow.glean.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ linear_states:
terminal: [Done, Closed, Cancelled, Canceled, Duplicate]

polling:
interval_ms: 15000
interval_ms: 30000

workspace:
root: ~/.local/share/stokowski/workspaces/fantasia
Expand All @@ -24,10 +24,41 @@ hooks:
git clone --depth 1 --recursive git@github.com:rubyists/fantasia .
mise trust
mise install
mise exec -- mix deps.get
mise exec -- mix setup
before_run: |
git fetch origin main
git rebase origin/main 2>/dev/null || git rebase --abort
# Best-effort refresh onto origin/main. A failed hook fails the whole agent
# run, so only a rebase that cannot be cleaned up is fatal.
if ! git fetch origin main; then
echo "before_run: git fetch origin main failed; skipping rebase" >&2
exit 0
fi
if ! changes="$(git status --porcelain)"; then
echo "before_run: git status failed; skipping rebase" >&2
exit 0
fi
if [ -n "$changes" ]; then
echo "before_run: preserving uncommitted workspace changes; skipping rebase"
exit 0
fi
# A branch that tracks a remote branch (main, or a pushed PR branch) is
# shared history: fast-forward it to its own upstream and never rewrite
# it. Rebasing a PR branch onto main drops its merge commits and leaves
# the workspace diverged from the PR. Only an unpushed branch rebases.
if git rev-parse --abbrev-ref --symbolic-full-name '@{upstream}' >/dev/null 2>&1; then
if ! git pull --ff-only; then
echo "before_run: cannot fast-forward to the upstream branch; leaving it as is" >&2
fi
exit 0
fi
if ! git rebase origin/main; then
echo "before_run: rebase onto origin/main failed; aborting it" >&2
if ! git rebase --abort; then
echo "before_run: git rebase --abort failed; the workspace needs manual repair" >&2
exit 1
fi
fi
exit 0
timeout_ms: 240000

claude:
Expand Down
Loading