Analysis
Analysis is the heart of the system: analyzers examine your codebase and produce reports with findings and 0–100 scores, making “pull toward the North Star” measurable. Two properties define it: a uniform analyzer interface (agentic and deterministic analyzers are indistinguishable to everything downstream) and comparability by construction (every score permanently records the analyzer version, rubric version, and model that produced it).
Analyzers
An analyzer is a unit of analysis described by one manifest: what it targets (repositories, paths, North Star document types), whether it scores and against which areas, what model tier it requests, and how it executes.
- Agentic analyzers run as hosted agent sessions with read-only access to your repositories at an exact commit: a UX walkthrough agent uses the product like a user; a security reviewer reads the diff surface. Their rubric ships with calibration anchors so scoring stays grounded.
- Deterministic analyzers run a command in a sandbox and parse its output — static analysis, metrics, checks — with structured output formats supported out of the box.
Three ways to author one, all producing the same artifact:
- Repo config — check manifest files into
.stella/analyzers/in a linked repository; they sync automatically, and content changes require a version bump. - In-app builder — a guided wizard, including rubric authoring.
- Registry — browse the shared registry and install into your project, pinned to a version. The built-in suite ships here: UX walkthrough, code quality, security review, feature pre-scoping, gap analysis, demand signals, and North Star satisfaction.
Runs
Analyzer runs fan out in parallel (with a per-project concurrency limit and visible queue positions) and stream progress live. Cancellation is cooperative and immediate to request; transient failures retry with backoff; parse and validation failures never auto-retry — they are bugs to fix, and the error tells you what happened. Every run records its cost.
Reports
A report (RPT-n) is evidence, not prose: findings with severity, area, and file:line code references; per-area scores; references to the North Star documents evaluated; and a markdown body. Reports are project-level assets — reusable across proposals and epics, listed and searchable, with a “Derive proposals” action that hands the pool its input.
Scores you can trust
Scores are integers from 0 to 100, kept honest by structure:
- Every score permanently records the analyzer version, rubric version, and model that produced it.
- Deltas are computed only against a same-rubric predecessor. Changing a rubric mints a new analyzer version and starts a new baseline — charts mark the segment break instead of drawing a misleading delta across it.
- Agentic score submissions that move a comparable score must include an explanation.
- A daily audit samples agentic scores and re-scores them with an independent reviewer pinned to the identical rubric; deviations beyond tolerance are flagged visibly until cleared.
- Missing data renders as absence — an em dash, never a fake zero.
Per-document scores roll into the project composite through the constellation weights; per-area scores power the dashboard’s “by area” view.
The dashboard
The project home is the analysis dashboard: the composite ScoreRing with its delta, score-over-time with per-loop grouping, by-area and by-document tables with signed deltas, and a live “N agents working” indicator while runs are in flight. Everything updates in realtime — no refresh button exists.
Working with analysis
| Action | Web | CLI |
|---|---|---|
| Run analysis | Dashboard → Run analysis, or fire an intent | stella analyzer run [slugs…] [--watch] |
| Watch runs | live rows | stella analyzer runs |
| Cancel / retry | run controls | stella analyzer cancel|retry |
| Read reports | Reports | stella report list, stella report show RPT-n |
| Scores | Dashboard | stella score list [--history] |
| Manage analyzers | Analyzers | stella analyzer list|show|install|publish |
stella analyzer run --watch streams run states and exits non-zero if any run fails — convenient in scripts and CI-like flows.