Welcome 👋
Neo shows notifications with Neo.toast({msg, appName, position}). Behind it, Neo.manager.Toast#createToast() first checks the request: an unknown position, a missing message or a missing app name gets null instead of a toast. Those guard rails are what a first-time user of the API hits first, and nothing tests them.
This is a good first issue for Hacktoberfest 2026. It needs Node.js and a clone of this repository: no Docker, no AI setup.
[!IMPORTANT]
Reserved for first-time Neo.mjs contributors. The maintainer team will not claim, edit, or implement this issue through 2026-10-31. Comment here to claim it, and ask anything on this issue.
Set up once: follow Set up the engine from a clone, including npm run bundle-browser-deps: without it the unit suite selects zero tests.
Where things live
- Source:
src/manager/Toast.mjs, a singleton that also binds Neo.toast to its createToast
- New test file:
test/playwright/unit/manager/Toast.spec.mjs
- Pattern to copy:
test/playwright/unit/manager/Instance.spec.mjs (the setup() call and imports)
What to cover
| Call |
Returns |
createToast({position: 'xx', msg: 'hi', appName: 'A'}) |
null: the six positions are tl tc tr bl bc br |
createToast({appName: 'A'}), no msg |
null |
createToast({msg: 'hi'}), no appName |
null |
| after importing the manager |
Neo.toast exists and calls createToast |
| the manager's defaults |
maxToasts is 3; running has one empty list per position |
Each refusal also logs an error that names the problem. Asserting the return value is enough; checking the message is a bonus.
Done when
Out of scope
Creating, showing and stacking real toasts (they need a mounted component), and Neo.component.Toast.
While you wait for review
You just pinned one small piece of a multi-threaded application engine: in Neo.mjs your app's code runs inside a web worker, and the main thread only paints. Two things worth ten minutes:
- See the part nobody expects. Run
npm run build-themes -- -n -e dev -t all and npm run server-start, open apps/workstation/, and drag a tab out of the browser window. It becomes its own OS window, still running, with the same component instances and the same worker. Benefits: Introduction explains why that is possible.
- Your coding agent can go much further here. The skills this repository's AI maintainers work with are published on npm as
neo-agent-skills, and they need no Knowledge Base and no Memory Core. With Claude or GPT beside you, the help wanted issues are within reach after this one.
Maintainer notes
Curated under #18985 (Hacktoberfest 2026). Found work: no unit or component spec names this module on dev (2026-09-23). The three refusals were run in the unit environment, and each returned null with its log line.
Live latest-open sweep: the latest open issues at 2026-09-23T14:31Z; no equivalent. A2A: no claim on this scope. Memory Core: no prior decision.
Origin Session ID: 3be453e4-8b04-4865-be62-4cff34f4e0c6
Welcome 👋
Neo shows notifications with
Neo.toast({msg, appName, position}). Behind it,Neo.manager.Toast#createToast()first checks the request: an unknown position, a missing message or a missing app name getsnullinstead of a toast. Those guard rails are what a first-time user of the API hits first, and nothing tests them.This is a good first issue for Hacktoberfest 2026. It needs Node.js and a clone of this repository: no Docker, no AI setup.
Set up once: follow Set up the engine from a clone, including
npm run bundle-browser-deps: without it the unit suite selects zero tests.Where things live
src/manager/Toast.mjs, a singleton that also bindsNeo.toastto itscreateToasttest/playwright/unit/manager/Toast.spec.mjstest/playwright/unit/manager/Instance.spec.mjs(thesetup()call and imports)What to cover
createToast({position: 'xx', msg: 'hi', appName: 'A'})null: the six positions aretl tc tr bl bc brcreateToast({appName: 'A'}), nomsgnullcreateToast({msg: 'hi'}), noappNamenullNeo.toastexists and callscreateToastmaxToastsis3;runninghas one empty list per positionEach refusal also logs an error that names the problem. Asserting the return value is enough; checking the message is a bonus.
Done when
test/playwright/unit/manager/Toast.spec.mjsexists, following the pattern file's setup.test(...)per table row.src/.npm run test-unit -- test/playwright/unit/manager/Toast.spec.mjspasses.npm run test-unitpasses.Out of scope
Creating, showing and stacking real toasts (they need a mounted component), and
Neo.component.Toast.While you wait for review
You just pinned one small piece of a multi-threaded application engine: in Neo.mjs your app's code runs inside a web worker, and the main thread only paints. Two things worth ten minutes:
npm run build-themes -- -n -e dev -t allandnpm run server-start, openapps/workstation/, and drag a tab out of the browser window. It becomes its own OS window, still running, with the same component instances and the same worker. Benefits: Introduction explains why that is possible.neo-agent-skills, and they need no Knowledge Base and no Memory Core. With Claude or GPT beside you, thehelp wantedissues are within reach after this one.Maintainer notes
Curated under #18985 (Hacktoberfest 2026). Found work: no unit or component spec names this module on
dev(2026-09-23). The three refusals were run in the unit environment, and each returnednullwith its log line. Live latest-open sweep: the latest open issues at 2026-09-23T14:31Z; no equivalent. A2A: no claim on this scope. Memory Core: no prior decision.Origin Session ID: 3be453e4-8b04-4865-be62-4cff34f4e0c6