Skip to content

lint provider #837

Open
Open

Description

@David-Noble-at-work

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 shellcheck provider 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 under cmd/star/extensions

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Epic:ProvidersThe provider surface: one feature per providerfeatureDeliverable unit within an epic

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions