Difficulty: Beginner · You'll need: npm, a linter config · Size: config + whatever it flags
What's going on
packages/protocol/package.json:
"lint": "echo \"No lint configured yet\""
It prints a message and exits 0. The root npm run lint runs --workspaces --if-present, so this counts as a passing lint across the whole monorepo.
Why it matters
packages/protocol is the shared contract between a TypeScript server and a Go agent. It is the one package where a stray character has consequences in two languages — and it is the only package with no linter.
The drift is already visible. packages/protocol/src/container.ts:98:
A stray space before the colon, in the source of truth, that no tool will ever flag.
Where the other packages stand
| Package |
Linter |
apps/server |
ESLint + Prettier |
apps/web |
oxlint |
packages/protocol |
❌ an echo |
The fix
Pick one and wire it up. oxlint is the lightest option and already a dev dependency in apps/web, so it adds no new tooling to the repo. ESLint would match apps/server instead. Either is defensible — say which and why.
Then fix what it reports. Expect it to be a short list; this package is ~500 lines of mostly type declarations.
Scope note
Keep this to wiring up the linter and fixing what it flags. Reformatting the whole package in the same PR would bury the interesting part of the diff. If a formatter is also wanted, that is a separate change.
How to verify
npm run lint --workspace=@docksight/protocol # actually lints now
npm run lint # root still passes
npm run build --workspace=@docksight/protocol
npm run test --workspace=@docksight/protocol
Done when
Good first contribution. Adding tooling to a project is a normal, useful contribution that people rarely get to practise. The judgment call — which linter, and keeping the diff small — is the part worth doing carefully.
Difficulty: Beginner · You'll need: npm, a linter config · Size: config + whatever it flags
What's going on
packages/protocol/package.json:It prints a message and exits 0. The root
npm run lintruns--workspaces --if-present, so this counts as a passing lint across the whole monorepo.Why it matters
packages/protocolis the shared contract between a TypeScript server and a Go agent. It is the one package where a stray character has consequences in two languages — and it is the only package with no linter.The drift is already visible.
packages/protocol/src/container.ts:98:A stray space before the colon, in the source of truth, that no tool will ever flag.
Where the other packages stand
apps/serverapps/webpackages/protocolechoThe fix
Pick one and wire it up. oxlint is the lightest option and already a dev dependency in
apps/web, so it adds no new tooling to the repo. ESLint would matchapps/serverinstead. Either is defensible — say which and why.Then fix what it reports. Expect it to be a short list; this package is ~500 lines of mostly type declarations.
Scope note
Keep this to wiring up the linter and fixing what it flags. Reformatting the whole package in the same PR would bury the interesting part of the diff. If a formatter is also wanted, that is a separate change.
How to verify
Done when
packages/protocolruns a real linternpm run lintfrom the root still passesGood first contribution. Adding tooling to a project is a normal, useful contribution that people rarely get to practise. The judgment call — which linter, and keeping the diff small — is the part worth doing carefully.