mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-07 03:00:29 +00:00
144 lines
8.5 KiB
Markdown
144 lines
8.5 KiB
Markdown
# Chisel Quality Calibration
|
|
|
|
Calibration v1 · cartography v1 · revision `6bb6b5efcc0e36b52e3c097f532d9f2c00914c6c` · 2026-07-27T15:55:07Z
|
|
Sample: `fabro-workflow`, `fabro-http`, `fabro-web-app`, `repository-ci` · Control: `fabro-checkpoint` at `6bb6b5efcc0e36b52e3c097f532d9f2c00914c6c`
|
|
Evaluators: GPT-5 (Codex primary and independent reviewers)
|
|
|
|
## How to Use This Calibration
|
|
|
|
Judge each mapped component against its purpose and direct repository evidence.
|
|
Do not grade on a curve. Apply one score per lens, and count a finding under
|
|
only its primary lens.
|
|
|
|
**Isolated** means contained at an edge; normal callers and routine changes do
|
|
not encounter it. **Central** means part of a mapped entry point, common path,
|
|
or recurring change. A **routine change** is an ordinary extension or
|
|
maintenance task implied by the component's mapped purpose.
|
|
|
|
Infer routine work from the mapped purpose and traced common paths; a public
|
|
method alone does not establish frequency. A directly evidenced central concern
|
|
caps the component's lens score rather than being averaged against healthier
|
|
sub-responsibilities. Necessary delegation inside a clear owner is not pressure,
|
|
and size or internal busyness alone does not lower ownership.
|
|
|
|
Use **N/E** when evidence is insufficient. Never convert missing evidence into
|
|
a numeric score, and do not penalize a missing lifecycle path without evidence
|
|
that the mapped purpose requires it. Score 4 requires a positive production
|
|
mechanism and no material friction; tests may corroborate that mechanism but
|
|
cannot create it or become a second authority merely by asserting its contract.
|
|
|
|
## Lenses
|
|
|
|
### `ownership-boundaries` — Ownership and boundaries
|
|
|
|
**Does each responsibility and lifecycle have a clear home, with dependencies
|
|
pointing in the intended direction?** Includes responsibility, state, resource,
|
|
dependency, and lifecycle placement; excludes local control flow, naming,
|
|
types, API meaning, and repeated policy alone.
|
|
|
|
### `simplicity` — Simplicity
|
|
|
|
**Is the implementation no more complex, indirect, or general than necessary?**
|
|
Includes common-path traceability, control flow, indirection, abstraction, and
|
|
configuration burden; excludes placement, domain meaning, and independently
|
|
repeated knowledge.
|
|
|
|
### `domain-model` — Domain model
|
|
|
|
**Does each domain concept have one clear meaning and valid shape?** Includes
|
|
types, terminology, legal states, conversions, validation, and API semantics;
|
|
excludes module placement, lifecycle ownership, and repetition preserving one
|
|
meaning.
|
|
|
|
### `duplication-knowledge` — Duplication of knowledge
|
|
|
|
**Are policies, invariants, decisions, and transformations authoritative rather
|
|
than repeated?** Includes semantic repetition and manual synchronization;
|
|
excludes harmless syntax, coincidental similarity, and unification that would
|
|
create a parameterized mega-abstraction.
|
|
|
|
## Observable Anchors
|
|
|
|
| Score | Ownership and boundaries | Simplicity | Domain model | Duplication of knowledge |
|
|
|---:|---|---|---|---|
|
|
| 4 | One owner contains the mapped responsibility's state and complete lifecycle. | A production mechanism makes the necessary common path directly traceable. | Canonical types reject invalid states before every common-path interpretation. | One authoritative mechanism enforces each recurring policy, invariant, or transformation. |
|
|
| 3 | Ownership friction is isolated outside routine changes. | Unnecessary indirection is isolated outside routine changes. | Meaning or validation friction is isolated outside routine changes. | Repeated knowledge is isolated outside routine changes. |
|
|
| 2 | Routine changes coordinate competing owners or reverse the mapped dependency direction. | Routine changes repeatedly navigate competing paths, avoidable layers, or configuration machinery. | Routine changes reconcile recurring meanings, conversions, or invalid intermediate states. | Routine changes manually synchronize the same policy, invariant, or transformation across recurring locations. |
|
|
| 1 | No stable owner or dependency direction can be identified for the responsibility. | No stable common path can be traced through the implementation. | No stable meaning or legal shape can be identified for a core concept. | No stable authority can be identified for recurring domain knowledge. |
|
|
|
|
## Decision Rules
|
|
|
|
1. A directly evidenced central concern caps the component's lens score; do not average it against healthier sub-responsibilities.
|
|
2. Judge ownership against the map, not type names; when routine callers reconstruct a mapped lifecycle from low-level primitives, ownership fits 2.
|
|
3. A check owns trigger coverage for every path it scans; non-triggering routine targets are ownership pressure, while nonexistent selector values are domain-model pressure.
|
|
4. An unused production dependency or parallel entry layer is isolated simplicity friction, capping 4 at 3 when the common path remains direct.
|
|
5. Caller validation or a typed destination does not isolate an invalid-capable mapped entry; routine common-path use of that shape fits 2.
|
|
6. Concrete second semantic representations cap 4 at 3; score 2 only when an ordinary mapped change must synchronize them, not merely because call sites repeat.
|
|
|
|
## Confidence
|
|
|
|
Confidence describes evidence quality, not severity. **High** requires direct
|
|
evidence across relevant common and boundary paths; final High also requires
|
|
independent readings to converge. **Medium** has a material ambiguity or
|
|
coverage gap. **Low** is partial or substantially inferential.
|
|
|
|
## Classifying a Finding
|
|
|
|
- Where should this responsibility or lifecycle live? → `ownership-boundaries`
|
|
- Why is this much machinery necessary? → `simplicity`
|
|
- What does this name, type, state, or API value mean? → `domain-model`
|
|
- Why is this knowledge authoritative in several places? → `duplication-knowledge`
|
|
|
|
Tags are diagnostic metadata, not additional scores:
|
|
|
|
```text
|
|
abstraction-burden boundary-leakage configuration-sprawl
|
|
control-flow conversion-sprawl dependency-direction
|
|
generality indirection invalid-states
|
|
lifecycle misplaced-responsibility
|
|
ownership repeated-invariant repeated-policy
|
|
repeated-test-knowledge repeated-transformation
|
|
state-coupling type-sprawl vocabulary-drift
|
|
```
|
|
|
|
## Repository Examples
|
|
|
|
### `ownership-boundaries`
|
|
|
|
- `lib/components/fabro-workflow/src/lifecycle/mod.rs:WorkflowLifecycle` shows a central orchestrator can own callback order through focused delegates; reviewers must still inspect terminal paths before calling lifecycle ownership contained.
|
|
- `apps/fabro-web/app/lib/api-client.ts:apiData` and `apps/fabro-web/app/lib/queries.ts:useRun` keep shared transport and read lifecycles out of route composition; a busy route alone is not boundary leakage.
|
|
|
|
### `simplicity`
|
|
|
|
- `lib/foundation/fabro-http/src/lib.rs:define_builder!` makes async and blocking construction traceable through one necessary mechanism; local macro indirection can reinforce simplicity.
|
|
- `lib/components/fabro-workflow/src/operations/start.rs:RunSession::run` exposes a linear phase sequence, while service reshaping across phase inputs shows that a stable path can still carry recurring machinery.
|
|
|
|
### `domain-model`
|
|
|
|
- `lib/components/fabro-workflow/src/event/events.rs:Event::StageCompleted` uses string status before `lib/components/fabro-workflow/src/event/convert.rs:stage_status_from_string` reparses it; a typed durable result does not isolate this common-path intermediate.
|
|
- `lib/foundation/fabro-http/src/lib.rs:ProxyPolicy` and `ProxyPolicy::resolve_with_env_value` demonstrate a closed policy vocabulary whose invalid boundary values are rejected.
|
|
|
|
### `duplication-knowledge`
|
|
|
|
- `lib/components/fabro-workflow/src/event/names.rs:event_name` and `lib/components/fabro-workflow/src/event/convert.rs:event_body_from_event` show manual mappings that a routine event extension must synchronize, even when exhaustive matches detect omissions.
|
|
- `.github/workflows/rust.yml:on.push.paths` and `.github/workflows/rust.yml:on.pull_request.paths` demonstrate duplicated trigger knowledge: one source-area change requires two manual policy edits.
|
|
|
|
## Control Baseline
|
|
|
|
`fabro-checkpoint` at `6bb6b5efcc0e36b52e3c097f532d9f2c00914c6c`:
|
|
|
|
| Lens | Score | Confidence |
|
|
|---|---:|---|
|
|
| Ownership and boundaries | 2 | High |
|
|
| Simplicity | 3 | High |
|
|
| Domain model | 2 | Medium |
|
|
| Duplication of knowledge | 3 | Medium |
|
|
|
|
## Recalibration Triggers
|
|
|
|
Recalibrate only for a rubric change, a material cartography change, a model
|
|
change with demonstrated drift, or inconsistent scores on the control sample.
|
|
|
|
## Open Questions
|
|
|
|
None.
|