Repository navigation
lint provider #837
Description
Epic: #815 — Providers. The lint provider (cmd/star/provider/lint) and the seven star lint extension
commands built on it (cmd/star/extensions/com.noblefactor.star.Lint*): lint.all, lint.copyright, lint.go,
lint.go-style, lint.markdown, lint.shell, lint.tools. Every lint task, fix, and chore files here.
No design document exists for this provider: the per-provider series docs/architecture/3.5.x runs to 3.5.16 and
skips it, and star has no generated CLI reference (#787). Both are debts this feature carries.
Ruled (USER, 2026-09-05): the linter is embedded in star — and all linters should be embedded in star. A lint is a provider method compiled into the star binary, not a subprocess around an external tool; the extension command over it is embedded too. Today lint.go, lint.shell, and lint.markdown shell out (golangci-lint, shellcheck/shfmt, markdownlint-cli2); that is the debt this ruling names, and lint.manifest is built embedded from the start: internal/manifest.Validate behind a provider method, no external process.
Extension inventory (2026-09-05) — what is embedded, what is not, and what shells out
Ruled (USER, 2026-09-05): we enumerate every extension and ensure that every extension that should be embedded is embedded. This is that enumeration, from the tree at f4b3cdb.
Four discovery sources, in precedence order (cmd/star/star/extension.go): project-local <repo>/star/extensions/, user $XDG_DATA_HOME/star/extensions/, system /usr/local/share/star/extensions/, and embedded (//go:embed extensions in cmd/star/extensions.go).
Embedded in the binary — 16, all com.noblefactor.star.*
| Extension | Commands | Runs an external process? |
|---|---|---|
| ConfigShow, ConfigSync | config.show, config.sync |
no |
| HookPreCommit, HookPrePush | hook.pre-commit, hook.pre-push |
through lint.go, lint.shell, lint.markdown below |
| LintAll | lint.all |
through the linters it runs |
| LintCopyright | lint.copyright |
no — pure Starlark |
| LintGo | lint.go |
yes: golangci-lint, go mod tidy (lint provider) |
| LintGoStyle | lint.go-style |
no — Starlark rules over the goast provider |
| LintMarkdown | lint.markdown |
yes: markdownlint-cli2; the frontmatter check is embedded |
| LintShell | lint.shell |
yes: shellcheck, shfmt (lint provider; the separate shellcheck provider wraps the same two tools — a duplicate) |
| LintTools | lint.tools |
checks tool presence only |
| Setup, SetupCheck, SetupConfig, SetupHooks, SetupTools | setup, setup.check, setup.config, setup.hooks, setup.tools |
yes: installs tools and hooks (pre-commit install) — by design, that is its job |
Embedding is right for all sixteen. Against the embedded-linter ruling, three linters are wrappers today (lint.go, lint.shell, lint.markdown), two are already embedded (lint.copyright, lint.go-style), and lint.manifest (#838) is built embedded.
Project-local, in this repository's star/extensions/— 5, allcom.noblefactor.devlore.*`, not embedded
| Extension | Commands |
|---|---|
| Actions | devlore.actions.generate, devlore.actions.validate |
| Knowledge | devlore.knowledge.extract, .index, .sign, .validate |
| Model | devlore.model.build |
| Package | devlore.package.index, .sign, .validate |
| Test | devlore.test.run (runs the harness through host.exec) |
Whether any of these should embed is a ruling not yet taken. The reading that suggests itself: devlore.package.* and devlore.knowledge.* are the packaging toolchain any lore package author needs, so they belong in the binary; devlore.actions.*, devlore.model.*, and devlore.test.run are this repository`'s own development tooling and are right where they are.
Installed (user/system source) — by ruling, not embedded
star gh issues report (the epic report, #797 → noblefactor-ops#140) ships from noblefactor-ops and is installed through the search path, per the 2026-09-04 ruling that ops extensions are installed, not embedded.
Acceptance for this inventory
- the three wrapper linters have issues under this feature naming what embedding each means (a Go implementation, or a vendored library) — or a ruling that the external tool stays and why
- the
shellcheckprovider and the lint provider`'s shell path are one implementation - a ruling on the five
devlore.*extensions, recorded here, and any that should embed are moved undercmd/star/extensions
Activity