gstack's /ship stops blocking Django, Flutter and asset-only branches

1 hour ago

gstack 1.91.160.0 to 1.91.161.0 for Claude Code: /ship's pre-gate stops blocking Django, Dart and Flutter repos and branches that only touch assets or tool config. Django apps select their own tests, Dart packages run flutter test or dart test, Flutter PRs get the design, performance and security reviewers, and gstack-pregate init drafts a policy from your repo. Release notes: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911610---2026-10-19 Release notes: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911600---2026-10-19 Commits: https://github.com/garrytan/gstack/commits/main

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00Unblocked
  2. 0:14Django
  3. 0:26Assets
  4. 0:40Dart lanes
  5. 0:55Reviews
  6. 1:10Init
  7. 1:23Also
  8. 1:38Your turn
Show transcript

Unblocked

gstack logo

gstack’s /ship stops blocking Django, Flutter and asset-only branches

$ /ship
gstack-pregate: PREGATE_NO_LANE
nowa test lane, or no tests needed
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

In a repository that never opted in, a Django migration, a font, or a Dart test file used to stop /ship cold at the pre-gate. Now those branches get the right tests, or none, and ship.

Django

Django apps select their own tests

Migrations, admin.py, templates run that app’s tests
The settings module counts for every Python test
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

In a Django project, an app's migrations, admin file and templates now pick that app's tests, plus the tests that reach its models. And every Python test depends on the settings module.

Assets

Fonts, images and tool config need no tests

.pre-commit-config.yaml
no-tests (assets and tool config)
Still need a lane:stylesheets, CI workflows, .env files, version pins
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

Images, fonts, PDFs, editor settings and lint config now pass with no tests, as long as no test names the file. Stylesheets, CI workflows, environment files and version pins still need a lane.

Dart lanes

The pre-gate runs Dart and Flutter tests

flutter test or dart test, from each package’s own root, through fvm when pinned
A missing Dart SDK reads as incomplete, never a pass
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

Dart and Flutter repositories get real lanes. Each package runs its own tests with flutter test or dart test, through fvm when the package pins it. If the Dart SDK is missing, the result is incomplete, never a pass.

Reviews

Flutter PRs get the design, performance and security reviewers

beforetesting pass only
now.dart counts as frontend and backend
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.160.0

A Flutter widget change used to get only the testing pass in review. Now a Dart file counts as both frontend and backend, so the design, performance and security specialists all run, and /ship offers flutter test.

Init

gstack-pregate init drafts a policy from your repo

Languages it found and the runner each one’s tests get
Unplaced files map to the nearest directory’s tests, the rest marked TODO
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

Setting up the pre-gate starts from your repository now. Init prints the languages it found and the test runner for each. Files it cannot place map to the nearest directory's tests, and the rest are marked to do.

Also

Three smaller fixes

--base <sha> suggests a branch instead of an impossible fetch1.91.161.0
Adversarial review counts diff size the way review-army does1.91.160.0
A cd inside a pipeline leaves a CI lane’s test set unknown1.91.161.0
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.160.0 and 1.91.161.0

Passing a commit as the base now gets a branch suggestion. Adversarial review measures diff size the same way review army does. And a tricky directory change in CI no longer sends tests to the wrong folder.

Your turn

The full notes are in gstack’s changelog

CHANGELOG.mdgstack 1.91.160.0 and 1.91.161.0, October 19
Which framework is your repo on when you run /ship?
UnblockedDjangoAssetsDart lanesReviewsInitAlsoYour turn
garrytan/gstack · CHANGELOG.md · 1.91.161.0

The details are in gstack's changelog. Which framework is your repository on when you run /ship?