IMPORTANT: GitHub Issues and pull requests are the authoritative trackers for this project. Do not create a parallel local issue database or markdown task list.
- Search existing GitHub issues and pull requests before creating new work.
- Link implementation work to the relevant issue or pull request.
- File newly discovered actionable work as a GitHub issue with reproduction details, scope, and acceptance criteria.
- Use labels, milestones, and cross-references to express priority, release scope, and dependencies.
- Close issues only after the work is complete and verified; otherwise document why the item is deferred or no longer applicable.
- Do not duplicate existing GitHub issues.
- Keep issue descriptions current when scope or reproduction steps change.
- Store AI-generated planning documents in
history/, not the repository root; the persistent rootIMPLEMENTATION.mdtracker described below is the exception. - ALWAYS run
coderabbit --plainbefore committing to catch issues early. - All commits must use the
taliesin-aiidentity. - Never push until the user gives explicit manual confirmation.
AI assistants often create planning and design documents during development:
- PLAN.md, IMPLEMENTATION.md, ARCHITECTURE.md
- DESIGN.md, CODEBASE_SUMMARY.md, INTEGRATION_PLAN.md
- TESTING_GUIDE.md, TECHNICAL_DESIGN.md, and similar files
Best Practice: Use a dedicated directory for these ephemeral files
Recommended approach:
- Create a
history/directory in the project root - Store all ephemeral AI-generated planning/design docs in
history/; keep the persistent rootIMPLEMENTATION.mdtracker in place - Keep the repository root clean and focused on permanent project files
- Only access
history/when explicitly asked to review past planning
Example .gitignore entry (optional):
# AI planning documents (ephemeral)
history/
Benefits:
- Clean repository root
- Clear separation between ephemeral and permanent documentation
- Easy to exclude from version control if desired
- Preserves planning history for archeological research
- Reduces noise when browsing the project
The TypeScript runtime in v3/internal/runtime/desktop/@wailsio/runtime produces two
independent artifacts, and rebuilding one but not the other is a common and confusing
mistake:
| task | output | consumed by |
|---|---|---|
task v3:runtime:build:assets |
v3/internal/assetserver/bundledassets/runtime.js (+ .debug.js) |
the webview, served at /wails/runtime.js |
task v3:runtime:build:package |
dist/ in the package directory |
an app's frontend, via node_modules |
After changing anything under src/, rebuild both. CI verifies the committed bundles
match build:assets output exactly, so the bundles must be committed with the change.
An application imports @wailsio/runtime from npm, so it will not see runtime changes made
in this checkout. To test an app against the working tree:
task v3:install-runtime -- ./path/to/your-app/frontendUndo with npm install @wailsio/runtime@latest in the same directory.
Some subsystems have a dedicated internals page written for agents. Read the relevant one before changing that code — several of its decisions look arbitrary until you know which measured bug they prevent.
- Streams (
pkg/application/stream*.go,runtime/.../stream.ts):docs/src/content/docs/guides/advanced/streams-internals.mdx. Covers the held-poll design, the buffer constants and how to pick them, session and connection lifecycle, transport selection, and what is unfinished. To convert an existing WebSocket implementation, followdocs/src/content/docs/guides/streams-from-websockets.mdx— a mechanical checklist, including the differences that break silently.
IMPORTANT: The IMPLEMENTATION.md file at the repository root is a persistent tracking document for the GTK4 / WebKitGTK 6.0 / GTK3-legacy implementation work. It is NOT an ephemeral planning document.
As of 2026-05-16 (issue #5459), GTK4 + WebKitGTK 6.0 is the default Linux stack; GTK3 + WebKit2GTK 4.1 is a legacy opt-in (-tags gtk3) for one v3 cycle and is scheduled for removal in v3.1. The default-flip rationale is recorded in IMPLEMENTATION.md Decision 1.1.
- Update with EVERY commit that touches GTK4/WebKitGTK 6.0 or legacy GTK3 code
- Track all architectural decisions with context, decision, and rationale
- Maintain progress status for each implementation phase
- Document API differences between the GTK4 default and GTK3 legacy paths
- Keep file references accurate and up-to-date
- Phase completion status (✅ COMPLETE, 🔄 IN PROGRESS, 📋 PENDING)
- New decisions made during implementation
- Files created or modified
- Changelog entries with dates
- TODO items discovered during work
When updating IMPLEMENTATION.md:
docs: update implementation tracker for [phase/feature]
When ending a work session, complete the applicable steps below. Never push without explicit manual confirmation from the user.
MANDATORY WORKFLOW:
- File issues for remaining work - Create issues for anything that needs follow-up
- Run quality gates (if code changed) - Tests, linters, builds
- Update issue status - Close finished work, update in-progress items
- Prepare for remote sync:
When the worktree is clean and synchronization is intended, run
git status
git pull --rebase. Rungit pushonly after the user explicitly confirms it. - Clean up - Review stashes and remove only obsolete ones; prune remote branches
- Verify - All intended changes are present and committed when requested
- Hand off - Provide context for next session
CRITICAL RULES:
- Use the
taliesin-aiidentity for every commit. - Do not push without explicit manual confirmation.
- Report clearly whether changes are uncommitted, committed locally, or pushed.