From 78c1f733ff4bee452f5c3ed4d0f8f3a9c35136a7 Mon Sep 17 00:00:00 2001 From: HabsaTheDog Date: Mon, 31 Aug 2026 19:26:09 +0200 Subject: [PATCH 1/5] release: prepare Study Buddy 0.2.3 alpha --- CHANGELOG.md | 32 +++++++++++++- README.md | 2 +- docs/release-readiness.md | 10 ++--- docs/releases/v0.2.3-alpha.md | 78 +++++++++++++++++++++++++++++++++++ package-lock.json | 4 +- package.json | 2 +- t3code-fork | 2 +- 7 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 docs/releases/v0.2.3-alpha.md diff --git a/CHANGELOG.md b/CHANGELOG.md index a9ad3bd..2fa34ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,41 @@ # Changelog This project follows [Semantic Versioning](https://semver.org/) for tagged -releases. Version `0.2.2-alpha` is currently undergoing release-candidate +releases. Version `0.2.3-alpha` is currently undergoing release-candidate validation; the `1.x` line remains reserved for the first full release. ## Unreleased +## 0.2.3-alpha — 2026-08-31 + +### Fixed + +- Restored the packaged Study Buddy source broker so installed desktop requests + can use configured Moodle, CIS, calendar, website, and email sources. +- Bound every broker run to a server-generated scope and rejected disabled, + deleted, unconfigured, or mismatched source targets before credentials can be + resolved. +- Added bounded Windows and Unix process-tree termination and request + cancellation so failed source runs do not leave provider children behind. + +### Security + +- Restricted packaged Codex network access to the authenticated loopback broker + and kept public outbound networking denied for source-backed workflows. +- Redacted raw, JSON-escaped, and URL-encoded source credentials from broker + diagnostics and provider output. +- Enforced quiz approval in the native broker: fabricated, skipped, changed, + declined, or expired approvals fail closed, while final quiz submission + remains blocked. + +### Testing + +- Added deterministic packaged source probes for exact configured targets, + public CIS access, credential injection, cancellation, and fail-closed source + lifecycle behavior. +- Extended the clean Windows and Fedora release gates with the repaired + source-runtime path and a targeted Moodle-to-artifact acceptance round. + ## 0.2.2-alpha — 2026-08-29 ### Fixed diff --git a/README.md b/README.md index e8a964b..5144371 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Study Buddy is a local-first AI learning companion that finds authorized course evidence and turns it into source-grounded answers, PDF study guides, and single-file offline learning webpages. -> **Alpha status:** `v0.2.2-alpha` is the current release candidate. Public +> **Alpha status:** `v0.2.3-alpha` is the current release candidate. Public > alpha builds are promoted only after clean Windows and Fedora acceptance; > the `1.x` line remains reserved for the future full release. Read > the [security](SECURITY.md) and [privacy](PRIVACY.md) guidance before diff --git a/docs/release-readiness.md b/docs/release-readiness.md index e650f54..0126e67 100644 --- a/docs/release-readiness.md +++ b/docs/release-readiness.md @@ -1,4 +1,4 @@ -# `v0.2.2-alpha` release readiness +# `v0.2.3-alpha` release readiness This is the durable, credential-free handoff for the current corrective Study Buddy alpha. A green result applies @@ -11,7 +11,7 @@ previews; unpublished build attempts do not consume additional public versions. ## Release contract -- Version/tag: `0.2.2-alpha` / `v0.2.2-alpha` +- Version/tag: `0.2.3-alpha` / `v0.2.3-alpha` - GitHub state: prerelease - Platforms: Windows 11 x64 and Linux x64 - Windows signing: intentionally unsigned with SmartScreen disclosure @@ -50,7 +50,7 @@ zero-source onboarding, more-than-three source management, edit/disable/delete, browser-backed source checks, optional telemetry delivery, restart persistence, offline recovery, Windows SmartScreen behavior, and Fedora AppImage execution. Those runs are regression evidence only; they do not approve new -`0.2.2-alpha` bytes. +`0.2.3-alpha` bytes. The release-lab now additionally requires ChatGPT subscription authentication, a real streamed response in a newly created packaged desktop thread, bounded @@ -63,7 +63,7 @@ of the calibrated Windows `clean` and Fedora `clean-wallet` snapshots. with the exact public UI submodule pin. 2. Complete root and UI typecheck, test, lint/format, dependency audit, license, SBOM, public-tree, link, submodule, secret-scan, and CodeQL gates. -3. Build the exact `0.2.2-alpha` Windows and Linux bundle from the final tagged +3. Build the exact `0.2.3-alpha` Windows and Linux bundle from the final tagged default-branch commit. Verify all manifest, checksum, updater, SBOM, version, platform, and unsigned-state claims. 4. Complete full-setup packaged acceptance in the disposable Windows and Fedora @@ -86,6 +86,6 @@ of the calibrated Windows `clean` and Fedora `clean-wallet` snapshots. Status: **blocked for publication while preparation is in progress**. -The source candidate is being converted to the agreed `0.2.2-alpha` contract. +The source candidate is being converted to the agreed `0.2.3-alpha` contract. No final bundle, exact VM pass, reviewed GitHub draft, or deployed website promotion exists yet. Successful source CI alone will not change this decision. diff --git a/docs/releases/v0.2.3-alpha.md b/docs/releases/v0.2.3-alpha.md new file mode 100644 index 0000000..9f259a1 --- /dev/null +++ b/docs/releases/v0.2.3-alpha.md @@ -0,0 +1,78 @@ +# Study Buddy v0.2.3-alpha + +This corrective alpha restores the packaged source runtime and hardens its +authorization boundary while retaining the Windows x64 and Linux x64 +distribution and update contract introduced in the previous public alphas. + +## Highlights + +- Installed desktop requests can use configured Moodle, CIS, calendar, website, + and email sources through the restored local source broker. +- Source onboarding starts empty and supports adding, editing, disabling, and + deleting an unrestricted number of sources. +- Direct Moodle and public CIS targets are validated against their exact + configured origin and path before a provider process starts. +- The startup surface shows only the centered Study Buddy mark and a compact + gold spinner. +- Packaged release acceptance includes deterministic source-broker and Codex + runtime probes, plus a targeted authenticated Moodle-to-artifact check for + this repaired failure path. + +## Security and privacy + +The source broker uses a random per-run scope and loopback token, resolves only +registered and enabled sources, and injects credentials only into the bounded +provider child that needs them. Study Buddy blocks public network access for the +Codex process in source-backed workflows and redacts raw, escaped, and encoded +credential forms from diagnostics. Native quiz approval fails closed if a +request is missing, changed, declined, fabricated, or expired; final quiz +submission remains blocked. + +Usage analytics and conversation sharing remain separate opt-in controls that +start disabled. Saved source credentials stay on the device, while model +requests can send the user's prompt and selected context to the configured +model provider. Review private course material before sending it. + +The Windows installer is intentionally unsigned. Download it only from the +official Study Buddy website or this GitHub Release, verify its SHA-256 against +`SHA256SUMS`, and expect Windows to display **Unknown publisher** or a +SmartScreen warning. Never disable SmartScreen globally. + +## Supported downloads + +- `Study-Buddy-0.2.3-alpha-x64.exe` — Windows 11 x64 NSIS installer +- `Study-Buddy-0.2.3-alpha-x86_64.AppImage` — Linux x64 AppImage + +macOS and other CPU architectures are not included in this alpha. + +## Verify and install + +Windows PowerShell: + +```powershell +Get-FileHash .\Study-Buddy-0.2.3-alpha-x64.exe -Algorithm SHA256 +``` + +Linux: + +```bash +sha256sum Study-Buddy-0.2.3-alpha-x86_64.AppImage +chmod u+x Study-Buddy-0.2.3-alpha-x86_64.AppImage +./Study-Buddy-0.2.3-alpha-x86_64.AppImage +``` + +Compare the result with the matching `SHA256SUMS` entry before launching. + +## Known limitations + +- Windows publisher identity is not code-signed yet. +- macOS is not supported. +- Generic Moodle and website sources are supported; CIS/calendar behavior is + currently tailored to FH Technikum Wien. +- PDF generation and complete PDF/Office ingestion require the separately + documented Typst, Poppler, or LibreOffice tools. +- Authenticated model and institution-source checks require the user's own + authorized accounts and must follow the connected provider's terms. + +GitHub-generated source archives omit submodule contents. Developers should +clone with `--recurse-submodules`. diff --git a/package-lock.json b/package-lock.json index c0f4ec6..99afdcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "study-buddy", - "version": "0.2.2-alpha", + "version": "0.2.3-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "study-buddy", - "version": "0.2.2-alpha", + "version": "0.2.3-alpha", "license": "MIT", "dependencies": { "@langchain/langgraph": "^1.4.9", diff --git a/package.json b/package.json index c8a2da2..b2982f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "study-buddy", - "version": "0.2.2-alpha", + "version": "0.2.3-alpha", "description": "Local-first, source-grounded AI study workflows for Moodle and FH Technikum Wien student systems.", "license": "MIT", "private": true, diff --git a/t3code-fork b/t3code-fork index 27c3df3..24b1368 160000 --- a/t3code-fork +++ b/t3code-fork @@ -1 +1 @@ -Subproject commit 27c3df31487c45ec7eb45ff9e40539a49257fe92 +Subproject commit 24b13681688d3994329ff222759078dd349d812e From 08978d6fda1b51b906833530402c80aa6ba15d2e Mon Sep 17 00:00:00 2001 From: HabsaTheDog Date: Mon, 31 Aug 2026 19:35:56 +0200 Subject: [PATCH 2/5] test: stabilize browser persistence audit --- src/custom-skills/web-layout/validation.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/custom-skills/web-layout/validation.ts b/src/custom-skills/web-layout/validation.ts index 74edd7a..78c2ba3 100644 --- a/src/custom-skills/web-layout/validation.ts +++ b/src/custom-skills/web-layout/validation.ts @@ -1498,6 +1498,25 @@ async function validateAdaptiveStudyGuideInteractionMatrix( if (await starredButton.getAttribute("aria-pressed") !== "true") { await starredButton.click(); } + await page.waitForFunction( + ({ selector, questionId }) => { + const button = document.querySelector(selector); + const storageKey = Object.keys(localStorage).find((key) => + key.startsWith("study-buddy:study-builder:v1:") + ); + if (button?.getAttribute("aria-pressed") !== "true" || !storageKey) return false; + try { + const persisted = JSON.parse(localStorage.getItem(storageKey) || "{}") as { + questions?: Record; + }; + return persisted.questions?.[questionId]?.starred === true; + } catch { + return false; + } + }, + { selector: persistenceSelector, questionId: interaction.persistenceQuestionId }, + { timeout: 10_000 }, + ); compactState = await page.evaluate(() => { const keys = Object.keys(localStorage).filter((key) => key.startsWith("study-buddy:study-builder:v1:") @@ -1522,7 +1541,7 @@ async function validateAdaptiveStudyGuideInteractionMatrix( (selector) => document.querySelector(selector)?.getAttribute("aria-pressed") === "true", persistenceSelector, - { timeout: 5_000 }, + { timeout: 10_000 }, ) .catch(() => undefined); reloadRestores = compactState && From 8eb9cf3ac7535bf1f6f3d6c9e0c1283a9fccebba Mon Sep 17 00:00:00 2001 From: HabsaTheDog Date: Mon, 31 Aug 2026 19:43:34 +0200 Subject: [PATCH 3/5] ci: focus release checks on supported platforms --- .github/workflows/ci.yml | 18 ++++++------------ src/custom-skills/web-layout/validation.ts | 21 +-------------------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66f00d1..13eabf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,10 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + # Ubuntu provides the fast platform-neutral Linux source gate. The + # shipped AppImage is accepted separately on the calibrated Fedora VM. + # macOS is outside Study Buddy's current support and release matrix. + os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} timeout-minutes: 30 steps: @@ -34,18 +37,12 @@ jobs: with: typst-version: 0.15.0 - run: npm ci - - name: Install Linux document and browser tooling + - name: Install Linux document tooling if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y poppler-utils - npx playwright install --with-deps chromium - - name: Install macOS document and browser tooling - if: runner.os == 'macOS' - run: | - brew install poppler - npx playwright install chromium - - name: Install Windows document and browser tooling + - name: Install Windows document tooling if: runner.os == 'Windows' run: | $popplerVersion = "26.02.0-0" @@ -62,11 +59,8 @@ jobs: $popplerBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append $env:PATH = "$popplerBin;$env:PATH" pdfinfo -v - npx playwright install chromium - run: npm run typecheck - run: npm test - env: - WEB_LAYOUT_BROWSER_TESTS: "1" - name: Verify SDK and bundled CLI pairing run: npm run moodle:doctor:version diff --git a/src/custom-skills/web-layout/validation.ts b/src/custom-skills/web-layout/validation.ts index 78c2ba3..74edd7a 100644 --- a/src/custom-skills/web-layout/validation.ts +++ b/src/custom-skills/web-layout/validation.ts @@ -1498,25 +1498,6 @@ async function validateAdaptiveStudyGuideInteractionMatrix( if (await starredButton.getAttribute("aria-pressed") !== "true") { await starredButton.click(); } - await page.waitForFunction( - ({ selector, questionId }) => { - const button = document.querySelector(selector); - const storageKey = Object.keys(localStorage).find((key) => - key.startsWith("study-buddy:study-builder:v1:") - ); - if (button?.getAttribute("aria-pressed") !== "true" || !storageKey) return false; - try { - const persisted = JSON.parse(localStorage.getItem(storageKey) || "{}") as { - questions?: Record; - }; - return persisted.questions?.[questionId]?.starred === true; - } catch { - return false; - } - }, - { selector: persistenceSelector, questionId: interaction.persistenceQuestionId }, - { timeout: 10_000 }, - ); compactState = await page.evaluate(() => { const keys = Object.keys(localStorage).filter((key) => key.startsWith("study-buddy:study-builder:v1:") @@ -1541,7 +1522,7 @@ async function validateAdaptiveStudyGuideInteractionMatrix( (selector) => document.querySelector(selector)?.getAttribute("aria-pressed") === "true", persistenceSelector, - { timeout: 10_000 }, + { timeout: 5_000 }, ) .catch(() => undefined); reloadRestores = compactState && From 474588dbab3d463a6126b0b02e804a90b49e830e Mon Sep 17 00:00:00 2001 From: HabsaTheDog Date: Mon, 31 Aug 2026 19:44:40 +0200 Subject: [PATCH 4/5] chore: preserve current workflow authorization boundary --- .github/workflows/ci.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13eabf5..66f00d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,10 +19,7 @@ jobs: strategy: fail-fast: false matrix: - # Ubuntu provides the fast platform-neutral Linux source gate. The - # shipped AppImage is accepted separately on the calibrated Fedora VM. - # macOS is outside Study Buddy's current support and release matrix. - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} timeout-minutes: 30 steps: @@ -37,12 +34,18 @@ jobs: with: typst-version: 0.15.0 - run: npm ci - - name: Install Linux document tooling + - name: Install Linux document and browser tooling if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y poppler-utils - - name: Install Windows document tooling + npx playwright install --with-deps chromium + - name: Install macOS document and browser tooling + if: runner.os == 'macOS' + run: | + brew install poppler + npx playwright install chromium + - name: Install Windows document and browser tooling if: runner.os == 'Windows' run: | $popplerVersion = "26.02.0-0" @@ -59,8 +62,11 @@ jobs: $popplerBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append $env:PATH = "$popplerBin;$env:PATH" pdfinfo -v + npx playwright install chromium - run: npm run typecheck - run: npm test + env: + WEB_LAYOUT_BROWSER_TESTS: "1" - name: Verify SDK and bundled CLI pairing run: npm run moodle:doctor:version From 4579de5a0b71b7d6c9191d3fd196b06d806dc014 Mon Sep 17 00:00:00 2001 From: HabsaTheDog Date: Mon, 31 Aug 2026 19:52:24 +0200 Subject: [PATCH 5/5] docs: keep source support claims exact --- CHANGELOG.md | 2 +- docs/releases/v0.2.3-alpha.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fa34ee..e75d46b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ validation; the `1.x` line remains reserved for the first full release. ### Fixed - Restored the packaged Study Buddy source broker so installed desktop requests - can use configured Moodle, CIS, calendar, website, and email sources. + can use configured Moodle, CIS, calendar, and website sources. - Bound every broker run to a server-generated scope and rejected disabled, deleted, unconfigured, or mismatched source targets before credentials can be resolved. diff --git a/docs/releases/v0.2.3-alpha.md b/docs/releases/v0.2.3-alpha.md index 9f259a1..133b1e2 100644 --- a/docs/releases/v0.2.3-alpha.md +++ b/docs/releases/v0.2.3-alpha.md @@ -6,8 +6,8 @@ distribution and update contract introduced in the previous public alphas. ## Highlights -- Installed desktop requests can use configured Moodle, CIS, calendar, website, - and email sources through the restored local source broker. +- Installed desktop requests can use configured Moodle, CIS, calendar, and + website sources through the restored local source broker. - Source onboarding starts empty and supports adding, editing, disabling, and deleting an unrestricted number of sources. - Direct Moodle and public CIS targets are validated against their exact