Skip to content

fix: repair main after #32 - #68

Merged
ANT1OFF merged 2 commits into
mainfrom
fix/main-static-lint
Nov 2, 2026
Merged

ANT1OFF merged 2 commits into
mainfrom
fix/main-static-lint

Conversation

@ANT1OFF

@ANT1OFF ANT1OFF commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

Cause. #32 (af3fab7) merged with main's own CI red: run 41372675092 failed check static and all three macos tests shards. Every PR checked against main has failed the same way since, #67 included.

  1. check static: fix: prepare only approved local-check sources #32's six packages/server/src/git/{local-checks,selected-publisher,selected-private-publisher}{,.test}.ts files weren't formatted, and they carried 5 oxlint warnings (--deny-warnings).
  2. macos tests 1–3 (13 tests): fix: prepare only approved local-check sources #32 makes selected-source preparation refuse every platform but Linux on purpose (selectedSourceManifest: if (process.platform !== "linux") throw new Error("selected-source preparation requires Linux")). Its tests were gated only off Windows, so on macOS they reach that refusal and fail. That covers CI's macOS shards and Gram's local gate on a Mac. The same 13 fail on main's af3fab7 run and on fix: repair main after #32 #68's first head. fix: prepare only approved local-check sources #32's own validation was its native (Linux) suite.

Change. No product code changes. #32's behaviour is untouched.

  • Formatting (bun run fmt), plus mechanical lint fixes: toSorted in two tests, the two Git-output guards moved unchanged to module scope (requiredPublisherGit, requirePreparedGit, same checks and messages), and a shadowed entries renamed to revTree.
  • The Linux-only cases run on Linux (describe.runIf(linux), it.live.skipIf(platform !== "linux")). Each file gains a test for the refusal off Linux, so macOS still tests something real:
    • the publishers reject with "requires Linux" before materializing anything;
    • a configured selected-source check fails as selected-source metadata preparation refused (unstartable) and never starts its command.
  • The publisher fixtures use a canonical temp root (realpathSync). macOS's temp folder is behind a symlink, and the publisher guard rightly refuses a non-canonical path.

Decision. The Linux cases are gated to Linux, and the refusal is tested elsewhere. This was decided with the orchestrator: it keeps #32's behaviour exactly as its author intended, runs every case on the platform it targets, and adds coverage off Linux. The other route, making selected-source preparation work on macOS, would change #32's behaviour and is left to its owner.

Not #32's: main's af3fab7 run also failed e2e 7/8 on smoke.spec.ts "streams a scripted thread…". That passes in #68's e2e shards, so it's flaky. qualification fails only because the jobs above failed.

Checks

  • bun run lint, bun run fmt:check, bun run typecheck: pass
  • vitest run src/git/local-checks.test.ts src/git/selected-publisher.test.ts src/git/selected-private-publisher.test.ts on macOS: 43 passed, 13 skipped (the Linux cases), 0 failed. Before this change: 13 failed, identical on pristine main. The Linux cases are left to CI's Linux jobs.
  • I didn't run the full bun run check.

These are security-sensitive local-check files, so an independent look at the diff is worth it.

#32 landed with six files the formatter rewrites and five oxlint
warnings (`--deny-warnings`), so `check static` fails on main and on
every PR merged onto it. Formatting only, plus mechanical lint fixes:
`toSorted` in two tests, the two Git-output guards moved to module
scope unchanged, and a shadowed `entries` renamed. No behaviour change.
…sal elsewhere

#32 made selected-source preparation refuse every platform but Linux
(`selectedSourceManifest` throws "selected-source preparation requires
Linux"), but its tests were gated only off Windows. On macOS (CI's
macos shards, and a Mac's local gate) 13 of them hit that refusal and
fail, on main since af3fab7.

The Linux cases now run on Linux; each file gains a test for the
refusal off Linux: the publishers throw before touching the worktree,
and a configured check fails as "selected-source metadata preparation
refused" without starting its command. The publisher fixtures also use
a canonical temp root, since macOS's temp folder is behind a symlink.
No product code changes.
@ANT1OFF ANT1OFF changed the title fix: format and lint the selected-source local-check files fix: repair main after #32 Nov 2, 2026
@ANT1OFF
ANT1OFF merged commit ce352e6 into main Nov 2, 2026
22 checks passed
@ANT1OFF
ANT1OFF deleted the fix/main-static-lint branch November 2, 2026 02:42
ANT1OFF added a commit that referenced this pull request Nov 2, 2026
A visitor arriving cold now sees what Gram is, what it looks like and
how to start before the backstory. Docs-only: `README.md` plus two new
images in `docs/assets/`.

## What changed

- **Hero screenshot** (`docs/assets/gram-orchestrator.png`, 2000×1250,
118 KB): the Orchestrator layout with the overview column, an
orchestrator thread with three features and their workers, and a
worker's question in the ask stack. A smaller **Board** shot
(`docs/assets/gram-board.png`, 1600×1000, 88 KB) sits under "How it
works". Both have descriptive alt text.
- **Order:** one-line pitch, three badges (latest release, CI on `main`,
MIT), the hero, five bullets on what it does, then Requirements,
Install, Build from source, Why, How it works, Docs, Contributing and
security, License.
- **Requirements** lists macOS on Apple silicon, Claude Code and/or the
Codex CLI signed in, and `gh` as optional, matching
`docs/DEVELOPMENT.md`. **Install** names the signed zip and links to
`docs/UPDATES.md#installing-a-release` for `SHA256SUMS.txt` and updates.
- **Insider names removed:** the "Claude Tag" comparison is dropped, and
"mythos" now reads "specialised work on a model you pick for it", in the
same words as `docs/AGENTS_AND_FEATURES.md`.
- Feature claims (autonomy levels, events, models by assignment, Board,
Needs you) are checked against `docs/AGENTS_AND_FEATURES.md`. Prose says
"tasks", not "goals".
- A Contributing and security section links `CONTRIBUTING.md` and
`SECURITY.md`. `CODE_OF_CONDUCT.md` is not on `main` yet, so it isn't
linked.

## Where the images come from

All data is synthetic, from the web app's mock API
(`window.gramMock.simulateAsks()`). The `pr-shots` harness drove it with
the default look: Studio, palette Neutral, mode Dark, and its fixed
clock. For a cleaner frame the right-hand panel was closed (`panel.open:
false`). I used a local-only shot entry for this and reverted it, so
`shots.ts` is unchanged. The PNGs were resized from 2× captures and
palette-quantised with sharp.

## Rendered README (GitHub, dark)

| Before | After |
| --- | --- |
| ![The README on main as GitHub renders
it](https://github.com/user-attachments/assets/e5dc53ca-80cf-4cc8-b46f-d532952fe0d2)
| ![The README on this branch as GitHub renders it, with badges, the
hero screenshot and the new
sections](https://github.com/user-attachments/assets/66c1af3d-3cf3-441e-937c-ff85be30e6e8)
|

## Checks

- `bun run check:docs`: passed (links, anchors and committed images, 35
Markdown files)
- `bun run check:scaffold`: passed
- `bun run fmt:check`: passed

## Known limits

- The CI badge currently reads **failing**, because `Application checks`
on `main` has failed since #32 (runs for #32, #68 and #67). It reflects
main's real state and should turn green once main is repaired.
- The "How it works" diagram (`docs/images/how-it-works-*.svg`) still
says "goals" in its labels. It is outside this PR's scope, so its alt
text still matches what the image says.
- `pr-shots`' existing `quiet-busy` shot times out on current `main`
(`quiet-empty` never appears). It is unrelated to this PR and was seen
while capturing.
ANT1OFF added a commit that referenced this pull request Nov 2, 2026
Desktop release metadata proposal only. Merging this PR does not publish
or tag Gram; follow docs/RELEASING.md to release.
---


## [1.4.0](v1.3.1...v1.4.0)
(2026-11-02)


### Features

* **agents:** identify Gram's Claude processes as the gram entrypoint
([#91](#91))
([f7dd703](f7dd703))
* **desktop:** run on Linux
([#82](#82))
([1d37deb](1d37deb))
* **desktop:** turn voice input off on Linux with one check
([#79](#79))
([470ff8b](470ff8b))
* **orchestration:** a person's PR comment wakes the worker that owns it
([#86](#86))
([19bdc1c](19bdc1c))
* **orchestration:** a wrap-up turn when a worker stops without
reporting ([#88](#88))
([36a07fb](36a07fb))
* **orchestration:** workers say what they ruled out and check before
repeating ([#90](#90))
([8bdce01](8bdce01))
* **release:** publish and update Linux AppImage and .deb
([#95](#95))
([c33c464](c33c464))
* **voice:** an accurate mode with a Parakeet pass on each pause
([#83](#83))
([2b04a52](2b04a52))
* **voice:** hold one key to talk, with a tone at each end
([#87](#87))
([1a9b3ef](1a9b3ef))
* **voice:** start capture at the press, and an opt-in ready microphone
([#81](#81))
([505d240](505d240))
* **web:** a Done section that keeps the last 7 days
([#65](#65))
([8c7bd49](8c7bd49))
* **web:** Done lists every finished chat
([#67](#67))
([c91d9ac](c91d9ac))
* **web:** one attention count, quieter rows, a sidebar and board that
agree ([#92](#92))
([f193da4](f193da4))
* **web:** orchestrator → workers in the sidebar, a board that matches
([#80](#80))
([686e737](686e737))


### Bug Fixes

* **desktop:** harden the Linux key vault and autostart entry
([#85](#85))
([4b35eac](4b35eac))
* **e2e:** hold the t-flaky turn while the smoke test reads its opening
line ([#93](#93))
([2edc4ac](2edc4ac))
* **e2e:** release the dictation tap as soon as a word is heard
([#94](#94))
([7781194](7781194))
* prepare only approved local-check sources
([#32](#32))
([af3fab7](af3fab7))
* repair main after [#32](#32)
([#68](#68))
([ce352e6](ce352e6))
* **voice:** keep the last word after release
([#78](#78))
([cc40a47](cc40a47))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: gram-release-please[bot] <351321620+gram-release-please[bot]@users.noreply.github.com>
Co-authored-by: Johan <32440065+ANT1OFF@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant