V0.4 dev - #13
Merged
Merged
V0.4 dev#13
Conversation
…o AI Snapshot of the uncommitted v0.4-dev work, pushed as a backup before the audit fixes. Does not build yet: the typecheck fails until @mister-industries/shared and tinyservice are bumped (audit REL-1). - Parts move to the tinyparts repo: layered registry (this computer > dev checkout > GitHub > bundled snapshot), folder parts with pins read from pin-* SVG ids, bundled snapshot in assets/tinyparts, launch-time GitHub sync by blob sha with an IndexedDB cache, live dev loop through vite-plugin-tinyparts, Parts editor save/reset, rebuilt pack manager, parts:check / parts:new / parts:sync scripts and docs - Projects: start screen, open dialog (folder, GitHub repo, recents), New Project dialog, save to computer for browser-only projects, browser compile of local folders - Studio AI: agent core moved to src/shared and shared with a new browser agent; read_guide, inspect_circuit, find_parts and read_serial tools; bundled guides with screenshots - Visual: theme object for p5 sketches, serial plotter as the default visual.js, redesigned web export - Housekeeping: version 0.4.0, demo/ removed, old assets/parts JSON and tinyboards art removed Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The renderer already speaks the 1.2 protocol (request ids, board details), but the lockfile still installed shared 1.1.1 and tinyservice 1.0.1, so the typecheck failed and a packaged build would ship the pre-parity backend without board watching or the language-server bridge. - @mister-industries/shared ^1.1.1 -> ^1.2.0 - @mister-industries/tinyservice ^1.0.1 -> ^1.1.0 Typecheck passes; test:circuit 243/243. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Clears what earlier sandboxed sessions and the old circuit editor left in the repo (audit LEFT-1 to LEFT-5, LEFT-7, B.5). - 15 .fuse_hidden* temp copies tracked since v0.2.0; ignore the pattern - scripts/_to_delete and circuit/__tests__/_to_delete (incl. a 633 KB SVG) - tinyStudio-examples-old/ (110 files, superseded by tinyStudio-examples) - tsconfig.web.tsbuildinfo; ignore *.tsbuildinfo - 16 unreachable source files: lib/wireRouting and lib/circuitNets (replaced by circuit/core), WelcomeDialog (replaced by the start screen), UserMenu, BoardSelect, arduinoFileUtils, empty commands/index.ts, the arduino barrel, and the unused Accordion, Avatar, Form, Label, Radio, Separator, Switch and ThemeToggle primitives - 4 unreferenced assets, including the electron-vite template logo - scripts/sza-wrap: a one-machine 7-Zip workaround for electron-builder - Declare the 8 @radix-ui packages the UI imports (they only resolved through the radix-ui meta package) and drop radix-ui, electron-updater, next-themes, react-zoom-pan-pinch, react-hook-form, @hookform/resolvers Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Most of the 2,117 lint warnings were formatting: 192 source files had CRLF endings on Windows checkouts while Prettier expects LF (audit REL-9). A .gitattributes now pins LF for text and marks binaries, so the repo stays consistent whatever core.autocrlf says. Prettier ran over TypeScript, CSS, scripts and root config only. The tinyparts snapshot under assets/tinyparts is excluded: the app compares its file hashes with the tinyparts repo on GitHub, so reformatting it would make every install re-download unchanged parts. No behavior change. Typecheck passes; test:circuit 243/243. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Lint on the sources goes from 113 errors to 4; the remaining four are the any types in VisualPreview, which the sandboxed sketch runner replaces (audit REL-9, REL-10, LEFT-8, GAP-10 follow-up). - ESLint ignores dist-web, vendor and the generated tinyparts snapshot, and stops requiring return types in plain .mjs scripts, which can't have them - Fast refresh: providers move to ArduinoProvider.tsx and SerialProvider.tsx (the context modules keep the hooks, so their importers are unchanged); ThemedToaster, the canvas Selection helpers, wire colours and the sim formatters/CSV export move out of component files - Type the LSP client's JSON-RPC and LSP payloads instead of any - prefer-const fixes, unused import and variable in gen-icon.mjs, unused createService parameter, stale eslint-disable in MonacoEditor - Remove per-message debug logging from the Arduino service, a commented-out log, and the electron-vite template's ping handler and trailing comment - build:mac and build:linux typecheck like build:win; add npm test Typecheck passes; test:circuit 243/243. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The renderer now shows content from anywhere (examples, GitHub repos, pack indexes, dropped .fzpz files), so it is no longer trusted with the disk (audit SEC-1, SEC-2, SEC-3, SEC-4, SEC-6, BUG-1, BUG-2, BUG-7, REL-12). - visual.js runs in a sandboxed iframe (public/sketch-runner, no same-origin) that talks to the app only through postMessage: code, theme, serial lines in; errors out. p5 is served from node_modules by vite-plugins.ts instead of a CDN, so the Visual view works offline. - Main checks every file operation against folders the user picked in a folder dialog (persisted in userData/folder-access.json) plus the examples folder. open-path opens documents and images only; open-external and new windows accept http, https and mailto only. The agent refuses workspaces outside those folders. Recent projects from before this change ask for their folder once more. - File, window and parts IPC move out of index.ts into src/main/ipc. - Part SVG is cleaned with DOMPurify's SVG profile where it is inserted (canvas, palette, Parts editor), leaving the text transforms that run on part art untouched. - Production CSP: no inline or eval script, no CDN, wasm allowed, backend reachable on any localhost port (tinyService moves off 3000 when taken). The dev server adds inline script back for Vite's React Refresh preamble. - Links in docs open outside the app; relative links do nothing, and main refuses to navigate the window anywhere but the app. - Explicit tinyService origin list (enforced once tinyService checks the Origin header); folder deletes use fs.rm; the preload drops its unused non-isolated fallback. - .claude/launch.json gains web-preview to test the production build. Verified in the production web build: no CSP violations, README links open in a new tab, sanitized part art renders in the palette, and the runner draws a sketch with theme colours, serial values and serialEvent, and reports sketch errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… Edit - Studio AI: the timeline, busy state and permission prompt move to lib/agentChat, so switching tabs no longer wipes the conversation, and replies or file edits that arrive while the panel is closed aren't lost (audit BUG-3) - Backend connection: failed attempts that the client retries on its own no longer log console errors (the status bar could say Connected beside one); one warning per outage, and the client's debug logging is off (BUG-8) - Mermaid diagrams follow the app's light/dark mode instead of a hardcoded dark palette, and re-render when it changes (BUG-6) - The circuit edit toggle reads Edit / Done instead of a bare icon, matching the empty-canvas hint (UX-2) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The bundled core pack is Fritzing-derived CC-BY-SA art. tinyparts carries its ATTRIBUTION.md, but parts:sync only copied the files a pack loads, so the notice never reached the app (audit REL-4). The sync now copies it, outside the pack's hash map so the launch-time update check doesn't see the pack as changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- appId cc.tinystudio.app (was the electron-vite template's com.electron.app, which Windows uses to group taskbar icons and notifications); the runtime app user model id matches (audit REL-6) - files is now an allowlist of out/ and package.json. Before, the default **/* put docs, scripts, sources and fetched binaries into every install; an unpacked Windows build now holds only node_modules, out and package.json under resources/app (REL-7) - Remove the example.com update feed and dev-app-update.yml (nothing imports electron-updater any more), the camera, microphone and folder usage descriptions the app never uses, the third-party Electron download mirror, and the electronjs.org Linux maintainer - About tinyStudio in the header menu: version, licence, and the third-party work the app ships with, including the Fritzing parts' CC-BY-SA credit (R-6) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 167 classes using the old tinyForge palette names (bg-navy-900, text-fg-3, text-cyan, border-navy-600…) now use the semantic tokens those names already pointed at, so nothing renders differently; the alias block and its Tailwind colour mappings are deleted (audit LEFT-9) - Remove the unused .ts-riso and .tf-gradient-text CSS - Drop a stale TODO above code that already does it (GAP-10) and type the Monaco beforeMount parameter (CODE-9) - .vscode/settings.json keeps the formatter settings and loses personal Peacock colours (LEFT-11) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Breadboard and schematic keep their own zoom and pan. Switching views used to remount the canvas and re-fit it every time (audit GAP-6) - Pin and net-label hit targets grow to at least 12 screen pixels however far the view is zoomed out, instead of a fixed 16 world pixels that shrank to 4 at the minimum zoom; the pin dot stays centred Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- lib/storageKeys.ts names every localStorage key the renderer uses. The theme moves from the template's 'vite-ui-theme' to 'tinystudio.theme', carried over on first launch, and the exported Visual page reads the same key as the app. - serialBus keeps its buffer in module state with a listener API, so VisualPreview and Studio AI's read_serial stop reading window.__tinySerial and the 'tinyserial' DOM event. sketchTheme caches without window.__tinyTheme. - src/shared/tinyservice.ts holds tinyService's default port for both the main process and the renderer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
EditorPanel.tsx was 766 lines holding the Code, Circuit and Visual views, the new-sketch dialog, the sketch templates and the project-file hook. It now only picks the view; each piece lives in components/editor/. The Circuit wrapper is CircuitPane, so it no longer shares a name with circuit/views/CircuitView. No behaviour changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fileCommands.ts wrapped every action in a class with a constructor and an execute() method, and a few carried undo() methods nothing called. command.ts held a CommandManager and BatchCommand that were never used. Each action is now an async function (openFolder, loadGitHubProject, refreshWorkspace, openFileItem, renameItem, ...), and command.ts is gone. Undo for the circuit editor lives in its own store and is untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- README describes 0.4: circuit.json, tinyparts, the tinyService installer for the browser build, Node 22, current known issues. - INTEGRATION_GUIDE.md covers the child-process backend, port selection, how the renderer finds the service, and the open origin check. - packaging-windows.md matches the build as it is: asar off, npm deps, only out/ and package.json shipped, the GitHub client id, no 7-Zip wrapper. - CHANGELOG.md (everything since 0.2.0) and THIRD_PARTY_NOTICES.md. - docs/state-management.md: where each kind of state belongs. - The circuit spec notes that the tinyparts layers replaced registry.ts. - Agent working logs move to docs/archive/. - CI runs typecheck, lint, tests and the web build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- docs/release-plan.md: the owner's decisions on every open audit item, ordered into 0.4.0 and 1.0 beta steps with file pointers, done-when checks, the rules for working in this repo, and what waits on the owner. - docs/audit-2026-09.md: the 13 September audit as Markdown, each item marked with the owner's flag or discuss and its outcome (the fixing commit, or where the decision sits in the plan). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nothing could switch the editor on: no code dispatched setEditorMode, so the BlocklyEditor component, the Arduino block definitions, the blockly package and its 22 media files in public/ shipped for a feature nobody could reach. Drop them, the editorMode state and the licence entries. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
npm audit fix: 16 of 18 advisories, including the critical one in tar (7.5.20 -> 7.5.22) and Electron 42.5.0 -> 42.11.3. The two left are a uuid advisory reachable only through tinyService's own dependency. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Opening the Circuit or Visual view used to write a default file into any project that lacked one, and silently convert an old diagram.json. Both views now show what's missing and a button: Create circuit, Create visual.js, or Convert (which writes circuit.json and keeps the original as diagram.json.bak). Opening a folder that holds only an .ino leaves it unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
When the backend child exits without being asked, ServiceManager now restarts it once on the same port, so the renderer's WebSocket URL stays valid. If the restart fails, or the service dies again within a minute, main sends service:error with stopped:true and BackendPrompt shows "tinyService stopped" with the reason and a Restart button (new service:restart and service:get-status IPC). The decision lives in serviceRestart.ts, a pure function with tests; the test runner now scans all of src so main-process tests are picked up. Two fixes found while testing on the owner's machine: - The free-port probe bound 127.0.0.1 only, so it missed the installed tray tinyService listening on the wildcard address. The child died with EADDRINUSE while the health check talked to the tray service and passed. The probe now binds the way the service does. - The shared WebSocket client stops after 10 reconnect attempts, so a backend that came back later stayed "Disconnected" until the app was reopened. checkStatus() now kicks a reconnect, which makes the status bar's Retry work and lets the Restart button reconnect at once. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The agent was pinned to claude-opus-4-8. It now defaults to Opus 5 and the Studio AI settings offer Opus 5, Sonnet 5 and Haiku 4.5. The list, the default and each model's request options live in shared/agentModels.ts: Opus 5 and Sonnet 5 get adaptive thinking with effort "high"; Haiku 4.5 predates both, so it gets a fixed thinking budget and no effort setting. The choice is stored next to the API key on desktop (settings.ts, new settings:get-model / set-model IPC) and under tinystudio.agent.model in the browser. Changing it starts a new chat, since the history was produced by another model. The panel header shows the chosen model instead of a hardcoded name. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
tinyparts 0085e41: new breadboard art and icons for the tinyCore, tinyDisplay, tinyProto and tinySpeak. The pads are now <circle>s, so the two tests that edit the art to move a pin match on cx and shift by one pitch in viewBox units (5.4) instead of the old <rect> x. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
An Experimental badge and a one-line note at the top of the Simulate panel, and the same word in the toolbar button's tooltip. Findings from trying a resistor divider, an LED circuit and a tinyCore-driven LED are recorded under beta step 5 in docs/release-plan.md: the first two are right, the third reads 0 V because boards aren't modelled. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Arrow keys move the selected pin by one unit of the art's own coordinates (the viewBox fitted into the part box), Shift by 0.1 in. While the pins come from pin-* shapes, the nudge edits the shape in the SVG itself (movePinInArt: circles by cx/cy, rects by x/y, anything else by a leading translate, mapped through ancestor transforms and verified by a rescan), so the file stays the source of truth; only a drag pins positions down in part.json. Ctrl+Z / Ctrl+Y undo and redo pin, size and art changes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With no project open the Files panel now only says so; creating and opening projects happens on the start screen and in the header menu, and the menu uses the start screen's names (Create new, Open existing, Try an example; Close project). Every shortcut the app defines now lives in lib/shortcuts.ts. The code view, the circuit canvas, the circuit toolbar tooltips and the parts editor read that list instead of comparing keys themselves, and a Keyboard shortcuts dialog (header menu, or Ctrl+/ outside a text field) renders it grouped by where each one applies. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Adds reportError(title, error) to lib/notify (error toast with the reason, a bell entry, the full error on the console) and writes the rule into docs/code-conventions.md, linked from the README: a failure of something the user did gets a toast; a background failure gets console.warn with context; a catch that ignores an error says why. Converts the call sites. Actions that already toasted now go through reportError; the Board and Library managers report a failed list instead of showing an empty one; launch-time reopen, status checks and README refreshes warn instead of erroring; the file-system wrappers stop logging errors they rethrow (the caller reports), which also removed eight try/catch blocks that only rethrew. The main process, the preload bridge and the error boundary keep console.error: those are the app's own bugs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Comments now say what the code does and why, not what it replaced; the history lives in git. docs/code-conventions.md states the rule. The remaining matches for "old", "no longer" and "previously" describe present behaviour (a renamed tab's old path, a part no longer in the circuit) or are user-facing text. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
scripts/gen-example-tags.mjs now lives in tinyStudio-examples/tools with a workflow that writes tags into that repo's examples.json on every push to main. The manifest copies here (examples.json, examples-tagged.json) and the fallback to them in lib/examples.ts are gone: the Examples tab reads the examples repo alone. docs/web-deploy.md describes the current setup instead of calling the examples repo a future step. tinyparts gets a CI workflow in its own commit (step 10 of the plan). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- folderAccess: granted folders and their subfolders, siblings refused, the examples folder, case rules per platform, grants persisting. - externalLinks and the open-path allowlist (canOpenFile, now exported from ipc/files): only web and mail links leave the app; only documents and images open in other programs. - fileCommands against a fake fileSystem: openFolder builds the tree (folders first, natural order) and opens the sketch; refreshWorkspace keeps every id; renameItem renames on disk and moves the open tab. - readSavedTheme (now exported): the pre-0.4 key migrates once. The runner stubs `electron` for main-process modules and resolves the renderer's @Renderer alias. Found by the rename test: a renamed file's tab kept its old name; rebaseOpenFiles now updates the name too. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
tinyService 1.2.0 listens on 127.0.0.1 and refuses browser origins it doesn't know. The dependency is ^1.2.0 (package-lock.json still pins 1.1.0 until the package is on npm; run npm install then), the origins passed are file://, http://localhost:*, https://studio.tinycore.cc and https://app.tinystudio.cc, and the Known issue is gone from the README and CHANGELOG. Two changes the loopback bind needed in ServiceManager: - The free-port probe now binds 127.0.0.1 and the wildcard address in turn. Windows allows one bind beside the other, so a single probe missed the installed tray tinyService and the app's own child died with EADDRINUSE. The probe lives in freePort.ts with tests. - The health check and the renderer's WebSocket URL use 127.0.0.1, not localhost, which can resolve to ::1 first; and a cold start gets 30 seconds instead of 10. Verified on the owner's machine with the tray app (a local 1.2.0 build) holding 3000: the app takes 3001, a foreign Origin gets 403, the dev server's origin and the hosted origins get 200. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The tinyStudio OAuth app's client id is public and now built in (src/shared/githubApp.ts), used by the desktop device flow, the web build and the vite configs; VITE_GITHUB_CLIENT_ID still overrides it. The web build signs in with the authorization-code flow and PKCE (lib/githubWebAuth.ts): the page goes to github.com and comes back to /auth/github/callback on its own host, and netlify/functions/github-token.ts exchanges the code using GITHUB_CLIENT_SECRET from the site's environment. The function accepts the app's origins, the transitional app.tinystudio.cc, deploy previews at deploy-preview-N.preview.tinystudio.cc and localhost, and checks that the redirect URI belongs to the calling origin. The router ignores /auth/*, and App.tsx finishes the sign-in and returns to the page it started from. The pasted token stays under Advanced. The web app's address becomes studio.tinycore.cc per docs/accounts-and-domains.md, which is committed here with the release plan's step 6 rewritten to match, and github-auth.md, web-deploy.md, packaging-windows.md, INTEGRATION_GUIDE.md and the README updated. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Schematic view of the parts editor gets a second mode, Symbol: a body (rectangle, circle, or an op-amp triangle) with a fill (none, white, soft yellow), a name, and pins placed by side and grid slot, dragged into place on the canvas or moved with the arrows in the pin list. The draft (circuit/parts/symbolDraft.ts) renders to a schematic SVG with pin-* markers on the 0.1 in grid, so it saves as the part's schematic.svg and loads back through the same pipeline as hand-drawn art; tests check that the file scans back to the pins it was drawn from for every shape and fill. It starts from the generated-box layout, sized to its pin names, or from the part's existing art. Undo covers every change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
package.json asked for @mister-industries/tinyservice ^1.2.0, which isn't published yet, so npm install failed with ETARGET. The dependency now points at local-packages/mister-industries-tinyservice-1.2.0.tgz, packed from tinyService's release/1.2.0 branch. npm install, npm ci and the Netlify build work without the registry. After 1.2.0 is published: set the dependency back to ^1.2.0, delete local-packages/ and run npm install. The release plan and docs/accounts-and-domains.md say the same. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
On localhost the page sent GitHub's code to https://studio.tinycore.cc/.netlify/functions/github-token, a domain that doesn't exist yet, so sign-in ended with the browser's bare "Failed to fetch". - Every page now exchanges the code on its own site. npm run dev:web serves the Netlify function file itself (githubTokenDev in vite-plugins.ts), with GITHUB_CLIENT_SECRET from .env.local, which git now ignores, or the environment. The file is read on every request, so no restart is needed. - When nothing answers, or the site has no function, the error names the host and says what to do instead of "Failed to fetch". - The function crashed on preflight requests: it built a 204 Response with a body, which the Response constructor rejects. 204 replies are now empty. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Browser sign-in finishes in App.tsx when GitHub sends the page back. It saved the account but told nothing, so the header's Sign in button and the GitHub panel kept showing "signed out" until a reload. saveAccount now fires the account event itself, so every way of signing in or out updates every surface. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Push used GitHub's contents API once per file, so pushing five files made five commits, deleted files were never removed, and a file changed on GitHub since the last sync was silently overwritten. - Push (lib/githubSync.ts) makes one commit through the Git Data API with the typed message or a default, deletions included. It compares GitHub's blob ids with those recorded at the last sync and stops, naming the files, instead of overwriting someone else's change. - Pull keeps local edits to files GitHub also changed and says which, takes GitHub's version of everything else, and removes files GitHub deleted. - lib/repoSync.ts keeps one shared view of the changes, refreshed after any write through lib/fileSystem.ts (FILES_CHANGED_EVENT). A bar above the editor shows unpushed changes to a repo you can push to, with Push; the GitHub tab gains a commit message box and lists deleted files. - Opening a folder whose .git points at a GitHub repo links it to the commit it has checked out (lib/gitClone.ts, commands/cloneLink.ts). Links made by hand are left alone. docs/github-sync.md describes the link, Push, Pull and clones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
docs/full-git.md outlines real clones with isomorphic-git: Node fs on desktop, a File System Access adapter in a worker plus a first-party git proxy in the browser, LightningFS for Firefox and Safari. It starts with a spike to check line endings and index compatibility with Git for Windows. The release plan's beta list gains the item. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The landing page is a page on the docs site instead of a new Netlify site. Record how docs sign-in works, correct which repo the live docs come from, and note the missing cookie domain in tinycore-cc's browser client. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.2.0 is published, and the registry tarball is byte-identical to the one packed from release/1.2.0 (same integrity hash), so the local tarball and local-packages/ go. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The palette becomes a rail of tabs: Search, Core, Mine, then one tab per installed pack, with every SparkFun pack in one tab. Core opens with the tinyCore boards and follows Fritzing's Core bin (Basic, Input, Output, Power, Breadboard View); Mine holds imported and new parts. Tiles are icons in a grid, named on hover. Each pack's pack.json decides its layout: parts in listing order, under the Fritzing section their entry names, in the order "sections" gives. Package variants and the simulation sources and probes get no tile; search finds them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The tinyBoards row in Core is titled "tinyBoards". Saving a part to tinyparts from the parts editor keeps its pack.json entry's other keys, so the part stays in its palette section. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Generated from tinyStudioLogo.svg: - build/icon.ico (16 to 256 px, the sizes the old one had), build/icon.png (1024 px) and a square build/icon.svg - build/icon.icns (16 to 1024 px, with the margin macOS icons sit inside) - resources/icon.png, the window icon, now a 512 px square instead of the 407 x 163 wordmark - favicon.svg, linked from index.html: the web app had no favicon Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…fixes - Text, comments and docs use colons, commas and parentheses instead of em dashes. - Every panel shows the same "Open a project to ..." message before a project is open (NoProjectMessage). - A blank circuit opens ready to edit; one with parts opens view-only. - File explorer, status bar and Circuit view toolbar reworked. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
release.yml builds on one runner per system when a v* tag is pushed and drafts a GitHub release with the installers, SHA256SUMS.txt and notes from the changelog; run by hand, it's a dry run that keeps the builds as artifacts. Each installer now carries only its own system's arduino-cli and language server. macOS builds both arm64 and x64 dmgs, ad-hoc signed so Apple Silicon opens them; Linux drops snap. The README links the downloads, and docs/releasing.md has the steps. 0.4.0 is dated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tinyGlow now fixes its pin positions in part.json (its LED-strip pins aren't in the art), so the family test accepts fixed pins; the stack connector is still checked against tinyCore's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
✅ Deploy Preview for tinystudios ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Thanks for your interest in tinyStudio! 🙏 This project is in early alpha and is not accepting external contributions right now, Contributions will open up as the project stabilizes. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Check changelog for all updates.
Complete overhaul of UI, circuit view, visual view, AI coding agent integration, tinyService updates, project management and file handling, and GitHub integration.