@ztothez/design-engineering 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +448 -0
- package/ROADMAP.md +127 -0
- package/SKILL.md +698 -0
- package/V2-ROADMAP.md +431 -0
- package/V3-ROADMAP.md +605 -0
- package/V4-ROADMAP.md +283 -0
- package/clean-room-ux-design-spec.md +1431 -0
- package/dist/cli/aggregate-gates.d.ts +2 -0
- package/dist/cli/aggregate-gates.js +86 -0
- package/dist/cli/aggregate-gates.js.map +1 -0
- package/dist/cli/assess-maintainer-review.d.ts +2 -0
- package/dist/cli/assess-maintainer-review.js +72 -0
- package/dist/cli/assess-maintainer-review.js.map +1 -0
- package/dist/cli/audit.d.ts +2 -0
- package/dist/cli/audit.js +71 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/compile-comparison-review.d.ts +2 -0
- package/dist/cli/compile-comparison-review.js +154 -0
- package/dist/cli/compile-comparison-review.js.map +1 -0
- package/dist/cli/compile-plan.d.ts +2 -0
- package/dist/cli/compile-plan.js +66 -0
- package/dist/cli/compile-plan.js.map +1 -0
- package/dist/cli/evaluate-corpus.d.ts +2 -0
- package/dist/cli/evaluate-corpus.js +65 -0
- package/dist/cli/evaluate-corpus.js.map +1 -0
- package/dist/cli/generate-react.d.ts +2 -0
- package/dist/cli/generate-react.js +83 -0
- package/dist/cli/generate-react.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/portfolio.d.ts +2 -0
- package/dist/cli/portfolio.js +316 -0
- package/dist/cli/portfolio.js.map +1 -0
- package/dist/cli/quality-gate.d.ts +2 -0
- package/dist/cli/quality-gate.js +131 -0
- package/dist/cli/quality-gate.js.map +1 -0
- package/dist/cli/repair-react.d.ts +2 -0
- package/dist/cli/repair-react.js +163 -0
- package/dist/cli/repair-react.js.map +1 -0
- package/dist/cli/review-heuristics.d.ts +2 -0
- package/dist/cli/review-heuristics.js +68 -0
- package/dist/cli/review-heuristics.js.map +1 -0
- package/dist/cli/validate-brief.d.ts +2 -0
- package/dist/cli/validate-brief.js +58 -0
- package/dist/cli/validate-brief.js.map +1 -0
- package/dist/cli/validate-comparison.d.ts +2 -0
- package/dist/cli/validate-comparison.js +68 -0
- package/dist/cli/validate-comparison.js.map +1 -0
- package/dist/cli/validate-contract.d.ts +2 -0
- package/dist/cli/validate-contract.js +54 -0
- package/dist/cli/validate-contract.js.map +1 -0
- package/dist/cli/validate-design.d.ts +2 -0
- package/dist/cli/validate-design.js +53 -0
- package/dist/cli/validate-design.js.map +1 -0
- package/dist/cli/validate-information.d.ts +2 -0
- package/dist/cli/validate-information.js +53 -0
- package/dist/cli/validate-information.js.map +1 -0
- package/dist/cli/validate-trust.d.ts +2 -0
- package/dist/cli/validate-trust.js +53 -0
- package/dist/cli/validate-trust.js.map +1 -0
- package/dist/cli/verify-ui.d.ts +2 -0
- package/dist/cli/verify-ui.js +181 -0
- package/dist/cli/verify-ui.js.map +1 -0
- package/dist/src/acceptance/evaluator.d.ts +13 -0
- package/dist/src/acceptance/evaluator.js +201 -0
- package/dist/src/acceptance/evaluator.js.map +1 -0
- package/dist/src/acceptance/loader.d.ts +2 -0
- package/dist/src/acceptance/loader.js +18 -0
- package/dist/src/acceptance/loader.js.map +1 -0
- package/dist/src/acceptance/report.d.ts +2 -0
- package/dist/src/acceptance/report.js +18 -0
- package/dist/src/acceptance/report.js.map +1 -0
- package/dist/src/acceptance/schema.d.ts +64 -0
- package/dist/src/acceptance/schema.js +57 -0
- package/dist/src/acceptance/schema.js.map +1 -0
- package/dist/src/acceptance/types.d.ts +47 -0
- package/dist/src/acceptance/types.js +2 -0
- package/dist/src/acceptance/types.js.map +1 -0
- package/dist/src/aggregate/report.d.ts +2 -0
- package/dist/src/aggregate/report.js +33 -0
- package/dist/src/aggregate/report.js.map +1 -0
- package/dist/src/aggregate/runner.d.ts +2 -0
- package/dist/src/aggregate/runner.js +165 -0
- package/dist/src/aggregate/runner.js.map +1 -0
- package/dist/src/aggregate/schema.d.ts +182 -0
- package/dist/src/aggregate/schema.js +54 -0
- package/dist/src/aggregate/schema.js.map +1 -0
- package/dist/src/aggregate/types.d.ts +57 -0
- package/dist/src/aggregate/types.js +2 -0
- package/dist/src/aggregate/types.js.map +1 -0
- package/dist/src/audit/policy.d.ts +3 -0
- package/dist/src/audit/policy.js +45 -0
- package/dist/src/audit/policy.js.map +1 -0
- package/dist/src/audit/report.d.ts +2 -0
- package/dist/src/audit/report.js +32 -0
- package/dist/src/audit/report.js.map +1 -0
- package/dist/src/audit/rules/accessibility-name.d.ts +2 -0
- package/dist/src/audit/rules/accessibility-name.js +64 -0
- package/dist/src/audit/rules/accessibility-name.js.map +1 -0
- package/dist/src/audit/rules/component-size.d.ts +2 -0
- package/dist/src/audit/rules/component-size.js +27 -0
- package/dist/src/audit/rules/component-size.js.map +1 -0
- package/dist/src/audit/rules/credential-placeholder.d.ts +2 -0
- package/dist/src/audit/rules/credential-placeholder.js +83 -0
- package/dist/src/audit/rules/credential-placeholder.js.map +1 -0
- package/dist/src/audit/rules/helpers.d.ts +16 -0
- package/dist/src/audit/rules/helpers.js +64 -0
- package/dist/src/audit/rules/helpers.js.map +1 -0
- package/dist/src/audit/rules/index.d.ts +2 -0
- package/dist/src/audit/rules/index.js +23 -0
- package/dist/src/audit/rules/index.js.map +1 -0
- package/dist/src/audit/rules/interactive-integrity.d.ts +2 -0
- package/dist/src/audit/rules/interactive-integrity.js +111 -0
- package/dist/src/audit/rules/interactive-integrity.js.map +1 -0
- package/dist/src/audit/rules/mixed-responsibilities.d.ts +2 -0
- package/dist/src/audit/rules/mixed-responsibilities.js +39 -0
- package/dist/src/audit/rules/mixed-responsibilities.js.map +1 -0
- package/dist/src/audit/rules/mock-production-path.d.ts +2 -0
- package/dist/src/audit/rules/mock-production-path.js +39 -0
- package/dist/src/audit/rules/mock-production-path.js.map +1 -0
- package/dist/src/audit/rules/network-state.d.ts +2 -0
- package/dist/src/audit/rules/network-state.js +39 -0
- package/dist/src/audit/rules/network-state.js.map +1 -0
- package/dist/src/audit/rules/operational-claim.d.ts +2 -0
- package/dist/src/audit/rules/operational-claim.js +94 -0
- package/dist/src/audit/rules/operational-claim.js.map +1 -0
- package/dist/src/audit/rules/placeholder-interaction.d.ts +2 -0
- package/dist/src/audit/rules/placeholder-interaction.js +46 -0
- package/dist/src/audit/rules/placeholder-interaction.js.map +1 -0
- package/dist/src/audit/rules/raw-design-values.d.ts +2 -0
- package/dist/src/audit/rules/raw-design-values.js +97 -0
- package/dist/src/audit/rules/raw-design-values.js.map +1 -0
- package/dist/src/audit/scanner.d.ts +2 -0
- package/dist/src/audit/scanner.js +215 -0
- package/dist/src/audit/scanner.js.map +1 -0
- package/dist/src/audit/types.d.ts +62 -0
- package/dist/src/audit/types.js +2 -0
- package/dist/src/audit/types.js.map +1 -0
- package/dist/src/comparison/evaluator.d.ts +2 -0
- package/dist/src/comparison/evaluator.js +478 -0
- package/dist/src/comparison/evaluator.js.map +1 -0
- package/dist/src/comparison/loader.d.ts +3 -0
- package/dist/src/comparison/loader.js +26 -0
- package/dist/src/comparison/loader.js.map +1 -0
- package/dist/src/comparison/maintainer.d.ts +47 -0
- package/dist/src/comparison/maintainer.js +218 -0
- package/dist/src/comparison/maintainer.js.map +1 -0
- package/dist/src/comparison/report.d.ts +2 -0
- package/dist/src/comparison/report.js +48 -0
- package/dist/src/comparison/report.js.map +1 -0
- package/dist/src/comparison/schema.d.ts +464 -0
- package/dist/src/comparison/schema.js +502 -0
- package/dist/src/comparison/schema.js.map +1 -0
- package/dist/src/contracts/archetypes.d.ts +21 -0
- package/dist/src/contracts/archetypes.js +102 -0
- package/dist/src/contracts/archetypes.js.map +1 -0
- package/dist/src/contracts/journeys.d.ts +7 -0
- package/dist/src/contracts/journeys.js +32 -0
- package/dist/src/contracts/journeys.js.map +1 -0
- package/dist/src/contracts/report.d.ts +2 -0
- package/dist/src/contracts/report.js +33 -0
- package/dist/src/contracts/report.js.map +1 -0
- package/dist/src/contracts/schema.d.ts +1038 -0
- package/dist/src/contracts/schema.js +385 -0
- package/dist/src/contracts/schema.js.map +1 -0
- package/dist/src/contracts/validator.d.ts +12 -0
- package/dist/src/contracts/validator.js +303 -0
- package/dist/src/contracts/validator.js.map +1 -0
- package/dist/src/corpus/evaluator.d.ts +2 -0
- package/dist/src/corpus/evaluator.js +203 -0
- package/dist/src/corpus/evaluator.js.map +1 -0
- package/dist/src/corpus/loader.d.ts +2 -0
- package/dist/src/corpus/loader.js +20 -0
- package/dist/src/corpus/loader.js.map +1 -0
- package/dist/src/corpus/report.d.ts +2 -0
- package/dist/src/corpus/report.js +33 -0
- package/dist/src/corpus/report.js.map +1 -0
- package/dist/src/corpus/schema.d.ts +316 -0
- package/dist/src/corpus/schema.js +269 -0
- package/dist/src/corpus/schema.js.map +1 -0
- package/dist/src/design-intelligence/loader.d.ts +2 -0
- package/dist/src/design-intelligence/loader.js +21 -0
- package/dist/src/design-intelligence/loader.js.map +1 -0
- package/dist/src/design-intelligence/report.d.ts +2 -0
- package/dist/src/design-intelligence/report.js +36 -0
- package/dist/src/design-intelligence/report.js.map +1 -0
- package/dist/src/design-intelligence/schema.d.ts +838 -0
- package/dist/src/design-intelligence/schema.js +854 -0
- package/dist/src/design-intelligence/schema.js.map +1 -0
- package/dist/src/design-intelligence/validator.d.ts +2 -0
- package/dist/src/design-intelligence/validator.js +1371 -0
- package/dist/src/design-intelligence/validator.js.map +1 -0
- package/dist/src/design-plan/compiler.d.ts +8 -0
- package/dist/src/design-plan/compiler.js +288 -0
- package/dist/src/design-plan/compiler.js.map +1 -0
- package/dist/src/design-plan/report.d.ts +2 -0
- package/dist/src/design-plan/report.js +28 -0
- package/dist/src/design-plan/report.js.map +1 -0
- package/dist/src/design-plan/schema.d.ts +202 -0
- package/dist/src/design-plan/schema.js +76 -0
- package/dist/src/design-plan/schema.js.map +1 -0
- package/dist/src/generation/loader.d.ts +2 -0
- package/dist/src/generation/loader.js +21 -0
- package/dist/src/generation/loader.js.map +1 -0
- package/dist/src/generation/policy.d.ts +12 -0
- package/dist/src/generation/policy.js +62 -0
- package/dist/src/generation/policy.js.map +1 -0
- package/dist/src/generation/react-typescript.d.ts +6 -0
- package/dist/src/generation/react-typescript.js +538 -0
- package/dist/src/generation/react-typescript.js.map +1 -0
- package/dist/src/generation/report.d.ts +2 -0
- package/dist/src/generation/report.js +21 -0
- package/dist/src/generation/report.js.map +1 -0
- package/dist/src/generation/schema.d.ts +44 -0
- package/dist/src/generation/schema.js +50 -0
- package/dist/src/generation/schema.js.map +1 -0
- package/dist/src/generation/templates/tokens.d.ts +1 -0
- package/dist/src/generation/templates/tokens.js +59 -0
- package/dist/src/generation/templates/tokens.js.map +1 -0
- package/dist/src/heuristics/evaluator.d.ts +2 -0
- package/dist/src/heuristics/evaluator.js +65 -0
- package/dist/src/heuristics/evaluator.js.map +1 -0
- package/dist/src/heuristics/loader.d.ts +2 -0
- package/dist/src/heuristics/loader.js +21 -0
- package/dist/src/heuristics/loader.js.map +1 -0
- package/dist/src/heuristics/report.d.ts +3 -0
- package/dist/src/heuristics/report.js +31 -0
- package/dist/src/heuristics/report.js.map +1 -0
- package/dist/src/heuristics/schema.d.ts +198 -0
- package/dist/src/heuristics/schema.js +197 -0
- package/dist/src/heuristics/schema.js.map +1 -0
- package/dist/src/information-design/loader.d.ts +2 -0
- package/dist/src/information-design/loader.js +21 -0
- package/dist/src/information-design/loader.js.map +1 -0
- package/dist/src/information-design/report.d.ts +2 -0
- package/dist/src/information-design/report.js +27 -0
- package/dist/src/information-design/report.js.map +1 -0
- package/dist/src/information-design/schema.d.ts +370 -0
- package/dist/src/information-design/schema.js +329 -0
- package/dist/src/information-design/schema.js.map +1 -0
- package/dist/src/information-design/validator.d.ts +2 -0
- package/dist/src/information-design/validator.js +242 -0
- package/dist/src/information-design/validator.js.map +1 -0
- package/dist/src/interface-trust/loader.d.ts +2 -0
- package/dist/src/interface-trust/loader.js +21 -0
- package/dist/src/interface-trust/loader.js.map +1 -0
- package/dist/src/interface-trust/report.d.ts +2 -0
- package/dist/src/interface-trust/report.js +26 -0
- package/dist/src/interface-trust/report.js.map +1 -0
- package/dist/src/interface-trust/schema.d.ts +299 -0
- package/dist/src/interface-trust/schema.js +238 -0
- package/dist/src/interface-trust/schema.js.map +1 -0
- package/dist/src/interface-trust/validator.d.ts +2 -0
- package/dist/src/interface-trust/validator.js +283 -0
- package/dist/src/interface-trust/validator.js.map +1 -0
- package/dist/src/portfolio/adapter-report.d.ts +3 -0
- package/dist/src/portfolio/adapter-report.js +38 -0
- package/dist/src/portfolio/adapter-report.js.map +1 -0
- package/dist/src/portfolio/adapters.d.ts +37 -0
- package/dist/src/portfolio/adapters.js +325 -0
- package/dist/src/portfolio/adapters.js.map +1 -0
- package/dist/src/portfolio/evidence.d.ts +9 -0
- package/dist/src/portfolio/evidence.js +233 -0
- package/dist/src/portfolio/evidence.js.map +1 -0
- package/dist/src/portfolio/files.d.ts +8 -0
- package/dist/src/portfolio/files.js +77 -0
- package/dist/src/portfolio/files.js.map +1 -0
- package/dist/src/portfolio/fixture-server.d.ts +11 -0
- package/dist/src/portfolio/fixture-server.js +131 -0
- package/dist/src/portfolio/fixture-server.js.map +1 -0
- package/dist/src/portfolio/loader.d.ts +2 -0
- package/dist/src/portfolio/loader.js +21 -0
- package/dist/src/portfolio/loader.js.map +1 -0
- package/dist/src/portfolio/mcp.d.ts +186 -0
- package/dist/src/portfolio/mcp.js +117 -0
- package/dist/src/portfolio/mcp.js.map +1 -0
- package/dist/src/portfolio/promotion-schema.d.ts +220 -0
- package/dist/src/portfolio/promotion-schema.js +148 -0
- package/dist/src/portfolio/promotion-schema.js.map +1 -0
- package/dist/src/portfolio/promotion.d.ts +4 -0
- package/dist/src/portfolio/promotion.js +160 -0
- package/dist/src/portfolio/promotion.js.map +1 -0
- package/dist/src/portfolio/qualification-schema.d.ts +268 -0
- package/dist/src/portfolio/qualification-schema.js +112 -0
- package/dist/src/portfolio/qualification-schema.js.map +1 -0
- package/dist/src/portfolio/qualification.d.ts +4 -0
- package/dist/src/portfolio/qualification.js +157 -0
- package/dist/src/portfolio/qualification.js.map +1 -0
- package/dist/src/portfolio/registry.d.ts +34 -0
- package/dist/src/portfolio/registry.js +240 -0
- package/dist/src/portfolio/registry.js.map +1 -0
- package/dist/src/portfolio/report.d.ts +4 -0
- package/dist/src/portfolio/report.js +47 -0
- package/dist/src/portfolio/report.js.map +1 -0
- package/dist/src/portfolio/run-schema.d.ts +135 -0
- package/dist/src/portfolio/run-schema.js +81 -0
- package/dist/src/portfolio/run-schema.js.map +1 -0
- package/dist/src/portfolio/runner.d.ts +118 -0
- package/dist/src/portfolio/runner.js +423 -0
- package/dist/src/portfolio/runner.js.map +1 -0
- package/dist/src/portfolio/schema.d.ts +251 -0
- package/dist/src/portfolio/schema.js +317 -0
- package/dist/src/portfolio/schema.js.map +1 -0
- package/dist/src/portfolio/snapshot.d.ts +89 -0
- package/dist/src/portfolio/snapshot.js +548 -0
- package/dist/src/portfolio/snapshot.js.map +1 -0
- package/dist/src/portfolio/taxonomy-schema.d.ts +215 -0
- package/dist/src/portfolio/taxonomy-schema.js +74 -0
- package/dist/src/portfolio/taxonomy-schema.js.map +1 -0
- package/dist/src/portfolio/taxonomy.d.ts +5 -0
- package/dist/src/portfolio/taxonomy.js +236 -0
- package/dist/src/portfolio/taxonomy.js.map +1 -0
- package/dist/src/portfolio/vault.d.ts +53 -0
- package/dist/src/portfolio/vault.js +176 -0
- package/dist/src/portfolio/vault.js.map +1 -0
- package/dist/src/product-brief/loader.d.ts +2 -0
- package/dist/src/product-brief/loader.js +21 -0
- package/dist/src/product-brief/loader.js.map +1 -0
- package/dist/src/product-brief/report.d.ts +2 -0
- package/dist/src/product-brief/report.js +22 -0
- package/dist/src/product-brief/report.js.map +1 -0
- package/dist/src/product-brief/schema.d.ts +367 -0
- package/dist/src/product-brief/schema.js +272 -0
- package/dist/src/product-brief/schema.js.map +1 -0
- package/dist/src/product-brief/validator.d.ts +2 -0
- package/dist/src/product-brief/validator.js +251 -0
- package/dist/src/product-brief/validator.js.map +1 -0
- package/dist/src/product.d.ts +7 -0
- package/dist/src/product.js +28 -0
- package/dist/src/product.js.map +1 -0
- package/dist/src/quality-gate/report.d.ts +2 -0
- package/dist/src/quality-gate/report.js +46 -0
- package/dist/src/quality-gate/report.js.map +1 -0
- package/dist/src/quality-gate/runner.d.ts +2 -0
- package/dist/src/quality-gate/runner.js +175 -0
- package/dist/src/quality-gate/runner.js.map +1 -0
- package/dist/src/quality-gate/schema.d.ts +75 -0
- package/dist/src/quality-gate/schema.js +37 -0
- package/dist/src/quality-gate/schema.js.map +1 -0
- package/dist/src/quality-gate/types.d.ts +49 -0
- package/dist/src/quality-gate/types.js +2 -0
- package/dist/src/quality-gate/types.js.map +1 -0
- package/dist/src/repair/loader.d.ts +2 -0
- package/dist/src/repair/loader.js +11 -0
- package/dist/src/repair/loader.js.map +1 -0
- package/dist/src/repair/policy.d.ts +16 -0
- package/dist/src/repair/policy.js +65 -0
- package/dist/src/repair/policy.js.map +1 -0
- package/dist/src/repair/report.d.ts +2 -0
- package/dist/src/repair/report.js +32 -0
- package/dist/src/repair/report.js.map +1 -0
- package/dist/src/repair/runner.d.ts +17 -0
- package/dist/src/repair/runner.js +511 -0
- package/dist/src/repair/runner.js.map +1 -0
- package/dist/src/repair/schema.d.ts +264 -0
- package/dist/src/repair/schema.js +202 -0
- package/dist/src/repair/schema.js.map +1 -0
- package/dist/src/retrieval/report.d.ts +2 -0
- package/dist/src/retrieval/report.js +21 -0
- package/dist/src/retrieval/report.js.map +1 -0
- package/dist/src/retrieval/schema.d.ts +123 -0
- package/dist/src/retrieval/schema.js +77 -0
- package/dist/src/retrieval/schema.js.map +1 -0
- package/dist/src/retrieval/search.d.ts +26 -0
- package/dist/src/retrieval/search.js +415 -0
- package/dist/src/retrieval/search.js.map +1 -0
- package/dist/src/runtime/advanced-checks.d.ts +6 -0
- package/dist/src/runtime/advanced-checks.js +487 -0
- package/dist/src/runtime/advanced-checks.js.map +1 -0
- package/dist/src/runtime/composition-checks.d.ts +5 -0
- package/dist/src/runtime/composition-checks.js +307 -0
- package/dist/src/runtime/composition-checks.js.map +1 -0
- package/dist/src/runtime/interface-checks.d.ts +12 -0
- package/dist/src/runtime/interface-checks.js +224 -0
- package/dist/src/runtime/interface-checks.js.map +1 -0
- package/dist/src/runtime/policy.d.ts +13 -0
- package/dist/src/runtime/policy.js +97 -0
- package/dist/src/runtime/policy.js.map +1 -0
- package/dist/src/runtime/report.d.ts +2 -0
- package/dist/src/runtime/report.js +48 -0
- package/dist/src/runtime/report.js.map +1 -0
- package/dist/src/runtime/schema.d.ts +406 -0
- package/dist/src/runtime/schema.js +308 -0
- package/dist/src/runtime/schema.js.map +1 -0
- package/dist/src/runtime/types.d.ts +177 -0
- package/dist/src/runtime/types.js +2 -0
- package/dist/src/runtime/types.js.map +1 -0
- package/dist/src/runtime/verifier.d.ts +2 -0
- package/dist/src/runtime/verifier.js +1201 -0
- package/dist/src/runtime/verifier.js.map +1 -0
- package/dist/src/server.d.ts +2 -0
- package/dist/src/server.js +1352 -0
- package/dist/src/server.js.map +1 -0
- package/docs/installation.md +337 -0
- package/knowledge-base/INDEX.md +285 -0
- package/knowledge-base/benchmarks/aegisops/CALIBRATION.md +52 -0
- package/knowledge-base/benchmarks/aegisops/MANIFEST.md +56 -0
- package/knowledge-base/benchmarks/aegisops/SOURCE-EVIDENCE.md +45 -0
- package/knowledge-base/benchmarks/aegisops/acceptance-criteria.md +42 -0
- package/knowledge-base/benchmarks/aegisops/anti-patterns.md +19 -0
- package/knowledge-base/benchmarks/aegisops/attestations.template.yaml +3 -0
- package/knowledge-base/benchmarks/aegisops/attestations.yaml +115 -0
- package/knowledge-base/benchmarks/aegisops/journeys.json +91 -0
- package/knowledge-base/benchmarks/aegisops/product-contract.yaml +328 -0
- package/knowledge-base/benchmarks/azure-optimizer/SOURCE-EVIDENCE.md +26 -0
- package/knowledge-base/benchmarks/azure-optimizer/V2-IMPLEMENTATION.md +39 -0
- package/knowledge-base/benchmarks/azure-optimizer/acceptance-criteria.md +23 -0
- package/knowledge-base/benchmarks/azure-optimizer/anti-patterns.md +13 -0
- package/knowledge-base/benchmarks/azure-optimizer/journeys.json +88 -0
- package/knowledge-base/benchmarks/azure-optimizer/product-contract.yaml +216 -0
- package/knowledge-base/benchmarks/azure-optimizer/v2-human-review-methodology.yaml +171 -0
- package/knowledge-base/benchmarks/azure-optimizer/v2-journeys.json +139 -0
- package/knowledge-base/benchmarks/corpus/PROVENANCE.md +21 -0
- package/knowledge-base/benchmarks/corpus/README.md +30 -0
- package/knowledge-base/benchmarks/corpus/cases/anti-slop-negative/package.json +9 -0
- package/knowledge-base/benchmarks/corpus/cases/anti-slop-negative/src/FakeDashboard.tsx +10 -0
- package/knowledge-base/benchmarks/corpus/cases/anti-slop-positive/package.json +9 -0
- package/knowledge-base/benchmarks/corpus/cases/anti-slop-positive/src/Progress.tsx +15 -0
- package/knowledge-base/benchmarks/corpus/cases/architecture-negative/package.json +9 -0
- package/knowledge-base/benchmarks/corpus/cases/architecture-negative/src/OperationsPanel.tsx +40 -0
- package/knowledge-base/benchmarks/corpus/cases/architecture-positive/package.json +9 -0
- package/knowledge-base/benchmarks/corpus/cases/architecture-positive/src/Dashboard.tsx +17 -0
- package/knowledge-base/benchmarks/corpus/cases/architecture-positive/src/theme.css +15 -0
- package/knowledge-base/benchmarks/corpus/cases/task-incomplete/SOURCE-EVIDENCE.md +3 -0
- package/knowledge-base/benchmarks/corpus/cases/task-incomplete/journeys.json +20 -0
- package/knowledge-base/benchmarks/corpus/cases/task-incomplete/product-contract.yaml +78 -0
- package/knowledge-base/benchmarks/corpus/corpus.schema.yaml +159 -0
- package/knowledge-base/benchmarks/corpus/corpus.yaml +209 -0
- package/knowledge-base/benchmarks/interface-quality/README.md +26 -0
- package/knowledge-base/benchmarks/interface-quality/SOLO-MAINTAINER-TRACK.md +35 -0
- package/knowledge-base/benchmarks/interface-quality/comparison-methodology-v1.1.schema.yaml +288 -0
- package/knowledge-base/benchmarks/interface-quality/comparison-methodology.schema.yaml +235 -0
- package/knowledge-base/benchmarks/interface-quality/comparison-methodology.template.yaml +181 -0
- package/knowledge-base/benchmarks/interface-quality/evidence/example-runtime-report.json +11 -0
- package/knowledge-base/benchmarks/interface-quality/review-session.schema.yaml +14 -0
- package/knowledge-base/benchmarks/interface-quality/review.schema.yaml +296 -0
- package/knowledge-base/benchmarks/interface-quality/review.template.yaml +43 -0
- package/knowledge-base/benchmarks/portfolio-corpus/ADAPTERS.md +68 -0
- package/knowledge-base/benchmarks/portfolio-corpus/PORTFOLIO-RUNNER.md +131 -0
- package/knowledge-base/benchmarks/portfolio-corpus/PRODUCT-TASK-CONTRACTS.md +29 -0
- package/knowledge-base/benchmarks/portfolio-corpus/PROMOTED-RULES.md +31 -0
- package/knowledge-base/benchmarks/portfolio-corpus/archetype-profiles.yaml +26 -0
- package/knowledge-base/benchmarks/portfolio-corpus/product-task-profile.schema.yaml +105 -0
- package/knowledge-base/benchmarks/portfolio-corpus/registry.schema.yaml +188 -0
- package/knowledge-base/benchmarks/portfolio-corpus/registry.template.yaml +63 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/component-size-abstention.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/component-size-negative.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/component-size-positive.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/interactive-integrity-abstention.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/interactive-integrity-negative.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/interactive-integrity-positive.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/raw-design-values-abstention.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/raw-design-values-negative.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-fixtures/raw-design-values-positive.json +10 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-holdout-evaluation.template.json +14 -0
- package/knowledge-base/benchmarks/portfolio-corpus/rule-promotion-evidence.template.json +24 -0
- package/knowledge-base/benchmarks/portfolio-corpus/v3-command-evidence.template.json +17 -0
- package/knowledge-base/benchmarks/portfolio-corpus/v3-qualification-evidence.template.json +29 -0
- package/knowledge-base/benchmarks/scenestart/CALIBRATION.md +95 -0
- package/knowledge-base/benchmarks/scenestart/MANIFEST.md +53 -0
- package/knowledge-base/benchmarks/scenestart/SOURCE-EVIDENCE.md +43 -0
- package/knowledge-base/benchmarks/scenestart/acceptance-criteria.md +59 -0
- package/knowledge-base/benchmarks/scenestart/anti-patterns.md +26 -0
- package/knowledge-base/benchmarks/scenestart/attestations.template.yaml +3 -0
- package/knowledge-base/benchmarks/scenestart/attestations.yaml +21 -0
- package/knowledge-base/benchmarks/scenestart/human-review.md +99 -0
- package/knowledge-base/benchmarks/scenestart/human-review.template.md +105 -0
- package/knowledge-base/benchmarks/scenestart/journeys.json +141 -0
- package/knowledge-base/benchmarks/scenestart/product-contract.yaml +427 -0
- package/knowledge-base/dependencies.yaml +69 -0
- package/knowledge-base/design-intelligence/MASTER.md +87 -0
- package/knowledge-base/design-intelligence/asset-generation.md +66 -0
- package/knowledge-base/design-intelligence/brand-systems.md +69 -0
- package/knowledge-base/design-intelligence/closed-loop-repair.md +95 -0
- package/knowledge-base/design-intelligence/design-deliverable.schema.yaml +1194 -0
- package/knowledge-base/design-intelligence/design-deliverable.template.yaml +591 -0
- package/knowledge-base/design-intelligence/design-plan.md +78 -0
- package/knowledge-base/design-intelligence/design-plan.schema.yaml +621 -0
- package/knowledge-base/design-intelligence/figma-production.md +63 -0
- package/knowledge-base/design-intelligence/generation-adapter.md +72 -0
- package/knowledge-base/design-intelligence/generation-adapter.schema.yaml +47 -0
- package/knowledge-base/design-intelligence/iconography.md +46 -0
- package/knowledge-base/design-intelligence/information-design.md +104 -0
- package/knowledge-base/design-intelligence/information-design.schema.yaml +390 -0
- package/knowledge-base/design-intelligence/information-design.template.yaml +281 -0
- package/knowledge-base/design-intelligence/interaction-recovery-verification.md +72 -0
- package/knowledge-base/design-intelligence/interface-trust.md +103 -0
- package/knowledge-base/design-intelligence/interface-trust.schema.yaml +263 -0
- package/knowledge-base/design-intelligence/interface-trust.template.yaml +173 -0
- package/knowledge-base/design-intelligence/licensing-and-provenance.md +59 -0
- package/knowledge-base/design-intelligence/presentation-design.md +56 -0
- package/knowledge-base/design-intelligence/product-design-brief.md +67 -0
- package/knowledge-base/design-intelligence/product-design-brief.schema.yaml +279 -0
- package/knowledge-base/design-intelligence/product-design-brief.template.yaml +225 -0
- package/knowledge-base/design-intelligence/repair-request.schema.yaml +95 -0
- package/knowledge-base/design-intelligence/repair-request.template.yaml +39 -0
- package/knowledge-base/design-intelligence/visual-accessibility.md +56 -0
- package/knowledge-base/design-intelligence/visual-polish.md +172 -0
- package/knowledge-base/maintained/architecture/MASTER.md +22 -0
- package/knowledge-base/maintained/architecture/component-boundaries.md +30 -0
- package/knowledge-base/maintained/architecture/product-platforms.md +25 -0
- package/knowledge-base/maintained/architecture/quality-attributes-and-evaluation.md +35 -0
- package/knowledge-base/maintained/product-patterns/MASTER.md +10 -0
- package/knowledge-base/maintained/product-patterns/ai-workspaces.md +26 -0
- package/knowledge-base/maintained/product-patterns/operational-dashboards.md +22 -0
- package/knowledge-base/provenance.yaml +196 -0
- package/knowledge-base/retrieval-scope.yaml +43 -0
- package/knowledge-base/usability-evaluation/HEURISTIC_EVALUATION.md +115 -0
- package/knowledge-base/usability-evaluation/heuristic-review.schema.yaml +210 -0
- package/knowledge-base/usability-evaluation/heuristic-review.template.yaml +37 -0
- package/package.json +133 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
version: "1.1"
|
|
2
|
+
id: azure-optimizer
|
|
3
|
+
name: Azure Optimizer Infrastructure Analysis Dashboard
|
|
4
|
+
status: benchmark
|
|
5
|
+
purpose: >-
|
|
6
|
+
Enable an infrastructure operator to identify Azure resource risk and optimization opportunities,
|
|
7
|
+
inspect evidence and impact, run an analysis with truthful processing disclosure, choose a next
|
|
8
|
+
action, and export a result whose provenance remains inspectable.
|
|
9
|
+
authority:
|
|
10
|
+
behavior: Current candidate behavior is evidence, while the normalized task model in SOURCE-EVIDENCE.md defines comparison intent.
|
|
11
|
+
visual: Candidate visuals are comparison inputs and never override task integrity, accessibility, responsive behavior, or evidence truth.
|
|
12
|
+
precedence:
|
|
13
|
+
- { path: SOURCE-EVIDENCE.md, role: Normalized owner-authorized product and comparison evidence, authority: primary }
|
|
14
|
+
- { path: acceptance-criteria.md, role: Task and evidence interpretation, authority: supporting }
|
|
15
|
+
- { path: anti-patterns.md, role: Azure-specific rejection patterns, authority: supporting }
|
|
16
|
+
actors:
|
|
17
|
+
- id: infrastructure-operator
|
|
18
|
+
name: Infrastructure operator
|
|
19
|
+
goals:
|
|
20
|
+
- Identify the highest-priority infrastructure problem and its impact.
|
|
21
|
+
- Inspect evidence before accepting a recommendation.
|
|
22
|
+
- Distinguish live analysis from demo, cached, imported, or fallback results.
|
|
23
|
+
responsibilities:
|
|
24
|
+
- Verify environment, data origin, scope, and freshness.
|
|
25
|
+
- Validate remediation against organizational policy before implementation.
|
|
26
|
+
- Preserve evidence and provenance during export or handoff.
|
|
27
|
+
outputs:
|
|
28
|
+
- id: estate-summary
|
|
29
|
+
name: Estate summary
|
|
30
|
+
sourceOfTruth: Current fixed comparison dataset or explicitly identified connected source.
|
|
31
|
+
requiredEvidence: [Environment, data origin, scope, freshness]
|
|
32
|
+
- id: prioritized-findings
|
|
33
|
+
name: Prioritized findings
|
|
34
|
+
sourceOfTruth: Structured resource observations and severity policy.
|
|
35
|
+
requiredEvidence: [Affected resource, observation, impact, evidence, severity, confidence]
|
|
36
|
+
- id: remediation-plan
|
|
37
|
+
name: Remediation plan
|
|
38
|
+
sourceOfTruth: Finding-specific recommendation and validation contract.
|
|
39
|
+
requiredEvidence: [Recommended action, expected effect, owner or destination, validation method]
|
|
40
|
+
- id: analysis-report
|
|
41
|
+
name: Analysis report
|
|
42
|
+
sourceOfTruth: Declared live, simulated, cached, or imported processing result.
|
|
43
|
+
requiredEvidence: [Processing origin, started and completed timestamps, limitations]
|
|
44
|
+
- id: provenance-export
|
|
45
|
+
name: Provenance-preserving export
|
|
46
|
+
sourceOfTruth: Current visible result and its evidence metadata.
|
|
47
|
+
requiredEvidence: [Environment, origin, freshness, findings, limitations]
|
|
48
|
+
modes:
|
|
49
|
+
- id: overview
|
|
50
|
+
name: Overview
|
|
51
|
+
purpose: Understand estate context, priority, impact, and next actions.
|
|
52
|
+
input: Fixed comparison dataset or declared connected estate scope.
|
|
53
|
+
outputs: [estate-summary, prioritized-findings, remediation-plan]
|
|
54
|
+
- id: analysis
|
|
55
|
+
name: Analysis
|
|
56
|
+
purpose: Run the candidate analysis workflow and inspect processing origin and results.
|
|
57
|
+
input: Current declared environment and data source.
|
|
58
|
+
outputs: [analysis-report, prioritized-findings, remediation-plan]
|
|
59
|
+
- id: export
|
|
60
|
+
name: Export
|
|
61
|
+
purpose: Preserve the current result and provenance for review or handoff.
|
|
62
|
+
input: Current completed or imported result.
|
|
63
|
+
outputs: [provenance-export]
|
|
64
|
+
stateMachines:
|
|
65
|
+
- id: analysis-run
|
|
66
|
+
initial: idle
|
|
67
|
+
states:
|
|
68
|
+
- { id: idle, category: idle, userVisible: true, requirement: "Data mode, scope, and available action are visible before execution." }
|
|
69
|
+
- { id: running, category: loading, userVisible: true, requirement: Processing path and progress are visible without implying completion. }
|
|
70
|
+
- { id: success, category: success, userVisible: true, requirement: "Result origin, freshness, evidence, findings, and actions are visible together." }
|
|
71
|
+
- { id: error, category: error, userVisible: true, requirement: "Failure cause, preserved context, and recovery action are visible." }
|
|
72
|
+
- { id: fallback, category: fallback, userVisible: true, requirement: Simulation or local fallback is persistently distinguished from live analysis. }
|
|
73
|
+
- { id: disconnected, category: terminal, userVisible: true, requirement: Disconnection is explicit and unsupported operational claims are absent. }
|
|
74
|
+
transitions:
|
|
75
|
+
- { from: idle, to: running, trigger: Start analysis }
|
|
76
|
+
- { from: running, to: success, trigger: Receive a complete declared result }
|
|
77
|
+
- { from: running, to: error, trigger: Backend or processing failure }
|
|
78
|
+
- { from: error, to: running, trigger: Retry preserved analysis }
|
|
79
|
+
- { from: error, to: fallback, trigger: Continue with explicitly labeled local or demo data }
|
|
80
|
+
- { from: running, to: disconnected, trigger: Connection becomes unavailable without fallback }
|
|
81
|
+
- { from: success, to: running, trigger: Run another analysis }
|
|
82
|
+
metrics:
|
|
83
|
+
- id: resource-count
|
|
84
|
+
name: Tracked resources
|
|
85
|
+
definition: Number of resources included in the current declared estate scope.
|
|
86
|
+
sourceOfTruth: Current dataset resource inventory.
|
|
87
|
+
format: count
|
|
88
|
+
evidenceRequired: true
|
|
89
|
+
range: { min: 0, max: 1000000000 }
|
|
90
|
+
- id: potential-savings
|
|
91
|
+
name: Potential monthly savings
|
|
92
|
+
definition: Estimated recurring monthly reduction associated with evidenced recommendations.
|
|
93
|
+
sourceOfTruth: Sum of finding-level estimates under one declared currency, period, and baseline.
|
|
94
|
+
format: text
|
|
95
|
+
evidenceRequired: true
|
|
96
|
+
- id: issue-count
|
|
97
|
+
name: Issues found
|
|
98
|
+
definition: Number of current findings in the declared scope, grouped by labeled severity.
|
|
99
|
+
sourceOfTruth: Structured current findings collection.
|
|
100
|
+
format: count
|
|
101
|
+
evidenceRequired: true
|
|
102
|
+
range: { min: 0, max: 1000000000 }
|
|
103
|
+
- id: health-score
|
|
104
|
+
name: Infrastructure health
|
|
105
|
+
definition: Declared scoring function over current evidenced findings and telemetry.
|
|
106
|
+
sourceOfTruth: Versioned score formula with current inputs and limitations.
|
|
107
|
+
format: percentage
|
|
108
|
+
evidenceRequired: true
|
|
109
|
+
range: { min: 0, max: 100 }
|
|
110
|
+
constraints:
|
|
111
|
+
outOfScope:
|
|
112
|
+
- Automatic production remediation without operator authorization.
|
|
113
|
+
- Claims about real Azure connectivity when only bundled or simulated data is available.
|
|
114
|
+
- General cloud optimization conclusions outside the declared evidence scope.
|
|
115
|
+
prohibitedClaims:
|
|
116
|
+
- Online, operational, connected, production, continuous-monitoring, or verified claims without current runtime evidence.
|
|
117
|
+
- Savings, health, issue, performance, or trend values without a declared source, scope, period, and freshness.
|
|
118
|
+
- Human approval or representative-user validation generated by an agent.
|
|
119
|
+
mockData:
|
|
120
|
+
allowedEnvironments: [development, test, demo]
|
|
121
|
+
mustBeLabeled: true
|
|
122
|
+
prohibitedInProduction: true
|
|
123
|
+
fallbackDisclosure: Simulation or local fallback must be disclosed before execution, during processing, in results, history, and exports.
|
|
124
|
+
acceptanceCriteria:
|
|
125
|
+
- id: truthful-context
|
|
126
|
+
title: Environment and data provenance are explicit
|
|
127
|
+
severity: blocker
|
|
128
|
+
requirement: Users can identify environment, origin, connection state, scope, and freshness without consulting documentation.
|
|
129
|
+
evidence: [contract, runtime, screenshot, manual-review]
|
|
130
|
+
appliesToModes: [overview, analysis, export]
|
|
131
|
+
- id: priority-path
|
|
132
|
+
title: Priority, impact, evidence, and action form one path
|
|
133
|
+
severity: blocker
|
|
134
|
+
requirement: The highest-priority finding exposes affected scope, impact, supporting evidence, remediation, and validation method.
|
|
135
|
+
evidence: [contract, runtime, manual-review]
|
|
136
|
+
appliesToModes: [overview, analysis]
|
|
137
|
+
- id: honest-processing
|
|
138
|
+
title: Processing origin remains truthful
|
|
139
|
+
severity: blocker
|
|
140
|
+
requirement: Live, simulated, cached, imported, fallback, stale, and disconnected results cannot be mistaken for one another.
|
|
141
|
+
evidence: [contract, runtime, network, screenshot]
|
|
142
|
+
appliesToModes: [analysis, export]
|
|
143
|
+
- id: metric-integrity
|
|
144
|
+
title: Metrics support inspectable decisions
|
|
145
|
+
severity: blocker
|
|
146
|
+
requirement: Every visible metric has a definition, source, scope, period or timestamp, comparison baseline where relevant, and a supported decision.
|
|
147
|
+
evidence: [contract, runtime, manual-review]
|
|
148
|
+
appliesToModes: [overview, analysis]
|
|
149
|
+
- id: export-provenance
|
|
150
|
+
title: Export preserves visible provenance
|
|
151
|
+
severity: blocker
|
|
152
|
+
requirement: Exports retain environment, origin, freshness, findings, evidence references, and limitations from the current result.
|
|
153
|
+
evidence: [runtime, export]
|
|
154
|
+
appliesToModes: [export]
|
|
155
|
+
- id: responsive-integrity
|
|
156
|
+
title: Comparison task remains operable at required widths
|
|
157
|
+
severity: blocker
|
|
158
|
+
requirement: Context, metrics, findings, evidence, and actions remain readable without clipping, overlap, or incoherent competing scroll regions.
|
|
159
|
+
evidence: [runtime, screenshot, accessibility]
|
|
160
|
+
appliesToModes: [overview, analysis, export]
|
|
161
|
+
verification:
|
|
162
|
+
journeyFile: journeys.json
|
|
163
|
+
viewports:
|
|
164
|
+
- { name: mobile-375, width: 375, height: 812 }
|
|
165
|
+
- { name: tablet-768, width: 768, height: 1024 }
|
|
166
|
+
- { name: desktop-1024, width: 1024, height: 768 }
|
|
167
|
+
- { name: wide-1440, width: 1440, height: 1000 }
|
|
168
|
+
bindings:
|
|
169
|
+
- { profile: overview-baseline, journey: overview-integrity, actor: infrastructure-operator, mode: overview, acceptanceCriteria: [truthful-context, priority-path, metric-integrity, responsive-integrity] }
|
|
170
|
+
- { profile: original-analysis, journey: run-original-analysis, actor: infrastructure-operator, mode: analysis, acceptanceCriteria: [honest-processing, priority-path] }
|
|
171
|
+
- { profile: lovable-analysis, journey: run-lovable-analysis, actor: infrastructure-operator, mode: analysis, acceptanceCriteria: [honest-processing, priority-path] }
|
|
172
|
+
- { profile: uiux-analysis, journey: run-uiux-analysis, actor: infrastructure-operator, mode: analysis, acceptanceCriteria: [honest-processing, priority-path] }
|
|
173
|
+
- { profile: ztothez-analysis, journey: run-ztothez-analysis, actor: infrastructure-operator, mode: analysis, acceptanceCriteria: [honest-processing, priority-path] }
|
|
174
|
+
|
|
175
|
+
benchmark:
|
|
176
|
+
archetype: operational-dashboard
|
|
177
|
+
interface: browser
|
|
178
|
+
qualityDimensions:
|
|
179
|
+
- { id: truthful-disclosure, status: required, reason: "Data origin, environment, freshness, and processing mode drive trust." }
|
|
180
|
+
- { id: information-design, status: required, reason: "Operators must identify priority, impact, evidence, action, and validation." }
|
|
181
|
+
- { id: visual-system, status: required, reason: "Metrics and findings require a consistent operational hierarchy." }
|
|
182
|
+
- { id: accessibility, status: required, reason: "Analysis and findings must remain readable and operable without color alone." }
|
|
183
|
+
- { id: responsive-structure, status: required, reason: "The same decision path is verified across four viewport sizes." }
|
|
184
|
+
- { id: state-integrity, status: required, reason: "Live, fallback, stale, disconnected, and failed analysis states must not collapse." }
|
|
185
|
+
- { id: maintainability, status: required, reason: "Data processing, domain findings, state, and rendering require clear boundaries." }
|
|
186
|
+
tasks:
|
|
187
|
+
- id: prioritize-cloud-savings
|
|
188
|
+
primary: true
|
|
189
|
+
actor: infrastructure-operator
|
|
190
|
+
mode: analysis
|
|
191
|
+
intent: Run analysis, identify the highest-priority supported saving opportunity, inspect its evidence, and determine the next validation action.
|
|
192
|
+
start:
|
|
193
|
+
stateMachine: analysis-run
|
|
194
|
+
state: idle
|
|
195
|
+
observable: The operator can identify the current dataset and initiate analysis.
|
|
196
|
+
success:
|
|
197
|
+
stateMachine: analysis-run
|
|
198
|
+
state: success
|
|
199
|
+
observable: A prioritized finding exposes impact, source evidence, remediation, ownership, and validation guidance.
|
|
200
|
+
evidence: [contract, runtime, network]
|
|
201
|
+
recovery:
|
|
202
|
+
required: true
|
|
203
|
+
failure:
|
|
204
|
+
stateMachine: analysis-run
|
|
205
|
+
state: disconnected
|
|
206
|
+
observable: The interface identifies unavailable processing and does not present disconnected results as live.
|
|
207
|
+
observable: The operator can reconnect, retry, or explicitly choose labeled local fallback without losing context.
|
|
208
|
+
journey: { profile: ztothez-analysis, journey: run-ztothez-analysis }
|
|
209
|
+
browser: { route: /, narrowViewport: mobile-375 }
|
|
210
|
+
evidencePolicy:
|
|
211
|
+
missingEvidence: unverified
|
|
212
|
+
failedBehavior: failed
|
|
213
|
+
unsupportedCapability: limitation
|
|
214
|
+
comparison:
|
|
215
|
+
taskContractId: azure-optimizer-priority-analysis
|
|
216
|
+
crossContractRanking: false
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
version: "1.1"
|
|
2
|
+
id: azure-v2-anonymous-human-review
|
|
3
|
+
title: Anonymous Azure interface quality and interaction comparison
|
|
4
|
+
preparedAt: 2026-08-26T21:30:00+03:00
|
|
5
|
+
preparedBy:
|
|
6
|
+
type: agent
|
|
7
|
+
name: ZtotheZ Design Engineering
|
|
8
|
+
candidates:
|
|
9
|
+
- { id: anonymous-a, label: Candidate A }
|
|
10
|
+
- { id: anonymous-b, label: Candidate B }
|
|
11
|
+
- { id: anonymous-c, label: Candidate C }
|
|
12
|
+
- { id: anonymous-d, label: Candidate D }
|
|
13
|
+
- { id: anonymous-e, label: Candidate E }
|
|
14
|
+
viewports:
|
|
15
|
+
- { id: mobile, width: 375, height: 812 }
|
|
16
|
+
- { id: tablet, width: 768, height: 1024 }
|
|
17
|
+
- { id: desktop, width: 1024, height: 768 }
|
|
18
|
+
- { id: wide, width: 1440, height: 1000 }
|
|
19
|
+
states:
|
|
20
|
+
- { id: initial, label: Initial product state, required: true }
|
|
21
|
+
- { id: loading, label: Analysis in progress, required: true }
|
|
22
|
+
- { id: result, label: Completed result, required: true }
|
|
23
|
+
- { id: fallback, label: Backend failure with disclosed fallback, required: true }
|
|
24
|
+
- { id: disconnected, label: Disconnected state, required: true }
|
|
25
|
+
- { id: export, label: Exported result with provenance, required: true }
|
|
26
|
+
stages:
|
|
27
|
+
- id: build
|
|
28
|
+
label: Production build
|
|
29
|
+
required: true
|
|
30
|
+
scope: candidate
|
|
31
|
+
evidenceKinds: [build-report]
|
|
32
|
+
- id: typecheck
|
|
33
|
+
label: Static type verification
|
|
34
|
+
required: true
|
|
35
|
+
scope: candidate
|
|
36
|
+
evidenceKinds: [typecheck-report]
|
|
37
|
+
- id: architecture-audit
|
|
38
|
+
label: Architecture and anti-slop audit
|
|
39
|
+
required: true
|
|
40
|
+
scope: candidate
|
|
41
|
+
evidenceKinds: [static-audit]
|
|
42
|
+
- id: browser-verification
|
|
43
|
+
label: Browser and responsive verification
|
|
44
|
+
required: true
|
|
45
|
+
scope: candidate
|
|
46
|
+
evidenceKinds: [runtime-report, screenshot]
|
|
47
|
+
- id: product-journeys
|
|
48
|
+
label: Product-specific journey verification
|
|
49
|
+
required: true
|
|
50
|
+
scope: candidate
|
|
51
|
+
evidenceKinds: [journey-report, export]
|
|
52
|
+
- id: human-review
|
|
53
|
+
label: Attributable human and representative-user review
|
|
54
|
+
required: true
|
|
55
|
+
scope: comparison
|
|
56
|
+
evidenceKinds: [human-review, user-session]
|
|
57
|
+
tasks:
|
|
58
|
+
- id: identify-data-origin
|
|
59
|
+
prompt: Identify whether the displayed data is live, simulated, cached, imported, or unavailable, then locate environment and freshness.
|
|
60
|
+
successCriteria:
|
|
61
|
+
- Correctly identifies data origin and connection state.
|
|
62
|
+
- Locates freshness and environment without documentation.
|
|
63
|
+
measurements: [task-completion, time-on-task, navigation-errors, comprehension-accuracy, confidence]
|
|
64
|
+
- id: identify-priority
|
|
65
|
+
prompt: Find the highest-priority problem and explain its impact and supporting evidence.
|
|
66
|
+
successCriteria:
|
|
67
|
+
- Selects the intended highest-priority finding.
|
|
68
|
+
- Identifies impact and supporting evidence.
|
|
69
|
+
measurements: [task-completion, time-on-task, navigation-errors, comprehension-accuracy, confidence]
|
|
70
|
+
- id: identify-next-action
|
|
71
|
+
prompt: Identify the recommended next action, responsible owner, and validation method.
|
|
72
|
+
successCriteria:
|
|
73
|
+
- Locates the remediation action and owner.
|
|
74
|
+
- Identifies the stated validation method.
|
|
75
|
+
measurements: [task-completion, time-on-task, navigation-errors, recovery-attempts, confidence]
|
|
76
|
+
- id: recognize-fallback
|
|
77
|
+
prompt: Start analysis and determine whether live processing or a fallback produced the result.
|
|
78
|
+
successCriteria:
|
|
79
|
+
- Correctly identifies the processing path.
|
|
80
|
+
- Finds the result-level limitation or provenance statement.
|
|
81
|
+
measurements: [task-completion, time-on-task, navigation-errors, comprehension-accuracy, recovery-attempts, confidence]
|
|
82
|
+
- id: verify-export-provenance
|
|
83
|
+
prompt: Export the result and verify that data origin, freshness, environment, and limitations are retained.
|
|
84
|
+
successCriteria:
|
|
85
|
+
- Completes the export or correctly records that export is unavailable.
|
|
86
|
+
- Correctly identifies every retained or missing provenance field.
|
|
87
|
+
measurements: [task-completion, time-on-task, navigation-errors, comprehension-accuracy, recovery-attempts, confidence]
|
|
88
|
+
rubric:
|
|
89
|
+
scale:
|
|
90
|
+
minimum: 0
|
|
91
|
+
maximum: 4
|
|
92
|
+
anchors:
|
|
93
|
+
"0": Absent, misleading, or unusable
|
|
94
|
+
"1": Present but materially deficient
|
|
95
|
+
"2": Functional and understandable
|
|
96
|
+
"3": Polished and consistently implemented
|
|
97
|
+
"4": Exceptional and supported by evidence
|
|
98
|
+
categories:
|
|
99
|
+
- id: truthful-disclosure
|
|
100
|
+
label: Truthful interface disclosure
|
|
101
|
+
weight: 30
|
|
102
|
+
criteria:
|
|
103
|
+
- id: disclosure-speed
|
|
104
|
+
prompt: Data origin, connection, environment, and freshness are identifiable without documentation.
|
|
105
|
+
measurement: comprehension
|
|
106
|
+
evidenceLevel: representative-user
|
|
107
|
+
scoreMinimum: 0
|
|
108
|
+
scoreMaximum: 4
|
|
109
|
+
- id: disclosure-consistency
|
|
110
|
+
prompt: Disclosure persists through action, result, history, fallback, error, and export states.
|
|
111
|
+
measurement: task-observation
|
|
112
|
+
evidenceLevel: human-expert
|
|
113
|
+
scoreMinimum: 0
|
|
114
|
+
scoreMaximum: 4
|
|
115
|
+
- id: information-design
|
|
116
|
+
label: Operational information design
|
|
117
|
+
weight: 35
|
|
118
|
+
criteria:
|
|
119
|
+
- id: priority-comprehension
|
|
120
|
+
prompt: Priority, impact, evidence, next action, and validation method form one understandable path.
|
|
121
|
+
measurement: comprehension
|
|
122
|
+
evidenceLevel: representative-user
|
|
123
|
+
scoreMinimum: 0
|
|
124
|
+
scoreMaximum: 4
|
|
125
|
+
- id: decision-density
|
|
126
|
+
prompt: Visible metrics and charts support identifiable decisions without decorative duplication.
|
|
127
|
+
measurement: rating
|
|
128
|
+
evidenceLevel: human-expert
|
|
129
|
+
scoreMinimum: 0
|
|
130
|
+
scoreMaximum: 4
|
|
131
|
+
- id: visual-polish
|
|
132
|
+
label: Visual hierarchy and polish
|
|
133
|
+
weight: 35
|
|
134
|
+
criteria:
|
|
135
|
+
- id: visual-rhythm
|
|
136
|
+
prompt: Spacing, alignment, typography, density, and emphasis appear intentional and coherent.
|
|
137
|
+
measurement: rating
|
|
138
|
+
evidenceLevel: human-expert
|
|
139
|
+
scoreMinimum: 0
|
|
140
|
+
scoreMaximum: 4
|
|
141
|
+
- id: responsive-composition
|
|
142
|
+
prompt: Composition remains balanced, legible, and task-focused at every required viewport.
|
|
143
|
+
measurement: task-observation
|
|
144
|
+
evidenceLevel: human-expert
|
|
145
|
+
scoreMinimum: 0
|
|
146
|
+
scoreMaximum: 4
|
|
147
|
+
evidencePolicy:
|
|
148
|
+
anonymizeCandidates: true
|
|
149
|
+
counterbalanceOrder: true
|
|
150
|
+
retainArtifacts: true
|
|
151
|
+
separateEvidenceLevels: true
|
|
152
|
+
requireHumanAttribution: true
|
|
153
|
+
prohibitAgentHumanAttestation: true
|
|
154
|
+
decision:
|
|
155
|
+
minimumCategoryScore: 3
|
|
156
|
+
requireAllStagesPass: true
|
|
157
|
+
prohibitContradictedClaims: true
|
|
158
|
+
requiredEvidenceLevels: [automated, ai-assisted-expert, human-expert, representative-user]
|
|
159
|
+
requiredStageCandidates: [anonymous-e]
|
|
160
|
+
reviewRequirements:
|
|
161
|
+
minimumHumanExpertSessions: 3
|
|
162
|
+
minimumRepresentativeUserSessions: 5
|
|
163
|
+
requireCompleteTaskMatrix: true
|
|
164
|
+
requireCompleteRatingMatrix: true
|
|
165
|
+
requireIdentityBlinding: true
|
|
166
|
+
minimumCounterbalancedOrders: 5
|
|
167
|
+
benchmark:
|
|
168
|
+
targetCandidate: anonymous-e
|
|
169
|
+
comparatorCandidates: [anonymous-b]
|
|
170
|
+
requiredCategoryIds: [truthful-disclosure, information-design, visual-polish]
|
|
171
|
+
requireTaskMetricNonRegression: true
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"contract": "azure-optimizer",
|
|
4
|
+
"profiles": [
|
|
5
|
+
{
|
|
6
|
+
"id": "azure-v2-state-matrix",
|
|
7
|
+
"name": "Azure Optimizer V2 contract and state matrix",
|
|
8
|
+
"environment": [
|
|
9
|
+
"Azure Optimizer V2 production build is running",
|
|
10
|
+
"The fixed imported comparison fixture is unchanged",
|
|
11
|
+
"No Azure tenant connection is configured"
|
|
12
|
+
],
|
|
13
|
+
"expectedNetwork": [
|
|
14
|
+
{
|
|
15
|
+
"id": "disclosed-fallback-failure",
|
|
16
|
+
"method": "POST",
|
|
17
|
+
"urlIncludes": "/api/analyze?scenario=fallback",
|
|
18
|
+
"status": 503,
|
|
19
|
+
"minOccurrences": 1,
|
|
20
|
+
"maxOccurrences": 1
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"journeys": [
|
|
24
|
+
{
|
|
25
|
+
"id": "demo-success",
|
|
26
|
+
"name": "demo-success",
|
|
27
|
+
"steps": [
|
|
28
|
+
{ "action": "navigate", "value": "/?state=demo" },
|
|
29
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-state", "value": "normal" },
|
|
30
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-data-mode]", "name": "data-ztothez-design-data-mode", "value": "demo" },
|
|
31
|
+
{ "action": "click", "selector": "[data-view=analysis]" },
|
|
32
|
+
{ "action": "expectResponse", "selector": "#run-analysis", "urlIncludes": "/api/analyze?scenario=demo", "status": 200, "method": "POST" },
|
|
33
|
+
{ "action": "waitFor", "selector": ".run-complete" },
|
|
34
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-stage", "value": "result" },
|
|
35
|
+
{ "action": "expectText", "selector": "body", "value": "Analysis complete" }
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "live-connected",
|
|
40
|
+
"name": "live-connected",
|
|
41
|
+
"steps": [
|
|
42
|
+
{ "action": "navigate", "value": "/?state=live" },
|
|
43
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-data-mode]", "name": "data-ztothez-design-data-mode", "value": "live" },
|
|
44
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-connection]", "name": "data-ztothez-design-connection", "value": "connected" },
|
|
45
|
+
{ "action": "click", "selector": "[data-view=analysis]" },
|
|
46
|
+
{ "action": "expectResponse", "selector": "#run-analysis", "urlIncludes": "/api/analyze?scenario=live", "status": 200, "method": "POST" },
|
|
47
|
+
{ "action": "waitFor", "selector": ".run-complete" },
|
|
48
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-result-origin]", "name": "data-ztothez-design-result-origin", "value": "live" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "slow-analysis",
|
|
53
|
+
"name": "slow-analysis",
|
|
54
|
+
"steps": [
|
|
55
|
+
{ "action": "navigate", "value": "/?state=slow" },
|
|
56
|
+
{ "action": "click", "selector": "[data-view=analysis]" },
|
|
57
|
+
{ "action": "click", "selector": "#run-analysis" },
|
|
58
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-stage", "value": "loading" },
|
|
59
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-state", "value": "slow" },
|
|
60
|
+
{ "action": "waitFor", "selector": ".run-complete" },
|
|
61
|
+
{ "action": "expectText", "selector": "body", "value": "Analysis complete" }
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "backend-failure-fallback",
|
|
66
|
+
"name": "backend-failure-fallback",
|
|
67
|
+
"steps": [
|
|
68
|
+
{ "action": "navigate", "value": "/?state=fallback" },
|
|
69
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-data-mode]", "name": "data-ztothez-design-data-mode", "value": "hybrid" },
|
|
70
|
+
{ "action": "expectText", "selector": "[data-ztothez-design-result-origin]", "value": "fallback simulation" },
|
|
71
|
+
{ "action": "click", "selector": "[data-view=analysis]" },
|
|
72
|
+
{ "action": "expectResponse", "selector": "#run-analysis", "urlIncludes": "/api/analyze?scenario=fallback", "status": 503, "method": "POST" },
|
|
73
|
+
{ "action": "waitFor", "selector": ".run-error" },
|
|
74
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-stage", "value": "error" },
|
|
75
|
+
{ "action": "click", "selector": "#use-local-fallback" },
|
|
76
|
+
{ "action": "waitFor", "selector": ".run-complete" },
|
|
77
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-result-origin]", "name": "data-ztothez-design-result-origin", "value": "simulated" },
|
|
78
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-state", "value": "fallback" }
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "disconnected-recovery",
|
|
83
|
+
"name": "disconnected-recovery",
|
|
84
|
+
"steps": [
|
|
85
|
+
{ "action": "navigate", "value": "/?state=disconnected" },
|
|
86
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-connection]", "name": "data-ztothez-design-connection", "value": "disconnected" },
|
|
87
|
+
{ "action": "expectVisible", "selector": "[data-ztothez-design-recovery-action]" },
|
|
88
|
+
{ "action": "click", "selector": ".trust-recovery" },
|
|
89
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-connection]", "name": "data-ztothez-design-connection", "value": "connected" },
|
|
90
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-state", "value": "normal" }
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "partial-result",
|
|
95
|
+
"name": "partial-result",
|
|
96
|
+
"steps": [
|
|
97
|
+
{ "action": "navigate", "value": "/?state=partial" },
|
|
98
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-state", "value": "partial" },
|
|
99
|
+
{ "action": "expectText", "selector": "body", "value": "Partial result" },
|
|
100
|
+
{ "action": "expectText", "selector": ".count-label", "value": "2 evidenced" }
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "stale-result",
|
|
105
|
+
"name": "stale-result",
|
|
106
|
+
"steps": [
|
|
107
|
+
{ "action": "navigate", "value": "/?state=stale" },
|
|
108
|
+
{ "action": "expectAttribute", "selector": "[data-ztothez-design-freshness]", "name": "data-ztothez-design-freshness", "value": "stale" },
|
|
109
|
+
{ "action": "expectText", "selector": "body", "value": "Stale result" }
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "finding-detail-history",
|
|
114
|
+
"name": "finding-detail-history",
|
|
115
|
+
"steps": [
|
|
116
|
+
{ "action": "navigate", "value": "/?state=demo" },
|
|
117
|
+
{ "action": "click", "selector": "[data-finding-id=AZ-CONFIG-001]" },
|
|
118
|
+
{ "action": "expectText", "selector": "#finding-detail-heading", "value": "backup policy" },
|
|
119
|
+
{ "action": "click", "selector": "[data-view=history]" },
|
|
120
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-stage", "value": "history" },
|
|
121
|
+
{ "action": "expectText", "selector": "body", "value": "No scheduled monitoring is implied" }
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "export-provenance",
|
|
126
|
+
"name": "export-provenance",
|
|
127
|
+
"steps": [
|
|
128
|
+
{ "action": "navigate", "value": "/?state=demo" },
|
|
129
|
+
{ "action": "click", "selector": "[data-view=export]" },
|
|
130
|
+
{ "action": "expectAttribute", "selector": "#azure-v2-app", "name": "data-ztothez-design-stage", "value": "export" },
|
|
131
|
+
{ "action": "expectText", "selector": "body", "value": "processing origin" },
|
|
132
|
+
{ "action": "expectDownload", "selector": "#download-provenance", "filenameIncludes": "provenance.json" },
|
|
133
|
+
{ "action": "expectText", "selector": "body", "value": "Export created with provenance" }
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Corpus Provenance
|
|
2
|
+
|
|
3
|
+
## Project-Owned Sources
|
|
4
|
+
|
|
5
|
+
The AegisOPS and SceneStart benchmark contracts are derived from repositories and product evidence owned by ZtotheZ. Their source snapshots, authority boundaries, and transformation notes are recorded in their respective `SOURCE-EVIDENCE.md` and `MANIFEST.md` files.
|
|
6
|
+
|
|
7
|
+
The compact architecture and anti-slop repositories under `cases/` were authored specifically for this project. They are synthetic behavioral fixtures, not extracted third-party application code. They are distributed under the repository license.
|
|
8
|
+
|
|
9
|
+
## Licensed Standard Reference
|
|
10
|
+
|
|
11
|
+
The visual-accessibility retrieval case refers to WCAG 2.2 concepts through independently authored query text and the independently authored ZtotheZ visual-accessibility module. It does not redistribute the WCAG specification.
|
|
12
|
+
|
|
13
|
+
- Authoritative source: https://www.w3.org/TR/WCAG22/
|
|
14
|
+
- License information: https://www.w3.org/copyright/document-license-2015/
|
|
15
|
+
- Owner: World Wide Web Consortium
|
|
16
|
+
- License record: W3C Document License 2015
|
|
17
|
+
- Transformation: concepts are expressed as an original search query and expected local source path; no normative passage is copied into the case.
|
|
18
|
+
|
|
19
|
+
## Inclusion Rules
|
|
20
|
+
|
|
21
|
+
Every corpus case must reference one source declared in `corpus.yaml`. User-owned sources require local evidence. Licensed standards require an authoritative URL, license record, attribution, and a derivation statement. Reference archives and third-party design products are prohibited as corpus authorities.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Corpus Benchmark
|
|
2
|
+
|
|
3
|
+
This directory is the maintained evaluation corpus for ZtotheZ Design Engineering. It measures whether retrieval, architecture auditing, product-contract validation, and anti-slop rules produce the expected decisions on controlled positive and negative cases.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- `corpus.yaml` is the executable case manifest and score policy.
|
|
8
|
+
- `corpus.schema.yaml` is the portable schema for corpus authors and external tooling.
|
|
9
|
+
- `PROVENANCE.md` records ownership, licensed references, derivation, and redistribution boundaries.
|
|
10
|
+
- `cases/` contains small project-owned repositories and one deliberately incomplete product contract.
|
|
11
|
+
|
|
12
|
+
## Evaluation
|
|
13
|
+
|
|
14
|
+
Run:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run evaluate-corpus
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The command exits unsuccessfully when the overall threshold, a dimension threshold, or recommendation mean reciprocal rank is missed. A case passes only when the observed result matches its declared expectation. Negative cases pass when the system rejects the known defect or explicitly abstains.
|
|
21
|
+
|
|
22
|
+
## Interpretation
|
|
23
|
+
|
|
24
|
+
- Recommendation relevance measures whether the expected approved source appears within the declared maximum rank.
|
|
25
|
+
- Abstention measures whether out-of-scope queries return `no-match` without archive fallback.
|
|
26
|
+
- Architectural integrity measures clean acceptance and known architecture-rule detection.
|
|
27
|
+
- Task completeness measures valid product contracts and rejection of broken cross-references.
|
|
28
|
+
- Anti-slop rejection measures clean acceptance and deterministic rejection of mock production paths or nonfunctional controls.
|
|
29
|
+
|
|
30
|
+
Passing this corpus proves behavior only for the included cases. It does not prove universal recommendation quality, product usability, legal clearance, or visual quality.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ProgressProps = {
|
|
2
|
+
completedIds: string[];
|
|
3
|
+
requiredIds: string[];
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export function Progress({ completedIds, requiredIds }: ProgressProps) {
|
|
7
|
+
const completed = requiredIds.filter((id) => completedIds.includes(id)).length;
|
|
8
|
+
return (
|
|
9
|
+
<section aria-labelledby="progress-title">
|
|
10
|
+
<h2 id="progress-title">Release progress</h2>
|
|
11
|
+
<p>{completed} of {requiredIds.length} requirements complete</p>
|
|
12
|
+
<a href="/release/evidence">Inspect evidence</a>
|
|
13
|
+
</section>
|
|
14
|
+
);
|
|
15
|
+
}
|