mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-05 16:34:00 +01:00
* feat(bin): gstack-decision-trail and gstack-worktree-audit, ported from pstack (GSTA-123)
Two MIT ports from Lauren Tan's pstack (licenses/MIT-pstack.txt, NOTICE.md):
a TSV decision trail with the header-once append, the formula guard, a start
row per run and a --run admission check; and a read-only worktree audit with
size, merge state, dirty, remote, PR, last chat and a suggested bucket.
Docs: docs/unattended.md (the decision trail and its end-of-run audit),
autoplan/DRIVER.md, docs/CONTRIBUTOR_REFERENCE.md, docs/standalone-binaries.md,
docs/troubleshooting.md, one line in landing-report.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* test(egress): reasoned scanner exemption for gstack-worktree-audit's base fetch
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pre-landing review of the pstack ports
bin/gstack-worktree-audit: a worktree path with a space is read whole (sed
on the porcelain 'worktree ' line, not awk's second field); a registered
worktree whose directory is gone prints a 'prunable' row instead of being
skipped; 'safe' now requires a clean tree and either merged into the base
or a closed/merged PR with every commit pushed, so unpushed commits or
untracked files on a merged branch read 'review' (the port's rule called
them safe); fork PRs are dropped and an open PR wins over an older closed
one on a reused branch name; GIT_TERMINAL_PROMPT=0 on the base fetch.
bin/gstack-decision-trail: only a leading -h/--help is help, so a '-h'
cell is appended as data; a trail without a final newline, with CRLF rows
or with a repeated header line is appended to correctly; a run id is
limited to [A-Za-z0-9._:@/-] (exit 2) so a tab or quote cannot break the
start-row idempotence check.
Tests cover each case; the 'without gh' test resolves git from
'git --exec-path' instead of a PATH rebuilt from a tool list. Docs,
CHANGELOG and --help text describe the stricter buckets.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pre-landing review fixes, pass 2
bin/gstack-worktree-audit: a worktree whose own .git link is gone (git
marks it prunable, or its toplevel is another repository) prints a 'broken'
row in 'review' instead of describing the containing repository as clean
and safe; a locked entry whose directory is gone reads 'review', not
'prunable', since prune would not touch it; a clean tree names its
gitignored entries as 'clean,ignored:<n>' without changing the bucket; the
branch name is read from refs/heads/ by hand so a tag of the same name
cannot hide the PR; porcelain blocks are read with IFS=tab so paths with
leading or trailing spaces survive; a failed git status reads 'unknown',
never 'clean'; the base fetch also sets GIT_ASKPASS=true and ssh BatchMode.
bin/gstack-decision-trail: a file whose first line is not the header (a
blank file, rows written by hand) gets the header appended, and a UTF-8
BOM before the header no longer turns it into a data row.
Tests: the fake gh records its argv and runs the audit's own --jq over
canned JSON with a fork PR when jq is installed; row counts are asserted
before the every() checks; each test starts from the same gh and closed
worktree; the snapshot includes the worktree registry; new fixtures for
locked, broken, tag-shadowed and ignored-only worktrees, a blank trail and
a BOM. Docs and CHANGELOG describe the new DIRTY values and buckets.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pre-landing review fixes, pass 3
bin/gstack-decision-trail: hasHeader looks for a header line anywhere in
the file, so a blank or hand-written trail gets exactly one header rather
than one per append. bin/gstack-worktree-audit: the broken-worktree check
uses rev-parse --show-cdup and the presence of /.git instead of
comparing two spellings of the same path, which differ on Git for Windows.
Test: the blank-trail case appends twice and asserts a single header.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: adversarial review, pass 5 (rule-23 grant, one finding)
bin/gstack-worktree-audit: git status runs with --untracked-files=normal
--ignore-submodules=none, so a user's status.showUntrackedFiles=no config
cannot hide untracked files and let a worktree holding them read clean and
safe. Test: the fresh worktree under that config via GIT_CONFIG_* still
reads scratch:1 / review (red before the fix).
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs: documentation audit corrections for the pstack ports
docs/standalone-binaries.md, docs/CONTRIBUTOR_REFERENCE.md,
docs/troubleshooting.md: the audit's safe condition is stated in full
(clean and merged, or PR closed/merged with every commit pushed), the
DIRTY list names missing, broken and unknown, start is a reserved phase
name, and 'read-only' names the base fetch as the one write --no-fetch
skips. CHANGELOG.md says the same (the audit's one decision item).
Audit id gsta123-docs-20261026T221657Z, status updated, no blockers.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Stamp 1.91.268.0 for #3494 (train slot 1, base d9b0d600)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
144 lines
8.8 KiB
Markdown
144 lines
8.8 KiB
Markdown
# Third-Party Notices
|
|
|
|
gstack is MIT. The files below contain material derived from Apache-2.0 and MIT
|
|
works, rewritten in gstack's voice and modified. Rewriting is not an exemption:
|
|
the license texts are in `licenses/`, and each file derived from an Apache-2.0
|
|
work carries a notice that it was changed. Unmodified copies (the rule-registry fixture, the
|
|
license text) carry no header and are listed here instead.
|
|
|
|
## impeccable — Copyright Paul Bakaus — Apache License 2.0
|
|
|
|
https://github.com/pbakaus/impeccable
|
|
|
|
Derived, modified:
|
|
|
|
- `lib/design-catalog.ts`: rule ids and names from `crates/live/assets/antipatterns.json`; the prose is gstack's.
|
|
- `scripts/resolvers/design.ts`: the Persuade / Operate / Read / Experience visitor modes, the craft-floor reflexes (browser surfaces, one authored motion moment, depth has an offset, tinted secondary text, space above headings, light-or-dark from the use scene), and the three-looks calibration, from `SKILL.md`, `reference/craft-floor.md`, and `reference/new-work.md`, rewritten.
|
|
- `design-consultation/sections/proposal-and-preview.md.tmpl`: the font-selection procedure and the calibration paragraph, rewritten; and the `SKILL.md` / `sections/*.md` files generated from these sources.
|
|
|
|
Unmodified copy:
|
|
|
|
- `test/fixtures/impeccable-antipatterns.json`: `crates/live/assets/antipatterns.json` at commit 87d8f6d6 (engine-v0.1.3), wrapped in a `_source` provenance object.
|
|
|
|
Not distributed: `bin/gstack-design-detect.ts` invokes an impeccable engine the
|
|
user installed. gstack does not ship or mirror that engine and never runs impeccable's
|
|
installer or launcher. The one download gstack can make is the engine binary
|
|
itself, only after the user accepts a design skill's one-time offer: fetched from
|
|
impeccable's own GitHub release into `~/.impeccable/bin/<version>/`, verified
|
|
against the checksum pinned in `lib/design-detect-contract.ts`, and recorded in
|
|
the egress ledger first. gstack does not audit the engine's network behavior; the
|
|
wrapper refuses URL targets so gstack never asks it to touch the network.
|
|
|
|
## ai-design-skills and redesign-skill — Copyright (c) 2026 Elaya — MIT License
|
|
|
|
https://github.com/elayadesign/ai-design-skills (`skills/landing-page-design`,
|
|
`skills/design-to-motion`, at 38bbe576) and
|
|
https://github.com/elayadesign/redesign-skill (`skills/redesign-existing-projects`,
|
|
at 64627f6e). License text: `licenses/MIT-elaya.txt`.
|
|
|
|
Derived, modified (rules rewritten in gstack's voice and reconciled with its
|
|
design rules; Elaya's fixed fonts, colors, spacing values, icon sets and
|
|
signature components are not carried over):
|
|
|
|
- `design-html/sections/craft.md.tmpl`: the Persuade intake, page archetypes,
|
|
page structure, conversion and copy rules, indexing and build order from
|
|
landing-page-design Part A; the content-realism, ship-floor, scale-snapping,
|
|
line-break and motion rules from landing-page-design Part B, the website
|
|
context of design-to-motion and the redesign-skill audit; and the generated
|
|
`design-html/SKILL.md` / `sections/craft.md`.
|
|
- `lib/design-craft.ts` and `bin/gstack-design-craft`: the content-realism and
|
|
ship-floor tells, turned into a free check.
|
|
- `design-shotgun/SKILL.md.tmpl`: page archetypes as a variant axis.
|
|
- `design-review/sections/craft-audit.md.tmpl` (and the generated
|
|
`sections/craft-audit.md`): the redesign-skill audit of an existing site,
|
|
its fix-priority order and Tailwind version check; `scripts/resolvers/design-craft.ts`:
|
|
the Persuade conversion checks, also rendered into
|
|
`plan-design-review/sections/review-sections.md`; and the craft-tell entries
|
|
in `lib/design-catalog.ts`.
|
|
- `design-motion/SKILL.md.tmpl` and `design-motion/sections/fidelity.md.tmpl`,
|
|
`motion.md.tmpl` and `figma.md.tmpl` (and the generated `design-motion/SKILL.md`
|
|
and `sections/*.md`): design-to-motion's fidelity rules, Figma layer-export
|
|
table (now an optional source path), loading choreography, story loops,
|
|
loop cycle, easing, checks and export formats, reconciled with gstack's one
|
|
authored motion moment, content visible without script, and the slop
|
|
catalog's motion tells.
|
|
- `lib/motion-capture.ts` and `bin/gstack-motion-capture.ts`: design-to-motion's
|
|
deterministic capture (fake clock, whole-millisecond steps averaging 1000/60,
|
|
the `__start`/`__tick`/`__lt` page contract, PRE frames).
|
|
- `lib/motion-encode.ts` and `bin/gstack-motion-encode`: design-to-motion's
|
|
ffmpeg recipes for the MP4, loop GIF and 800x500 GIF, and its seam,
|
|
empty-beat, rest and overflow checks as ffmpeg PSNR comparisons.
|
|
|
|
## hallmark — Copyright (c) 2026 Hallmark contributors — MIT License
|
|
|
|
https://github.com/Nutlope/hallmark (`skills/hallmark/scripts/sloplint.mjs`,
|
|
`sloplint-render.mjs`, `references/gates.md`, `scripts/fixtures/`, at 7ec8682).
|
|
License text: `licenses/MIT-hallmark.txt`.
|
|
|
|
Derived, modified (every gate rewritten in TypeScript and in gstack's voice,
|
|
mapped onto gstack's severity words; hallmark's theme stamp, genres, posture
|
|
guards, photo index and judged gates are not carried over):
|
|
|
|
- `lib/design-lint/` and `bin/gstack-design-lint`: the static tier's parsers
|
|
(CSS rules and tokens, HTML and component pseudo-HTML, Tailwind class
|
|
strings), the colour maths, the waiver record, and the rule families under
|
|
`lib/design-lint/rules/`; the render tier in `lib/design-lint/render*.ts`,
|
|
driving gstack's own browser instead of puppeteer.
|
|
- `test/fixtures/design-lint/{slopped.html,eyebrow-pass,eyebrow-fail,tailwind-pass,tailwind-fail,waiver}`:
|
|
the fixtures, with their waiver comments rewritten to the lint's form.
|
|
|
|
## DESIGN.md specification — Copyright Google LLC — Apache License 2.0
|
|
|
|
https://github.com/google-labs-code/design.md
|
|
|
|
`lib/design-md.ts`, `bin/gstack-design-md.ts`, and the Phase 6 template in
|
|
`design-consultation/sections/proposal-and-preview.md.tmpl` implement the
|
|
format (YAML token front matter in five groups, eight canonical sections in
|
|
spec order, `{path}` token references). No specification text is reproduced.
|
|
|
|
## tstack — Copyright Theo Browne — MIT License
|
|
|
|
https://github.com/t3dotgg/tstack (`skills/sol-loop`, at 7de017b3). Ideas, not text: the
|
|
three-word severity glossary (blocker, should, nit) and the two stop rules (a review that
|
|
grew the diff cuts first; the end of the budget is not approval) in
|
|
`ship/sections/review-army.md.tmpl`, `review/checklist.md` and `docs/review-policy.md`
|
|
are written in gstack's words and mapped onto gstack's blocking floor. No sentence is copied,
|
|
so no license text is carried; this entry is a courtesy.
|
|
|
|
Design port (`skills/babysit-pr/scripts/pr-wait`, at 7de017b3; license text:
|
|
`licenses/MIT-tstack.txt`): `bin/gstack-pr-wait`, `lib/pr-wait.ts` and
|
|
`lib/pr-wait-github.ts` follow pr-wait's design (one stdout line per real event,
|
|
`--until green|ready|any-change`, exit 0/1/2, required checks from rulesets and
|
|
classic protection, two identical polls before green, the base-moved-and-touches-
|
|
this-PR event, BEHIND and DIRTY, a per-PR lock, a 6-hour baseline), rewritten in
|
|
TypeScript on gstack's bun shebang, state root, result codes and config keys;
|
|
no Python line is carried. Each file names the source in its header.
|
|
|
|
## pstack — Copyright Lauren Tan — MIT License
|
|
|
|
https://github.com/cursor/plugins (`pstack/skills/interrogate`, `lead-judgment.md`). Ideas,
|
|
not text: the lead-judgment filters applied before a merged review finding counts (nit
|
|
gravity, hypothetical versus actual, structure for a case that does not exist, a different
|
|
design is not a defect, missing context; independent agreement as the strongest signal;
|
|
`NO FINDINGS` as a correct result) in `scripts/resolvers/review-army.ts` stage 4 and
|
|
`docs/review-policy.md` are written in gstack's words. No sentence is copied, so no license
|
|
text is carried; this entry is a courtesy.
|
|
Also ideas, not text, from `pstack/skills/principle-*`, `poteto-mode` and its eval playbook: ETHOS.md principles 5 to 8, the observable-questions rule in `plan-tune/SKILL.md.tmpl` and `docs/proactive.md`, the blinding rules in `eval-plan/SKILL.md.tmpl` and `docs/TESTING_INTERNALS.md`, and the limiter sentence in AGENTS.md step 4 (GSTA-124).
|
|
|
|
## pstack, ported scripts — Copyright (c) 2026 Lauren Tan — MIT License
|
|
|
|
https://github.com/cursor/plugins (`pstack/` at 99b609a7). License text:
|
|
`licenses/MIT-pstack.txt`. Unlike the ideas entry above, these two are code
|
|
ports, so the license text is carried and each file's header names its source.
|
|
|
|
Derived, modified:
|
|
|
|
- `bin/gstack-decision-trail`: `pstack/skills/show-me-your-work/scripts/log.sh`
|
|
in TypeScript: the header-once append, the one-line cells and the
|
|
spreadsheet formula guard (a leading quote on cells starting with `=`, `+`,
|
|
`-` or `@`). The `start` subcommand and the `--run` admission check are
|
|
gstack's.
|
|
- `bin/gstack-worktree-audit`: `pstack/skills/poteto-mode/scripts/worktree-audit.sh`,
|
|
with the PR column read through `gh --jq` alone, the chat column read from
|
|
Claude Code's per-worktree transcript directory, and a `--no-fetch` flag.
|