decidedEvery master push fails the same Cloudflare Pages build, whose only error record is behind the Cloudflare dashboard. The commit does not touch frontend/, and the repository names no Pages build configuration, so no conc…
receivedCI failed 1/1 on master at 14fadce: Cloudflare Pages Read github/commits/14fadce8e5a719bc67fb188960deb9f9c94c11f3/checks for every check.link
decidedCI passed with zero checks on master commit 14fadce, so there is no failure for any enabled rule to act on.
receivedCI passed 0/0 on master at 14fadce Read github/commits/14fadce8e5a719bc67fb188960deb9f9c94c11f3/checks for every check.link
decidedThe Cloudflare Pages check fails again on a commit that only edits plans/superagent JSON. The only failure evidence is a Cloudflare dashboard link, whose log needs credentials this deployment lacks, so no concrete build…
receivedCI failed 1/1 on master at 059deda: Cloudflare Pages Read github/commits/059deda5da3d380b19bf363588860123a58d73b9/checks for every check.link
decidedCI passed and there are zero checks on master commit 0977388, so there is no failure for any enabled rule to act on.
receivedCI passed 0/0 on master at 0977388 Read github/commits/097738818fc6ba2e39200474dad1f32a39d12b04/checks for every check.link
decidedThe failing check's log lives in the Cloudflare Pages dashboard, which needs credentials this deployment lacks, so the concrete error cannot be read and no code fix can be established. This is a deployment check on a co…
receivedCI failed 1/1 on master at 0309161: Cloudflare Pages Read github/commits/030916140dee369b88de71ca033b3c857ea46e47/checks for every check.link
resultready: Merged PR #4 (merge commit f5dd83554242aff9abc34cc9e310c4edefb65a9a); issue #3 closed and the thread carries the outcome. The Android test runner now renders a sixth "Bilmiyorum" row under the options, records it…
receivedCI failed 1/1 on PR #4 at 7af4605: Cloudflare Pages Read github/pulls/4/checks for every check.link
openedAndroid test runner: add a "Bilmiyorum" (I don't know) answerlink
received@nuuritas-agent please implement this issue as specified.link
received@nuuritas-agent please implement this issue.link
received[auto] Android test runner: add a "Bilmiyorum" (I don't know) answer. Android test runner: add a "Bilmiyorum" (I don't know) answer. ## Goal The Android test runner shows five options (A-E) with no way to say "I don't k…link
resultready: Read-only repository inspection; nothing changed (git status clean) and no PR opened. Deliverable — one sentence: X Bookmark Vault is a small, single-user Cloudflare Workers app backed by one SQLite Durable Objec…
openedDescribe what the repository contains in one sentence (read-only)link
receivedsuperagent test 2 @nuuritas-agent In one sentence, describe what this repository contains. Do not change any files and do not open a pull request.link
received@nuuritas-agent Reply here with one short sentence confirming you can read this issue. Do not change any files and do not open a pull request.link
received@nuuritas-agent Reply here with one short sentence confirming you can read this issue. Do not change any files and do not open a pull request.link
receivedsuperagent smoke test @nuuritas-agent Reply here with one short sentence confirming you can read this issue. Do not change any files and do not open a pull request. Then stop.link
resultdropped: PR #109 (build: deploy with the cf CLI instead of Wrangler) was already handled before this review ticket could act. Checked state via gh: state MERGED, merged by nuuritas at 2026-11-13T23:05:30Z (merge commit…link
decidedAn open, non-draft PR in this repository by another author, implementing a build/deploy migration. The review rule applies: one review with criterion evidence, approve or request changes, never merge or push.
openedReview PR #109: deploy with the cf CLI instead of Wranglerlink
receivedbuild: deploy with the cf CLI instead of Wrangler ## Summary Every Cloudflare operation now goes through the `cf` CLI (`1.0.0-beta.32`) instead of Wrangler: `cf dev`, `cf deploy`, `cf deploy --mode personal`, secrets, l…link
resultready: Reviewed PR #108 (open, by nuuritas, head fix/apk-name-shelf, 2 files +2/−2) and posted exactly one review: CHANGES_REQUESTED — https://github.com/nuuritas/shelf/pull/108#pullrequestreview-5898967622. Review-only…link
decidedAn open, non-draft pull request in this repository by another author, implementing a two-line download-link change. The review rule applies: one review with file:line evidence, approve or request changes, never merge.
openedReview PR #108: link the Android download under its new namelink
receivedfix: link the Android download under its new name ## Summary The Android download is now published as `Shelf.apk`, so the footer link and `INSTALL.md` follow it. Matching `nuuritas/shelf-cloud` change: the asset was cal…link
decidedPR #107 is already merged (22:18:18Z, head d47564c), so there is no open pull request to review. The review rule directs no acknowledgement and no review in that case; nothing remains to do, so no ticket is created.
receivedfix: download the Android app from public releases, not the VPS ## Summary The footer's "Android app" link and `INSTALL.md` both pointed at `https://shelfcloud.nuritas.tr/download/ShelfShare.apk`, which is a Caddy `file…link
receivedVerified on the published artifacts, on a Mac with an Android emulator — nothing rebuilt locally except the release APK that already exists. ## What was actually run **Android app (the supported path)** — installed `htt…link
resultready: Verified the fixes: PR #106's merged tree (7fe6908) is identical to head 60f2338, and both review findings are resolved. SECURITY.md:23-26 now says the published apps do not embed SHARE_TOKEN and that it stays se…link
receivedAddressed both findings from the review at `60f2338`: - **SECURITY.md** no longer implies the shipped app carries `SHARE_TOKEN`. It now says the published build signs in with the account password and that `SHARE_TOKEN`…link
openedReview pull request #106 against its issue's acceptance criterialink
received@nuuritas-agent review this pull request against the issue's acceptance criteria: one line per criterion with file:line evidence, then approve or request changes. Do not merge it — it is mine.link
receivedrefactor: move the native apps to shelf-cloud ## Summary Removes `android/` and `ios/` from this repository. The clients now live in `nuuritas/shelf-cloud/apps` and are distributed as a signed APK and a TestFlight build…link
receivedShow HTML notes as abstract cards, not embedded frames ## Summary An HTML note now appears in the library as an abstract card, not as a 420 px iframe of the document. The card carries the title, attribution, the agent-w…link
receivedRecord T3 Code as the main harness beside the superagent ## Summary Names T3 Code as the main harness and keeps `dsh-superagent` live as the unattended issue lane, with rules that stop the two from doing the same change…link
resultdropped: No repository change is needed: issue #101 was already fixed and merged by a parallel ticket. PR #102 ("Fix shelf add --help exit code and --version output") merged 2026-11-13T17:20:18Z as commit 96c2e6c, two m…
receivedGive the note preview link a little air The `Open full note` link sat flush against the iframe border. One-line margin.link
decidedTwo concrete argument-handling bugs with located cause and exact fixes in cli/shelf.ts only; fits the scoped fix rule.
openedFix shelf add --help exit code and shelf --version outputlink
receivedFix shelf add --help exit code and --version output ## Summary Closes #101 Fixes two CLI argument-handling quirks: - `shelf add --help` printed the add help and then threw the usage error, exiting `1`. It now returns `0…link
receivedFix shelf add --help exit code and shelf --version output ## What happens Two small CLI argument-handling bugs: - `shelf add --help` prints the add help and then exits `1`. In `commandAdd()` (`cli/shelf.ts` ~line 500),…link
receivedFix note rendering: ship note styles in /style.css HTML notes rendered inside a default 300x150 iframe with an unstyled title. Cause: every `.note-*` rule (card, reading page, `iframe.note-frame`) sat inside `<noscript>…link
receivedAcceptance list checked off. Re-verified on `main`: - `./android/build.sh` with only `KEYSTORE_PASS` → builds `public/ShelfShare.apk` (41 KB). The script no longer reads `SHARE_ENDPOINT` or `SHARE_TOKEN`. - `aapt2 dump…link
receivedAcceptance list checked off. Re-verified on `main` with Xcode 26.1.1: - `xcodebuild -project ios/Shelf.xcodeproj -scheme Shelf -sdk iphoneos -configuration Debug CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO build` →…link
receivedTell the agent to split work instead of asking Matches the operator policy change: the superagent now splits oversized work into consecutive scoped PRs instead of reporting blocked with a question, so the repository doc…link
receivedCorrection to the verification above: the `stored 10068 chars` run did **not** go through the yt-dlp wrapper. There is no `out/yt/cache/Xmy-p2eBMRg.*.vtt`, so `fetch.sh` exited non-zero and `get-youtube-transcript` prod…link
receivedFetch YouTube transcripts with a local yt-dlp wrapper ## Summary `shelf youtube` shelled out to `bun x get-youtube-transcript` for every video: a third-party download, no cache, no pacing, no way to pass a cookie jar. I…link
decidedA settled, local change to the CLI YouTube fetch path plus two doc lines; no new package, schema or deploy change. Fits the scoped change rule.
openedFetch YouTube transcripts with a local yt-dlp wrapperlink
receivedFetch YouTube transcripts with a local yt-dlp wrapper ## Goal `shelf youtube` currently shells out to `bun x get-youtube-transcript` (`fetchLocalTranscript`, `cli/shelf.ts:679`). That package is a third-party download o…link
resultdropped: No change needed: issue #95 is already implemented on main by merged PR #96 (merge commit 8547111), and #95 is closed. The ticket branch was prepared at that same commit, so there is no diff to make, commit or…
decidedA concrete, settled revert of the home layout with exact acceptance for the layout switch and breadcrumbs; small and self-contained, with no dependency, schema or deploy change.
openedOpen the library on all saves again, with folders as an optionlink
receivedOpen the library on all saves again, with folders as an option Closes #95 ## What changed - `parseLayout` and `libarenHref`/`renderPage` now default to the flat latest-first list; `?layout=folders` is the opt-in folder…link
receivedOpen the library on all saves again, with folders as an option The folder update (#72) made `/` a folder grid. That was too big a change to the landing page: on every first load the user sees folders instead of their sa…link
receivedPoint the agent docs at the renamed shelf instance The repository's dsh-superagent instance was renamed from `bookmark` to `shelf` (profile `superagent-shelf`, same panel port 3083, state and ticket history migrated). T…link
receivedStatus after deploying `main` (this closes the release half of the ticket): - **Deployed**: the instance is live at `https://shelf.nuritas.tr` (the old `bookmark.nuritas.tr` host was retired on 2026-11-13; it no longer…link
receivedRetire the legacy bookmark host name ## Summary Retires the old `bookmark.nuritas.tr` host name. The canonical deployment is `https://shelf.nuritas.tr`; the legacy custom-domain route and the redirect variables are remo…link
receivedMove legacy custom domains to the canonical host ## Summary Shelf is served on two custom domains (`shelf.nuritas.tr` and the older `bookmark.nuritas.tr`). This makes the new host canonical: with `CANONICAL_HOST` + `RED…link
receivedAcknowledged — thank you. Closing this sync issue as agreed. Recorded: no open tickets, no `agent/*` branches, no open PRs; #76 stays with the owner; #3 stays open as the feed; `android/`, `ios/` and `nuuritas/shelf-clo…link
received[coordination] Superagent sync: shelf queue, claims, and open boundaries ## Coordination only — no code changes This is a sync message from the owner's interactive DSH session, not a work order. **Do not open a branch o…link
resultprogress: MCP create_post slice is implemented and PR #90 is open: https://github.com/nuuritas/shelf/pull/90. One module (cli/shelf.ts), 96 insertions + 1 deletion. Gate count holds; merging next if CI is clean.link
receivedAgent notes, slice 2: sandboxed HTML, reading page, authoring guide, MCP create_post ## Summary Second slice of #83. HTML notes now render in a sandboxed iframe; every note has a full reading page at `/p/:ref`; the HTML…link
openedAgent posts: smallest guardrail-sized slice of #83link
receivedBoth clients now support the split and the commercial service is running. - iOS (#86) and Android (#85) merged: onboarding accepts any Worker URL + password, or Shelf Cloud email/password; no build-time endpoint or toke…link
received@nuuritas-agent the policy changed: no issue is ignored any more. For this one, reply with the smallest implementable slice you can merge under the guardrails, or with exactly one question plus a one-line plan. Do not s…link
receivedRebased onto current `main` and rebuilt with Xcode 26.1.1: `xcodebuild ... CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO build` → **BUILD SUCCEEDED**. Also changed the cloud default to `https://shelfcloud.nuritas.tr`…link
receivedAgent notes, slice 1: note model, /api/posts, shelf add, markdown cards ## Summary First slice of #83. AI agents can now save a finished research note — markdown (HTML is stored too, but renders as extracted text until…link
receivedRebased onto `main` (16867be) and integrated the notification work from #75 rather than dropping it: `NotificationJobService` now reads the runtime `Prefs` base URL, and `MainActivity` keeps `EXTRA_OPEN_URL` plus the ne…link
receivedStatus after deploying `main` (this closes the release half of the ticket): - **Deployed**: `bookmark.nuritas.tr` was running a pre-#72 build (`/settings` returned 404). `main` is now deployed with `bun run deploy:perso…link
receivedSave any public web page, not just X, LinkedIn and YouTube ## Summary Any public http(s) page can now be saved from the add form, the Android/PWA share target and `POST /api/bookmarks`. The existing `readWebPage` reader…link
receivedAdd the native iOS app with self-hosted and cloud modes Closes #79 ## Summary Adds the native iOS client under `ios/`: - `Shelf` (SwiftUI, `tr.nuritas.shelf`) — onboarding, settings, and the library in a `WKWebView`. -…link
receivedAdd runtime server setup to the Android app ## Summary Closes #80 Shelf Share v2 no longer bakes a server URL or token into the APK. A clean install opens onboarding, stores the chosen server and encrypted credentials a…link
receivedClosing: the review above covers every question, the two-week order, and there is no blocking question. Follow-up work stays in #79, #80 and #81.link
received## Review _Reviewed against `main` after #84 (source filter). MIT license, private repo, zero runtime dependencies, single Worker + one Durable Object._ **Verdict: proceed with the split, but the critical path is the cl…link
receivedFilter the library by source: X, LinkedIn, YouTube ## Summary Add a source filter beside Active/Archived so the library, a folder, and the API can show only X, LinkedIn or YouTube saves. The source is resolved from the…link
decidedA new item type with schema migrations, a write API, CLI and MCP tools, markdown/HTML rendering with sandboxing and CSP work, plus types, search, summary and export changes. The issue itself says it is larger than one s…
receivedLet AI agents add research posts to the shelf as markdown or sandboxed HTML ## Goal Close the loop on Shelf's AI access. Today the CLI and MCP server can only *read* the archive, so an agent can research what the owner…link
decidedAn explicit review-only design discussion: it asks for written analysis and recommendations on the cloud split, licensing, tenancy, auth, BYOK and limits, and forbids branch, pull request or code changes. No implementat…
decidedThe task is to build the commercial Shelf Cloud service in a separate private repository and on the VPS, with a design review on this issue. It requires no change to this repository and falls outside its single-tenant s…
decidedAn Android app rewrite: onboarding, runtime server/credential config with Keystore encryption, session login, share-target behaviour, settings and a version bump, verified only by building the APK. That is a new app sur…
decidedA new native iOS app: SwiftUI project, Share Extension, App Group/Keychain configuration, onboarding/settings and a Shelf Cloud account mode. That is a new platform and product surface requiring Xcode builds and design…
received[design] Shelf Cloud split and first commercial slice — review only ## This is a design review, not a work order Please reply with analysis and recommendations only. Do not open a branch or pull request, and do not chan…link
receivedTrack Shelf Cloud (commercial service) in a separate private repo ## Goal Track the commercial **Shelf Cloud** service in the open-source repository without putting its code here. The commercial service is a different d…link
receivedAndroid v2: onboarding and runtime server config (self-hosted + Shelf Cloud) ## Goal Ship Shelf Share v2 for Android without a build-time endpoint or token. The APK must work for any self-hosted Worker and for the hoste…link
receivedNative iOS app with self-hosted and Shelf Cloud modes ## Goal A native iOS app that mirrors the Android share app: the library in-app, and a Share Extension that saves a link to a Shelf instance. The app must work again…link
receivedRefresh the README and package description for the current app ## Summary The README still described an X/LinkedIn-only app. Refresh it for what Shelf is now: - Intro now names YouTube and the folder-first library. - "S…link
decidedA new web-page provider: export/extend the links reader, add a web branch and hash id in save(), stop rejecting unknown hosts in two worker handlers, card/source labels, canonicalization and tests. The issue itself note…
receivedSave a normal website link, not just X, LinkedIn and YouTube ## What happens Paste a normal blog/article URL such as `https://example.com/blog/post` into **Save a link**, or share it from Android, and the app refuses it…link
decidedA deploy-and-verify pass: deploying the Worker with personal config, rebuilding the APK, and checking real browser and Android push on production. It changes no code and requires deployment, production secrets and devic…
receivedShip and verify summary notifications (deploy + real browser + APK) ## Goal The notification feature is merged (#75) but has not been shipped or seen outside local tests. Deploy the Worker, rebuild the APK, and verify t…link
receivedNotify when a summary is ready on web and Android ## Summary Closes #74. Shelf summarizes in the background but never told the owner it was done. This adds one notification queue with two delivery paths: - **Web/PWA**:…link
decidedA large feature: VAPID key management, push subscription routes, notification rows, service-worker handlers, Settings UI changes and an Android JobService. It spans Worker, Durable Object schema, PWA and Android, needs…
receivedNotify when a summary is ready (web push + Android background check) ## Goal Shelf summarizes in the background, but nothing tells the owner when a summary is ready. Add notifications for finished summaries on the web/P…link
receivedAdd a Settings page for the summary prompt and language ## Summary Closes #70. The summary prompt and language lived in code and env, so changing either meant a redeploy. This adds a Settings page on the web and inside…link
decidedA filtering feature spanning the Durable Object list query, worker routes, rendering/chips/returnTo links, a shared host helper and tests, with an optional idempotent column. That is many modules and well over 200 lines…
receivedOpen the library on folders instead of a tweet feed No task issue: direct request in chat. Kept out of the superagent queue so it does not duplicate this branch. ## Summary - `/` now opens on a **folder index** instead…link
receivedFilter the library by source: X, LinkedIn, YouTube ## Goal The library now mixes X, LinkedIn and YouTube saves. Add a **source filter** beside Active/Archived so the owner can see only the platform they care about — on…link
decidedA new product surface: a password-guarded /settings page, a Durable Object settings table (schema change), summary-prompt overrides in the AI path, stored language, Android WebView link and docs. That spans many modules…
resultready: PR #20 re-reviewed and APPROVED at head c79e9c2 (https://github.com/nuuritas/wasabi/pull/20). The author pushed four fix commits plus a master merge and addressed every blocking finding from my changes-requested…link
receivedCI passed 0/0 on PR #20 at c79e9c2 Read github/pulls/20/checks for every check.link
resultdropped: CI notification for PR #40, not a human request. `gh pr checks 40` reports "no checks reported on the 'rename/phase4-remove-compat' branch", so 0/0 is not a pass/fail result and there is nothing to fix. The PR…
receivedCI passed 0/0 on PR #40 at 47eeb62 Read github/pulls/40/checks for every check.link
resultready: Phase 4 on #40: no new PR was needed. I pushed commit 47eeb62 ("rename: finish the Phase 4 stale references", 9 files, +41/−41) to `rename/phase4-remove-compat`, updated PR #40's body with the reconciled acceptan…
received@nuuritas-agent Phase 3 is done: the maintenance window ran on 2026-11-13, both hosts and both mirror directions are on the Wasabi names, and both `.env` files carry only `WASABI_*`. Continue Phase 4 on #40 autonomously…link
decidedPR #42 is already merged (state MERGED, 1 file, +15/−2, base master). The review rule covers only open pull requests this agent did not author and asks for no acknowledgement or review once a PR is merged or closed, so…
receivedMaintenance window finished on 2026-11-13. Both hosts run the Wasabi names and the mirror streams in both directions again. **What changed on the machines** - VPS: database and role `wsbot` → `wasabi`; checkout moved to…link
receiveddeploy: re-point subscriptions at the renamed publications The rename runbook renamed publications but never updated `pg_subscription.subpublications`. Renaming a publication does not touch its subscribers: the apply wo…link
openedReview PR #20 against the issue's acceptance criteria and approve or request changeslink
openedReview PR #40 against the issue's acceptance criteria and approve or request changeslink
received@nuuritas-agent review this pull request against the issue's acceptance criteria: one line per criterion with file:line evidence, then approve or request changes. Do not merge it — it is mine.link
received@nuuritas-agent review this pull request against the issue's acceptance criteria: one line per criterion with file:line evidence, then approve or request changes. Do not merge it — it is mine.link
receivedRepository-side rename is finished and merged; `master` is at `e7b97a00`. Merged today: #37 (stale paths and the sync test), #38 (package names), #41 (the last old-name paths, SQL examples, and rebuilt served bundles),…link
receivedrename: finish the remaining old-name references The last repository-side references to the old checkout, role and database, found with `git grep -i -E 'ws-?bot|wsbot'` after #37/#38 merged. - `backend/live/prune.py`: t…link
receivedrename: drop the wsbot compatibility layer (Phase 4) Phase 4 of #23, stacked on #39. **Draft on purpose: this must not merge until the Phase 3 rename window has run and one release has passed**, because it stops reading…link
receiveddeploy: rename the stack and database objects to Wasabi Phase 3 of #23, repo side. **Draft until the maintenance window**: merging is safe, running `deploy/recreate.sh` before the database rename is not. - Compose proje…link
receivedrename: use Wasabi package names Phase 2 of #23, stacked on #37. - Frontend workspace `ws-bot-frontend` → `wasabi-frontend`. - Shared UI package `@ws-bot/ui` → `@wasabi/ui`, including every import, `tsconfig.json` path,…link
receivedrename: fix the sync test and the stale ws-bot paths Part of #23 (Phase 1/2 cleanup). - The `WASABI_POSITION_SYNC_SECONDS` change in #27 made `_env_value(name, legacy)` take a second argument, but `test_the_in_process_s…link
receivedContinue with phase 3 autonomously, no questions. Do every repository-side change in scoped PRs and merge them. For anything that only the operator can do (GitHub repository rename, VPS paths, the gated database migrati…link
receivedDecision: proceed autonomously, no questions. Continue the rename as consecutive scoped pull requests on this issue (each under 200 lines, one module), merging each yourself. The policy no longer permits waiting for an…link
decidedAlready delivered to ticket cc7fdc6ea68864d0853365e6b8080495 as a follow_up on this same thread; that ticket is subscribed to issue #23 and its worker decides where the Phase 1 report leads. Forwarding it again would du…
receivedPhase 1 merged in #24 (squash commit `8c76d0df`). - `README.md`, `AGENTS.md`, the research harness, gannlevels, and Wasabi Live docs now use Wasabi. - The local `wsbot-*` skills under `.agents/skills` and `.hermes/skill…link
receiveddocs: rename ws-bot to Wasabi Phase 1 of #23. ## What changed - README title and intro now use Wasabi, with a note that machine identifiers still use `wsbot` until the rename completes. - Research harness, gannlevels, a…link
receivedPhase 0 confirmed on 2026-11-13: - Keep `wsdb.nuritas.tr` and `wslive.nuritas.tr`. - Rename database `wsbot` to `wasabi` and role `wsbot` to `wasabi` in the Phase 3 maintenance window. - Keep the volume name `wsbot_db_d…link
decidedAn issue opened by an allowed account that no other rule covers. Names, targets and phase order are already decided by the issue, so nothing is left to design; the change spans code, docs, deployment, database and GitHu…
openedRename ws-bot to Wasabi across code, docs, deployment, and GitHublink
receivedRename ws-bot to Wasabi across code, docs, deployment, and GitHub # Rename ws-bot to Wasabi ## Decision Use **Wasabi** as the product name and `wasabi` as the machine name. `ws-bot`, `wsbot`, and `WSBOT_` become legacy…link
receivedstudio: v0.16 marker and rustfmt for the resume wake handler Follow-up to #18/#19: marks the fixed build as v0.16 and runs rustfmt on the merged `on_press_tx` wake block so `cargo fmt --check` is clean again. - `5b47562…link
receivedSuperseded: the same root cause and fix landed as #19 on master. Closed to avoid a duplicate.link
receivedstudio: resume a paused replay immediately Closes #18 ## Root cause The transport button used a plain `on_press` handler. Rune runs a frame's `poll` **before** that frame's queued input handlers, so on the click frame `…link
receivedresearch(manager): execution checklist, per-second audit, v120 baseline ## What The manager-first research loop, made auditable: - `designs/manager-execution-checklist.md` — the contract: reaction entry, R <= 8, cut wit…link
resultprogress: Opened PR #19 (https://github.com/nuuritas/ws-bot/pull/19) on agent/studio-resume-stall-8e9dff279a2c against master for issue #18. Root cause read from Rune's frame loop: poll runs before handlers, so the fram…link
decidedConcrete reported bug with a stated correct behaviour and named suspects inside the Studio playback loop; no product or design decision remains and no schema, dependency or generated-code change is implied.
openedstudio: pause then resume stalls for seconds before the replay continueslink
receivedstudio: pause then resume stalls for seconds before the replay continues ## Symptom Sometimes after pressing pause and then resume, the replay sits for 4–5 seconds before it continues. Nothing changes on the chart while…link
receivedstudio: forming candle from replay seconds, inert replay click, no duplicate ladder list Closes #16 ## Three changes 1. **The forming candle is built from the replay seconds.** The bar that contains the playhead no long…link
decidedThe request is concrete and its target settled, but the operator has already claimed the work in this thread for the operator-directed session and asked explicitly that no second implementation start, so accepting would…
receivedClaimed by the operator-directed session: the change is being built on branch `agent/16-live-candle` and will arrive as one pull request. Please do not start a second implementation on this issue.link
receivedstudio: the forming 1m/5m candle must update from the replay seconds ## Problem During a replay the chart only appends candles: the bar containing the playhead is drawn from the finished 1m/5m candle, so at 12:00:30 it…link
resultdropped: Issue #9 was already fixed and closed by the operator before this ticket's work could land. While I was implementing the same transport change, a human-authored PR #10 ("Keep replay transport off the chart and…
receivedSuperseded: issue #11 was delivered by #12 (nuuritas-agent) and is already on master; this parallel branch duplicates it. Kept for reference.link
receivedstudio: label each trade band with its position id Closes #11 ## What Each day trade is already a coloured band; the colour was the only clue which trade it was. The chart now prints the trade id in the empty strip abov…link
receivedstudio: persist the computed day in PostgreSQL Closes #8 ## What The Studio service recomputed a day's trades + ladder after every restart. This adds a read-through PostgreSQL cache, so a cold service start is a databas…link
resultprogress: Draft PR #12 is open for review: https://github.com/nuuritas/ws-bot/pull/12. The change adds trade-id labels above the Studio chart's trade bands (chart.rs field/build/thinning, lib.rs text elements, README).…link
decidedSmall self-contained Studio chart addition with a settled target: draw each day trade's id above its band in the top padding, in the band's colour, thinning overlapping labels at ~36 px, with no new interaction.
openedstudio: label each trade band with its position id on the chartlink
receivedstudio: label each trade band with its position id on the chart ## Request The chart already draws each day trade as a coloured band, but the colour is the only clue. Put the trade id on the chart, in the empty top marg…link
receivedstudio: replay actions never move the chart; add 1m/5m rewind Closes #9 ## What changed - **No replay action moves the chart.** Start, pause, resume, stop, seeking and the playback itself no longer call `focus_chart_on`…link
resultdropped: No change is needed: issue #6 is already closed and its three requests are fully implemented on master. The ticket branch is clean at HEAD 121fe03f11673894e5649a4cc592b804a2ddf23f, identical to origin/master; t…
decidedConcrete bug with a determined correct behaviour: transport actions currently reset the view and re-request data; the issue names the offending calls and the expected result, inside the Studio module, with no design cho…
openedstudio: transport clicks must not move the chart or reload anythinglink
receivedstudio: transport clicks must not move the chart or reload anything ## Request Pressing play, pause, resume or stop must not move the chart and must not reload data. ## Rules - No transport action may issue a request. T…link
decidedThe design is settled but it requires a new PostgreSQL table (schema change) and writes from the Studio service, which Scoped fix and Scoped change both exclude; the repository rule stops agent work on schema changes. N…
decidedConcrete, self-contained Studio sidebar cleanup with named targets: drop the duplicated candle section and the per-second compute chip, and leave the bottom-left transport as the only replay start. No product or design…
openedstudio: sidebar must not repeat the candle or offer a per-second computelink
receivedstudio: persist the computed day (trades + ladder) in PostgreSQL ## Request The Studio service recomputes a day's trades and ladder after every restart, even though the same PostgreSQL is already there. Persist the comp…link
receivedstudio: sidebar no longer repeats the candle or offers a per-second compute Closes #6 ## What changed - Removed the **CANDLE AT THIS SECOND** section from `starting_side` and `pending_side`; the clicked candle's OHLC st…link
receivedstudio: sidebar must not repeat the candle or offer a per-second compute ## Operator request 1. Remove the **CANDLE AT THIS SECOND** section from the right sidebar (the chart tooltip already carries the OHLC). 2. Remove…link
receivedstudio: inert clicks, transport-only playback, sidebar tabs and chart legibility Closes #4 ## What changed - **A chart click is inert.** It records the second shown beside `▶ start` and nothing else: no compute, seek, r…link
decidedConcrete intent to change the Studio window, but the single issue bundles four determined behaviour fixes with two unsettled design items (which sidebar tabs and their contents; how many y-axis values and how line value…
receivedstudio: transport-only playback, trade bands, panel tabs and chart legibility ## Requests from the operator 1. **Playback must start only from the bottom-left ▶ button.** There must be no other way (Space and the `start…link
decidedNot a candidate for the enabled rules: the issue describes an already-delivered ~8.5k-line new application spanning studio/, backend/studio/, research_harness/ and pyproject.toml, exceeding the one-module / 200-line sco…
receivedfeat(studio): add the Rune replay window and its Python service Closes #2 ## What this adds - **`studio/`** — native Rune (Rust) replay window: three days of candles with free pan/zoom, crosshair + OHLCV, volume, steppe…link
receivedfeat(studio): commit the Rune replay window and its Python service ## What Record the Wasabi Studio replay window in git: the Rune app in `studio/` and the Python service in `backend/studio/` that feeds it. - `studio/`…link
receiveddocs: point agents at the repository superagent Adds a short section to `AGENTS.md` describing the repo's own superagent instance: how work is handed over (a plain issue), the guardrails it merges under, and where opera…link
resultdropped: The resumed message on github:109 is nuuritas's closure notice for PR #109 ("Closing as a duplicate: the same docs(agents): cap pull request size change landed on master in #108 (merge 34f91d7). Nothing unique…
decidedPR #110 was merged by its author at 20:44:01 before review; the review rule says a merged PR gets no acknowledgement and no review, so there is nothing to do.
receivedClosing as a duplicate: the same `docs(agents): cap pull request size` change landed on `master` in #108 (merge `34f91d7`). Nothing unique left in this branch.link
receiveddocs(agents): point Rune work at lib.rs, not the binary Records the module split that now owns the app: `lib.rs` has the modules, `SCENES` and the tests, while `main.rs` is only the native entry point. Add scenes and te…link
decidedOpen pull request by another account, not authored by the agent; the review rule requires reading the diff and posting exactly one review without merging.
openedReview PR #109: docs(agents) cap pull request sizelink
decidedPR #108 was merged by its author before review (mergedAt 20:41:20); the review rule says a merged PR gets no acknowledgement and no review, so there is no work to route here.
receiveddocs(agents): cap pull request size ## What Adds a PR-size rule to `agents.md` so the next session does not repeat PR #107. ## The rule - Hard ceiling: **~400 changed lines and ~10 files**; split before opening, not aft…link
receiveddocs: close out the Rune parity plan and cap PR size Two doc-only follow-ups left on the local master line after #107 merged: - `docs(rune): close out the parity plan` — records the P6/P8 outcomes, the final `cargo test…link
resultdropped: PR #107 (feat(mercek): screen-context lens across backend, celld, web and Rune) was already merged before review: state=MERGED, mergedAt 2026-11-13T20:40:04Z by human nuuritas, merge commit b8d6a64d784693c3ffbc…
decidedOpen PR #107 by another account in this repository, not authored by the agent; the enabled review rule requires reading the diff and posting exactly one review, with no merge.
openedReview PR #107: Mercek screen-context lens across backend, celld, web and Runelink
receivedfeat(mercek): screen-context lens across backend, celld, web and Rune ## What this is Mercek gets a **lens**: right-click a chart and the next turn carries the structure the app is already drawing — symbol, interval, vi…link
resultdropped: The resumed message on #99 is a verification report, not a request: nuuritas confirms the already-merged C26 interaction works live at bt.nuritas.tr (wheel zoom/drag change the candle crop, Sığdır restores it,…
receivedLive and verified at bt.nuritas.tr: C26 wheel zoom/drag change the candle crop, Sığdır restores it; no hover/tooltip. Native Shape only.link
receivedfix(rune): center the search field and remove resize chrome Search now sits in the free middle of the topbar instead of being pushed left by the growing title column. The bottom-right resize hit area has no hover fill/r…link
receivedfix(rune): hide empty grid at rest, drop the resize glyph, smooth the ticker Empty workspace cells now paint only during a move/resize gesture; the resting grid is just the background. The always-visible bottom-right ◢…link
openedMake C26 candle chart interactive in consecutive scoped pull requestslink
receivedReopened. Proceed autonomously, no questions: split the C26 chart work into consecutive scoped pull requests (wheel zoom/pan/reset in `symbol_card.rs` first, then `chart.rs` if still needed), merge each yourself, and na…link
receivedfeat(rune): make the C26 candle chart interactive Closes #99. ## What changed C26 drew `canvas(chart(&s.bars))` — a fixed picture of every loaded bar. It now uses a windowed native-Shape renderer driven by Rune's existi…link
receivedfeat(web): branded boot animation Replaces the empty boot screen with a centered Rune mark, subtle pulse ring, staggered market bars and 'Piyasa verisi yükleniyor' hint. CSS-only, respects prefers-reduced-motion, fades…link
resultblocked: Assessed issue #99: C26 interactive candle chart (wheel zoom clamped ~20 bars to full series, drag pan, "Sığdır" fit, reset/clamp on symbol/resolution/fewer-bars change), native Rune `Shape` only. Read `rune_ap…
receivedfix(web): remove the Loading… boot text Use a custom index.html with an empty status region, branded title/description and a dark boot background. Adds rune_app/scripts/build_web.sh so the shell is installed after every…link
receivedfix(rune): quiet the empty workspace cells React shows empty grid cells as a barely-there outline and only reveals add hints in grid-edit mode. Remove the question-mark box glyph and soften the resting cells to alpha 0.…link
decidedIssue by an allowed account that no other rule covers as scoped work: the author names two modules, so fix/change do not match, but the answer rule requires a ticket and one concrete reply.
openedfix(rune): make the C26 candle chart interactivelink
receivedfix(rune): remove the egui-charts/wgpu footer label Removes the tiny default footer text from the C05 and Sektör chart cards. The static-preview warnings and loading text remain.link
receivedfix(rune): make the C26 candle chart interactive ## Problem C26 Sembol Kartı still renders its candle chart through `canvas(crate::chart::chart(&s.bars, t))` (`rune_app/src/widgets/symbol_card.rs`). It draws a fixed pic…link
resultdropped: No action needed: issue #90 was closed by the operator at 16:17:50 with the completion announcement. The remaining items I flagged were completed on master by the operator: PR #97 "persist guest preferences in…
receivedShipped: https://bt.nuritas.tr runs the Rune WASM/WebGPU app with live data (630 symbols, 40 indices), cans, logos, cross-site account auth/chat, Mercek SSE, A2UI, localStorage persistence and C05 history paging. Verifi…link
receivedfeat(web): persist Mercek conversations on the account ## Summary The Rune web build now persists Mercek conversations on the signed-in account instead of always using guest `localStorage`. - `rune_app/src/chat/worker_w…link
receivedfeat(web): persist guest preferences in the browser ## What Native keeps its files; the browser target now persists guest state in `localStorage` instead of silently failing on `std::fs`. - **New `rune_app/src/web_stora…link
receivedLive web is now functional: production API default fixed (#94), 630 symbols + 40 indices, Takas/AKD/Bilanço/Sektör/Bileşenler render live data, THYAO logo shows, cross-site login/me works. Remaining: localStorage layout…link
receivedfix(web): default the browser build to the production API The wasm build had no process env, so it defaulted to 127.0.0.1:8003. Default the browser target to https://api.borsaterminal.com; native still honors BORSATERMI…link
receivedfeat(web): port every remaining browser data command ## Summary The Rune web build now answers **every native `Cmd`** in `rune_app/src/api_web.rs`. The fourteen variants that previously logged `unsupported` are ported w…link
receivedLive web checkpoint: CORS allows https://bt.nuritas.tr; cross-site cookie is SameSite=None; Secure; browser fetch login -> /auth/me 200 and /symbols/THYAO/logo 200 image/webp. VPS backend rebuilt from 2e7e99a; /indices_…link
receivedfeat(backend): allow the Rune web origin and cross-site auth cookies ## Summary - The default CORS origin list now includes `https://bt.nuritas.tr` and `https://borsa-rune-web.pages.dev`. `BORSATERMINAL_CORS_ORIGINS` st…link
receivedPhase 0/1 merged (#91). First build deployed: https://bt.nuritas.tr (Rune canvas, WebGPU shell + demo chart + Mercek). Remaining: API CORS allow-origin for bt, SameSite=None cookies for cross-site auth, unported Cmd end…link
receivedfeat(web): Rune WASM/WebGPU build — Phase 0/1 compile + browser shell Part of #90 (Phase 0/1). This starts the real Rune web build — WASM + WebGPU, not the React SPA. ## What works - `borsa-terminal-rune` compiles for `…link
decidedIssue by an allowed account covered by no other enabled rule (toolchain, WASM compile, hosting, DNS, deploy); the answer rule requires a ticket plus one concrete question rather than ignoring it.
openedfeat: Rune web build (WASM/WebGPU) at bt.nuritas.trlink
receivedfeat: Rune web build (WASM/WebGPU) at bt.nuritas.tr ## Goal Ship a real web build of the **Rune** app (WASM + WebGPU), not the React SPA, and deploy the first test build at **bt.nuritas.tr**. Full feature parity is the…link
receivedDone: 626/648 BIST logos archived in Postgres via one-time browser ingest, served by GET /symbols/{symbol}/logo, and wired into Rune search/palette/pickers/table cells with monogram fallback. React was also updated befo…link
receivedfeat(logo): stock logos with monogram fallback (UI half of #62) ## What Implements the UI half of #62 on top of the merged backend endpoint `GET /symbols/{symbol}/logo`. No backend, dependency, egui or wgpu changes. ##…link
receivedIngest complete: 616 new logos + 10 existing = 626/648 symbols stored in Postgres (PNG/WebP, ETag). 6 pages have no logo (DAGHL, DOBUR, IPEKE, MARKA, METUR, PEHOL); 16 fund/foreign symbols 404 (ALTIN.S1, *.F, MPARK.NSE)…link
receivedfix(rune): remove the synthetic index fallback ## Summary `/indices_table` has been built from idealdata since 44566bd, but Rune still carried the older workaround: when the endpoint returned an empty `data` array, `ref…link
receivedfeat(backend): archived stock logos served from Postgres (#62) ## Summary Backend/data half of #62. Stock brand marks are archived once from Fintables company pages into our own Postgres, then served by the backend fore…link
receivedReopened per product decision: no third-party logo API. Use browser automation once over Fintables stock pages, extract each company's image, download it, store the bytes in our Postgres, and serve them from our backend…link
receivedClosing as blocked on licensing: Fintables has no stock-logo API, and TradingView SVG marks cannot be redistributed under its terms. Shipping them would be a legal risk. The safe owned-monogram fallback and the licensed…link
receivedClosing this tracker: every code-actionable parity item is now merged (#66–#69, #75–#82). The remaining bullets are upstream/architecture constraints, not open work: the egui-charts feature set exposes 5 drawing tool ty…link
resultblocked: Draft PR #86 (https://github.com/nuuritas/borsaterminal/pull/86) has the implementation and tests, but I did not merge because the diff leaves the path issue #80 allows. Evidence: issue #80 says "Only `rune_app…link
resultready: Merged PR #85 (squash commit 2bc3f80fcd59d9ad44612821a31a33952a44e71c) into master for #82. One file changed: frontend/src/components/A2Surface.tsx (+72/-7, 79 changed lines). The renderer now mirrors the mercek.…
resultready: Merged PR #84 (https://github.com/nuuritas/borsaterminal/pull/84), squash commit b21ebef34601474c9ee8b8681553a4c126629637; issue #81 is closed. What changed: in rune_app/src/chat/surface.rs only, `apply_surface_o…link
resultready: Merged PR #83 (https://github.com/nuuritas/borsaterminal/pull/83) as squash commit a8174aa9a8ea79c877398b410f0fd8de4d906746; it closed issue #79 (now CLOSED/COMPLETED). User-visible outcome: the C05 crosshair too…link
decidedSingle-file React gating change with a defined result and guardrail; frontend-only, separate from the Rune ticket.
openedfeat(react): gate A2UI surfaces on the backend cataloglink
decidedSingle-module gating change with a defined result and tests; the file and catalog-source choice is explicitly delegated in the issue.
openedfeat(rune): gate A2UI surfaces on the backend cataloglink
decidedConcrete behaviour change in one file with defined patch semantics, no-op rules and tests; under the line limit.
openedfeat(rune): apply A2UI updateDataModel patches in chat statelink
decidedTurkish copy change only, in one file, with the exact label mapping; no runtime behaviour change.
openedfix(rune): translate C05 chart tooltip labels to Turkishlink
receivedfeat(react): gate A2UI surfaces on the backend catalog ## Goal The React A2UI renderer trusts its local component allowlist; it should reject components the backend `/ai/catalog` does not advertise. ## Scope (Superagent…link
receivedfeat(rune): gate A2UI surfaces on the backend catalog ## Goal Rune accepts any surface component name from its local allowlist; it should reject a component that the backend `/ai/catalog` does not advertise. ## Scope (S…link
receivedfeat(rune): apply A2UI updateDataModel patches in chat state ## Goal A2UI `updateDataModel` frames are stored but not applied to the surface data model, so data-bound props cannot change. ## Scope (Superagent-sized) - O…link
receivedfix(rune): translate C05 chart tooltip labels to Turkish ## Goal The C05 egui-charts tooltip uses English row labels (`Time`, `Open`, `High`, `Low`, `Close`, `Volume`) while the rest of the UI is Turkish. ## Scope (Supe…link
receivedC25 scrolling (#77) and C28 in-bar stamps (#78) are now merged; removed from this epic's remaining list. Large/data-source items still open.link
resultready: Merged PR #77 (squash commit 063020e0d01b4bb22567ef872a2d5412c2626aa9, branch agent/custodian-scroll-rows-bbd0ae5e4a21 deleted) and closed issue #75. Outcome: C25 custodian mode no longer pages its share table 40…
resultready: Merged PR #78 (https://github.com/nuuritas/borsaterminal/pull/78) as squash commit 43af638d06c2d9a67fb9d2ebf45d3a4f71e23958 on master; the issue-github reply on #76 carries the same outcome. What changed: only ru…link
decidedSingle-file UI change against an established React reference, with fit rules, theme constraint, acceptance and test specified.
openedfeat(rune): add in-bar custodian stamps to C28link
decidedConcrete, single-file change with explicit acceptance, test and guardrail; matches the scoped change rule.
openedfeat(rune): show all C25 custodian rows with scrollinglink
receivedfeat(rune): add in-bar custodian stamps to C28 ## Goal C28 flow bars currently identify custodians only in the legend. Add compact 2-letter stamps on/next to each segment when the segment is tall enough, matching the Re…link
receivedfeat(rune): show all C25 custodian rows with scrolling ## Goal C25 custodian mode pages 40 rows; React virtualises the full table. Replace the page window with one scrollable list that keeps all loaded rows available. #…link
resultready: Merged PR #74 (https://github.com/nuuritas/borsaterminal/pull/74) into master as squash commit 336a344; issue #68 is closed. Outcome: C27 (rune_app/src/widgets/intraday_akd.rs) now feeds the already-loaded tradin…link
resultprogress: PR #73 opened for the C18 watchlist star persistence change: https://github.com/nuuritas/borsaterminal/pull/73 (branch agent/watchlist-stars-persist-55c5ea94aff5, single file rune_app/src/widgets/watchlist.rs,…link
resultready: Merged PR #72 (squash commit 05307770888a5d5fc39669de953044e6b11f3684) for issue #69. Added one ignored live test in rune_app/src/api.rs: `live_price_paging_walks_back_to_start_of_history` reads the latest THYAO/…link
resultprogress: Opened PR #71 (https://github.com/nuuritas/borsaterminal/pull/71) for issue #67: removes the C24 daily/weekly/monthly bucket cap in rune_app/src/widgets/custodian_dist.rs, renders every bucketed period, and ad…link
decidedSmall UI change to match the React select menu, single file, explicit acceptance and guardrail; the leftover prev/next choice is delegated in the issue.
openedfeat(rune): replace C27 prev/next with a trading-day menulink
decidedEpic/tracker issue listing large parity gaps and data-source limits; it states itself that each actionable item gets its own scoped issue and that it is not a work order.
decidedTest-only addition in one file with explicit assertions and guardrail; no production change.
openedtest(rune): add a live /price paging integration testlink
decidedConcrete deviation from the React series with the exact file and expected result; one module, under 200 lines, no dependency change.
openedfix(rune): show the full C24 custodian historylink
decidedConcrete defect (stars lost on restart) with a specified single-file fix, atomic write, fallback and inline tests; under 200 lines, no dependency change.
openedfix(rune): persist C18 watchlist stars across restartslink
receivedepic: remaining Rune parity gaps and data-source limits ## Goal Track the gaps that are too large or not code-fixable for a Superagent ticket. ## Large UI parity - [ ] C25 custodian table: virtualized/scrolling rows ins…link
receivedtest(rune): add a live /price paging integration test ## Goal The `/price` paging contract is unit-tested but never exercised against a running backend. Add an ignored live test that verifies the page cursor contract. #…link
receivedfeat(rune): replace C27 prev/next with a trading-day menu ## Goal C27 uses a prev/next day stepper; React uses a select menu of available trading days. ## Scope (Superagent-sized) - Only `rune_app/src/widgets/intraday_a…link
receivedfix(rune): show the full C24 custodian history ## Goal C24 truncates visible history to 60 daily / 40 weekly / 24 monthly buckets; React renders the whole series. Remove the artificial cap while keeping the ring/stack r…link
receivedfix(rune): persist C18 watchlist stars across restarts ## Goal The C18 watchlist star pins are session-only. Persist them so they survive app restarts, with the same guest/account scoping used elsewhere. ## Scope (Super…link
receivedfeat(mercek): catalog-validated A2UI surfaces in Rune and web ## What First usable A2UI slice for Mercek, end to end. A reply can now carry a declarative, catalog-validated UI surface that both the Rune desktop app and…link
decidedA concrete failing check on main, which the CI rule covers; the ticket reads the log, fixes the smallest cause, merges what can be merged and names any operator command that remains.
openedFix the android-release CI failure on mainlink
resultready: Review complete on PR #44 head e9ffc9f; posted one review (nuuritas-agent, round 1) as CHANGES_REQUESTED: https://github.com/nuuritas/shelf-cloud/pull/44. The core AI-summary criteria are met (default-on migratio…link
receivedCI failed 1/4 on main at 31b389b: android-release Read github/commits/31b389b5c3af061b45f9ac4d2f6eae73ebc6dd3e/checks for every check.link
resultdropped: PR #45 (nuuritas/shelf-cloud, "Add Google and Apple sign-in to the iOS and Android apps") was already merged by nuuritas at 2026-11-13T23:27:07Z, about 90 seconds after it was opened and before this review tick…
decidedPR #45 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #45: Google and Apple sign-in for appslink
receivedAdd Google and Apple sign-in to the iOS and Android apps The apps only offered email + password, so a Google account created on the web could not be opened in either app, and the web Apple button was a disabled placehol…link
decidedPR #44 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #44: optional AI summaries per tenantlink
receivedfeat(ai): make AI summaries optional per tenant ## Summary AI summaries are now a per-tenant setting, on by default. When a tenant turns them off: - links are still ingested and their text is stored; - no summarize job…link
resultdropped: PR #43 (nuuritas/shelf-cloud, head 3a1c063) was open when first checked (~22:53Z) but nuuritas merged it at 2026-11-13T22:55:00Z (merge commit b43445b, now main) while the review was in progress. Per the review…
decidedPR #43 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #43: site type and colour systemlink
receivedfeat(site): give the public site its own type and colour system ## Summary The public site (`/`, `/how-it-works`, `/pricing`) had three pages set in the system serif, a mono uppercase label above every section, and a pa…link
resultdropped: No action needed on the latest issue #34 comment: it is the operator's own close-out record (SSL strict, Always Use HTTPS on, min TLS 1.2, HSTS live, cache confirmed DYNAMIC/no custom rules, DNSSEC recorded not…
receivedApplied through the authenticated `cf` CLI (no API token), zone `58ee06b77045b296e1c19b3edd0d5ae4`. ## Settings now live | Setting | Before | Now | |---|---|---| | SSL/TLS mode | `strict` | `strict` (unchanged) | | Alwa…link
resultprogress: PR1 of the SEO/GEO series opened: static asset route with immutable cache and the two 1200×630 palette share cards. Self-review and merge next; later PRs add head/share tags, JSON-LD, then sitemap/llms.txt.
resultready: Reviewed PR #40 at head f5d9aea (author nuuritas; no issue, criteria taken from the PR description) and posted exactly one review: CHANGES_REQUESTED — https://github.com/nuuritas/shelf-cloud/pull/40#pullrequestre…link
decidedA concrete, self-contained set of site changes in one module with specified outputs and no new dependency; the change rule allows split PRs and merges, with the dashboard and content-signal policy named as operator step…
receivedsite: SEO and GEO for shelfcloud.io (share cards, structured data, llms.txt, agent discovery) The public site is live (`shelfcloud.io/`, `/how-it-works`, `/pricing`, both languages) and the basics are in place. This iss…link
resultready: CI is now 4/4 green at new head 5b16e51 (check, ios, android passed; android-release skipped). I re-read the full PR diff and all 11 files at that head. It is a rebase onto current main (ca641e9), not a fix: the…
decidedPR #40 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #40: rename the APK download to Shelf.apklink
receivedchore(android): name the download Shelf.apk ## Summary The download was called `ShelfShare.apk`. That name is a leftover, not a decision: the app's Android share-target origin is `com.bookmarkvault.share` → `com.shelf.s…link
receivedTwo rows in the table above are stale as of 2026-11-14 01:25 +03. The rest still holds. **Google login is deployed.** `main` (now `ca641e9`) was deployed at 22:19Z: migration 004 applied (`password_hash` nullable, uniqu…link
resultdropped: Verified the follow-up needs no work. PR #31 is already closed (closed 2026-11-13T22:22:21Z, not merged), and origin/main at ca641e9 already has DEFAULT_CLOUD_URL = https://shelfcloud.io (apps/android/src/com/s…link
receivedCI passed 4/4 on PR #26 at 5b16e51 Read github/pulls/26/checks for every check.link
receivedSuperseded: main already ships `DEFAULT_CLOUD_URL = "https://shelfcloud.io"` (`apps/android/src/com/shelf/share/Prefs.java`), and the only remaining `shelfcloud.nuritas.tr` mentions are the intentional legacy-vhost note…link
resultready: Finished the legal second slice and closed #28. The maintainer had merged PR #25 (privacy, terms, support pages) by the time I got to it, so no merge was needed there. I opened and merged PR #39 (squash commit ca…
resultdropped: PR #38 ("docs: publish the APK to a public release repository") was already merged by nuuritas at 2026-11-13T22:18:24Z (merge commit cb96b72edb070f16e3db4ffa2bbe47f518c0984c) before this review ticket could act…
decidedPR #38 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #38: publish APK to public release repolink
receiveddocs: publish the APK to a public release repository ## Summary The APK download used to be a Caddy `file_server` over `/srv/download` on the VPS: a local file on a server, published by hand, because `nuuritas/shelf-clo…link
resultdropped: PR #25 was already merged before this CI notification was handled: merged by nuuritas at 2026-11-13T22:15:10Z, merge commit 5d9570244c0f29db02d0deea2a5cfcbce0a23cd4, head 6dc7d719a56a65f4dc5b96d72a1efd74590cd41…
resultready: Answered issue #35 on its thread: https://github.com/nuuritas/shelf-cloud/issues/35#issuecomment-6866241686 — states plainly that this is operator-only with no repository-side change (the repo has no Caddyfile, d…link
receivedCI passed 1/1 on PR #25 at 6dc7d71 Read github/pulls/25/checks for every check.link
receivedFirst slice is live: `main` `1a0d263` was built into production at 22:11Z. | URL | Status | |---|---| | `https://shelfcloud.io/` | 200, landing page ("Save a link. Get the gist.") | | `https://shelfcloud.io/how-it-works…link
receivedOne correction after the code deploy that followed: `/` no longer 302s. `main` at `d95efd6` was rebuilt into production at 22:11Z, so `shelfcloud.io/` now returns 200 with the public landing page, and `/how-it-works`, `…link
receivedDone. The vps-caddy image now bakes the config and certs, and the container was recreated from it. - Rollback image: `vps-caddy-rollback-2026-11-14-0120` (the pre-rebuild container). - Live `/srv` was snapshotted and sy…link
resultready: Follow-up for the live-cutover status is done. The hostname strings in code were already merged in the earlier slices (#29 docs 978b664, #30 Android 69a8cdd, #32 iOS d86d4ef); this turn added the remaining decisi…link
resultdropped: PR #36 (nuuritas/shelf-cloud) was already merged by nuuritas (squash commit e307e58) at 2026-11-13T22:11:07Z, about a minute after this review ticket began; it was still OPEN at the first state check and merged…
decidedAn allowed account's issue that no other rule covers and must not be ignored; the operator-only change is specified and the ticket answers with the exact operator steps, without a PR.
openedOps: bake shelfcloud.io vhosts into vps-caddy imagelink
decidedAn allowed account's issue that no other rule covers and must not be ignored; the operator-only change is specified and the ticket answers with the exact operator steps, without a PR.
openedOps: close out the shelfcloud.io cutoverlink
decidedPR #36 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #36: sign up inside web and native appslink
receivedfeat(auth): sign up inside the web and native apps ## What A first-time user had no way in: `/login` only had a small text link to sign-up, and both native apps only accepted an existing Shelf Cloud account. Sign-up now…link
receivedUpdate: the domain is live already, so the hostname move is no longer blocked on DNS. - Cloudflare proxied apex + `www` exist; edge 308s http→https, `www` 301s to the apex, Let's Encrypt edge cert to 2027-02-11. - Caddy…link
receivedops: bake the shelfcloud.io vhosts into the vps-caddy image (and reconnect shelf-cloud_default) Operator-only. No code change in this repository — do not open a PR for this issue. ## State `shelfcloud.io` and `www.shelf…link
receivedops: close out the shelfcloud.io cutover (SSL mode, HSTS/DNSSEC, legacy redirect) Operator-only. No code change in this repository — do not open a PR for this issue. #27 handles the hostnames written into code; this iss…link
receivedInfra cutover is live as of 2026-11-13. Status of the "Infra / console" section: - [x] DNS: `shelfcloud.io` and `www.shelfcloud.io` are proxied `A` records to `147.93.127.210`; registry delegation to `amit/elisa.ns.clou…link
decidedPR #31 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #31: move the public host to shelfcloud.iolink
receivedCI passed 1/1 on PR #25 at 873cfbd Read github/pulls/25/checks for every check.link
receivedchore: move the public host to shelfcloud.io ## Why `shelfcloud.io` is the product domain now. The clients, the CI notes and the operator docs still named the temporary `shelfcloud.nuritas.tr` host, which would have shi…link
decidedA concrete, self-contained first slice in one new module plus route wiring, with copy sources named and no product decision open; the change rule allows splitting module-scoped PRs and merging each, and the legal copy s…
openedPublic website for shelfcloud.io: home, how it works, pricinglink
received#28 (public site) ships on this same origin, so the two land together. Checked today: `shelfcloud.io` is registered (Squarespace, 2026-11-13) and delegated to Cloudflare (`amit.ns.cloudflare.com`, `elisa.ns.cloudflare.c…link
decidedA concrete, specified rename across docs, app defaults and scripts that no other rule covers; the change rule allows splitting module-scoped PRs and merging each, with generated artifacts and infra named as operator ste…
openedMove the production hostname to shelfcloud.iolink
receivedfeat: public website for shelfcloud.io (home, how it works, pricing, legal) ## Context We now own `shelfcloud.io`. #27 moves the production hostname; this issue is the other half: a public, anonymous-facing site at the…link
receivedchore: move the production hostname from shelfcloud.nuritas.tr to shelfcloud.io ## Context The project now owns `shelfcloud.io`. Production should move there. The service is hostname-agnostic (`PUBLIC_ORIGIN` drives coo…link
decidedPR #26 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #26: prepare iOS app for TestFlightlink
receivedfeat(ios): prepare the app for TestFlight ## Why The iOS app compiled but could not be uploaded: no privacy manifest, no export compliance answer, and no archive/export/upload path that keeps signing material off the ma…link
resultready: Review of PR #24 (nuuritas/shelf-cloud, head 0734d4f) is complete and posted as one approving review: https://github.com/nuuritas/shelf-cloud/pull/24#pullrequestreview-5898317246. Review-only ticket: nothing merg…link
decidedPR #25 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #25: privacy, terms and support pageslink
receivedfeat(web): publish the privacy, terms and support pages ## Why Apple requires a publicly reachable privacy policy URL before a build can enter TestFlight beta review, and the iOS app needs terms and support links that w…link
decidedPR #24 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #24: log out on web, Android and iOS settingslink
receivedfeat(settings): add log out to web, Android, and iOS settings ## What Every settings surface now has an explicit log out. Before this, the web settings page had no logout at all (only the library header), Android's sett…link
resultdropped: PR #23 (docs(deploy): serve the APK from the VPS instead of Releases) was already merged by its author nuuritas at 2026-11-13T20:55:31Z (merge commit 63b00a9, state MERGED) about one minute after the triggering…
decidedPR #23 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #23: serve APK from the VPS, not Releaseslink
receiveddocs(deploy): serve the APK from the VPS instead of Releases ## What `docs/DEPLOY.md` §7.1 now matches what the host actually does: the signed APK is served by Caddy from `/srv/download` on the VPS, and GitHub Releases…link
resultdropped: PR #22 is already merged: state MERGED at 2026-11-13T20:47:12Z, merged by nuuritas (merge commit 700db0f7b16de1a7d837a15dcd9cfdd33b7f4473, head fix/apk-version-from-tag → main). The ticket trigger fired at 20:4…
decidedPR #22 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #22: derive APK version from release taglink
resultready: Audit of main at 5634e70 is posted on issue #19 with one line per finding: (1) met — docs describe the sole built-in https://shelfcloud.nuritas.tr as a replaceable prefill and no doc repeats the false claim; (2)…link
receivedfix(apps): derive the APK version from the release tag The release workflow built with `build.sh` defaults (`VERSION_CODE=10`, `VERSION_NAME=2.0`), so every future `app-v*` tag would publish the same version code and An…link
resultdropped: PR #20 was already merged before this review ticket could act: state MERGED at 2026-11-13T20:44:02Z, merge commit 17c8a595f7109261f42a4b2c7045f7a288ec657e, no existing reviews or review comments. Per the review…
decidedPR #20 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #20: keep signing key off pull requestslink
receivedfix(ci): keep the signing key off pull requests and publish the APK from Releases ## What `apps.yml` named `ANDROID_KEYSTORE_BASE64` and `ANDROID_KEYSTORE_PASS` in a step that also ran on `pull_request`. The `IS_RELEASE…link
resultready: Review-only work complete: posted one approving review on PR #17 at 20:34:40Z (review id PRR_kwDOVtJPZc8AAAABX4d7sg). All four stated fixes are met with line evidence: release signing gated to push of refs/tags/a…
resultdropped: PR #18 was already merged before this review ticket began, so no review was posted. Verified with `gh pr view 18 --repo nuuritas/shelf-cloud`: state MERGED, merged 2026-11-13T20:32:01Z by nuuritas, merge commit…
decidedAn issue opened by an allowed account that no other rule covers: a post-merge audit with conditional doc fixes. Answer rule: create the ticket, post verdicts on the issue, and merge only a small doc fix when a document…
openedPost-merge audit: verify #14's review findings on main at 5634e70link
resultready: Follow-up read-only audit of the merged apps/ work is complete and posted as one comment on PR #14 (https://github.com/nuuritas/shelf-cloud/pull/14#issuecomment-6864233112). No code, push, PR or merge. Audited ma…link
receivedPost-merge audit: verify #14's review findings on main at 5634e70 The `review` rule posted changes-requested on #14 at `c87f039`, then #14 and its follow-up #17 were both merged before either review completed. Two heads…link
decidedPR #18 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #18: malformed-URL case for Worker and Cloudlink
received@nuuritas-agent follow-up audit request — read only, no code changes. Your review here was against `c87f039`. That head no longer exists: the branch was rebased to `07894a6`, merged at 20:25:13Z, and the follow-up #17 w…link
receivedtest(contract): hold the Worker to the malformed-URL case ## What `test/contract/bookmarks.test.ts` skipped the malformed-URL string for every target but Cloud — the only place the old 500-vs-400 divergence could appear…link
decidedPR #17 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #17: keep release key off pull requestslink
receivedfix(apps): keep the release key off pull requests ## What Follow-up to #14, which the superagent reviewed with two criterion-level defects while it was already merging. Both are fixed here, plus two smaller findings fro…link
resultready: Reviewed open PR #16 (nuuritas, head 4224697) and posted exactly one approving review; did not merge, push or edit, per the review mandate. Verdict: the fix is correct. `src/server.ts:390-393` converts `retryAfte…
decidedPR #16 is a pull request by nuuritas, not the agent; the review rule applies. The ticket checks state first and posts exactly one review comment only if it is still open.
openedReview PR #16: release transcript task on retryAfterSec 0link
resultdropped: PR #13 is already handled: it was merged before this review ticket ran (merged at 2026-11-13T20:09:55Z by nuuritas, base main, head plans/coming-soon-free-only), and it has no review comments or reviews (only t…
resultdropped: PR #15 was already merged before review: `gh pr view 15` reports state MERGED, mergedBy nuuritas at 2026-11-13T20:11:26Z, head e65c8c6494108a7964d9646689298d5ffeab3519, and the repository main commit fa1de18 is…
receivedfix(transcripts): let retryAfterSec 0 release a task immediately ## What `retryAfterSec: 0` means "hand the task back and let me claim it again", but the route passed it through `Number(x) || undefined`, which turns an…link
decidedOpen PR #14 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #14: import Android and iOS clients as apps/link
decidedOpen PR #13 by nuuritas, not authored by the agent; the review rule applies and the ticket reviews it without merging.
openedReview PR #13: keep Cloud Pro coming soon, drop billing transportlink
decidedOpen PR #15 by nuuritas that the agent did not author; the review rule applies and the ticket reviews it without merging.
openedReview PR #15: Mac-first YouTube captions with server fallbacklink
receivedfeat(transcripts): Mac-first YouTube captions with a server fallback ## What YouTube rate-limits the VPS, so captions are read on the Mac and posted back. The server keeps the queue and runs the fallback ladder from the…link