// productizer vs aiup

Productizer vs AI Unified Process

Productizer is an open-source Claude Code plugin that keeps one living spec per product. It runs locally in your own repository — no account, no server, no hosted control plane, no telemetry. Requirements live in a single .claude/productizer/spec.md in EARS syntax with permanent ids that are never reused and never renumbered; a superseded requirement keeps its original text rather than being deleted or rewritten. Every new intent is classified against the whole spec as extend / refine / duplicate / contradict, a contradiction halts the work and waits for a human ruling, and a constitution of P-numbered principles sits above requirements and is checked before classification. Work moves through nine linear stages — Plan, Design, Build, Test, Check, Deploy, Document, Announce, Maintain — with declared checks in a committed checks.yaml, human gates on deploy and publish implemented as PreToolUse hooks, and generated read-only views that are output only, never an input back into the files.

The AI Unified Process is Simon Martinelli’s explicit modern re-take on RUP — its own docs/workflow.md says it is “adapted from the phases of the Rational Unified Process,” and it keeps Inception / Elaboration / Construction / Transition, use cases, and a traceability spine. It is aimed at requirements engineers and enterprise Java, .NET and TypeScript teams building long-lived business applications, and is explicitly stakeholder-centric rather than developer-centric. It ships as an Apache-2.0 Claude Code plugin marketplace, an open-source IntelliJ and VS Code navigator plugin, and AIUP Studio — a closed-source web product in private beta by invitation. This is an honest, architecture-level comparison, not a hit piece. AIUP is a serious, well-engineered project, and it is better than Productizer in specific, named places — a working end-to-end CI lifecycle that opens pull requests, a validator and a coverage audit that run in CI rather than by hand, an eval corpus that has actually been graded, and broader editor support. Those rows are marked in AIUP’s favour below, not buried. Several of them were wider before v4.2.0: that release gave Productizer its own executable format grammar, a coverage denominator derived from the spec, and the spec diff handed to the build step — three ideas AIUP had first, adopted here and credited below rather than quietly claimed.

The two methods agree that an AI-built product needs a written specification the agent is accountable to, and that the lifecycle should be staged rather than ad hoc. They diverge on the shape of the artefact and on what is machine-enforced. Productizer keeps one living spec with permanent ids and stops the run when a new intent contradicts what is already written. AIUP keeps one file per use case, and puts its enforcement into a normative grammar, a validator, a coverage auditor and a CI workflow that produces pull requests. As of v4.2.0 the second half of that sentence is no longer only theirs — Productizer ships a grammar, a validator and a spec-derived coverage denominator too. What remains theirs is the last clause: the CI workflow. Theirs run unattended on a push; ours run when someone runs them. Each still has invariants the other does not.

Productizer AI Unified Process
Who it is for A developer running Claude Code in their own repository Requirements engineers and enterprise Java / .NET / TypeScript teams; stakeholder-centric
Spec model ✓ One living spec per product at .claude/productizer/spec.md One file per use case; “Drift” tooling exists partly to manage the consequence
Requirement ids ✓ Permanent — never reused, never renumbered ✗ Step, flow (A1…) and rule (BR-001…) numbers are positional; “Studio renumbers them gaplessly on save”; BR ids are scoped per document, so the same id recurs across files
Superseded requirements ✓ Keep their original text rather than being deleted or rewritten ✗ No equivalent invariant in the published method
Intent classification ✓ Every new intent classified against the whole spec: extend / refine / duplicate / contradict ✗ No intent classifier
Contradiction handling ✓ A contradiction halts the work and waits for a human ruling ✗ A single error-recovery bullet — “Flag the conflict explicitly… ask the user to resolve”. Nothing halts
Contradiction detection accuracy Model classification plus a symbolic cross-check that measures 1.00 precision, 0.70 recall on the 21 cases we first wrote — and 0.67 / 0.12 on a harder 26-case corpus. The number moves with the corpus ✗ No classifier, so nothing to measure
Principles layer ✓ A constitution of P-numbered principles above requirements, checked before classification ✗ No constitution or principles layer
Lifecycle shape Nine linear stages: Plan, Design, Build, Test, Check, Deploy, Document, Announce, Maintain RUP phases, kept deliberately: Inception, Elaboration, Construction, Transition
Format enforcement A grammar, since v4.2.0. references/format-spec.md plus a stdlib-only scripts/validate-spec.py — 53 diagnostic codes, the same two severities, --self-test and --strict. Two things keep this short of AIUP: it is not wired into CI, and --strict currently fails on our own spec, because R14, R16 and R21 each carry two shall clauses Normative grammar. references/format-spec.md plus a stdlib-only scripts/validate_use_case.py with two severities — ERROR (unparseable) vs WARN (parses but violates the contract) — run in CI in --self-test and --strict modes
Declared checks — a hollow check blocks ✓ Checks are declared in a committed checks.yaml; a check that exits clean having examined less than it declared is “hollow” and blocks ✗ No declared-scope check contract
Coverage checking Since v4.2.0, on the same contract. The denominator is derived from the spec, not declared by the check: every active requirement gets a row and a verdict of Covered / Partial / Missing / n a, an n a needs a stated reason and “hard to test” is not one, a disabled, skipped or todo check covers nothing, and a Missing row refuses. Run by hand, not by an agent in CI ✓ A read-only-tools coverage audit agent flattens each spec into mechanically-derived enumerable units and gives each a verdict — Covered / Partial / Missing / n a — where n a requires a stated reason (“‘Hard to test’ is not n/a”) and “a disabled, skipped, or todo test covers nothing”
Eval corpus ◐ 26 cases across 136 scored criteria, committed, with a matched no-plugin ablation arm — but never graded. claude plugin eval is early-access gated and no case has been scored by a model, so end-to-end recall stays unmeasured ✓ 36 scenarios across 410 scored criteria, committed and run at publish time
CI / PR automation ✗ The lifecycle has not yet been exercised end to end through CI A working end-to-end CI lifecycle. .github/workflows/aiup-generate.yml is a versioned reusable workflow that runs a skill via claude-code-action, advances status, and opens a pull request with a correlation id
What the agent is handed The spec diff, since v4.2.0. scripts/spec-diff.sh fences the diff of the spec and the constitution between a base ref and HEAD into the Build prompt, with the instruction to reconcile against the change rather than the current text. “Unchanged”, “no baseline” and “the base ref does not resolve” each get their own exit code, and a diff over the cap is left out whole rather than truncated. It is invoked by the stage, not by a CI workflow ✓ The spec diff, not just the spec, fenced into the prompt — “A specification edit that only removes a requirement is invisible to the skill: the remaining text is already satisfied by the existing code, so the run finds nothing to do and the dropped behaviour survives”
Status advance guard Nine stages in order, with human gates at the end of the line ✓ Rank-gated and forward-only, and it refuses to move on a run that produced nothing — “A run that produced nothing has no result to take over”
Human gates on deploy and publish ✓ PreToolUse hooks — a hook exiting 2 blocks the tool call The pull request is the review point; no in-agent tool-call block
Views ✓ Generated read-only dashboard — Overview with stats and a kanban, plus Stages, Files, Backlog and Releases tabs. Views are output only, never an input back into the files. A backlog with permanent B-ids where order is priority, five statuses, and read-only Jira links An open-source IntelliJ / VS Code navigator plugin, plus AIUP Studio — closed-source, web, private beta by invitation
Editor and agent support Claude Code only ✓ Claude Code plugin marketplace, plus IntelliJ and VS Code, plus Studio on the web
Licence ✓ Open source — github.com/gitayg/productizer ✓ Apache-2.0 marketplace (118 stars, 453 files) and an open-source navigator plugin
Hosted component ✓ None — runs locally in your repo; no account, no server, no control plane, no telemetry AIUP Studio is a closed-source hosted product, private beta by invitation
Pricing ✓ Free and open source Open-source parts are free; monetised via workshops, consulting and an Apress book. No public pricing page
Where the method is defined ✓ Entirely in the open repository Partly behind a commercial product — format-spec.md names Studio’s closed-source UseCaseSpecificationDocument.java as “the executable reference for the structural rules”, and the public Python validator is a hand-maintained mirror of a parser nobody outside can see
Independent validation None. Read every claim here as ours, not a third party’s None surfaced; the substantive commentary is the author’s own. Treat 118 stars as interest, not proof
What you install Nothing native. A Claude Code plugin (/plugin install); the spec, checks and gates are files in your own repo A Claude Code plugin marketplace, plus an optional IntelliJ/VS Code navigator plugin; AIUP Studio is a separate closed web product
Native harness work on your machine Repo-local only — PreToolUse hook scripts you opt into via your project’s .claude/settings.json. No binary, no daemon, no login None on the machine either — their automation runs in GitHub Actions rather than locally

Where AIUP is genuinely ahead

The CI lifecycle is the clearest one, and it is not close. AIUP ships .github/workflows/aiup-generate.yml as a versioned reusable workflow: it diffs the spec against the default branch, fences that diff into the prompt, runs a skill through anthropics/claude-code-action@v1, advances the status, and opens a pull request carrying a correlation id. Productizer has nothing equivalent — its lifecycle has not yet been exercised end to end through CI. If your requirement is “a spec change lands as a reviewable PR without a human driving the agent,” AIUP does that today and Productizer does not.

The reasoning behind passing the diff rather than the whole spec is worth reading in their own words, because it is a failure mode most spec-driven tooling never notices: “A specification edit that only removes a requirement is invisible to the skill: the remaining text is already satisfied by the existing code, so the run finds nothing to do and the dropped behaviour survives.” That is a careful observation about deletion, and it applies with more force to Productizer than to AIUP, because our supersession rule keeps the original sentence in place on purpose. v4.2.0 adopted it: scripts/spec-diff.sh fences the spec and constitution diff into the Build prompt, and its own header says it is adapted from the AI Unified Process workflow. That is now an even row rather than an AIUP win — with one asymmetry left, which is that theirs is invoked by a CI workflow and ours by the stage.

Format enforcement is executable on both sides now — but only one of them runs it in CI, and only one of them passes it. AIUP’s references/format-spec.md is normative and scripts/validate_use_case.py — stdlib-only, so it runs anywhere — enforces it with two severities: ERROR for unparseable, WARN for parses-but-violates-the-contract. CI runs it in both --self-test and --strict modes. Productizer v4.2.0 ships the same shape: a normative references/format-spec.md and a stdlib-only scripts/validate-spec.py with 53 diagnostic codes, the same ERROR / WARN split, a twenty-fixture --self-test and a --strict mode. Two things keep the row tilted their way. Ours is not wired into CI. And --strict fails on our own spec: R14, R16 and R21 each carry two shall clauses, so each states two obligations under one id and each will be half-tested. It is logged as backlog item B9 and it is not fixed. A grammar its own author cannot pass is worth less than one whose author can.

The coverage audit is mechanically derived, and the definitions are strict — and Productizer took the definitions. A dedicated AIUP agent restricted to read-only tools flattens each spec into enumerable units and gives every one a verdict of Covered, Partial, Missing or n a — where n a requires a stated reason, because “‘Hard to test’ is not n/a”, and where “a disabled, skipped, or todo test covers nothing.” scripts/run-checks.sh now derives its denominator from the spec on the same terms: every active requirement gets a row, the same four verdicts, an n a that needs a reason with the same exclusion, the same rule about disabled and skipped checks, and a Missing row that refuses. So a check can no longer shrink its own scope and pass. What AIUP still has that we do not is the part that runs it: theirs is an agent in a workflow, ours is a script somebody invokes. And behind theirs sits a committed eval corpus of 36 scenarios across 410 scored criteria that is graded at publish time, where our 26 cases have never been scored by a model at all. That last clause is the real gap on this row.

Status advance is guarded better than ours. AIUP’s advance is rank-gated and forward-only, and it refuses to move on a run that produced nothing: “A run that produced nothing has no result to take over.” And AIUP reaches more surfaces — a Claude Code plugin marketplace, an IntelliJ and VS Code navigator, and Studio on the web. Productizer is Claude Code only.

Where Productizer differs structurally

One living spec, not a document per feature. Productizer keeps a single .claude/productizer/spec.md per product. AIUP keeps one file per use case — and its own “Drift” tooling exists partly to manage the consequence of that split. Neither shape is free: a single file has to be classified against in full on every intent, which is exactly what Productizer does.

Ids are permanent, and this is the exact inverse of AIUP’s rule. AIUP’s format-spec.md states that step, flow (A1…) and rule (BR-001…) numbers are positional and that “Studio renumbers them gaplessly on save”, with BR ids scoped per document so the same id recurs across files. Productizer never reuses and never renumbers an id, and a superseded requirement keeps its original text rather than being deleted or rewritten. Neither is automatically correct — gapless positional numbering reads better in a printed use case; permanent ids survive a five-year audit trail. They are different bets about what the document is for.

Every intent is classified, and a contradiction halts. This is the largest single mechanism Productizer has that AIUP does not. The whole AIUP repository contains only two passing mentions of contradiction, and conflict handling is one error-recovery bullet — “Flag the conflict explicitly… ask the user to resolve”. Nothing stops. Productizer classifies each new intent against the whole spec as extend, refine, duplicate or contradict, and a contradiction halts the work until a human rules on it. Above requirements sits a constitution of P-numbered principles, checked before classification; AIUP has no principles layer.

Nothing is hosted, and nothing is closed. Productizer runs locally in your repository — no account, no server, no control plane, no telemetry — and the entire method is in the open repository. Part of AIUP’s normative method is not: format-spec.md names Studio’s closed-source UseCaseSpecificationDocument.java as “the executable reference for the structural rules”, and Studio is a closed, private-beta product. The public Python validator is a hand-maintained mirror of a parser nobody outside the project can read. That is a legitimate way to build a business; it is also a fact worth knowing before adopting the grammar as your own.

What Productizer does not have

Five things, stated plainly. First: the only accuracy figure we have is for the symbolic cross-check that runs alongside the model — 1.00 precision and 0.70 recall on the 21 cases we first wrote — but 0.67 precision and 0.12 recall on a harder 26-case corpus, which tells you the first number described the corpus more than the checker. That sample is small and self-authored, and the end-to-end system’s recall has not been measured at all. The checker’s passing verdict is deliberately worded “no incompatibility inside the decidable fragment” rather than “consistent”, because it is a non-decision and not a clearance. Second: Productizer is Claude Code only, where AIUP ships for more surfaces. Third: Productizer’s lifecycle has not yet been exercised end to end through CI. AIUP has that and Productizer does not, and that is the row AIUP clearly wins. Fourth: the eval corpus we do have has never been graded — 26 cases load and both ablation arms configure, but claude plugin eval is early-access gated and no case has been scored by a model, so the number that would actually answer “does the halt work?” does not exist. Fifth: --strict fails on our own spec, on the three requirements that each carry two shall clauses. All five are written down in the repository’s own backlog, which is where we found them.

The verdict. Choose AIUP if you are a requirements engineer or an enterprise team writing stakeholder-facing use cases for a long-lived business application, you want the grammar, the validator and the coverage audit running in CI rather than invoked by hand, an eval corpus that is actually graded, spec changes that arrive as pull requests without a human driving the agent, and support across IntelliJ, VS Code and Claude Code. Choose Productizer if you want one living spec instead of a file per feature, ids that are never reused or renumbered so the audit trail holds, a constitution above the requirements, and an agent that stops when a new intent contradicts what you already decided — running entirely on your machine with nothing hosted and nothing closed. The two are answering different questions about the same problem, and each is better at its own.

AI Unified Process capabilities are read from its public repository, workflow and reference files as of 2026; every quoted sentence is verbatim from that material. Productizer marks reflect shipped capability. Neither project has independent third-party validation that we could find — that is equally true of both, and the 118 stars on the AIUP marketplace are interest, not proof. AI Unified Process, AIUP and AIUP Studio are the work of Simon Martinelli; this page is an independent architecture-level comparison and is not affiliated with, endorsed by, or partnered with that project. Both products evolve — verify specifics against current documentation.

← Back to Productizer Productizer vs Entire → Productizer vs 8090 → Productizer vs Lightsprint → Productizer on GitHub ↗
glick.run — AGPL-3.0