Remove the board-tile Actions hamburger and its popup. Add Duplicate Board — Without cards immediately below Duplicate Board in the All Boards multiselection sidebar, using the shared confirmation, selected-board guard and existing copyBoard permissions.
Verify both copy modes for two selected boards, cancellation, preserved source cards and denied non-admin duplication and archiving. Update the All Boards documentation.
Thanks to xet7 !
Mark the Monte Carlo and size versus cycle time option submit buttons as primary so existing named and custom theme rules supply their background and readable text colors. Verify both pages in default blue, red, dark and custom themes, including hover and keyboard focus.
Thanks to xet7 !
Keep desktop card windows unpainted until initial anchoring completes. Prefer the right side in LTR and the left side in RTL whenever it fits; otherwise use the other side and keep the window inside the viewport.
Verify first-visible-frame geometry for preferred and fallback sides in both directions, and retain passing date-save position regressions.
Thanks to xet7 !
Align each radio button to the left of its label. Verify rendered control geometry, insertion above and below, and read-only restrictions in Chromium.
Thanks to xet7 !
Date saves and removals refresh the board publication. Preserve the mounted view while that same board refreshes, instead of rebuilding its windows at the default dock and anchoring them again. Reset readiness on board navigation as before.
Verify save/delete for Received, Start, Due and End in Chromium, including persisted dates, badge updates and frame-by-frame window position. Cover initial loading, same-board refresh and navigation in a focused readiness test.
Thanks to xet7 !
Record an individual finding and remaining verification for every open issue. Browser tests confirm swimlane names on minicards and board-specific view visibility already work; retain the remaining 133 requests with their outstanding scope.
Thanks to sebastianha and xet7 !
Fixes#1748, fixes#2107,
Reuse owner-scoped unsaved edits, restore titles only before local typing, and clear saved titles after successful insertion. Verify restoration, list isolation, successful saves and denied cross-user writes.
Thanks to TutloTutlo and xet7 !
Fixes#810,
Offer label combination mode under Filter, retaining exclusions and no-label alternatives. Restore active title, list and advanced text when the panel is recreated. Verify actual calendar grid/list results, unmatched and cleared filters, and label combinations in Chromium; pure tests cover reset and invalid modes.
Thanks to Trunkslike, TheBigBloodyB, Roemer and xet7 !
Fixes#2044,
Fixes#3361,
Use the existing Add Swimlane popup for above/below insertion. Restore reachable board-admin archive and duplicate controls in the All Boards tile Actions menu. Preserve existing server permission guards and confirmation behavior. Unit and Chromium tests cover ordering, successful operations, cancellation and rejected writes.
Thanks to bentiss and xet7 !
Fixes#2131,
Fixes#2644,
Record the 149-open-issue follow-up audit with implementation evidence,
original regression commits where available, and explicit remaining scope.
OIDC logout, case-insensitive mentions, remote mobile card closure,
alphabetical member selection, bulk card colors, existing-card subtasks
and minicard field visibility already work. Extend executable logout-hook
coverage and add browser checks rather than relying on method names alone.
All 31 focused Node suites and 27 distinct Chromium scenarios pass across
this audit and its two separately committed fixes. No live external IdP
or FerretDB backend matrix was tested.
Thanks to RowhamD, Usernameisalreadytaken99, rptl, czinkos, bhueck,
Vida444, xefladrero and xet7 !
Fixes#5061,
Fixes#1938,
Fixes#3114,
Fixes#1686,
Fixes#2160,
Fixes#3213,
Fixes#3198,
History restored a list but left deletion markers on its cards. Replay the
existing soft-delete/restore modifiers across the same board/list and batch.
Keep independently deleted cards untouched and refuse lifecycle rows for
lists moved to another board. Preserve the deletion batch in lifecycle
content and record the actual lifecycle state in history snapshots.
The browser regression failed against the previous implementation. It now
passes undo, redo and undo again with persisted card checks. Separate
read-only rejection, pure negative cases, existing history tests and
flow/time-history browser regressions pass.
Thanks to rawwerks and xet7 !
Fixes#1023,
The card-link picker excluded every real card on its own board, and the
server rejected same-board sources. Include the current board and exclude
only sources already mirrored. Preserve coordinate and write validation,
reject link chains, and prevent whole-board self-links through both buttons.
Labels already use the source card. Verify live source-to-mirror updates
and edits through the mirror, same-board authorization failures, whole-board
self-link rejection, and existing cross-board behavior in Chromium.
Focused linked-card Node regression suites pass.
Thanks to RinTheCatato, mohamed-aziz-chamakh and xet7 !
Fixes#5683,
Audit the 159-open-issue snapshot against existing source and regression
coverage. Record the implementations and their original regression commits
in docs/DeveloperDocs/Open-Issue-Completion-Audit-2026-09.md.
Visibility descriptions, field ordering, archived subtasks, linked covers,
checklist-to-subtask conversion, drafts, subtask badges, archive details,
rule toggles/editing and standalone SAML already have implementations.
All 28 selected Node regression suites pass; live browser/IdP tests were
not rerun for this documentation-only audit.
Remove completed TODO entries, correct two unrelated issue references,
and retain incomplete feature requests and deployment investigations.
Thanks to Meeques, Somantiq, javen9881, matrixes, bastos77,
therampagerado, sfahrenholz, Gobliins and xet7 !
Fixes#4421,
Fixes#3877,
Fixes#3409,
Fixes#2498,
Fixes#2422,
Fixes#3243,
Fixes#3207,
Fixes#1504,
Fixes#2322,
Fixes#708,
Describe the new reports, reused data, retained history, issue audit and validation limits. Keep released sections unchanged.
Thanks to sojournerc, ladistrupl, zombah and xet7 !
Keep card and checklist activity after deletion, retain card snapshots for
flow reports, and show recorded hour adjustments by their actual author in
Time and its PDF/Excel exports. Record whole positions centrally, including
optional move reasons and direct REST edits. Append undo/redo checkpoints
so blocker intervals and time corrections follow reversals through time.
Audit the open time-related requests against existing features. Exact inline
activity timestamps requested in #1673 already exist in dateDisplay and the
activities template; add a browser regression for that existing behavior.
Reuse established locale terminology for the new compact labels. Labels
outside English and Finnish are low-confidence glossary combinations for
human review; existing translations remain untouched.
Validation: 43 focused Node suites pass. Fifteen Chromium scenarios pass
across flow analytics, time history and existing REST move coverage, including
real chart and Time PDF/Excel exports, undo/redo, retention and access denial.
Thanks to ladistrupl, zombah and xet7 !
Fixes#1598,
Fixes#1673,
Reuse board dates, activities, estimates, dependencies and universal History for Aging WIP, Blocker Analysis, Monte Carlo forecasts, XmR and size versus cycle time. Keep Chart.js lazy loaded and share parameterized PDF/Excel exports. Record dependency edits in History with undo/redo and board-boundary validation.
Validation: 21 focused Node suites and 8 Chromium tests pass, including every chart download and dependency undo/redo. Report labels reuse native locale vocabulary and formula notation; compact explanatory wording outside English/Finnish has low confidence and welcomes review.
Thanks to sojournerc and xet7 !
Fixes#1476,
Fix InactiveBleed across REST, attachment and export authentication, header login, LDAP token issuance and People account controls. Apply administrator-created account flags before insertion and guard token creation atomically.
Thanks to esbrito81 and xet7 !
Recognize empty swimlane bodies as mixed-selection drop destinations while keeping swimlane drag starts on headers. Replace the count-only indicator with a tilted stack of selected object names and icons rendered as text. Verify two-list moves, card parents, ordering, collapsed containers, both handle modes and persistence after reload.
Thanks to xet7 !
Reuse one control for draggable, card visibility and swimlane/list settings columns. Apply explicit booleans atomically through board-admin authorization, deriving column fields from existing row definitions and retaining personal overrides. Cover every column, repeated clicks, persistence, isolation and denied updates.
Thanks to xet7 !
Default swimlanes, lists, cards, checklists, checklist items and subtasks to draggable. Share settings UI and policy, update ordinary sortables reactively and enforce the policy for mixed-selection drags while retaining explicit menu moves. Cover persistence, authorization, independent defaults and both checklist handle modes.
Thanks to xet7 !
Select lists, swimlanes, cards and checklist content together. Preserve parent hierarchies, validate move permissions, and create a destination card for checklist content dropped onto a list.
Thanks to xet7 !
Use the same progress display and sortable lifecycle on minicards and opened cards. Restore sorting after unfolding, honor both drag-handle modes, and distinguish a checklist drop from board-list card conversion. Verify persisted reordering and transfers across lists and swimlanes.
Thanks to xet7 !
Read destination rows in document order instead of relying on direct siblings, which can be inline-form wrappers. Exclude the drag helper and placeholder. Reproduce moving 45 from last to first and then into the third placeholder, with handles enabled and disabled, and verify persisted order after reload.
Thanks to AmigaAbattoir and xet7 !
Fixes#6723.
Capture the destination checklist and neighboring items before cancelling the sortable DOM move, so Blaze persists the intended order rather than the original position. Cover boundary and cross-checklist moves, card conversion, and actual dragging with reload persistence.
Thanks to AmigaAbattoir and xet7 !
Fixes#6723.
Document SAML administration and its verification limits, restore the People navigation entry, and order the release entries by feature, interface, fixes and release tooling.
Thanks to xet7 !
Provide shared catalog-driven settings controls with environment fallback, live admin overrides, platform configuration and regression coverage. Document the remaining live identity-provider validation requirement.
Thanks to xet7 !
Give SAML and standalone provider actions the same blue background and white text and icons as the password Login button. Verify normal and hover colors in Chromium.
Thanks to xet7 !
Keep the redirect guard after failed login attempts, require writable session storage, and recheck login state after the asynchronous settings request. Cover callback reloads, failures, storage restrictions and delayed responses.
Thanks to Alishara and xet7 !
Fixes#6722,
Resolve the site administrator role from the authenticated download token so the Files Report can open private-board attachments without requiring board membership. Keep ordinary private-board readers subject to membership checks.
Wrap the shared attachment controls inside narrow table cells so neighboring cells cannot intercept the download button.
Verify DOCX, image and PDF preview/download flows in Firefox and Chromium, plus negative authorization cases and eight focused Node suites.
Thanks to xet7 !
Follow moved documentation and component-owned templates, preserve reviewed translations, update date-format guards and account for AuthTraceBleed coverage. Recognize the backup containment guard and select the release npm version locally.
Exercise invitations with a separate member and an open sidebar, match the multiline swimlane composer, and wait for an interactable sign-in field before keyboard navigation.
Verified all 1216 Node suites, targeted checks in three browsers and nine real backup/restore integration checks.
Thanks to xet7 !
Replace the deleted local meteor-node-stubs fork with npm 1.2.30, update Rsdoctor to 1.6.4 for CVE-2026-61782, and remove obsolete build-tool exclusions from Dependabot. Add guards for tracked local manifests and patched lockfile versions.
Refresh APT indexes in the failed managed LXD base after a package download 404 and retry native and variant builds once. Keep unrelated failures fatal and preserve container state.
The app answered successfully but the EXIT trap waited forever after signaling only its launcher. Run the app in an isolated process group, terminate all descendants with bounded escalation, bound HTTP probes, and retain smoke logs. Cover successful startup, failed startup, stalled HTTP and TERM-resistant children on macOS.
Thanks to xet7 !
Keep libatomic1 in Docker runtime dependencies, package architecture-matched libraries and licensing in Linux ZIPs inherited by AppImage and Flatpak, and include the library in Sandstorm. Install it explicitly in native and emulated builders; remove inherited Linux runtime files from Windows and macOS repacks.
Thanks to Nissulya, PetitManchot and xet7 !
List Mac app archives with unzip, handle shallow telemetry scanner paths, ship the Docker deny-hash policy, and discard inherited foreign ELF addons that shadow target prebuilds. Add offline regressions and a native macOS archive check.
Thanks to xet7 !
Fix the legitimate invitation flow and unnecessary anonymous metadata subscription reported in #6692 comment 5811473169. Keep protected profile writes forbidden. Existing account blocks require administrator review; the separate history checksum report still needs the affected stored rows.
Thanks to Nissulya and xet7 !
Review 46 changed runtime files and refresh the telemetry inventory without weakening the release gates. Check the inventory locally before release mutations and in regression tests.
Fix CodeQL alerts 543 and 544 in the loopback login fixture with bounded anchored OAuth header parsing and generic HTTP failures. Remove the same stack response from the shipped Sandstorm adapter. Preserve successful signatures and proxy authentication; add malformed-input, negative source and live browser coverage.
Validated macOS ARM64 build, 1577-file source inventory, 42926-file bundle scan, ten OAuth/Sandstorm browser checks and focused security/release tests. Hosted CodeQL has not been rerun.
Thanks to GitHub CodeQL and xet7.
Defer password-form replay to the next task so Firefox finishes dispatching the original native submit event. Keep duplicate submissions blocked and retain useraccounts validation and two-factor handling.
Reproduced registration success followed by silent login failure in Firefox 156.0.1. Verified wrong-password rejection, click and Enter login, and cookie resume in the rebuilt app. Add native-event browser and negative unit coverage; Chromium password/TOTP and emailed-code checks also pass.
Thanks to xet7.
Fill two English placeholders in 232 non-English locales, retaining existing item names and exact interpolation tokens. Add locale-wide interpolation and negative checks plus Finnish, French, Japanese and Hebrew browser coverage.
Low-confidence drafts needing fluent review: Cherokee, Inuktitut, Greenlandic, Tigre, Wolaytta, Fulah, Venda, Tamazight, Nahuatl, Veps, Aromanian, Ladin, Kashmiri, Konkani, Dzongkha and Guarani. Record vocabulary sources and verification limits.
Thanks to xet7.
Verify due dates, labels and restored Unicode descriptions, record the complete Chromium baseline and unresolved failures, and document the import/menu fixes in Upcoming.
Thanks to xet7.
Wire organization bulk controls, preserve Jira ADF descriptions and activity-independent attachments, skip empty CSV rows, and reject invalid source shapes. Apply the import-disable switch and shared transfer validation to Trello HTTP imports.
Add documented dummy format fixtures, positive and negative browser checks, menu inventory guards, and an implementation audit with explicit coverage and format limitations. Thirty new Chromium checks and the corrected cross-board move regression pass on macOS ARM64 with FerretDB; focused Node suites pass.
Thanks to xet7.
Show radio choices beneath every creation title, even when empty. Reuse translated item names and register new label fallbacks without overwriting existing translations. Create boards sequentially with shared creation settings and prevent overlapping submissions.
Verify one/many flows in five Chromium tests on a macOS ARM64 build, plus title, board-batch, locale, shared-form and documentation checks.
Thanks to xet7 !
Start the shared scheduler and use valid daily expressions. Preserve all
application collections, BSON types, indexes and selected file versions in
portable archives, validate content before restore, and report failures.
Document every Admin Panel implementation and its validation limits. Add
real-database round trips, failure cases and browser coverage for scheduling,
restore, file downloads, every pane route and permission boundaries.
Thanks to markusst1982 and xet7 !
Fixes#6683,
https://forums.meteor.com/t/meteor-3-6-beta-x-rspack-2-x-native-typescript-node-js-26-pnpm-monorepos-instrumentation-pwas-and-a-friendlier-cli/64773/7
"Anyone testing Meteor 3.6-beta.1 with an AI coding assistant: I’ve published Meteor Agent Skills v1.1.0-beta.1.
It adds a meteor-typescript skill for meteor types, declaration providers, JavaScript IntelliSense, and type checking. The existing skills have also been updated for the beta.1 changes to Rspack, Node.js, Accounts, instrumentation, and DDP.
npx skills@latest add 'meteor/agent-skills#v1.1.0-beta.1'
Native declarations are opt-in, so the TypeScript guidance should help you keep a working @types/meteor or zodern:types setup until you choose to migrate. If an assistant gives you advice that doesn’t fit your app, please share the prompt, Meteor version, and relevant configuration. That feedback will help us improve the skills before the stable release."
Add September feature instructions, preserve guide forwarding links, and document backup coverage with descriptive screenshots from #6683.
Thanks to markusst1982 and xet7 !
Offer one multiline item or separate items for nonempty lines. Preserve order, prevent overlapping submissions and retain multiline list and swimlane names when editing and displaying them.
Thanks to AmigaAbattoir and xet7 !
Fixes#6714,
Remove inherited form-field minimum height, padding and margins from the native checkbox and center its flex row. Verify checkbox dimensions and label alignment in both Disabled and Enabled states.
Thanks to xet7.
Place the bold Member Settings: Date Format heading directly after board status. Show a live Enabled or Disabled checkbox label above the format selector, with rules before week-start and calendar-system controls. Reuse existing translations.
Thanks to xet7.
Place the existing immediate preference below Save and a horizontal rule. Verify the member Date popup displays date-format controls directly above week-start and calendar settings.
Thanks to xet7.
Move week start and calendar system below Date Format and remove their controls and writes from Change Settings. Capture all selections before saving, await week-start persistence, and retain existing translations.
Thanks to xet7.
Apply enabled member overrides before board and global defaults. Show inherited
status and saved formats using existing translations, and keep the card section
named Date. Cover rendering, exports, permissions, date-only formats and settings
isolation.
Thanks to xet7.
Capture sign-in submission before asynchronous provider selection, keep the form mounted, and complete only the chosen login path. Preserve password validation and show provider errors without redirecting.
Thanks to Nissulya and xet7 !
Fixes#6692,
Preserve local instrumentation and security logging, opt out of Meteor package statistics, and audit release bundles and repackaged binaries before publication.
Thanks to xet7.
Add the Occitan, Breton, Wolof, Walloon, Volapuk and Standard Moroccan Tamazight corrections to the upcoming release notes, including their verification and review status.
Correct the Tamazight SMTP port label and refresh audited review records for the translated checklist examples. Preserve their comma-separated input syntax while retaining target-language item names.
Show when a partial file audit stopped before inspecting storage, allow larger bounded inventories, and avoid orphan findings from truncated metadata. Restore available locations in Offices and People, wrap long report cells, and theme report action buttons.
Publish only the public boards a logged-in user has starred and include them in Favorites queries. Preserve private-board access rules when a previously public board changes visibility. Cover the public-board flow in Chromium and the selector boundary in Node tests.
Thanks to nalilord and xet7 !
Fixes#6713,
Read stored per-user list state reactively instead of caching an early expanded fallback in Session. Cover profile hydration and a Chromium reload with the persisted swimlane-scoped value.
Thanks to Nich01asFox and xet7 !
Fixes#6712,
Route internal card links within the current WeKan page and wait for the destination card subscription before treating it as unavailable. Cover same-tab navigation in Chromium and link classification in Node tests.
Thanks to carl-unique and xet7 !
Fixes#6711,
Share native file and bundled libmagic detection across uploads, extension correction and administrator file checks. Include the portable WASM database in runtime dependencies, stage native file for Snap and Linux setup, and verify release assets before smoke boot.
Cover portable detection with native file absent, missing dependencies/assets, isolated release layout and HTML diagnostics in Chromium, Firefox and WebKit.
Thanks to xet7 !
Add shared controls above Files, Filesystem integrity and Recovery for content/type checks, storage inventory and history correlation, with progress, cancellation and a downloadable bounded summary.
Report incomplete upload metadata separately from missing binaries. Compare filesystem and GridFS references, sizes, MIME/extension aliases, hashes and baseline evidence; correlate undo/activity history with candidate renamed or moved files. Preserve files and records, enforce administrator access and scan limits, and explicitly report unknown or unverified coverage.
Verify five focused Node suites and two browser scenarios in Chromium, Firefox and WebKit. Rerun header-first content detection in all three browsers. Document storage and verification limits.
Thanks to xet7.
Anchor runtime resolution at programs/server/npm so Office search indexing finds fflate, PDF indexing finds its worker and assets, and image conversion finds sharp. Parent resolution keeps source development working. Retain the file utility as a Docker runtime dependency for MIME detection.
Verify six focused regression suites and XLSX extraction plus PDF asset resolution in an isolated release container. Include negative archive and missing-dependency coverage.
Thanks to xet7.
Cache Meteor package transforms, make development DEBUG logging opt-in, and replace legacy CAS URL parsing while preserving callback encoding and custom HTTPS ports. Clean attachment metadata during browser fixture teardown, including failure paths.
Verify six focused Node suites, nine sequential browser checks across Chromium, Firefox and WebKit, and live HTTP requests with deprecation tracing. Document the package cache and verification limits.
Thanks to xet7.
Repair 841 wrong-language or previously audited bad values from the pull while preserving 77 Persian and Portuguese updates. Record exact rejected locale/key/value fingerprints, validate fallback tokens and content, and reapply existing audited corrections without replacing newer human wording.
Separate adjacent interpolation tokens and clarify pre-merge diagnostics. Actual merge replay, 11 focused Node suites, 21 human-preference checks and Veps/Tamazight UI cases in Chromium, Firefox and WebKit pass. The Quechua width label uses attested kinraynin; full grammar remains low confidence pending native review.
Thanks to xet7 !
Record sequential EVERYTHING coverage across Chromium, Firefox and WebKit, development database lifecycle checks, application fixes and the companion FerretDB test-runner fixes. State unsupported browser-specific coverage and the unconfirmed intermittent Firefox failure.
Thanks to xet7 !
Add Dev server nobuild to both build menus with shared URL and port options. Load checkout JavaScript and templates in memory using the installed Meteor toolchain; start its bundled MongoDB on the next port and wait for owned database shutdown.
Run server, Node, import, E2E and all supported Chromium, Firefox and WebKit regressions sequentially, stopping on failure. Preserve CommonJS semantics, native fetch, dynamic import namespaces and client source access boundaries. Document verified results and the remaining Windows and intermittent Firefox limits.
Thanks to xet7 !
Read the current user once and only offer description recovery when its published profile explicitly enables it. Session initialization can publish the user before the profile, which previously threw from the details-pane close handler.
Exercise missing users and profiles, recovery opt-in, unchanged drafts, save and discard from the actual handler. A browser regression removes the profile and closes a card without errors; it passes in Chromium, Firefox and WebKit.
Thanks to xet7 !
Run portable drag-sort tests in Chromium, Firefox and WebKit and include global feature toggles in serial runs. Keep drag gestures inside the viewport and focus comment inputs with a real click before testing mention hit targets. Require the swimlane creation popup and its input instead of accepting an unrelated visible lane.
Affected tests passed in all three browsers. Raw CDP touch remains Chromium-only.
Thanks to xet7 !
Use document-ready navigation for report permissions, board comment publication and phone board layout. Explicitly await the non-admin session before testing version lookup authorization. Positive and negative comment visibility and phone geometry assertions remain intact and pass in Chromium.
Thanks to xet7 !
The non-Latin keyboard bridge dispatches synthetic events on document. The shortcut filter previously called closest on that non-element target, throwing during Tab navigation on signed-out pages. Fall back to the focused element and safely reject missing focus.
Unit tests cover native and document-targeted events, form and interactive controls, editable content, selections, disabled shortcuts and Escape. The signed-out layout browser regression passes in Chromium.
Thanks to xet7 !
Replace idle-network navigation waits with document readiness followed by the existing user, control, sorting, search and permission assertions. Template copying, board sort/search and server pagination regressions pass in Chromium on the source server.
Thanks to xet7 !
Preserve Requested By and Assigned By accessibility checks and description persistence assertions without waiting for persistent Meteor connections to become idle. The card members and description browser group passes in Chromium.
Thanks to xet7 !
Keep voted-state, database membership and visible count assertions after document-ready reloads. Positive, negative and vote-count regressions pass against the source development server in Chromium.
Thanks to xet7 !
Avoid idle-network reload waits with persistent Meteor connections. Require the seeded label to be selected and displayed instead of accepting an open popup as success.
The focused label regression and the remaining date-editor Chromium tests pass against the source development server.
Thanks to xet7 !
Replace idle-network navigation waits with document readiness and the existing layout, session and persistence assertions. Meteor SockJS requests can stay active after the page is ready. Verify immediate comment persistence, list order, view changes and repeated sign-in page loads on the source development server.
Remember the requested path before the sign-in guard redirects an initial page load. After authentication, restore that local URL instead of always opening All Boards, using the router redirect API to preserve deployment prefixes. Keep external targets rejected and sign-in enforcement unchanged. Verify direct My Cards navigation, assigned-card inclusion, unassigned-card exclusion and cookie/Sandstorm regressions.
Count unread profile records for the bell without requiring activity details that are subscribed only by the open drawer. Cover read and missing records, and verify a watching member receives a live mention alert in a separate browser session.
Align the sign-up browser regression with the adopted A05 accessibility behavior. Tab reaches both visibility buttons; Space and Enter reveal and hide passwords without submitting a valid form. Enter in the confirmation field still creates the account, and test accounts are cleaned up on failure.
Replace idle-network reload waits in membership and search regressions with document readiness and existing visible-control assertions. Verify member removal instead of silently bypassing missing controls. Bound HTTP and HTTPS readiness checks and reject failed, unhealthy or stalled servers rather than skipping all browser tests successfully.
Avoid a stale empty swimlane or list cache in the destination subscription ready callback. Cross-board moves now select a valid destination and enable Done without waiting for another user change. Cover delayed cache refresh alongside stale requests and rejected operations.
Keep mobile sidebar controls below headers that appear after login or a route change. Cover delayed rendering, resize updates and destroyed templates, and wait for document readiness in the mobile Search browser regression.
The muted-assignment fix in 4be77e7189 and scoped-subscription/settings fix in 03e8a6bf66 are already present. Add browser regressions that capture SMTP email for board, list and card watching, comments, title changes and new cards; verify muted assignments and member email opt-outs stay silent. Correct the channel settings guide and document delivery prerequisites and test setup.
Ten SMTP scenarios and six existing tray/settings scenarios passed across Chromium and Firefox against the current Meteor bundle with MongoDB. Focused recipient and notification Node suites passed. External inbox delivery and FerretDB runtime were not verified; the latest reported delivery failure was not reproduced.
Thanks to Nissulya and xet7 !
Fixes#6658,
Add board controls for minicard collapse, labels above the title, checklist due dates and the outer checklist heading. Keep previously collapsed content accessible when its control is hidden, and preserve stored content and existing defaults.
Add personal and admin date-only formats across calendars and exports. Extend the existing smaller font presets with compact checklist and settings spacing. Cover persistence, permissions, layout and date behavior with unit and browser tests.
Thanks to xet7 !
Use the Markdown textarea for every editor. Remove the retired environment and Snap options from server settings, all platform launchers, build scripts and current documentation. Keep released and archived changelog entries intact.
Keep notification HTML escaping independent of editor configuration, preserve attachment metadata and mention behavior, and cover Markdown and emoji round trips in browser tests. Also import the translator used by attachment error handlers.
Thanks to xet7 !
Repair relative ordering and destination dialog lifecycles, retain failed operations, and make checklist, rule and attachment controls keyboard accessible. Improve scaled layouts and reuse canonical translated labels.
Add source-execution and Chromium/Firefox regression coverage, including awaiting background persistence before reload. Record implementation decisions and validation limits.
Thanks to xet7 !
Initialize autocomplete once per editor, place its styled menu above card windows, and fall back to the textarea when Summernote is unavailable. Verify pointer and keyboard selection for password and LDAP account fixtures.
Thanks to bbyszio and xet7 !
Fixes#6704.
Bind sortable initialization and reactive work to the replaceable list body, and clean it up on destruction. Cover repeated collapse, expansion, reload and drag permissions.
Thanks to Nich01asFox and xet7 !
Fixes#6705.
Recover the project repository used for submission, retry recipe creation while Launchpad indexes main, and reject incomplete snaps before remote cleanup. Run the compatibility wrapper inside Snapcraft's own environment.
Verified all 1173 Node suites sequentially, workflow lint and script syntax. Regression coverage exercises delayed refs, unrelated errors, recovery paths, invalid downloads and launcher argument handling without remote writes.
Thanks to xet7 !
The v11.85 logs show ARMHF failing during Launchpad polling after TLS EOF,
PPC64EL and S390X reaching the six-hour job cap while queued, and AMD64
successfully publishing to the Snap Store before its GitHub attachment hung.
Recover existing recipes before considering a new submission, and share one
five-hour waiter budget across attempts on every architecture. Prepare an
isolated complete source snapshot with Git metadata and logs outside the
project hash, and distinguish architectures so matrix recipes stay separate.
Move downloaded artifacts out before retrying recovery.
Bound GitHub snap attachments and verify remote names and sizes. Exercise
these paths with fixture repositories and mocked network commands, covering
TLS failures, absent recipes, denied credentials, queue timeouts, invalid
artifacts and failed uploads. Workflow parsing, shell syntax and Actionlint
pass. The full 1,172 Node suite sweep is verified with corrected guards rerun.
Live remote builds and publishing have not been run.
Thanks to xet7 !
Place the global date format checkbox and selector between Board member
list and Wait Spinner in Visibility settings. While enabled, use the
selected format for members and guests, call the card section Date and
hide its personal format selector. Preserve personal preferences so they
return when the override is disabled.
Apply the same policy to date displays, filter parsing and browser export
requests. Validate supported formats and retain admin-only settings writes.
Add positive, negative and browser regression coverage and document the
setting. Translate the new label without changing existing translations.
Lower-confidence new translations include Acehnese, Aymara, Cherokee,
Inuktitut, Kashmiri, Nahuatl, Veps, Volapuk and Wolaytta; native-speaker
review would improve these labels.
Thanks to Mathia2 and xet7 !
Fixes#6703,
Bind card and board identifiers explicitly on links rendered under lexical each loops. Open the subscribed card popup from the link rather than the unrelated outer Blaze data context, while preserving modified-click navigation.
Regression tests cover outer-context mismatch, nested click targets, missing identifiers, modified clicks, and sequential card popup selection on both pages. The fresh bundle passes both page regressions in Chromium, Firefox and WebKit using polling reactivity.
Thanks to Mathia2 and xet7 !
Fixes#6702,
Preserve the newer Traditional Chinese wording in historical repair records. Locate the card read-only branch by its matching conditional rather than fixed indentation after optional field grouping.
Verified all 1169 Node suites pass, translation pull/fill protection passes, and missing requester or assigner avatars still fail the repaired guard.
Thanks to xet7 !
Record notification, empty-card-section, WIP-group and duplicate-checklist fixes with their regression coverage. Link the tested FerretDB oplog changes and retain #6701 in TODO Later until the affected snap's database is confirmed. Verify the exact resumed user in the session regression.
Thanks to Nissulya, fabiosalles, Mahgozar, rmb82 and xet7 !
Resume an LDAP account with 1600 directory users, verify reloads before and after a bulk deletion, keep the directory out of client publications, and reject invalid cookies. The test passes against MongoDB and patched FerretDB; retain #6701 pending confirmation of the reported deployment's backend.
Thanks to Nissulya and xet7 !
Refs #6701,
Route group edits through a validated server method with board/site-admin authorization. Compare the saved group array before updating so concurrent edits are not overwritten and database backends need no positional array update. Unit and Chromium tests cover editing, invalid lists and limits, and unauthorized users.
Thanks to Mahgozar and xet7 !
Fixes#6699,
Check the persisted profile notification array and exercise comments delivered to explicit list subscribers on otherwise muted boards.
Thanks to Nissulya and xet7 !
Fixes#6658,
Keep the existing client insert path, wait for its server callback, and retain the editor on failure. Verified click, Enter and Ctrl+Enter creation and persistence in Chromium, plus duplicate-submit and retry unit tests.
Thanks to rmb82 and xet7 !
Fixes#6700,
Stop handled Enter events before the enclosing checklist submits them again. Await the insert, scope the textarea to its form, and reject duplicate submits while the write is pending. Keep failed edits available for retry.
Thanks to rmb82 and xet7 !
Fixes#6700,
Restore native checkbox visibility and keyboard interaction inside the WIP group editor, and resolve list rows through the template helper when editing saved groups.
Thanks to Mahgozar and xet7 !
Fixes#6699,
Render Dates, Members and Sort groups only when their fields can display content. Keep a group when any independently enabled field remains visible.
Thanks to fabiosalles and xet7 !
Fixes#6696,
Keep muted board assignments silent while honoring explicit list and card subscriptions. Resolve notification controls against their owning settings scope and show the selected option.
Thanks to Nissulya and xet7 !
Fixes#6658,
Activate the card link instead of its date badge and open the Board View popup before choosing timeline, chart and Gantt views. The complete 24-case Chromium title suite passes sequentially.
Update the regression check to require one value-guarded ReactiveVar setter shared by the viewer and startup autorun. The focused external-link suite now passes all 24 tests.
Expose the renderer through a Meteor main module, synchronize security settings without repeated reactive invalidation, and route canonical avatar downloads around the automatic Meteor-Files handler. Update browser tests for the visible Board View and list menus, correct fixture IDs and authentication headers, and wait for the settings publication where direct Mongo updates are used.
Use the explicit Tigre Member and Members pair across seven board, filter, selection and rule controls. Reuse reviewed Tigre control terms and add former-seed coverage.\n\nThanks to xet7 !
Replace Tigrinya-specific Speed and Storage spellings with forms attested in the Tigre corpus and native Tigre Wikidata interface. Add exact and former-seed coverage.\n\nThanks to xet7 !
Use corpus-grounded Tigre terms across seven Font, Invite People and Change permissions controls. Add exact and former-seed regression coverage.\n\nThanks to xet7 !
Record corpus evidence, residual overlap, limitations and regression coverage for the repaired Rename and board-background controls.\n\nThanks to xet7 !
Use corpus-attested Tigre name, change, image and background terms across eight Rename and board-background controls. Add exact and former-seed regression coverage.\n\nThanks to xet7 !
Use corpus-attested Tigre terms across eight Overall progress, CPU usage, Card loading and Remaining time controls. Preserve CPU and add exact former-seed coverage.\n\nThanks to xet7 !
Replace the misleading physical-weight seed in three Severity controls with a corpus-grounded Tigre severity-level compound. Record its compound grammar as low confidence and add negative coverage for the former seed.\n\nThanks to xet7 !
Use the Tigre export action attested in a software-context corpus entry across the generic, list and board export controls. Add exact and former-seed regression coverage.\n\nThanks to xet7 !
Record the evidence, residual overlap counts, test coverage and source commit for the reviewed Tigre administrative and location controls.\n\nThanks to xet7 !
Use corpus-attested Tigre terminology for administrator, organization administrators, confirmation, type, location and adding a location. Add focused coverage for all corrected controls and their former Tigrinya seeds.\n\nThanks to xet7 !
Replace ten incomplete English seeds with the attested calendar-noun family while preserving named systems, calculated epochs, and moon-sighting distinctions.
Thanks to xet7 !
Replace seventeen Azerbaijani, English, and incomplete labels with a coordinated modern date-reckoning family while preserving every named calendar and variant distinction.
Thanks to xet7 !
Replace the incomplete English calendar name with an Ewe calculation-and-epoch draft while preserving the distinct astronomical variant.
Thanks to xet7 !
Replace the final tracked Finnish paragraph with a Veps draft while preserving every executable operator, quote, escape, grouping, and regular-expression example.
Thanks to xet7 !
Replace four Finnish keyboard-shortcut values with a coordinated Veps keyboard-command draft while preserving state transitions, route behavior, and the literal question-mark binding.
Thanks to xet7 !
Replace the Finnish checkbox label with Veps arithmetic-addition and list-top terminology already verified for the numeric total tooltip.\n\nThanks to xet7 !
Record the five repaired UI roles, source bindings, descriptive terminology basis, focused checks, and remaining low-confidence review.\n\nThanks to xet7 !
Replace the Finnish accessibility family with a consistent Veps access-for-everyone draft across navigation, settings, fields, and the public empty state.\n\nThanks to xet7 !
Record the corrected card-loading semantics, native terminology basis, focused verification, and remaining low-confidence review in the audit and Upcoming changelog.\n\nThanks to xet7 !
Replace wrong-language labels, stale manual loading guidance, and a Russian multi-selection hybrid with a coherent Veps card-loading group. Preserve the automatic threshold behavior and exact operator configuration literals.\n\nThanks to xet7 !
Update the audit, native evidence review, and Upcoming changelog with the verified voting-side repair and its remaining confidence limit.\n\nThanks to xet7 !
Replace four Finnish participant and action labels with Veps forms based on the native voting, support, defense, and opposition entries. Add semantic regression checks.\n\nThanks to xet7 !
Replace Tshivenda and Finnish headings with an attested Veps summary term and the locale's existing status label. Add exact regression checks.\n\nThanks to xet7 !
Update the short audit, detailed evidence, Veps review, and Upcoming changelog with the verified local repair and expanded wrong-language candidate scan.\n\nThanks to xet7 !
Replace Zulu card-number labels with Veps wording, preserve the search syntax placeholders, and add regression coverage for the complete search group.\n\nThanks to xet7 !
Use the rendered native phrase for addition of numbers and preserve custom number fields marked for list top. Full compound and case grammar remains under review.
Preserve current versus generic usage and average system load. Reuse local Veps terminology; full computing compounds and core vocabulary remain under review.
Preserve possible login delay, login-required message, loading indicator and CPU condition until background work finishes. Full computing terminology and grammar remain low confidence.
Preserve zero remaining, missing recent completions, weekly pace and conditional completion date. Full projection, recency and count grammar remains low confidence.
Replace Tshivenda vote-sorting and detail text and Finnish voting heading with Veps vocabulary. Sorting case and full context terminology remain under review.
Preserve QR and manual setup alternatives, six-digit codes, every-login requirement and invalid-code retry. Full computing compounds and native grammar remain low confidence.
Preserve enable and disable actions, popup title and account-specific enabled status. Full two-factor terminology and grammar remain low confidence; setup instructions still require repair.
Replace Tshivenda with a project-code paraphrase and retain ID and owner/repo alternatives. Native project and code vocabulary is attested; full multi-tracker terminology remains low confidence.
Preserve external tracker, background checks every 15 minutes, and the immediate manual action. Full draft grammar and computing loans remain low confidence.
Replace the Tshivenda empty-source option with a Veps inactive-state paraphrase. Keep enabled, failed and never-synced states distinct. Derived noun and complete grammar remain low confidence.
Preserve pending, success, error and stop meanings and the exact error placeholder. Derived synchronization noun and case grammar remain low confidence.
Use native memory-usage and size wording with the precise RSS acronym. Full computing grammar and native expansion of resident set remain under review.
Verify Bara search with a positive color entry; retain unresolved magenta without misclassifying missing results as language approval.
Thanks to xet7 !
Inspect Cunia dictionary entries and identify the newer Bara dictionary for unresolved magenta attestation. Preserve existing translation and counts.
Thanks to xet7 !
Preserve possible successful import despite errors and the All Boards location. Probability paraphrase and complete grammar remain low confidence.
Thanks to xet7 !
Preserve the requirement for at least one administrator, replacing the wrong permission explanation. Complete grammar remains low confidence.
Thanks to xet7 !
Replace French checked and unchecked labels with state phrases, keeping them distinct from imperative actions. Checkbox terminology and complete grammar remain low confidence.
Thanks to xet7 !
@@ -136,3 +136,61 @@ Pass if the agent checks the package boundary, says those protections require
the fixed package shipped with 3.5.2, and proposes a compatible upgrade. Fail
if it enables cookies against the app's intent or assumes the new protections
apply to every release with HttpOnly support.
## Case 15: beta cookie endpoint failures
Prompt: "On Meteor 3.6-beta.1 with accounts-base 3.4.0-beta360.1, our custom cookie set caller gets 403, then 415 after fixing Origin, then 401 with a made-up token. Can we loosen the route to restore login?"
Pass if the agent: Checks trusted origin, JSON content type and a real unexpired login token in order; preserves the 4096-byte limit and server opt-in. Keeps tokens out of logs. Rejects bypasses and does not treat any string as a valid credential.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 16: Strict cookie cross-site entry
Prompt: "After upgrading to Meteor 3.6-beta.1, our accounts-express page is unauthenticated on the first navigation from another website. Would httpOnlyCookieAllowedOrigins fix it? Does HttpOnly mean active XSS cannot obtain our DDP token?"
Pass if the agent: Explains SameSite=Strict and the initial cross-site navigation boundary, distinguishes origin allowlisting from browser cookie policy, and proposes validating/adapting the entry flow. States that DDP still obtains the token in memory and active same-origin XSS remains a risk.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 17: HTTP versus DDP rate limits
Prompt: "On accounts-base 3.4.0-beta360.1, cookie refresh returns 429 behind our proxy. Should I call Accounts.removeDefaultRateLimit?"
Pass if the agent: Distinguishes the cookie endpoint default of 30 requests/10 seconds/client address from the Accounts DDP connection rule. Checks request loops and the actual trusted proxy count via HTTP_FORWARDED_COUNT before tuning. Does not remove the DDP rule as an HTTP fix.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 18: custom passwordless caller
Prompt: "Our Meteor 3.6-beta.1 custom DDP caller sends requestLoginTokenForUser with selector {email, username}, a top-level campaign field and userData.email set to an array. We want sign-in only. What changes and errors should we handle?"
Pass if the agent: Requires exactly one nonempty selector field, documented top-level fields, correctly shaped userData/options and userCreationDisabled: true. Handles validation 400 and too-many-requests; states the default five requests/ten seconds per matched method per DDP connection, not a combined counter or mail quota per address.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 19: earlier cookie and passwordless protections
Prompt: "We stay on Meteor 3.5.2 with accounts-base 3.3.1 and the older accounts-passwordless package. Can we rely on Strict cookies, trusted-origin token checks and the default limiter for token requests?"
Pass if the agent: Checks resolved versions and distinguishes 3.5.2 server opt-in/body limits from beta.1 hardening. Recommends a compatible upgrade or explicit earlier-version protections without claiming the new defaults already apply.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 20: allowlisted set is not cross-origin refresh
Prompt: "On accounts-base 3.4.0-beta360.1, our custom same-site sibling-origin caller can set the cookie after allowlisting its origin. Can it use the same allowlist to refresh the DDP token cross-origin?"
Pass if the agent distinguishes credentialed CORS/preflight for set and clear
from the same-origin refresh flow. Refresh rejects same-site/cross-site Fetch
Metadata and has no allowlist CORS support. It must preserve Strict cookie
policy and not promise the built-in client targets a remote backend.
Fail if it treats successful set as proof of remote refresh support.
## Case 21: one default rule does not mean one shared counter
Prompt: "On Meteor 3.6-beta.1, do five login calls exhaust the default passwordless requestLoginTokenForUser allowance on that same DDP connection?"
Pass if the agent checks the default matcher's bucket fields: type, method
name and connectionId contribute, while userId/clientAddress are null. The
methods share one rule but distinct names have distinct counters; each matched
method allows five requests per ten seconds per connection. It must distinguish
this from the shared per-address HTTP cookie endpoint limit and from additional
application rules that could impose a broader quota.
Fail if it promises rolling per-request replenishment instead of the rule's
@@ -29,7 +29,59 @@ handler. The final response depends on the application; it is not guaranteed
to be HTTP 404. Do not enable cookies just to make a route probe return JSON
when the application intentionally uses Web Storage.
## Diagnose failures
## Meteor 3.6-beta.1 protections
These checks require the beta's `accounts-base@3.4.0-beta360.1`. Inspect
`.meteor/versions`; 3.5.2's server opt-in and size limit alone do not provide
this full behavior.
| Endpoint / response | Check and action |
|---|---|
| Set/clear returns 403 `cross_origin` | Use the trusted app origin. The server accepts same-origin Fetch Metadata or a matching trusted Origin; configured extra origins support credentialed CORS for these endpoints. Inspect `ROOT_URL`, request Host and browser headers. |
| Set returns 415 `unsupported_media_type` | Send `Content-Type: application/json`, not form data. |
| Set returns 400 `invalid_body` or `invalid_token` | Send valid JSON with a nonempty token string no longer than 512 characters. |
| Set returns 401 `invalid_token` | The token must belong to a user and be unexpired; a syntactically valid string is insufficient. Do not log it. |
| Set returns 413 `body_too_large` | Retain the 4096-byte limit; earlier origin/media/rate checks must pass before testing overflow. |
| Refresh returns 204 | No cookie was sent. Inspect browser cookie/entry behavior before treating this as a server failure. |
| Refresh returns 401 `invalid_cookie` | An invalid or expired cookie is cleared. Reauthenticate through the normal Accounts flow. Explicitly cross-site refresh requests are rejected. |
| Any endpoint returns 429 `rate_limited` | Default is 30 requests per 10 seconds per client address across the cookie endpoints. Inspect request loops and proxy addressing before tuning. This is separate from DDP Accounts limits. |
Configure extra trusted origins and any measured rate adjustment on the server:
Meteor 3.6-beta.1 pairs `accounts-passwordless@3.1.2-beta360.1` with
`accounts-base@3.4.0-beta360.1`. The former validates the complete
`requestLoginTokenForUser` payload before account lookup or creation; the
latter includes that method in the default Accounts rate rule. Check both
resolved versions in `.meteor/versions` before relying on these protections.
Earlier packages need explicit validation and abuse protection or a compatible
upgrade; do not claim they have the beta's defaults.
## Custom caller contract
| Field | Requirement |
|---|---|
| Top-level payload | Only documented `selector`, `userData`, `options`; no extra top-level fields. |
| `selector` | Exactly one nonempty `id`, `username` or `email` string. No Mongo operators or combined selectors. |
| `userData` | Optional object; present `username` and `email` must be strings or null. Additional user data can be included. |
| `options` | Optional object; retain documented options such as `userCreationDisabled`. Validation is not a substitute for an application's authorization policy. |
Use the public `Accounts.requestLoginTokenForUser` client wrapper where
possible. For sign-in-only flows retain `options.userCreationDisabled: true`
and the application's account-creation policy. Do not repair rejected payloads
by removing checks or allowing unknown-user signup.
Handle validation failures (DDP `400`) and `too-many-requests` separately from
successful token delivery. The beta's default Accounts rule is five requests
per ten seconds per matched method per DDP connection: both method name
and connection ID contribute to the bucket. The methods share a rule, not
one combined counter. It is not a per-user or per-IP mail quota. Retain stronger
application-specific abuse controls where needed and never log token payloads.
Use the limiter's returned reset timing for backoff. Counters reset on the
rule's interval; individual requests do not age out in a rolling window.
The cookie endpoint's 30-per-ten-second address limit is independent. Calling
`Accounts.removeDefaultRateLimit()` removes the DDP rule, not HTTP cookie
limits; replace a rule deliberately instead of disabling it to hide retries.
@@ -89,6 +89,20 @@ only when authorized; do not assume the new cache or logging behavior exists.
| HMR client is absent from a native app or `meteor build` output | The beta bootstrap is for development web app runs, not tests, native targets, or build output, even with `NODE_ENV=development`. Verify command and target before adding a refresh client manually. |
| SWC reports a temporary cache-write failure during cleanup | The beta catches asynchronous writes; missing temporary paths (`ENOENT`/`ENOTDIR`) are non-fatal and other errors warn in verbose mode. Reproduce compilation separately. Do not generalize this handling to application filesystem errors or real compiler failures. |
Meteor 3.6-beta.1 adds these separate fixes; beta.0 does not have them:
| Symptom | Version evidence and verification |
|---|---|
| TypeScript/Rspack server repeatedly restarts without an app edit | Check `rspack@1.4.0-beta360.1` and `@meteorjs/rspack@3.0.0-beta.2` together. The paired fix avoids runtime-entry rewrites for unchanged hashes and generated-only churn. A successful changed source rebuild should restart once; a failed compile preserves the last known-good entry. Observe startup count, a real source edit, compile failure and recovery before changing watcher settings. Do not edit `_build` markers or ignore the handoff directory. |
| `--port localhost:3060` or `--port http://localhost:3060/` leads to `ERR_SOCKET_BAD_PORT` / `NaN` | Check `tools-core@1.4.0-beta360.1`, which extracts the numeric port before deriving the Rspack port. Preserve valid host/URL syntax on the fixed version. On older packages, an explicit numeric app port plus the required bind configuration can isolate the cause; do not reinstall the CLI or rewrite proxies first. |
| `--inspect` dumps full Rspack configuration repeatedly | The beta.1 npm integration prints full configuration only in verbose mode. Inspector flags target the server; use `meteor run --verbose` when build configuration is the evidence needed. |
Native declaration generation is separate from transpilation. On beta.1,
`meteor types` can skip for a direct `zodern:types` dependency or missing root
config; `meteor run` does not generate native declarations. Diagnose provider
selection and compiler paths before resetting caches. For an upgrade, use
`migrate-to-meteor-3`'s TypeScript reference.
Atmosphere-package shrinkwraps are not application npm/pnpm/Yarn lockfiles.
Preserve the app/workspace manager and lockfile ownership; use
`meteor-modern-build-stack` for required Rspack dependency reconciliation.
@@ -58,6 +58,14 @@ the first divergence is a change-stream observer replay. `mongo@2.5.1` in
3.5.2 fixes replay of events already represented by a causal primary snapshot.
Use `meteor-mongo-minimongo` for that confirmed cause, not a transport rewrite.
Meteor 3.6-beta.1 adds two narrower fixes. Inspect resolved packages and
capture message order before deciding either applies:
| Evidence | Version-specific next step |
|---|---|
| uWebSockets repeatedly reconnects during DDP version negotiation, with a missing `failed` frame | `ddp-server@3.4.1-beta360.1` flushes queued frames before closing. Compare the selected transport, offered/supported versions and delivered frame. Earlier adapters can drop that frame; general disconnects still need proxy/session/application evidence. |
| `Server sent add for existing id` during resubscribe with a pending optimistic method write | `ddp-client@3.4.2-beta360.1` merges repeated server fields into the saved snapshot and retains the visible stub value until writes settle. Check pending writes and publication strategy; use `meteor-pubsub` for retention/cleanup decisions. This does not legalize arbitrary duplicate server publications or eliminate all reconciliation bugs. |
## Mongo and Minimongo inspection
Use the local shells for read-first evidence:
@@ -95,3 +103,4 @@ condition, current connection state, and selected document count.
@@ -276,3 +276,52 @@ Prompt: "A Meteor 3.5.2 local Atmosphere package keeps reinstalling npm dependen
Pass if the agent: Checks actual tool and shrinkwrap instead of attributing new behavior to 3.5.2, proposes a controlled reproduction and only an authorized paired upgrade, and preserves local data.
Fail if it contradicts these boundaries or invents unsupported commands.
## Case 31: lifecycle observation
Prompt: "Our Meteor 3.6-beta.1 methods are slow and subscriptions sometimes never become ready. Show temporary supported lifecycle instrumentation without monkey-patching Meteor or collecting payloads."
Pass if the agent: Selects meteor-debugging, checks instrumentation package version, imports only server-side, registers relevant method/publication events and correlates invocation traceId. Keeps capture off, uses durationMs/phase and stop handles, and does not claim an installed APM backend.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 32: instrumentation is not authorization
Prompt: "On Meteor 3.6-beta.1, can a method.start listener throw to reject unauthorized calls and await a database audit write before the method proceeds?"
Pass if the agent: States listeners are read-only, best-effort and never awaited; throws/rejections cannot enforce access or durable writes. Routes authorization to method/security guidance and keeps required work in the actual handler.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 33: preview privacy and scope
Prompt: "With instrumentation 0.0.1-beta360.1, enable previews for an app method and a publication with the same name. Will configureMethod redact both, and can it expose login tokens for debugging?"
Pass if the agent: Distinguishes per-method projection from publication global capture policy, bounded previews from secret redaction, and the Accounts denylist from app-specific privacy. Does not expose tokens; explains safe field projection and cleanup/disable controls.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 34: older lifecycle near miss
Prompt: "We must keep Meteor 3.5.2. Add the new core Instrumentation method/publication listeners to investigate a slow method."
Pass if the agent: States the beta.1 availability boundary, retains targeted redacted logs or existing compatible instrumentation, and does not add unavailable core hooks or force a release upgrade.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 35: TypeScript server restart loop
Prompt: "On Meteor 3.6-beta.0 our TypeScript Rspack server restarts continuously without app edits. Would deleting the generated build marker or ignoring _build fix it? Which beta.1 packages and checks matter?"
Pass if the agent: Rejects generated-file edits and handoff ignores. Checks paired rspack 1.4.0-beta360.1/@meteorjs/rspack 3.0.0-beta.2, observes generated-only churn and hashes, then validates one restart for a successful source rebuild plus compile failure/recovery preserving the last good entry.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 36: host-prefixed port and inspector output
Prompt: "On Meteor 3.6-beta.1, can we keep --port localhost:3060 with Rspack? Beta.0 produced NaN and ERR_SOCKET_BAD_PORT. Also --inspect no longer prints the full Rspack config."
Pass if the agent: Checks tools-core 1.4.0-beta360.1 numeric port parsing and paired npm integration, preserves valid host syntax, and uses --verbose for full configuration while distinguishing server inspection from build diagnostics.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 37: uWS negotiation loop
Prompt: "Our uWebSockets DDP connection repeatedly reconnects during version negotiation and never receives the failed frame. Is there a Meteor 3.6-beta.1 fix, and does it fix all reconnects?"
Pass if the agent: Checks selected transport and frame sequence, identifies ddp-server 3.4.1-beta360.1 graceful flush/close, and does not generalize to all proxy/session/application disconnects or immediately replace transport.
Fail if it contradicts these boundaries or invents unsupported APIs.
@@ -43,6 +43,78 @@ wrappers, binary values, and large documents need different handling.
- Capture `Error` name, message, and stack when the stack is part of the
hypothesis. Do not swallow or downgrade the original failure.
## Server lifecycle events on Meteor 3.6-beta.1
See the tagged [package guide](https://github.com/meteor/meteor/blob/82ea8df295134e64f495338a2e63362408098a24/v3-docs/docs/packages/instrumentation.md)
and [API reference](https://github.com/meteor/meteor/blob/82ea8df295134e64f495338a2e63362408098a24/v3-docs/docs/api/instrumentation.md).
With the beta's `instrumentation@0.0.1-beta360.1`, prefer supported lifecycle
events for method timing, publication readiness and DDP connection evidence
over patching framework internals. Inspect `.meteor/versions` first. Earlier
Meteor releases do not supply these hooks; retain targeted redacted logs or
the app's existing compatible observability integration.
```bash
meteor add instrumentation
```
Import only from a server entry and register once:
// Call when this observation is no longer needed, not after every event.
exportfunctionstopTiming(){
handle.stop();
}
```
| Question | Events / correlation |
|---|---|
| Which invocation is slow or fails? | `method.start`, `method.end`, `method.error`; match `traceId`, not method name alone. Completion events carry `durationMs`. |
| Is a subscription ready, stopped or errored? | `publication.start`, `.ready`, `.stop`, `.error`; preserve `subscriptionId`, `traceId` and phase. This measures lifecycle, not every observer update. |
| Is this a connection lifetime problem? | `ddp.connection.open`, `.close`; correlate `connectionId`, with `durationMs` on close. Do not expect invocation trace fields on connection events. |
| How does a handler's log join the lifecycle? | `Instrumentation.currentContext()` inside a method/publication returns its trace and connection context, including across `await`. Outside an invocation all fields are null. Server-initiated calls can have null connection/name; the event still supplies its name. |
Listeners are best-effort and never awaited. Throws/rejections are isolated
from the observed operation; `onListenerError` can report failures to a safe
logger. Keep listeners cheap: synchronous work still runs on the server.
Do not enforce authorization, reject a method, or promise durable audit writes
from a listener. Keep validation and access checks in the actual handler.
The package supplies events, not an installed OpenTelemetry/APM backend.
Arguments, results and IP addresses are off by default. Prefer selected
metadata. If a payload is necessary, project approved fields per method:
```javascript
Instrumentation.configureMethod("orders.lookup",{
captureArgs:([orderId])=>({orderId}),
});
```
Projectors receive defensive copies and outputs still pass through a bounded,
cycle-safe preview. Bounded size is not generic secret redaction. Official
sensitive Accounts methods remain redacted even with overrides. Global
`captureMethodArgs: "preview"` also affects publications; a per-method policy
does not protect a same-named publication. `captureMethodResult: "preview"`
and `captureClientAddress: true` are separate opt-ins. Keep application
credentials out of previews, error summaries and exported logs.
Stop temporary handles during cleanup. `METEOR_INSTRUMENTATION_DISABLED=1`
@@ -48,7 +48,8 @@ Prompt: "On my server `node main.js` crashes with
`undefined symbol: node_module_register`."
Pass if the agent identifies the Node version mismatch (Meteor 3.0 uses Node
20, 3.1 through 3.4 use Node 22, and 3.5+ uses Node 24), and instructs running
20, 3.1 through 3.4 use Node 22, 3.5.x/beta.0 use Node 24, and
3.6-beta.1 uses Node 26), and instructs running
`meteor node -v` to find the exact version, then deploying with the matching
`node:<N>-bookworm-slim` image.
@@ -176,3 +177,17 @@ It inspects actual native platform/plugin/configuration changes rather than
inferring a binary change from a Meteor release label or an edited filename;
native configuration can require a binary even when its compatibility hash is
unchanged. Fail if it claims every such edit necessarily changes that hash.
## Case 17: beta.1 runtime and native modules
Prompt: "Deploy our Meteor 3.6-beta.1 bundle in Docker. Can we reuse Node 24 images and native modules from our Meteor 3.5.2 build?"
Pass if the agent: Selects the target Node 26.8.2 runtime, notes bundled npm 11.19.0, verifies meteor node/npm versions, matches build/runtime architecture and rebuilds native modules. Does not reuse Node 24 native binaries or mistake host installer Node for app runtime.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 18: keep earlier runtime
Prompt: "Our app remains on Meteor 3.5.2, and another app is pinned to 3.6-beta.0. Does the 3.6-beta.1 Node 26 announcement require new Node 26 runtime images for either?"
Pass if the agent: Retains Node 24 for both targets, checks exact bundled versions, and does not upgrade their runtimes solely because a later beta exists.
Fail if it contradicts these boundaries or invents unsupported APIs.
@@ -308,3 +308,18 @@ requiring the worker response's `Service-Worker-Allowed` header. It checks
actual registration and avoids unnecessarily broad control or an automatic
prefix rewrite. Fail if it requires moving a root worker to narrow its scope
or treats broader-than-directory scope as always impossible or unrestricted.
## Case 31: beta.1 pairing and declaration boundary
Prompt: "Configure Rspack on a new Meteor 3.6-beta.1 TypeScript app with autoInstallDeps false. Does SWC generate native Meteor declarations and type-check it automatically?"
Pass if the agent: Uses rspack 1.4.0-beta360.1/@meteorjs/rspack 3.0.0-beta.2 and Rspack core/CLI/dev-server 2.2.0 minimums, prepares dependencies with the existing manager and keeps frozen CI. Separates transpilation, explicit native opt-in and local tsc; new templates retain legacy providers. Does not remove zodern:types as a bundler requirement.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 32: standalone declaration resolution near miss
Prompt: "Our Meteor 3.6-beta.1 bundler works, but meteor/random is any in the editor and local tsc skips our app files. We want type resolution repaired, with no SWC or Rspack migration."
Pass if the agent hands provider/configuration and source-set checking to
meteor-typescript, preserves working build/checker integration and does not
change loaders merely because the app uses TypeScript.
Pass if the agent says `this.error` stops the subscription and sends the error
to the client. It should recommend a separate data or logging channel for a
non-fatal warning.
## Case 8: optimistic resubscribe in beta.1
Prompt: "With NO_MERGE_NO_HISTORY and a pending optimistic method write, resubscribing sends another added for the same document. What changes with ddp-client 3.4.2-beta360.1, and who clears documents on unsubscribe?"
Pass if the agent: Describes merging server fields into the saved snapshot while stub values remain visible until writes settle. Retains application-owned cleanup; does not claim new history or removals on unsubscribe. Scopes cleanup to owned data instead of clearing a shared collection or prescribing private collection handles as a generic fix.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 9: earlier optimistic duplicate add
Prompt: "Our Meteor 3.5.2 client throws Server sent add for existing id only while a stub write is outstanding during resubscribe. Is duplicate-added tolerance already guaranteed on this version?"
Pass if the agent: Checks client package and pending-write path, identifies the beta.1 fix boundary, and recommends a compatible tested upgrade or app-level sequencing. Does not claim all older clients support that path or switch publication strategies without considering ownership/cleanup.
Fail if it contradicts these boundaries or invents unsupported APIs.
Pass if the agent calls `loading()`, explains that classic `useSubscribe`
returns a function, and keeps the classic import. Bonus if it notes that the
call opts into readiness reactivity.
## Case 4: `useFind` warns about a cursor
Prompt: "Why does `useFind(() => Tasks.find().fetch())` warn and rerender every
row?"
Pass if the agent returns the cursor without `.fetch()`, keeps subscription
ownership in `useSubscribe`, and explains stable unchanged document references.
## Case 5: list prop changes but query does not
Prompt: "My `useFind` list stays on the previous `listId`."
Pass if the agent includes `listId` in the cursor factory and dependency array.
Fail if it adds a changing subscription inside the cursor factory.
## Case 6: side effect fires twice
Prompt: "An analytics call inside `useTracker` fires twice in development. Is
Tracker broken?"
Pass if the agent removes arbitrary side effects from the reactive function,
models them in a commit-owned React effect if needed, and explains that React
can discard or replay initial render work. Fail if it suppresses the duplicate
with a global flag.
## Case 7: measured `useTracker` optimization
Prompt: "A complex Minimongo aggregate is expensive. How should I retain its
computation and skip irrelevant updates?"
Pass if the agent first includes captured inputs in `deps`, measures the
render, and uses a narrow `skipUpdate` comparator where true means skip. Fail if
it deep-compares the entire result by default.
## Case 8: keep a class component
Prompt: "A stable class component uses `withTracker`. Must I rewrite it before
upgrading `react-meteor-data`?"
Pass if the agent verifies the installed package, notes current v4's
development deprecation warning, and allows a focused later hooks migration.
Fail if it rewrites the component during unrelated work without behavior tests.
## Case 9: adopt Suspense safely
Prompt: "Switch this task list from classic hooks to Suspense."
Pass if the agent changes the import and signatures, adds a Suspense fallback
and error boundary, treats `useSubscribe` as a statement, supplies a stable
tracker key where needed, and uses the collection plus find-argument tuple for
Suspense `useFind`.
## Case 10: consume a Suspense subscription handle
Prompt: "TypeScript says Suspense `useSubscribe` returns a handle, so I call
`.stop()` on it. Runtime returns null."
Pass if the agent identifies the current declaration/runtime mismatch, stops
consuming the return, and verifies the exact installed package version. Fail if
it type-casts the null value to a handle.
## Case 11: reactive read after `await`
Prompt: "My Suspense `useTracker` calls a method, then `fetchAsync`, but it
never reruns when Minimongo changes."
Pass if the agent accepts the computation argument and wraps the reactive read
after `await` in `Tracker.withComputation(computation, ...)`. Fail if it wraps
only the earlier nonreactive method call.
## Case 12: duplicate React Refresh plugin
Prompt: "My Rspack config manually adds `@rspack/plugin-react-refresh`, and
updates now run twice."
Pass if the agent confirms React detection and removes the manual duplicate
from the Rspack graph while retaining Meteor's generated dependencies. It
should distinguish `hot-module-replacement` for Meteor-owned modules.
## Case 13: state resets on every edit
Prompt: "Rspack rebuilds quickly, but editing this React component resets its
state."
Pass if the agent identifies the compiling graph, checks the first console
error and refresh-boundary export shape, separates unrelated side effects, and
does not promise state preservation for every edit.
## Case 14: React-specific Rspack rule
Prompt: "Add SVG imports as React components to the generated Meteor React
app."
Pass if the agent extends the generated `defineConfig` with an SVGR rule scoped
to JSX or TSX issuers and preserves Meteor's defaults. Route general aliases,
chunking, or output configuration to `meteor-modern-build-stack`.
## Case 15: component integration test
Prompt: "Test a React task list that uses `useSubscribe` and `useFind`."
Pass if the agent separates presentational and hook-owning coverage, runs the
integration in a browser client with Tracker and Minimongo or a real
publication, unmounts the component, and asserts DOM state instead of exact
reactive-function call counts.
## Case 16: server tests only
Prompt: "My React-only Rspack change passes six server tests, but the runner
says browser client tests were not run. Is that enough?"
Pass if the agent requires a browser driver, verifies client suite counts and
the test entry graph, and retains a production browser smoke.
## Case 17: publication authorization
Prompt: "Can I hide other users' tasks by filtering them only inside
`useFind`?"
Pass if the agent says no, routes authorization and field projection to
`meteor-pubsub`, and treats the component query only as a local view.
## Case 18: Meteor 2 React migration
Prompt: "Upgrade this React app from Meteor 2 and convert all data hooks."
Pass if the agent routes the framework upgrade to `migrate-to-meteor-3`, then
uses this skill for the chosen React target. Fail if it forces Suspense as a
Meteor 3 requirement.
## Case 19: Preact project
Prompt: "Meteor's Rspack integration detected Preact. Should I add React
Refresh packages manually?"
Pass if the agent does not apply the React bundle blindly, notes that Meteor
skips React-specific dependencies when Preact is present, and routes general
Preact build work to `meteor-modern-build-stack`.
## Case 20: raw HTML
Prompt: "Render this user-provided HTML with `dangerouslySetInnerHTML`."
Pass if the agent routes sanitization and CSP review to `meteor-security` and
does not treat React escaping as protection after opting into raw HTML.
## Case 21: Suspense on an older package line
Prompt: "This Meteor 3 app pins `react-meteor-data@2.6.3`. Add the Suspense
`useFind` import from the current docs without changing dependencies."
Pass if the agent inspects `.meteor/versions`, says the Suspense entry point
begins in 2.7.0 and official Meteor 3 compatibility begins in 3.0.0, and
requires an upgrade before using the current API. It should prefer a tested
3.0.0+ version, with current examples verified against 4.0.1. Fail if it
assumes the Meteor 3 release supplies every package feature.
## Case 22: React 19 SWC compiler
Prompt: "Our Meteor 3.6-beta.0 app has the paired Rspack packages and React 19. Enable React Compiler without a second Babel pass."
Pass if the agent: Uses extendSwcConfig and jsc.transform.reactCompiler true with automatic React runtime, preserves Meteor defaults, and verifies production/component/refresh behavior without adding duplicate transforms.
Fail if it contradicts these boundaries or invents unsupported commands.
## Case 23: React 18 compiler target
Prompt: "We upgraded the build to Meteor 3.6-beta.0 but must retain React 18. Can SWC React Compiler work without a React major upgrade?"
Pass if the agent: Keeps React 18, selects target 18 and react-compiler-runtime, verifies installed dependencies, and does not force React 19 or copy the React 19 boolean setting alone.
Fail if it contradicts these boundaries or invents unsupported commands.
## Case 24: older compiler near miss
Prompt: "This app stays on Meteor 3.5.2 with its paired Rspack packages and Babel React Compiler. Can we simply delete Babel and set jsc.transform.reactCompiler true?"
Pass if the agent: Rejects assuming the new SWC path exists in the old pairing, retains the required Babel transform or requests a scoped paired upgrade, and inventories other Babel plugins.
Fail if it contradicts these boundaries or invents unsupported commands.
@@ -108,3 +108,10 @@ Prompt: "On Meteor 3.4, make a DDP rate-limit matcher await a user plan lookup."
Pass if the agent says async matchers begin in Meteor 3.5, rejects the awaited
matcher on 3.4, and offers a synchronous fixed rule, precomputed state, or a
framework upgrade. Fail if it applies the current 3.5 API unconditionally.
## Case 12: Accounts hardening ownership
Prompt: "Review Meteor 3.6-beta.1 passwordless and HttpOnly-cookie abuse protections. Are their rate limits interchangeable, and does HttpOnly remove our XSS risk?"
Pass if the agent: Keeps security audit ownership and uses meteor-accounts for configuration details. Separates per-connection DDP and per-address HTTP limits, checks resolved beta packages, preserves method authorization and notes the in-memory DDP token remains exposed to active same-origin XSS.
Fail if it contradicts these boundaries or invents unsupported APIs.
@@ -188,3 +188,10 @@ tests do not use jQuery. Should I add it to the app before running test-packages
Pass if the agent recognizes the restored driver dependency, adds no app or
unneeded package-test dependency, and verifies the UI and expected client/server
assertions. Fail if it repeats the 1.6.0 workaround unconditionally.
## Case 20: CI runtime for beta.1
Prompt: "Adapt our Node 24 Meteor 3.5.2 test job for a deliberate upgrade to 3.6-beta.1. What runtime and native dependency checks belong in CI?"
Pass if the agent: Verifies the selected Meteor runtime, uses Node 26.8.2/npm 11.19.0 for beta.1, rebuilds native deps and preserves frozen dependency installation and actual client/server test execution. Does not claim existing 3.5.2 jobs need Node 26.
Fail if it contradicts these boundaries or invents unsupported APIs.
.meteor/types, tsconfig.json, jsconfig.json, and tsc --noEmit in a Meteor app.
Use this skill when choosing or migrating declaration providers without
changing the app's runtime or bundler. For a Meteor 2-to-3 runtime migration
use migrate-to-meteor-3 first; for SWC/Rspack compilation use
meteor-modern-build-stack or migrate-to-rspack. General TypeScript language
questions and Atmosphere declaration publishing are outside this app scope.
metadata:
author:meteor
kind:knowledge
meteor:">=3.0"
area:build
tagline:"Configure Meteor app declarations, TypeScript and JavaScript IntelliSense, and reliable local/CI type-checking."
docs_synced_at:"2026-09-23"
license:MIT
---
# TypeScript in Meteor applications
Make the editor and checker resolve the intended Meteor declarations and
actually inspect application source. Preserve working provider choices unless
the task includes changing them. A runtime or bundler upgrade does not imply
a declaration migration.
For a runtime migration or bundler configuration request, load the owning
skill before proposing migration steps or build configuration. This skill's
declaration guidance does not supply that procedure; do not substitute a
generic TypeScript/Rspack recipe when the owning skill is unavailable.
## Identify the layer
| Layer | Evidence and action |
|---|---|
| Compilation | The Atmosphere `typescript` package or Rspack/SWC strips types. Use the build owner for syntax transforms, loaders and bundling. |
| Declaration provider | Inspect `.meteor/packages`, `.meteor/versions`, npm/workspace manifests and lockfile for direct `zodern:types`, `@types/meteor` and native opt-in. |
| Resolution | Inspect active `tsconfig.json`/`jsconfig.json`, `extends`, `files`, `include`, `exclude`, `paths` and `types`. Check the editor uses the intended project/compiler. |
| Checking | Inspect the installed npm `typescript` and scripts; it is separate from the Atmosphere compiler. Preserve a configured checker such as `TsCheckerRspackPlugin`. |
Do not infer that an app is checked because `meteor run` or `meteor build`
succeeded. Conversely, do not claim an explicitly configured checker never
runs just because SWC itself only transpiles.
## Choose the provider
| Target and intent | Decision |
|---|---|
| Meteor 3 before 3.6-beta.1 | Native `meteor types` is unavailable. Keep a working legacy provider; use the earlier-release branch in the provider reference if declarations are missing. |
| New or existing 3.6-beta.1 app with working legacy types | Keep them unless native adoption is requested. Beta.1 TypeScript templates still install direct `zodern:types` and `@types/meteor`; a native fallback path is not opt-in. |
| Explicit native adoption on 3.6-beta.1 | Root config required. Checkpoint providers/config, remove direct `zodern:types`, generate successfully, then merge native resolution and remove overlapping ambient types. |
| JavaScript-only beta.1 app wanting IntelliSense | Use `jsconfig.json` and the same provider decision; no TypeScript source conversion or bundler switch is required. |
Read [declaration providers](references/declaration-providers.md) for the
TypeScript 7 compatibility, earlier providers and rollback. Read
[JavaScript IntelliSense](references/javascript-intellisense.md) for JS apps.
## Verify the effective project
1. Confirm generation actually ran. A direct `zodern:types` makes
`meteor types` skip with exit zero; ordinary Meteor commands do not select
or regenerate native declarations on beta.1.
2. Use the app's local compiler. With native declarations, run
`meteor types && tsc --noEmit` in a package script; select the intended
config explicitly when the app has several projects.
3. Check `tsc --listFiles --noEmit` includes application source. Appending a
barrel under `files` can disable implicit inclusion; retain existing source
patterns and exclusions. A deliberate temporary wrong type should fail;
remove the probe and rerun. JavaScript IntelliSense alone does not enable
`checkJs`; select JS checking separately when requested.
4. Restart the editor's TypeScript server after configuration changes. If
CLI and editor disagree, compare selected config/compiler before clearing
Meteor state or reinstalling providers.
5. Keep generated `.meteor/types/` untracked and unedited. Fix exposed app
errors rather than masking them with `any` or a new `skipLibCheck` bypass.
## Diagnose the boundary
| Symptom | First check |
|---|---|
| Native command reports nothing to do | Root `tsconfig.json` or `jsconfig.json`. For a new native-only setup, generate with the root config before adding entries that point to nonexistent output. |
| Generation fails | Read the error; local packages may need fixing. Stop the provider switch, preserve config and old output, restore the previous provider for rollback. |
| Ordinary imports work, scoped/sub-path imports fail | Explicit native barrel in `files` plus wildcard mapping to per-package adapters, not to the barrel. |
| Duplicate identifiers | Overlapping providers, inherited `types: ["meteor"]` and app ambient declarations before symlinks. |
| Peer types fail inside Meteor's package store | Consider `preserveSymlinks` for that specific boundary; it cannot remove duplicate providers. |
| One community package remains untyped | Check whether the installed package publishes declarations. No generator can promise coverage for every Atmosphere package. |
If the actual task is publishing package declarations, use the official
Inspect the release, direct Atmosphere constraints, resolved package versions,
npm/workspace manifests, lockfile and all active TypeScript configs before
changing providers. Keep compiler upgrades separate from declaration changes.
## Choose by release and provider
| Project state | Action |
|---|---|
| Meteor 3 before 3.6-beta.1 | Native `meteor types` is unavailable. Retain working legacy declarations; use the `zodern:types` branch below when package declarations are missing. |
| Upgrading to 3.6-beta.1 with working `@types/meteor` or `zodern:types` | Keep the provider and paths unless the task includes adopting native declarations. Runtime upgrade alone does not switch providers. |
| Explicit native adoption on 3.6-beta.1 | Follow the ordered migration below. The command needs a root `tsconfig.json` or `jsconfig.json`. |
| Direct `zodern:types` still installed | `meteor types` skips successfully and leaves both output trees unchanged. A zero exit is not proof of native generation. A transitive dependency alone does not select the legacy provider. |
The classic `typescript` package and Rspack/SWC transpile app source without
type-checking it themselves. A separately configured checker, such as the
TypeScript scaffold's `TsCheckerRspackPlugin`, is a distinct layer; preserve
a working checker when changing declarations. On beta.1, ordinary `run`, `build`, `test` and `lint` neither
generate nor select native declarations. New TypeScript templates also keep
the legacy provider first; a native fallback path is not an opt-in.
## Native adoption on Meteor 3.6-beta.1
1. Checkpoint provider dependencies, lockfile and TypeScript configuration.
Keep the app's local TypeScript compiler version fixed during this change.
2. Remove `zodern:types` only if it is a direct app dependency, then generate:
```bash
meteor remove zodern:types
meteor types
```
Generation can build local packages but does not bundle or type-check the
application. On failure, stop before changing provider paths: the command
exits nonzero and preserves the old `.meteor/local/types` output. Restore
the removed provider if rolling back. Successful generation removes that
stale legacy output.
3. After success, merge these entries into the active TypeScript config:
```json
{
"files": ["./.meteor/types/packages.d.ts"],
"include": ["**/*.ts", "**/*.tsx"],
"compilerOptions": {
"paths": {
"meteor/*": ["./.meteor/types/packages/*"]
}
}
}
```
Append the barrel to existing `files`; retain existing `include`, aliases,
compiler options and `extends`. If the app previously had neither `files`
nor `include`, adding `files` disables implicit source inclusion: explicitly
preserve it with `include: ["**/*"]`, or the app's intended source patterns.
Do not broaden an intentionally files-only project. Resolve paths against the config
that declares them. The adapters resolve normal package imports; the barrel
supplies scoped and sub-path modules such as
`meteor/react-meteor-data/suspense`. Explicit `files` works even when
`.meteor/**` is excluded. Do not map `meteor/*` directly to the native barrel.
4. Remove a direct `@types/meteor` dependency with the project's existing
package manager, and remove only `"meteor"` from `compilerOptions.types`
wherever it is inherited or declared. Preserve other type libraries and
the workspace lockfile. Prefer one provider per Meteor module ID; a hybrid
for uncovered packages needs deliberate non-overlap and type-checking.
5. Use the app's installed `typescript` compiler, adding a compatible pinned
dev dependency only if missing. For an npm app:
```json
{
"scripts": {
"check-types": "meteor types && tsc --noEmit"
}
}
```
```bash
meteor npm run check-types
```
Use the equivalent script runner for pnpm/Yarn. CI must generate before
invoking local `tsc`; a successful app build does not prove type safety.
Fix errors exposed by corrected declarations without casting everything
to `any`. Check `tsc --listFiles --noEmit` includes application source; a
deliberate temporary wrong type should fail. Remove that probe and rerun.
Restart the editor's TypeScript server after config changes.
Do not edit or commit `.meteor/types/`; generation replaces its contents and
writes its own `.gitignore`. Roll back by restoring legacy dependencies,
lockfile and config, then regenerate using the app's previous provider workflow.
Ordinary Meteor commands and a skipped native run do not delete either tree.
## Compiler configuration compatibility
Inspect the installed npm `typescript`, not only the Atmosphere `typescript`
package: they are separate tools. Beta.1's TypeScript scaffold selects npm
TypeScript 7 and `moduleResolution: "bundler"`. Do not copy older docs'
`baseUrl` or `moduleResolution: "node"` into it.
[TypeScript 7 removes both options](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/).
`paths` works without `baseUrl` on TypeScript 4.1+; use explicit relative
targets, preserving aliases and their previous base directory. Keep an older
app's compatible compiler/configuration rather than upgrading its compiler
just to change Meteor declarations.
## Earlier-release legacy declarations
If required package declarations are missing on an older Meteor 3 app:
```bash
meteor add zodern:types
```
Merge the legacy settings, preserving any intentional working provider order:
Regenerate through the existing provider workflow, restart the editor's
TypeScript server, and run the local compiler. Keep generated output untracked.
The legacy barrel mapping is not the native adapter mapping.
## Diagnose the first missing boundary
| Symptom | Check |
|---|---|
| `meteor types` reports nothing to do | Root `tsconfig.json` or `jsconfig.json`; do not delete caches. |
| Generation says it skipped | Direct `zodern:types` constraint, not only `.meteor/versions`. |
| Ordinary imports work but scoped/sub-path imports fail | Explicit native barrel in `files`, not just wildcard `paths`. |
| Duplicate identifiers after switching | Overlapping providers, inherited `types: ["meteor"]`, old paths and ambient declarations before blaming symlinks. |
| Bundled npm peer types fail under the package store or degrade to `any` | Try `compilerOptions.preserveSymlinks: true` for that resolution boundary. This does not fix overlapping declaration providers. |
| One community module has no native adapter | The package may publish no type information. Inspect its version and metadata; do not invent generated declarations or claim all Atmosphere packages are covered. |
Use the current skill and relevant references in a fresh conversation or a
disposable app. Keep pass/fail criteria hidden until the run finishes.
## Case 1: native provider adoption in a beta.1 app
Prompt: "Our Meteor 3.6-beta.1 TypeScript app was just created, and we explicitly want native declarations. We have direct zodern:types and @types/meteor, tsconfig extends, a files array and meteor in compilerOptions.types. Give the migration and CI sequence."
Pass if the agent: Preserves the compiler and app config, checkpoints state, removes direct zodern:types, generates before switching paths/removing @types/meteor, appends the native barrel and per-package adapters, removes only inherited meteor ambient loading, runs local tsc through a script and keeps generated files untracked. Provides rollback without treating compilation as checking.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 2: preserve providers during runtime upgrade
Prompt: "Upgrade our existing Meteor app to 3.6-beta.1 but keep the working TypeScript provider. meteor types exits zero saying zodern:types is installed. Did it generate native types, and should we remove the provider?"
Pass if the agent: Keeps the explicit existing-provider preference, explains successful skip and direct dependency precedence, and distinguishes runtime upgrade, native generation and type-checking. Does not remove working providers.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 3: native generation failure
Prompt: "After removing direct zodern:types on 3.6-beta.1, meteor types fails. Should we replace paths, uninstall @types/meteor and delete .meteor/local/types to finish?"
Pass if the agent: Stops provider switching until generation succeeds, preserves old output and config, restores the removed package for rollback and reports nonzero generation failure. Does not delete fallback output or invoke a destructive reset.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 4: native scoped imports and mixed providers
Prompt: "After beta.1 native opt-in, meteor/random resolves but meteor/react-meteor-data/suspense fails. Our tsconfig excludes .meteor and extends a config with types [meteor,node]. Why do we also see duplicate declarations?"
Pass if the agent: Checks explicit native barrel in files despite exclude, keeps paths mapped to packages/* rather than the barrel, checks installed package declaration coverage and removes overlapping ambient meteor provider while preserving node and unrelated config. Does not blame all failures on preserveSymlinks.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 5: TypeScript 7 configuration during native adoption
Prompt: "After selecting Meteor 3.6-beta.1 native declarations, our existing TypeScript 7 app reports TS5102 for baseUrl copied from the guide. Should we downgrade TypeScript or copy moduleResolution: node as well? The Rspack config already has TsCheckerRspackPlugin."
Pass if the agent preserves the compiler and checker, removes the unsupported
baseUrl while preserving alias semantics through relative paths, keeps a
compatible bundler/nodenext resolution mode, and separates checker behavior
from SWC transpilation and native generation. It must not downgrade TypeScript
or claim the configured checker does not run just because SWC itself strips types.
## Case 6: generated barrel hides application source
Prompt: "After beta.1 native opt-in we added files: [.meteor/types/packages.d.ts] to a tsconfig that previously had neither files nor include. tsc now passes even with a wrong assignment in imports/probe.ts. Are native types working?"
Pass if the agent checks the effective source set with local tsc --listFiles,
explains that adding files removed implicit inclusion, and preserves the
previous source set with explicit include patterns while retaining exclusions.
It verifies a temporary deliberate type error fails, then removes it and
reruns. It must not disable checks or claim a green exit proved app coverage.
## Case 7: Meteor TypeScript imports become `any`
Prompt: "After moving from Meteor 2 to Meteor 3.5.2, required package
declarations are missing. We want zodern:types; the editor also reports
duplicate identifiers. What should we inspect and configure?"
Pass if the agent checks existing providers and inherited configuration, uses
the legacy `zodern:types` workflow with `preserveSymlinks` and the legacy barrel
mapping, and restarts the TypeScript server. It must inspect overlapping
declarations before attributing duplicates to symlinks, keep generated output
untracked, and not prescribe native `meteor types` on 3.5.2.
## Case 8: JavaScript IntelliSense without conversion
Prompt: "Our JavaScript-only Meteor 3.6-beta.1 app wants IntelliSense for meteor/random. There is no root tsconfig or jsconfig and no direct zodern:types. We do not want a TypeScript conversion, a bundler change or JS lint errors."
Pass if the agent adds a root jsconfig, generates native declarations before
selecting their paths, includes native adapters/barrel and intended JS source,
preserves compatible resolution and verifies editor types. It keeps checkJs
and CI error checking optional and does not convert source or add Rspack.
## Case 9: missing root configuration
Prompt: "On 3.6-beta.1, meteor types says there is nothing to do. We only have tsconfig files under imports/ui and packages. Should we delete .meteor/local or run meteor reset?"
Pass if the agent checks for an appropriate root config, preserves nested
project ownership, reruns generation, and checks real output. It does not
reset application state or assume a successful no-op generated declarations.
## Case 10: a package is missing from native output
Prompt: "Native types work for meteor/random but a community package is untyped and has no generated adapter. Another declared package has TS2307 for a bundled peer under the Meteor package store. Should we edit .meteor/types or enable preserveSymlinks for everything?"
Pass if the agent separates missing declaration metadata from peer resolution,
checks installed package/version metadata, tries preserveSymlinks only for the
peer boundary, and does not edit generated files or promise universal coverage.
Any hybrid provider is deliberate, non-overlapping and checked.
## Case 11: bundler configuration near miss
Prompt: "Configure SWC decorators and CSS loaders in rspack.config.ts for our Meteor app. Existing editor types and type-checks already work."
Pass if the agent routes bundler configuration to meteor-modern-build-stack
and leaves working providers alone. The config's .ts suffix alone does not
make declarations the primary task.
Fail if it supplies a generic Rspack configuration without consulting the
Meteor build owner and release pairing.
## Case 12: runtime migration near miss
Prompt: "Move this Meteor 2 app to Meteor 3, replacing removed Fibers and propagating async Mongo calls through methods. We use TypeScript but are not changing providers."
Pass if the agent selects migrate-to-meteor-3 for runtime/API conversion and
preserves the working declaration provider. It does not replace that task
with native type setup.
Fail if it invents a runtime procedure under this skill, including flipping
the release before async conversion and package triage.
## Case 13: package-author boundary
Prompt: "Publish declarations for my reusable Atmosphere package with api.types and package-types.json. Is editing the app's generated adapter the right workflow?"
Pass if the agent rejects editing generated adapters and directs the actual
package-author workflow to the official Atmosphere types documentation. It
does not claim the app-provider skill implements package publication or that
@@ -344,12 +344,15 @@ with `try`/`catch` at the owning async boundary.
## Case 23: Meteor TypeScript imports become `any`
Prompt: "After moving to Meteor 3, every `meteor/*` TypeScript import is `any`
and the editor reports duplicate identifiers."
Prompt: "After moving from Meteor 2 to Meteor 3.5.2, required package
declarations are missing. We want zodern:types; the editor also reports
duplicate identifiers. What should we inspect and configure?"
Pass if the agent adds `zodern:types`, enables `preserveSymlinks`, maps
`meteor/*` to `.meteor/local/types/packages.d.ts`, and restarts the TypeScript
server. It must keep generated types out of source control.
Pass if the agent checks existing providers and inherited configuration, uses
the legacy `zodern:types` workflow with `preserveSymlinks` and the legacy barrel
mapping, and restarts the TypeScript server. It must inspect overlapping
declarations before attributing duplicates to symlinks, keep generated output
untracked, and not prescribe native `meteor types` on 3.5.2.
## Case 24: React Suspense is optional
@@ -403,3 +406,35 @@ new Windows workstation and make sure PATH works."
Pass if the agent routes the fresh workstation and PATH workflow to
`meteor-cli-installation`. Fail if it starts an application code migration or
offers the Linux and macOS shell installer on Windows.
## Case 29: native provider handoff during runtime migration
Prompt: "Migrate our Meteor 2 TypeScript app to 3.6-beta.1, including async APIs and an explicit native declaration switch. Which workflow owns each part?"
Pass if the agent keeps runtime/async migration in this skill, preserves the
provider through that upgrade, then hands explicit native adoption to
meteor-typescript. It checkpoints dependencies and config and stops the
provider switch if generation fails. It must not replace async migration with
only a type configuration edit or select native declarations before beta.1.
## Case 30: preserve providers during runtime upgrade
Prompt: "Upgrade our existing Meteor app to 3.6-beta.1 but keep the working TypeScript provider. meteor types exits zero saying zodern:types is installed. Did it generate native types, and should we remove the provider?"
Pass if the agent: Keeps the explicit existing-provider preference, explains successful skip and direct dependency precedence, and distinguishes runtime upgrade, native generation and type-checking. Does not remove working providers.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 33: native Node boundary during upgrade
Prompt: "For our deliberate Meteor 2 to 3.6-beta.1 migration, can the existing Node 24 production image stay unchanged?"
Pass if the agent: Uses Node 26.8.2/npm 11.19.0 for beta.1 after checking target runtime, rebuilds native modules and hands deployment details to meteor-deployment. Retains older-release mappings rather than generalizing Node 26 to all Meteor 3.
Fail if it contradicts these boundaries or invents unsupported APIs.
## Case 36: standalone declarations near miss
Prompt: "The app already runs on Meteor 3.6-beta.1. Only meteor/* editor types and our tsc check are broken; no framework or bundler upgrade is requested."
Pass if the agent chooses meteor-typescript for provider/resolution/checking
and does not start a Meteor 2-to-3 conversion or bundler migration.
Tight scope: what an existing TypeScript-on-Meteor-2 project must update
during the upgrade to Meteor 3. The full TypeScript-on-Meteor setup
(fresh projects, advanced patterns, type-helper packages) is out of scope
here; a dedicated `meteor-typescript` skill will cover it.
Keep declaration-provider changes separate from the Meteor runtime upgrade.
Inspect the target release, direct `.meteor/packages` constraints,
`.meteor/versions`, npm/workspace manifests, lockfile and active TypeScript
configs, including `extends`.
## What breaks
| Target and intent | Migration decision |
|---|---|
| Earlier Meteor 3 release, including 3.5.2 | Native `meteor types` is unavailable. Preserve working `@types/meteor` or `zodern:types` and verify with the app's existing local checker. |
| Meteor 3.6-beta.1 runtime upgrade only | Keep the provider, compiler and config. The upgrade does not select native declarations. |
| Explicit native adoption on beta.1 | Checkpoint providers/config and use `meteor-typescript` for the separate declaration migration, editor resolution and CI workflow. |
After the upgrade, imports from `meteor/*` resolve to `any` or fail
outright. The Meteor 2 type-shipping mechanism is no longer compatible
with the 3.x build, so any `import { Meteor } from 'meteor/meteor';`
loses its types.
A direct `zodern:types` makes `meteor types` skip successfully; exit zero
alone is not evidence of generation. When explicitly switching, remove only
the direct legacy constraint, generate successfully, then change native
resolution and remove overlapping ambient types. Stop on generation failure;
restore the previous provider/config for rollback rather than deleting old
output. The native generator preserves legacy output on failure.
## What to install
```bash
meteor add zodern:types
```
`zodern:types` ships generated `.d.ts` files keyed off your local Meteor
install. It replaces the older approaches used in Meteor 2.
## `tsconfig.json` updates
Two changes are required:
```jsonc
{
"compilerOptions":{
// 1. Resolve symlinks the way Meteor's package layout expects.
"preserveSymlinks":true,
// 2. Map meteor/* imports to the generated types directory.
"baseUrl":"./",
"paths":{
"meteor/*":[".meteor/local/types/packages.d.ts"]
}
}
}
```
Without `preserveSymlinks: true`, TypeScript follows symlinks in
`.meteor/local/build/` and reports duplicate identifier errors. The
`paths` mapping is what tells TypeScript where to find type
declarations for every `meteor/<package>` import.
## After the changes
Restart your TS server (or your editor) so the new `tsconfig.json` is
picked up. The first compilation may be slow because `zodern:types`
regenerates the types directory on demand.
## Symptoms
-`import { Meteor } from 'meteor/meteor';` resolves to `any`, no
autocomplete. The `paths` mapping in `tsconfig.json` is missing.
- "Cannot find module 'meteor/meteor' or its corresponding type
declarations." `zodern:types` is not installed.
- "Duplicate identifier 'Meteor'." `preserveSymlinks` is not set.
Use `meteor-typescript` for `meteor/*` imports resolving to `any`, duplicate
@@ -357,3 +357,10 @@ input/mode. It requires reproduction through the affected JSX/catalog/loader
path and applicable development/production checks before a broader claim.
Fail if it declares all plugin 5.x versions broken on Rspack 2, forces the
example pin, or dismisses a different project's failure from this one smoke.
## Case 36: beta.1 upgrade preserves types provider
Prompt: "Upgrade our existing Rspack app from Meteor 3.5.2 to 3.6-beta.1. Automatic dependency installs are enabled and our zodern:types setup works. Must we migrate types, run update --npm, or rebuild native npm dependencies?"
Pass if the agent: Uses update --release 3.6-beta.1 then normal startup, checks the beta.1 pairing and lockfile, preserves the current declaration provider and valid config, and verifies Node 26/native module compatibility. Does not mandate a second update --npm or native declaration migration.
Fail if it contradicts these boundaries or invents unsupported APIs.
Use this branch for Meteor 3.6, verified on `3.6-beta.0`, with
`rspack@1.4.0-beta360.0` and `@meteorjs/rspack@3.0.0-beta.1`.
Use this branch for Meteor 3.6 beta. The current audited target is
`3.6-beta.1`, with `rspack@1.4.0-beta360.1` and
`@meteorjs/rspack@3.0.0-beta.2`. A deliberately pinned `3.6-beta.0` keeps
`rspack@1.4.0-beta360.0` and `@meteorjs/rspack@3.0.0-beta.1`; use the
requested release instead of silently changing the target.
Meteor 3.5.2 keeps `rspack@1.3.0`, `@meteorjs/rspack@2.2.0` and Rspack 1.x.
Do not force Rspack 2 into a constrained older release.
@@ -12,7 +15,7 @@ Do not force Rspack 2 into a constrained older release.
2. With default `meteor.autoInstallDeps` enabled, update then start normally:
```bash
meteor update --release 3.6-beta.0
meteor update --release 3.6-beta.1
meteor run
```
@@ -24,7 +27,8 @@ Do not force Rspack 2 into a constrained older release.
test a frozen install. `meteor update --npm` overrides the opt-out for that
invocation; do not put a lockfile-rewriting step in immutable CI.
3. The beta's required npm minimums are core/CLI/dev-server 2.2.0, Meteor integration
3.0.0-beta.1, SWC core 1.15.32, helpers 0.5.23 and Rsdoctor 1.5.9.
3.0.0-beta.2 on beta.1 (3.0.0-beta.1 on beta.0), SWC core 1.15.32,
helpers 0.5.23 and Rsdoctor 1.5.9.
Keep helpers in runtime dependencies, the bundler tools in dev dependencies.
Detected React adds refresh plugin 2.0.0 and refresh runtime 0.17.0.
Record the resolved versions: compatible newer patches can satisfy these
@@ -59,7 +63,7 @@ Also check these [upstream migration boundaries](https://www.rspack.dev/guide/mi
| Surface | Migration check |
|---|---|
| Node and ESM | Rspack 2 requires Node `^20.19.0 \|\| >=22.12.0`. Meteor 3.6-beta.0 bundles Node 24.15.0; host Node 18 alone does not prove a Meteor build incompatibility. Identify which binary actually invokes each tool before upgrading that runtime. Keep valid Meteor CommonJS configs/output despite pure-ESM Rspack packages. |
| Node and ESM | Rspack 2 requires Node `^20.19.0 \|\| >=22.12.0`. Meteor 3.6-beta.1 bundles Node 26.8.2, beta.0 bundles Node 24.15.0; host Node 18 alone does not prove a Meteor build incompatibility. Identify which binary actually invokes each tool before upgrading that runtime. Keep valid Meteor CommonJS configs/output despite pure-ESM Rspack packages. |
| Dev server | `@rspack/dev-server` is now explicit; Meteor's dependency check supplies it. Review custom `devServer.proxy` and `watchFiles` against the v2 guide before reusing old shapes. |
| Resolution | Upstream changes cover `.wasm` extension lookup, CSS `@import` conditions and empty `resolve.roots`. Meteor supplies explicit extensions and project roots. Inspect `resolve.byDependency` and custom overrides; test the failing import before changing resolution globally. |
| Custom plugins | Review the plugin's Rspack 2 support and the [2.0 breaking-change overview](https://www.rspack.dev/blog/announcing-2-0), including compiler hook and stats API changes when used. |
@@ -73,6 +77,11 @@ React Compiler can use the built-in SWC loader on this pairing; see
[framework migration](framework-and-css.md). Retain Babel for an older
integration or requirements unsupported by the SWC compiler path.
Native TypeScript declarations are a separate beta.1 opt-in. Preserve a working
`zodern:types`/`@types/meteor` setup during Rspack migration. Neither SWC nor
normal startup generates native declarations. Preserve a configured checker.
Use `meteor-typescript` when the task also includes changing providers.
## Prove the result
Use `meteor npm ci` for an npm lockfile, `pnpm install --frozen-lockfile` at
@@ -84,6 +93,9 @@ requirement and retest after peer cleanup. Do not convert managers to fix CI.
Run development, a rebuild, actual client/server tests, and a production
bundle. Exercise CSS, lazy imports, local/workspace packages and custom
loaders when present. Boot the extracted bundle and load the browser page.
For beta.1, rebuild and exercise native npm dependencies against Node 26.8.2
and the deployment architecture before deploying; this is a release migration
step, not something to defer until a native module crashes in production.
Follow the [validation matrix](validation-matrix.md); reported example startup
is not proof that your translations, UI components or offline updates work.
For a failure, capture the [migration report](troubleshooting.md#reporting-issues)
# misclassified that missing loader as an application startup bug.
# AppDir is the exact tree just packed, so this also avoids extracting
# the large image merely to make the capability decision.
if ! AppDir/usr/lib/wekan/bundle/node --version >/dev/null 2>&1; then
if ! LD_LIBRARY_PATH="$PWD/AppDir/usr/lib/wekan/bundle/node-runtime${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" AppDir/usr/lib/wekan/bundle/node --version >/dev/null 2>&1; then
echo "::warning::this runner cannot execute the bundled ${{ matrix.appimage_arch }} Node binary, so the AppImage was packed but not started. It is uploaded unchecked."
echo "::warning::v${{ steps.plan.outputs.version }} is missing ${{ steps.plan.outputs.manual }}, which this workflow cannot build: amd64 is the Meteor build, arm64/win64/mac-arm64 each need their own runner, and the Sandstorm .spk is signed. Run release-all.yml for those."
echo "::error::v${{ steps.plan.outputs.version }} still lacks ${{ steps.plan.outputs.manual }} after recovery. Inspect the matching full-release run; older unnamed runs need their failed jobs retried manually."
exit 1
# The six architectures nobody else builds for, repacked from the PUBLISHED
# amd64 bundle - which is what makes this possible without a Meteor build.
@@ -113,7 +113,7 @@ By working directly with WeKan ® you get the benefit of active maintenance and
## Getting Started with Development
The main branch uses Meteor 3.5 with Node.js 24.x.
The main branch uses Meteor 3.6-beta.1 with Node.js 26.x.
See [CHANGELOG.md](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) for the latest runtime updates.
To contribute, [create a fork](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#2-create-fork-of-httpsgithubcomwekanwekan-at-github-web-page) and run `./build.sh` (or `./build.bat` on Windows) as detailed [here](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#3-install-dependencies-build-wekan-and-run-the-dev-server). Once you're ready, please test your code and [submit a pull request (PR)](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#7-test).
@@ -127,7 +127,7 @@ Please refer to the [developer documentation](https://github.com/wekan/wekan/blo
Before building WeKan from source, ensure you have:
- **Git** - for cloning the repository
- **Node.js 24.x** - WeKan requires Node.js 24.x
- **Node.js 26.x** - WeKan requires Node.js 26.x
- **Meteor** - the JavaScript framework WeKan is built with
echo"==> Deleting .build and building WeKan before running the tests (always, so the tests run against the current source)."
build_wekan
if[ ! -d .build/bundle ];then
echo"ERROR: .build/bundle is missing after building. Aborting the test run."
return1
fi
fi
if["$RUN_MODE"= parallel ];then
echo"Running ALL tests against ONE WeKan server on http://localhost:3000 - all jobs run IN PARALLEL (concurrently). Needs plenty of RAM (fine on 32 GB)."
else
echo"Running ALL tests against ONE WeKan server on http://localhost:3000 - all jobs run SEQUENTIALLY (one at a time)."
select cat in "Setup""Dev server""Tests""Docker""Releases""CLI commands""Tools""Quit";do
select cat in "Setup""Dev server""Dev server nobuild""Tests""Docker""Releases""CLI commands""Tools""Quit";do
case$cat in
"Setup")
choose "Setup"\
@@ -2719,8 +2804,8 @@ while [ -z "$opt" ]; do
"Build WeKan development bundle|Build WeKan development bundle"\
"git pull|git pull: fetch, fast-forward or merge onto origin, repoint the CHANGELOG commit links the rebase moved, and preserve unresolved conflict state"\
"git push|git push: check the CHANGELOG commit links resolve before publishing them, push this branch to origin, and pull-then-retry once if origin moved meanwhile";;
"Dev server")
choose "Dev server"\
"Dev server"|"Dev server nobuild")
choose "$cat"\
"localhost:3000|Run Meteor for dev on http://localhost:3000"\
"localhost:3000 + trace warnings|Run Meteor for dev on http://localhost:3000 with trace warnings, and warnings using old Meteor API that will not exist in Meteor 3.0"\
"localhost:3000 + bundle visualizer|Run Meteor for dev on http://localhost:3000 with bundle visualizer"\
@@ -2734,6 +2819,7 @@ while [ -z "$opt" ]; do
"EVERYTHING two-worker|Run EVERYTHING with stages one by one and two Playwright workers per browser; database and FerretDB stages stay sequential; logs in log/<datetime>/"\
"EVERYTHING one by one|Run EVERYTHING one stage and one Playwright worker at a time for minimum RAM usage; database and FerretDB stages stay sequential; logs in log/<datetime>/"\
"EVERYTHING at once|Run EVERYTHING with the WeKan test jobs concurrently; database backends and FerretDB stages stay sequential; logs in log/<datetime>/"\
"EVERYTHING source one by one|Run EVERYTHING against Dev server nobuild on localhost:3000, one test at a time, all browsers"\
"Mocha (server-side)|Test Mocha unit + security + API-logic tests (server-side only, no browser)"\
"Import regression|Test import regression (tests/wekanCreator.import.test.js, fast, no server)"\
DEFAULT_METEOR_REACTIVITY_ORDER="changeStreams,oplog,polling"DDP_TRANSPORT=sockjs DEBUG=trueWRITABLE_PATH=.. WITH_API=trueRICHER_CARD_COMMENT_EDITOR=falseROOT_URL="$DEV_ROOT_URL"meteor run --port "$DEV_PORT" 2>&1| tee "$(one_log dev-server)"
DEFAULT_METEOR_REACTIVITY_ORDER="changeStreams,oplog,polling"DDP_TRANSPORT=sockjs DEBUG="${DEBUG:-false}"WRITABLE_PATH=.. WITH_API=trueROOT_URL="$DEV_ROOT_URL""${DEV_COMMAND[@]}" --port "$DEV_PORT" 2>&1| tee "$(one_log dev-server)"
DEFAULT_METEOR_REACTIVITY_ORDER="changeStreams,oplog,polling"DDP_TRANSPORT=sockjs DEBUG=trueWRITABLE_PATH=.. WITH_API=trueRICHER_CARD_COMMENT_EDITOR=falseROOT_URL=http://$IPADDRESS:$PORTmeteor run --port $PORT 2>&1| tee "$(one_log dev-server)"
DEFAULT_METEOR_REACTIVITY_ORDER="changeStreams,oplog,polling"DDP_TRANSPORT=sockjs DEBUG="${DEBUG:-false}"WRITABLE_PATH=.. WITH_API=trueROOT_URL=http://$IPADDRESS:$PORT"${DEV_COMMAND[@]}" --port $PORT 2>&1| tee "$(one_log dev-server)"
// button, a route change); make sure the last keystrokes reach the draft.
flushCommentDraftSave();
commentFormIsOpen.set(false);
$('.note-popover').hide();
});
Template.commentForm.helpers({
Loaded 100 of 1309 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.