-
Notifications
You must be signed in to change notification settings - Fork 134
release: v0.10.0 #1232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
release: v0.10.0 #1232
Changes from all commits
f7c82c1
78a87a6
232c023
eff4c11
3b3d165
73751bd
24439e3
46edeb5
0e3ccf7
82d713c
3180c8e
3031d80
2160268
d414568
d3919b6
3214a7d
bb3158f
9036b4b
c110f15
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -67,6 +67,48 @@ jobs: | |
| - 'test/windows/**' | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # altimate_change start — run the tracker-leak guard on every PR. | ||
| # `script/check-tracker-leaks.ts` and its tests already existed but were wired | ||
| # into no workflow, so nothing enforced them: v0.10.0 shipped three new | ||
| # `AI-####` references into tracked files on this PUBLIC repo before a human | ||
| # review caught them. It scans the branch name, the commits ahead of | ||
| # origin/main, and the diff, so it needs full history and the base ref. | ||
| tracker-leaks: | ||
| name: Tracker Leaks | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 10 | ||
| # This job runs pull-request code, so it gets read-only scope and no | ||
| # persisted credentials — the checked-out branch must not be able to reach | ||
| # the token in `.git/config`. (bot review) | ||
| permissions: | ||
| contents: read | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
coderabbitai[bot] marked this conversation as resolved.
cubic-dev-ai[bot] marked this conversation as resolved.
|
||
| persist-credentials: false | ||
|
|
||
| - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 | ||
| with: | ||
| bun-version: "1.3.14" | ||
|
|
||
| - name: Fetch base branch | ||
| # `--depth=0` is not valid git ("depth 0 is not a positive number") and | ||
| # failed the job before the guard could run. `fetch-depth: 0` on the | ||
| # checkout above already gives full history, so a plain fetch of the | ||
| # base ref is all this needs. | ||
| run: git fetch origin main | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. NIT — the base ref is hardcoded here, though the script documents otherwise.
Moot today: this workflow triggers only on Suggested fix:
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct, and the script does document |
||
|
|
||
| - name: Check for internal tracker references | ||
| # `actions/checkout` lands on the synthetic merge commit in detached | ||
| # HEAD, so the script's own `rev-parse --abbrev-ref HEAD` yields "HEAD" | ||
| # and the branch-name source -- one of the three it documents -- is | ||
| # inert. Pass the real head ref explicitly. (review) | ||
| env: | ||
| PR_BRANCH: ${{ github.head_ref }} | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The new Prompt for AI agents
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct, it was inert. Fixed in |
||
| run: bun script/check-tracker-leaks.ts | ||
|
coderabbitai[bot] marked this conversation as resolved.
cubic-dev-ai[bot] marked this conversation as resolved.
|
||
| # altimate_change end | ||
|
|
||
| # Main TypeScript tests — excludes driver E2E tests (separate job) and | ||
| # cloud credential tests (local-only). | ||
| # --------------------------------------------------------------------------- | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -175,12 +175,36 @@ export async function notify(toast: Toast): Promise<void> { | |
| } | ||
| } | ||
|
|
||
| // altimate_change start — see `printLine`. | ||
| function stripControl(text: string): string { | ||
| // C0 minus TAB (a tab is harmless here and legitimate in a name), DEL, and | ||
| // C1 (U+0080-U+009F) — U+009B is CSI, so a terminal decoding C1 from UTF-8 | ||
| // would still act on an escape sequence the C0-only range let through. | ||
| // (review) | ||
| // eslint-disable-next-line no-control-regex | ||
| // U+2028/U+2029 are Unicode line/paragraph separators: not C0 or C1, but they | ||
| // still break the one-notice-per-line framing this writer depends on. (bot review) | ||
| return text.replace(/[\u0000-\u0008\u000A-\u001F\u007F-\u009F\u2028\u2029]/g, "") | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. NIT — LF is deleted rather than replaced, so a multi-line notice collapses into one run-on line. The class spans U+000A through U+001F, so (The U+2028/U+2029 extension in
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct — LF is deleted, so a legitimately multi-line notice collapses. Worth fixing by replacing the separator rather than dropping it; tracking as follow-up. |
||
| } | ||
| // altimate_change end | ||
|
|
||
| /** stderr, deliberately: `run --format json` documents stdout as raw JSON | ||
| * events, and this is a status notice, not run output. */ | ||
| export function printLine(line: string): void { | ||
| if (syncInternals.printLine) return syncInternals.printLine(line) | ||
| // altimate_change — strip BEFORE the test-seam branch. Stripping after it | ||
| // meant the override path (and therefore anything routed through it) never | ||
| // got sanitised at all, so the guard covered only one of the two exits. | ||
| // (review) | ||
| const safe = stripControl(line) | ||
| if (syncInternals.printLine) return syncInternals.printLine(safe) | ||
| try { | ||
| process.stderr.write(line + "\n") | ||
| // altimate_change — these lines embed the workspace NAME, which is | ||
| // set server-side and never validated for control characters. Writing it | ||
| // raw lets a workspace name carrying ANSI escapes repaint or hide | ||
| // surrounding output — including, in a CI log, the "engine not usable" | ||
| // notice this function exists to deliver. Strip C0 and DEL; the newline is | ||
| // added below, so nothing legitimate here needs them. (review) | ||
| process.stderr.write(safe + "\n") | ||
| } catch { | ||
| // A closed stream must not take down the turn. | ||
| } | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.