@adia-ai/adia-ui-forge 0.1.3 → 0.8.1
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/.claude-plugin/plugin.json +4 -7
- package/CHANGELOG.md +35 -34
- package/README.md +35 -40
- package/agents/a2ui-engineer.md +22 -53
- package/agents/component-author.md +29 -0
- package/agents/framework-verifier.md +26 -0
- package/agents/release-engineer.md +21 -81
- package/agents/routing-corpus.json +293 -64
- package/bin/demo-postwrite-pattern-gate +94 -0
- package/bin/forge-lint +17 -2
- package/bin/sidecar-prewrite-guard +104 -0
- package/commands/deploy.md +9 -0
- package/commands/dogfood.md +10 -0
- package/commands/gen-review.md +9 -0
- package/commands/release.md +10 -0
- package/hooks/hooks.json +15 -0
- package/package.json +3 -6
- package/references/contracts/a2ui-mcp-surface.md +35 -0
- package/references/contracts/migration-guide-format.md +34 -0
- package/references/shared/content-trust.md +19 -74
- package/skills/adia-a2ui/SKILL.md +99 -0
- package/skills/{adia-ui-a2ui → adia-a2ui}/evals/routing-corpus.json +10 -10
- package/skills/adia-a2ui/references/anti-patterns.md +27 -0
- package/skills/adia-a2ui/references/chunk-authoring.md +71 -0
- package/skills/adia-a2ui/references/corpus-discipline.md +68 -0
- package/skills/adia-a2ui/references/eval-diagnostics.md +86 -0
- package/skills/adia-a2ui/references/format-extension-decisions.md +66 -0
- package/skills/adia-a2ui/references/leverage-rules.md +52 -0
- package/skills/adia-a2ui/references/mcp-pipeline-ops.md +83 -0
- package/skills/adia-a2ui/references/mcp-tool-reference.md +59 -0
- package/skills/adia-a2ui/references/pipeline-overview.md +115 -0
- package/skills/adia-a2ui/references/semantic-fail-lifting.md +74 -0
- package/skills/adia-a2ui/references/strategy-engines.md +109 -0
- package/skills/adia-a2ui/references/zettel-calibration.md +104 -0
- package/skills/adia-author/SKILL.md +112 -0
- package/skills/adia-author/evals/routing-corpus.json +222 -0
- package/skills/{adia-ui-authoring → adia-author}/references/anti-patterns.md +33 -4
- package/skills/{adia-ui-authoring → adia-author}/references/authoring-cycle.md +9 -11
- package/skills/adia-author/references/canonical-pattern-index.md +243 -0
- package/skills/{adia-ui-authoring → adia-author}/references/code-style.md +19 -21
- package/skills/adia-author/references/common-gotchas.md +129 -0
- package/skills/adia-author/references/composite-demo-protocol.md +271 -0
- package/skills/{adia-ui-authoring → adia-author}/references/css-patterns.md +19 -6
- package/skills/{adia-ui-authoring → adia-author}/references/lifecycle-patterns.md +1 -0
- package/skills/{adia-ui-authoring → adia-author}/references/llm-bridge.md +3 -5
- package/skills/{adia-ui-authoring → adia-author}/references/module-promotion.md +20 -38
- package/skills/{adia-ui-authoring → adia-author}/references/primitive-audit.md +2 -4
- package/skills/{adia-ui-authoring → adia-author}/references/shell-patterns.md +12 -18
- package/skills/{adia-ui-authoring → adia-author}/references/token-contract.md +5 -7
- package/skills/{adia-ui-authoring → adia-author}/references/worked-example.md +3 -3
- package/skills/{adia-ui-authoring → adia-author}/references/yaml-contract.md +3 -3
- package/skills/{adia-ui-authoring → adia-author}/scripts/build-canonical-pattern-index.mjs +3 -3
- package/skills/adia-deploy/SKILL.md +128 -0
- package/skills/{adia-ui-ops → adia-deploy}/references/deploy-playbooks.md +47 -30
- package/skills/adia-dogfood/SKILL.md +124 -0
- package/skills/adia-dogfood/references/admin-shell-anatomy.md +77 -0
- package/skills/adia-dogfood/references/app-shell-pitfalls.md +66 -0
- package/skills/adia-dogfood/references/card-anatomy-sweep.md +66 -0
- package/skills/adia-dogfood/references/html-attr-sweep.md +63 -0
- package/skills/adia-dogfood/references/native-leak-annotations.md +73 -0
- package/skills/adia-dogfood/references/visual-probe-triage.md +80 -0
- package/skills/{adia-ui-dogfood → adia-dogfood}/scripts/analyze.mjs +30 -14
- package/skills/adia-gen-review/SKILL.md +127 -0
- package/skills/adia-gen-review/references/corpus-html-patterns.md +279 -0
- package/skills/adia-gen-review/references/loop-protocol.md +216 -0
- package/skills/adia-gen-review/references/rubric-cosmetic.md +100 -0
- package/skills/adia-gen-review/references/rubric-decompose.md +101 -0
- package/skills/adia-gen-review/references/rubric-score.md +214 -0
- package/skills/{adia-ui-gen-review → adia-gen-review}/references/scores.schema.json +2 -2
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-coverage-audit.mjs +4 -4
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-decompose.mjs +10 -6
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-status.mjs +5 -5
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/validate-cycle-scores.mjs +5 -5
- package/skills/adia-llm-internals/SKILL.md +77 -0
- package/skills/{adia-ui-llm → adia-llm-internals}/references/adapter-contract.md +4 -2
- package/skills/{adia-ui-llm → adia-llm-internals}/references/add-a-provider.md +4 -5
- package/skills/{adia-ui-llm → adia-llm-internals}/references/bridge-facade.md +10 -3
- package/skills/{adia-ui-llm → adia-llm-internals}/references/browser-proxy-boundary.md +1 -1
- package/skills/{adia-ui-llm → adia-llm-internals}/references/model-registry.md +5 -3
- package/skills/{adia-ui-llm → adia-llm-internals}/references/streaming-sse.md +2 -2
- package/skills/adia-release/SKILL.md +72 -0
- package/skills/adia-release/references/changelog-discipline.md +119 -0
- package/skills/adia-release/references/cut-procedure.md +247 -0
- package/skills/adia-release/references/gates-catalog.md +222 -0
- package/skills/adia-release/references/independent-package-release.md +52 -0
- package/skills/adia-release/references/migration-guide-authoring.md +86 -0
- package/skills/adia-release/references/notes-authoring.md +90 -0
- package/skills/adia-release/references/recovery-paths.md +106 -0
- package/skills/{adia-ui-release → adia-release}/scripts/bump.mjs +28 -3
- package/skills/{adia-ui-release → adia-release}/scripts/dispatch-publish.mjs +10 -7
- package/skills/{adia-ui-release → adia-release}/scripts/insert-stub.mjs +1 -1
- package/skills/{adia-ui-release → adia-release}/scripts/package-paths.mjs +6 -0
- package/skills/{adia-ui-release → adia-release}/scripts/promote-unreleased.mjs +1 -1
- package/skills/{adia-ui-release → adia-release}/scripts/release-pack.mjs +38 -31
- package/skills/{adia-ui-release → adia-release}/scripts/tag-lockstep.mjs +7 -3
- package/skills/adia-site-docs/SKILL.md +68 -0
- package/skills/adia-site-docs/evals/audit-report.md +30 -0
- package/skills/adia-site-docs/evals/routing-corpus.json +176 -0
- package/skills/adia-site-docs/intent.md +72 -0
- package/agents/README.md +0 -209
- package/agents/author.md +0 -56
- package/agents/repo-steward.md +0 -56
- package/agents/spec-architect.md +0 -53
- package/agents/tech-lead.md +0 -57
- package/agents/verifier.md +0 -55
- package/bin/lib/audit-axes.mjs +0 -555
- package/bin/lib/dry-run-irreversible.mjs +0 -236
- package/bin/lib/run-skill-evals.mjs +0 -487
- package/bin/lib/teach-router.mjs +0 -250
- package/commands/adia-forge-a2ui.md +0 -10
- package/commands/adia-forge-author.md +0 -10
- package/commands/adia-forge-dogfood.md +0 -8
- package/commands/adia-forge-llm.md +0 -8
- package/commands/adia-forge-orient.md +0 -10
- package/commands/adia-forge-release.md +0 -8
- package/commands/adia-forge-review.md +0 -10
- package/references/shared/pev-rationale.md +0 -64
- package/references/shared/skill-conventions.md +0 -133
- package/skills/adia-ui-a2ui/CHANGELOG.md +0 -32
- package/skills/adia-ui-a2ui/SKILL.md +0 -243
- package/skills/adia-ui-a2ui/evals/adversarial-corpus.json +0 -75
- package/skills/adia-ui-a2ui/evals/teach-routing-cases.json +0 -100
- package/skills/adia-ui-a2ui/references/anti-patterns.md +0 -24
- package/skills/adia-ui-a2ui/references/chunk-authoring.md +0 -88
- package/skills/adia-ui-a2ui/references/corpus-discipline.md +0 -56
- package/skills/adia-ui-a2ui/references/eval-diagnostics.md +0 -127
- package/skills/adia-ui-a2ui/references/fragment-graph.md +0 -91
- package/skills/adia-ui-a2ui/references/mcp-pipeline-ops.md +0 -106
- package/skills/adia-ui-a2ui/references/mcp-tool-reference.md +0 -398
- package/skills/adia-ui-a2ui/references/pipeline-overview.md +0 -175
- package/skills/adia-ui-a2ui/references/semantic-fail-lifting.md +0 -120
- package/skills/adia-ui-a2ui/references/strategy-engines.md +0 -111
- package/skills/adia-ui-a2ui/references/teach-protocol.md +0 -220
- package/skills/adia-ui-a2ui/references/zettel-calibration.md +0 -93
- package/skills/adia-ui-a2ui/scripts/audit-a2ui-roster.mjs +0 -96
- package/skills/adia-ui-a2ui/scripts/teach-route.mjs +0 -157
- package/skills/adia-ui-a2ui/skill.json +0 -38
- package/skills/adia-ui-authoring/CHANGELOG.md +0 -32
- package/skills/adia-ui-authoring/SKILL.md +0 -256
- package/skills/adia-ui-authoring/assets/case-studies/admin-shell-decomposition.md +0 -101
- package/skills/adia-ui-authoring/assets/case-studies/maxtokens-32768-discovery.md +0 -109
- package/skills/adia-ui-authoring/assets/case-studies/theme-panel-promotion.md +0 -113
- package/skills/adia-ui-authoring/evals/adversarial-design-plan-gates.json +0 -138
- package/skills/adia-ui-authoring/evals/routing-corpus.json +0 -245
- package/skills/adia-ui-authoring/references/canonical-pattern-index.md +0 -179
- package/skills/adia-ui-authoring/references/common-gotchas.md +0 -93
- package/skills/adia-ui-authoring/references/composite-demo-protocol.md +0 -1084
- package/skills/adia-ui-authoring/references/teach-protocol.md +0 -428
- package/skills/adia-ui-authoring/scripts/audit-authoring-roster.mjs +0 -148
- package/skills/adia-ui-authoring/skill.json +0 -45
- package/skills/adia-ui-dogfood/CHANGELOG.md +0 -17
- package/skills/adia-ui-dogfood/README.md +0 -62
- package/skills/adia-ui-dogfood/SKILL.md +0 -866
- package/skills/adia-ui-dogfood/skill.json +0 -40
- package/skills/adia-ui-forge/SKILL.md +0 -88
- package/skills/adia-ui-forge/evals/routing-corpus.json +0 -30
- package/skills/adia-ui-gen-review/CHANGELOG.md +0 -108
- package/skills/adia-ui-gen-review/SKILL.md +0 -266
- package/skills/adia-ui-gen-review/references/loop-protocol.md +0 -712
- package/skills/adia-ui-gen-review/references/rubric-cosmetic.md +0 -144
- package/skills/adia-ui-gen-review/references/rubric-decompose.md +0 -117
- package/skills/adia-ui-gen-review/references/rubric-score.md +0 -249
- package/skills/adia-ui-gen-review/references/teach-protocol.md +0 -214
- package/skills/adia-ui-gen-review/skill.json +0 -23
- package/skills/adia-ui-llm/CHANGELOG.md +0 -25
- package/skills/adia-ui-llm/SKILL.md +0 -165
- package/skills/adia-ui-llm/evals/adversarial-corpus.json +0 -75
- package/skills/adia-ui-llm/evals/routing-corpus.json +0 -30
- package/skills/adia-ui-llm/evals/teach-routing-cases.json +0 -73
- package/skills/adia-ui-llm/references/teach-protocol.md +0 -78
- package/skills/adia-ui-llm/scripts/audit-llm-roster.mjs +0 -93
- package/skills/adia-ui-llm/scripts/teach-route.mjs +0 -119
- package/skills/adia-ui-llm/skill.json +0 -33
- package/skills/adia-ui-ops/CHANGELOG.md +0 -291
- package/skills/adia-ui-ops/SKILL.md +0 -401
- package/skills/adia-ui-ops/references/INDEX.md +0 -158
- package/skills/adia-ui-ops/references/audit-cadence.md +0 -263
- package/skills/adia-ui-ops/references/audit-patterns/archive-link-sweep.md +0 -96
- package/skills/adia-ui-ops/references/audit-patterns/audit-history-ledger.md +0 -162
- package/skills/adia-ui-ops/references/audit-patterns/browser-bundle-node-imports.md +0 -154
- package/skills/adia-ui-ops/references/audit-patterns/changelog-unreleased-bloat.md +0 -75
- package/skills/adia-ui-ops/references/audit-patterns/coverage-gaps.md +0 -187
- package/skills/adia-ui-ops/references/audit-patterns/entry-file-coverage.md +0 -122
- package/skills/adia-ui-ops/references/audit-patterns/format-hygiene.md +0 -217
- package/skills/adia-ui-ops/references/audit-patterns/lockstep-versioning.md +0 -113
- package/skills/adia-ui-ops/references/audit-patterns/memory-fragmentation.md +0 -180
- package/skills/adia-ui-ops/references/audit-patterns/orphan-detection.md +0 -202
- package/skills/adia-ui-ops/references/audit-patterns/pointer-validation.md +0 -180
- package/skills/adia-ui-ops/references/audit-patterns/redundancy-detection.md +0 -210
- package/skills/adia-ui-ops/references/audit-patterns/spec-dating-sweep.md +0 -91
- package/skills/adia-ui-ops/references/audit-patterns/stale-content.md +0 -182
- package/skills/adia-ui-ops/references/audit-patterns/staleness-tooling.md +0 -156
- package/skills/adia-ui-ops/references/audit-patterns/token-waste-detection.md +0 -196
- package/skills/adia-ui-ops/references/doc-types/adr-pattern.md +0 -210
- package/skills/adia-ui-ops/references/doc-types/architecture-md.md +0 -190
- package/skills/adia-ui-ops/references/doc-types/changelog.md +0 -183
- package/skills/adia-ui-ops/references/doc-types/decisions-log.md +0 -146
- package/skills/adia-ui-ops/references/doc-types/plan-roadmap.md +0 -182
- package/skills/adia-ui-ops/references/doc-types/postmortem-pattern.md +0 -206
- package/skills/adia-ui-ops/references/genres/prose-and-writing.md +0 -149
- package/skills/adia-ui-ops/references/guidance/context-budget.md +0 -137
- package/skills/adia-ui-ops/references/guidance/llm-doc-writing.md +0 -116
- package/skills/adia-ui-ops/references/guidance/reliability-dial.md +0 -186
- package/skills/adia-ui-ops/references/recipes/adr-introduction.md +0 -211
- package/skills/adia-ui-ops/references/recipes/audit-existing-repo.md +0 -234
- package/skills/adia-ui-ops/references/recipes/cold-start-harvest.md +0 -263
- package/skills/adia-ui-ops/references/recipes/concurrent-learnings-merge.md +0 -158
- package/skills/adia-ui-ops/references/recipes/continuous-learning-loop.md +0 -169
- package/skills/adia-ui-ops/references/recipes/external-reference-verification.md +0 -158
- package/skills/adia-ui-ops/references/recipes/findings-index-readout.md +0 -126
- package/skills/adia-ui-ops/references/recipes/greenfield-setup.md +0 -252
- package/skills/adia-ui-ops/references/recipes/harvest-repo-brain.md +0 -169
- package/skills/adia-ui-ops/references/recipes/import-repo-brain-harvest.md +0 -153
- package/skills/adia-ui-ops/references/recipes/memory-organization.md +0 -182
- package/skills/adia-ui-ops/references/recipes/recommend-then-validate.md +0 -199
- package/skills/adia-ui-ops/references/recipes/self-healing-hooks.md +0 -366
- package/skills/adia-ui-ops/references/recipes/skill-stewardship-loop.md +0 -113
- package/skills/adia-ui-ops/references/standards/agents-md-spec.md +0 -138
- package/skills/adia-ui-ops/references/standards/claude-md-convention.md +0 -123
- package/skills/adia-ui-ops/references/standards/cross-tool-matrix.md +0 -85
- package/skills/adia-ui-ops/references/standards/readme-conventions.md +0 -232
- package/skills/adia-ui-ops/references/teach-protocol.md +0 -215
- package/skills/adia-ui-ops/scripts/audit-ops-roster.mjs +0 -104
- package/skills/adia-ui-ops/skill.json +0 -65
- package/skills/adia-ui-release/CHANGELOG.md +0 -66
- package/skills/adia-ui-release/SKILL.md +0 -323
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-batch-push-v0.6.14-v0.6.15.md +0 -144
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-corpus-drift-remediation-v0.6.15.md +0 -155
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-version-skip-correction-v0.6.12.md +0 -114
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-author-from-scratch-v0.6.18.md +0 -139
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-feedback37-retraction-v0.6.21.md +0 -124
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-fn1-enrichment-pass-v0.6.19.md +0 -125
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-stale-test-detection-v0.6.20.md +0 -142
- package/skills/adia-ui-release/assets/case-studies/2026-05-23-freshness-gate-recovery-v0.6.32.md +0 -97
- package/skills/adia-ui-release/assets/case-studies/2026-05-26-catalog-drift-recurring-v0.6.40.md +0 -147
- package/skills/adia-ui-release/assets/templates/stub-changelog.template.md +0 -22
- package/skills/adia-ui-release/evals/evals.json +0 -164
- package/skills/adia-ui-release/references/changelog-discipline.md +0 -250
- package/skills/adia-ui-release/references/cycle-happy-path.md +0 -520
- package/skills/adia-ui-release/references/exe-deploy.md +0 -149
- package/skills/adia-ui-release/references/gates-catalog.md +0 -778
- package/skills/adia-ui-release/references/independent-package-release.md +0 -129
- package/skills/adia-ui-release/references/ledger-discipline.md +0 -232
- package/skills/adia-ui-release/references/migration-guide-authoring.md +0 -174
- package/skills/adia-ui-release/references/multi-agent-baseline.md +0 -207
- package/skills/adia-ui-release/references/notes-authoring.md +0 -212
- package/skills/adia-ui-release/references/recovery-paths.md +0 -262
- package/skills/adia-ui-release/references/rollup-notes.md +0 -208
- package/skills/adia-ui-release/references/teach-protocol.md +0 -468
- package/skills/adia-ui-release/scripts/audit-gate-roster.mjs +0 -196
- package/skills/adia-ui-release/scripts/make-ledger.mjs +0 -200
- package/skills/adia-ui-release/skill.json +0 -77
- package/skills/dogfood-sweep/CHANGELOG.md +0 -37
- package/skills/dogfood-sweep/README.md +0 -105
- package/skills/dogfood-sweep/SKILL.md +0 -1000
- package/skills/dogfood-sweep/analyze.mjs +0 -600
- package/skills/dogfood-sweep/skill.json +0 -31
- /package/skills/{adia-ui-authoring → adia-author}/references/api-contract.md +0 -0
- /package/skills/{adia-ui-release → adia-release}/scripts/assert-monorepo-root.mjs +0 -0
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// make-ledger.mjs — author .brain/audit-history/YYYY-MM-DD-release-vX.Y.Z.json
|
|
3
|
-
// from git state + cycle-specific notes.
|
|
4
|
-
//
|
|
5
|
-
// Reads:
|
|
6
|
-
// - the current git HEAD (release_commit + tag_commit if same)
|
|
7
|
-
// - the 10 tags for the given version (collected from `git tag`)
|
|
8
|
-
// - the recent gate-run output (passed via --verification-file or
|
|
9
|
-
// --verification-json or computed best-effort from `npm run check:lockstep`)
|
|
10
|
-
//
|
|
11
|
-
// Writes:
|
|
12
|
-
// - .brain/audit-history/YYYY-MM-DD-release-vX.Y.Z.json
|
|
13
|
-
//
|
|
14
|
-
// Usage:
|
|
15
|
-
// node make-ledger.mjs --version 0.6.22 --date 2026-05-22 \
|
|
16
|
-
// --summary "9-package lockstep PATCH cut. Substantive: ..." \
|
|
17
|
-
// --kind release-cut
|
|
18
|
-
// node make-ledger.mjs --version 0.6.22 --date 2026-05-22 --kind batch-push \
|
|
19
|
-
// --versions 0.6.21,0.6.22 --summary "..."
|
|
20
|
-
//
|
|
21
|
-
// Optional flags:
|
|
22
|
-
// --tag-commit <sha> (default: HEAD)
|
|
23
|
-
// --release-commit <sha> (default: tag-commit)
|
|
24
|
-
// --scope <key=value,...> shorthand for the .scope.{key} block
|
|
25
|
-
// --note "<text>" append to .notes array; repeatable
|
|
26
|
-
// --interactive prompt for missing required fields
|
|
27
|
-
// --dry print to stdout without writing
|
|
28
|
-
//
|
|
29
|
-
// Phase 3 of the adia-ui-release skill. Mechanizes the per-cycle ledger
|
|
30
|
-
// authoring used at Step 11 of cycle-happy-path.
|
|
31
|
-
|
|
32
|
-
import fs from 'node:fs';
|
|
33
|
-
import path from 'node:path';
|
|
34
|
-
import { execSync } from 'node:child_process';
|
|
35
|
-
import process from 'node:process';
|
|
36
|
-
import { assertMonorepoRoot } from './assert-monorepo-root.mjs';
|
|
37
|
-
|
|
38
|
-
function parseArgs(argv) {
|
|
39
|
-
const args = {
|
|
40
|
-
version: null,
|
|
41
|
-
date: null,
|
|
42
|
-
kind: 'release-cut',
|
|
43
|
-
summary: null,
|
|
44
|
-
versions: null,
|
|
45
|
-
tagCommit: null,
|
|
46
|
-
releaseCommit: null,
|
|
47
|
-
scope: {},
|
|
48
|
-
notes: [],
|
|
49
|
-
dry: false,
|
|
50
|
-
repo: process.cwd(),
|
|
51
|
-
repoSlug: '<org>/<repo>',
|
|
52
|
-
};
|
|
53
|
-
for (let i = 0; i < argv.length; i++) {
|
|
54
|
-
const k = argv[i];
|
|
55
|
-
if (k === '--version') args.version = argv[++i];
|
|
56
|
-
else if (k === '--date') args.date = argv[++i];
|
|
57
|
-
else if (k === '--kind') args.kind = argv[++i];
|
|
58
|
-
else if (k === '--summary') args.summary = argv[++i];
|
|
59
|
-
else if (k === '--versions') args.versions = argv[++i].split(',');
|
|
60
|
-
else if (k === '--tag-commit') args.tagCommit = argv[++i];
|
|
61
|
-
else if (k === '--release-commit') args.releaseCommit = argv[++i];
|
|
62
|
-
else if (k === '--scope') {
|
|
63
|
-
const pairs = argv[++i].split(',');
|
|
64
|
-
for (const p of pairs) {
|
|
65
|
-
const [key, ...val] = p.split('=');
|
|
66
|
-
args.scope[key] = val.join('=');
|
|
67
|
-
}
|
|
68
|
-
} else if (k === '--note') args.notes.push(argv[++i]);
|
|
69
|
-
else if (k === '--dry') args.dry = true;
|
|
70
|
-
else if (k === '--repo') args.repo = argv[++i];
|
|
71
|
-
else if (k === '--repo-slug') args.repoSlug = argv[++i];
|
|
72
|
-
else if (k === '-h' || k === '--help') {
|
|
73
|
-
console.log('Usage: node make-ledger.mjs --version X.Y.Z --date YYYY-MM-DD --summary "..." [--kind release-cut|batch-push|p1-hotfix] [--repo-slug <org>/<repo>] [--tag-commit <sha>] [--release-commit <sha>] [--scope key=val,...] [--note "..."] [--dry]');
|
|
74
|
-
process.exit(0);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (!args.version || !args.date || !args.summary) {
|
|
78
|
-
console.error('error: --version, --date, --summary all required');
|
|
79
|
-
process.exit(2);
|
|
80
|
-
}
|
|
81
|
-
// Fail-fast guard: refuse to run git against a non-monorepo directory.
|
|
82
|
-
assertMonorepoRoot(args.repo);
|
|
83
|
-
if (!args.tagCommit) {
|
|
84
|
-
args.tagCommit = execSync(`git -C "${args.repo}" rev-parse HEAD`).toString().trim();
|
|
85
|
-
}
|
|
86
|
-
if (!args.releaseCommit) args.releaseCommit = args.tagCommit;
|
|
87
|
-
// Auto-fill repoSlug from the git remote when not explicitly passed — avoids the
|
|
88
|
-
// '<org>/<repo>' placeholder shipping in the ledger (CodeRabbit-flagged on the
|
|
89
|
-
// v0.7.17 cut). Falls back to the placeholder if there's no origin remote.
|
|
90
|
-
if (args.repoSlug === '<org>/<repo>') {
|
|
91
|
-
try {
|
|
92
|
-
const url = execSync(`git -C "${args.repo}" remote get-url origin`).toString().trim();
|
|
93
|
-
const m = url.match(/[:/]([^/]+\/[^/]+?)(?:\.git)?\/?$/);
|
|
94
|
-
if (m) args.repoSlug = m[1];
|
|
95
|
-
} catch { /* no remote — leave the placeholder */ }
|
|
96
|
-
}
|
|
97
|
-
return args;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function collectTags(repo, version) {
|
|
101
|
-
const out = execSync(`git -C "${repo}" tag --list 'v${version}' '*-v${version}'`).toString().trim();
|
|
102
|
-
return out.split('\n').filter(Boolean).sort();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function buildLedger(args) {
|
|
106
|
-
const isBatch = args.kind === 'batch-push';
|
|
107
|
-
const allTags = isBatch && args.versions
|
|
108
|
-
? args.versions.flatMap((v) => collectTags(args.repo, v))
|
|
109
|
-
: collectTags(args.repo, args.version);
|
|
110
|
-
|
|
111
|
-
const ledger = {
|
|
112
|
-
kind: args.kind,
|
|
113
|
-
audit_id: `${args.date}-${args.kind}-v${args.version}`,
|
|
114
|
-
repo: args.repoSlug,
|
|
115
|
-
released_at: args.date,
|
|
116
|
-
version: args.version,
|
|
117
|
-
release_type: 'PATCH',
|
|
118
|
-
summary: args.summary,
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
if (Object.keys(args.scope).length > 0) ledger.scope = args.scope;
|
|
122
|
-
if (isBatch && args.versions) {
|
|
123
|
-
ledger.versions = args.versions;
|
|
124
|
-
ledger.tag_commits = {};
|
|
125
|
-
for (const v of args.versions) {
|
|
126
|
-
const tag = `v${v}`;
|
|
127
|
-
try {
|
|
128
|
-
ledger.tag_commits[tag] = execSync(`git -C "${args.repo}" rev-parse ${tag}`).toString().trim();
|
|
129
|
-
} catch {
|
|
130
|
-
ledger.tag_commits[tag] = '<missing — tag not found>';
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
} else {
|
|
134
|
-
ledger.release_commit = args.releaseCommit;
|
|
135
|
-
ledger.tag_commit = args.tagCommit;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
ledger.tags = allTags;
|
|
139
|
-
ledger.verification = {
|
|
140
|
-
note: 'TODO: paste gate-by-gate summary here. See ledger-discipline.md § canonical schema.',
|
|
141
|
-
};
|
|
142
|
-
ledger.publish_workflows = {
|
|
143
|
-
dispatched: 'TODO: dispatch method (per-package tag-push, one-at-a-time / gh workflow run)',
|
|
144
|
-
conclusions: '9/9 success',
|
|
145
|
-
};
|
|
146
|
-
ledger.notes = args.notes.length > 0 ? args.notes : ['TODO: at least one note per cycle.'];
|
|
147
|
-
|
|
148
|
-
return ledger;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function writeOrPrint(ledger, args) {
|
|
152
|
-
const filename = `${ledger.audit_id}.json`;
|
|
153
|
-
const target = path.join(args.repo, '.brain', 'audit-history', filename);
|
|
154
|
-
const content = JSON.stringify(ledger, null, 2) + '\n';
|
|
155
|
-
|
|
156
|
-
if (args.dry) {
|
|
157
|
-
console.log(`[dry] would write to: ${target}`);
|
|
158
|
-
console.log('---');
|
|
159
|
-
console.log(content);
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
164
|
-
if (fs.existsSync(target)) {
|
|
165
|
-
console.error(`error: ${target} already exists. Use --dry to preview or remove it manually.`);
|
|
166
|
-
process.exit(1);
|
|
167
|
-
}
|
|
168
|
-
fs.writeFileSync(target, content);
|
|
169
|
-
console.log(`[make-ledger] wrote ${target}`);
|
|
170
|
-
// Nudge: the gate summary + notes can't be auto-derived — warn if TODO stubs
|
|
171
|
-
// would ship (the v0.7.17 ledger shipped with these; CodeRabbit-flagged).
|
|
172
|
-
const stubs = [];
|
|
173
|
-
if (/TODO/.test(ledger.verification?.note || '')) stubs.push('verification');
|
|
174
|
-
if (/TODO/.test(ledger.publish_workflows?.dispatched || '')) stubs.push('publish_workflows.dispatched');
|
|
175
|
-
if ((ledger.notes || []).some((n) => /TODO/.test(n))) stubs.push('notes');
|
|
176
|
-
if (ledger.repo === '<org>/<repo>') stubs.push('repo');
|
|
177
|
-
if (stubs.length) {
|
|
178
|
-
console.warn(`\n⚠ [make-ledger] ${stubs.length} field(s) still placeholder — FILL before committing: ${stubs.join(', ')}`);
|
|
179
|
-
console.warn(` (repo auto-fills from the git remote; pass --note "..." + hand-edit verification / publish_workflows)`);
|
|
180
|
-
}
|
|
181
|
-
console.log(`\n[next] verify the ledger:`);
|
|
182
|
-
console.log(` cat ${target} | jq .`);
|
|
183
|
-
console.log(`\n[next] commit + push:`);
|
|
184
|
-
console.log(` git add ${target}`);
|
|
185
|
-
console.log(` git commit -m "chore(audit-history): v${ledger.version} release ledger"`);
|
|
186
|
-
console.log(` git push origin main`);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function main() {
|
|
190
|
-
const args = parseArgs(process.argv.slice(2));
|
|
191
|
-
const ledger = buildLedger(args);
|
|
192
|
-
writeOrPrint(ledger, args);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
main();
|
|
197
|
-
} catch (e) {
|
|
198
|
-
console.error(`error: ${e.message}`);
|
|
199
|
-
process.exit(1);
|
|
200
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "adia-ui-release",
|
|
3
|
-
"version": "0.2.2",
|
|
4
|
-
"description": "Release engineer for an @adia-ai-style lockstep monorepo. Cuts, tags, publishes, deploys, authors release notes + audit-history ledgers \u2014 AND authors the MIGRATION GUIDE when a cut breaks an API (the producer side of migrations, folded in from the former adia-ui-migration skill). Also ships an INDEPENDENT-PACKAGE (class-B) release path for packages versioned independently of the lockstep set (excluded from the lockstep gate, no umbrella tag, no demo-site deploy \u2014 e.g. plugins). Use whenever the user wants to CUT A RELEASE / SHIP A VERSION / PUBLISH PACKAGES / BATCH-PUSH ACCUMULATED RELEASES / RECOVER FROM A VERSION-SKIP / WRITE RELEASE NOTES / PROMOTE [UNRELEASED] CHANGELOG / AUTHOR A MIGRATION GUIDE FOR A BREAKING CUT / SHIP AN INDEPENDENTLY-VERSIONED PACKAGE OR PLUGIN. Triggers on \"cut vX.Y.Z\", \"initiate a release\", \"publish the npm packages\", \"tag this commit and push the release\", \"batch push\", \"F-N1 warned\", \"GitHub release notes\", \"promote unreleased\", \"version skip recovery\", \"verify pre-flight gates\", \"the cycle just shipped \u2014 write up what happened\", \"author a migration guide / write the migration recipe for this breaking change\", \"release the plugin / ship an independently-versioned package / publish a package outside the lockstep\". VERIFICATION is load-bearing: every cut verifies against reality (npm registry + production endpoint + GH release), not self-checks. Carries the portable release DISCIPLINE with the @adia-ai monorepo's 9-package lockstep + demo-site deploy as the clearly-labeled worked example. Does NOT trigger for: the CONSUMER side of migration (sweeping a downstream app \u2014 the separate consumer/app-author plugin), long-running VM ops (provision/restart/key rotation), authoring new code, or generation-pipeline work.",
|
|
5
|
-
"status": "stable",
|
|
6
|
-
"authors": [
|
|
7
|
-
"kim.granlund"
|
|
8
|
-
],
|
|
9
|
-
"tags": [
|
|
10
|
-
"adia-ui",
|
|
11
|
-
"release",
|
|
12
|
-
"publish",
|
|
13
|
-
"lockstep",
|
|
14
|
-
"release-notes",
|
|
15
|
-
"migration-guide",
|
|
16
|
-
"producer-side"
|
|
17
|
-
],
|
|
18
|
-
"environment": {
|
|
19
|
-
"portable": false,
|
|
20
|
-
"requires": [
|
|
21
|
-
"an @adia-ai-style lockstep monorepo: @adia-ai/* packages under packages/* that version + publish together, with per-package CHANGELOG.md, a release trip-wire, and a publish-workflow per package"
|
|
22
|
-
],
|
|
23
|
-
"rationale": "The skill mutates a real monorepo (commits, tags, lockfiles) and triggers real package publishes; the gate roster, deploy target, and ledger paths are substrate-bound. The DISCIPLINE generalizes to any @adia-ai-style lockstep monorepo, but the worked example (9-package lockstep, ui-kit.exe.xyz deploy) is the @adia-ai monorepo specifically."
|
|
24
|
-
},
|
|
25
|
-
"files": [
|
|
26
|
-
"SKILL.md",
|
|
27
|
-
"skill.json",
|
|
28
|
-
"CHANGELOG.md",
|
|
29
|
-
"references/cycle-happy-path.md",
|
|
30
|
-
"references/multi-agent-baseline.md",
|
|
31
|
-
"references/gates-catalog.md",
|
|
32
|
-
"references/recovery-paths.md",
|
|
33
|
-
"references/changelog-discipline.md",
|
|
34
|
-
"references/notes-authoring.md",
|
|
35
|
-
"references/rollup-notes.md",
|
|
36
|
-
"references/exe-deploy.md",
|
|
37
|
-
"references/ledger-discipline.md",
|
|
38
|
-
"references/migration-guide-authoring.md",
|
|
39
|
-
"references/independent-package-release.md",
|
|
40
|
-
"references/teach-protocol.md",
|
|
41
|
-
"scripts/bump.mjs",
|
|
42
|
-
"scripts/promote-unreleased.mjs",
|
|
43
|
-
"scripts/insert-stub.mjs",
|
|
44
|
-
"scripts/package-paths.mjs",
|
|
45
|
-
"scripts/tag-lockstep.mjs",
|
|
46
|
-
"scripts/dispatch-publish.mjs",
|
|
47
|
-
"scripts/make-ledger.mjs",
|
|
48
|
-
"scripts/release-pack.mjs",
|
|
49
|
-
"scripts/audit-gate-roster.mjs",
|
|
50
|
-
"assets/templates/stub-changelog.template.md",
|
|
51
|
-
"assets/case-studies/2026-05-20-version-skip-correction-v0.6.12.md",
|
|
52
|
-
"assets/case-studies/2026-05-20-batch-push-v0.6.14-v0.6.15.md",
|
|
53
|
-
"assets/case-studies/2026-05-20-corpus-drift-remediation-v0.6.15.md",
|
|
54
|
-
"assets/case-studies/2026-05-21-author-from-scratch-v0.6.18.md",
|
|
55
|
-
"assets/case-studies/2026-05-21-fn1-enrichment-pass-v0.6.19.md",
|
|
56
|
-
"assets/case-studies/2026-05-21-stale-test-detection-v0.6.20.md",
|
|
57
|
-
"assets/case-studies/2026-05-21-feedback37-retraction-v0.6.21.md",
|
|
58
|
-
"assets/case-studies/2026-05-23-freshness-gate-recovery-v0.6.32.md",
|
|
59
|
-
"assets/case-studies/2026-05-26-catalog-drift-recurring-v0.6.40.md",
|
|
60
|
-
"evals/evals.json"
|
|
61
|
-
],
|
|
62
|
-
"peer_skills": [
|
|
63
|
-
"adia-ui-authoring",
|
|
64
|
-
"adia-ui-a2ui",
|
|
65
|
-
"adia-ui-dogfood",
|
|
66
|
-
"ops-postmortem"
|
|
67
|
-
],
|
|
68
|
-
"absorbs": [
|
|
69
|
-
"adia-ui-migration \u2014 DONE: producer side folded in as references/migration-guide-authoring.md + mode 11 (\u00a7MigrationGuideAuthoring). The consumer side stays in the separate consumer/app-author plugin.",
|
|
70
|
-
"release-publish / release-notes / verification-sweep \u2014 DONE in the source skill: consolidated into modes 1/3/4 (cut), 5/9 (notes), 6 (verify)."
|
|
71
|
-
],
|
|
72
|
-
"references": [
|
|
73
|
-
"adia-ui-a2ui \u2014 corpus-freshness checks route there for remediation (verify:corpus / embeddings drift)",
|
|
74
|
-
"adia-ui-dogfood \u2014 the static-HTML probes (native-primitive-leak, shell-composition) whose findings fold into release notes",
|
|
75
|
-
"ops-postmortem \u2014 incident genre during post-publish recovery (mode 7)"
|
|
76
|
-
]
|
|
77
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Changelog — dogfood-sweep
|
|
2
|
-
|
|
3
|
-
## [0.1.0] stable — 2026-05-24
|
|
4
|
-
|
|
5
|
-
**MINOR** — first versioned cut. Adds `skill.json` + `CHANGELOG.md` to bring
|
|
6
|
-
the skill into rollup-family conventions (per META-REFACTOR-SPEC Round 0).
|
|
7
|
-
No procedural changes to the 6 modes.
|
|
8
|
-
|
|
9
|
-
The skill is otherwise unchanged: SKILL.md still carries all 6 modes inline
|
|
10
|
-
(component visual probe / app-shell QA / HTML typo sweep / native-primitive
|
|
11
|
-
leak / admin-shell composition / component anatomy + card header). The
|
|
12
|
-
inversion to `references/mode-N-*.md` is Round 2+ work per the per-skill
|
|
13
|
-
REFACTOR-SPEC at `docs/REFACTOR-SPEC.md`.
|
|
14
|
-
|
|
15
|
-
### Reconstructed history (pre-v0.1.0)
|
|
16
|
-
|
|
17
|
-
- **2026-05-04** — Added probe #6 (missing component CSS detection) to mode 1
|
|
18
|
-
after the swap-to-primitive-but-forget-the-link class slipped past a real
|
|
19
|
-
PR. The bug class: agent uses `<button-ui>` markup but forgets the
|
|
20
|
-
`<link rel="stylesheet">` for the button component CSS; element registers,
|
|
21
|
-
markup looks right, listbox renders unstyled.
|
|
22
|
-
|
|
23
|
-
- **post-§3 commit** — Native-primitive-leak audit (mode 4) intent-marker
|
|
24
|
-
detection window widened from 80 → 200 chars after a peer agent found that
|
|
25
|
-
realistic preceding-line comments (indent + comment prefix + reason text +
|
|
26
|
-
closing `-->` + newline) sat at exactly the 80-char boundary and were not
|
|
27
|
-
detected.
|
|
28
|
-
|
|
29
|
-
- **v2.27.4-era** — Mode 6 (Component Anatomy + Card Header Sweep) added per
|
|
30
|
-
FB-52 §11: card-ui `<header><div>` wrapper anti-pattern + missing anatomy
|
|
31
|
-
sections per `anatomy-sweep.mjs` expectations.
|
|
32
|
-
|
|
33
|
-
- **Pre-versioned origin** — Mode 1 (component visual probe via Chromium)
|
|
34
|
-
authored as the initial skill. Modes 2–5 absorbed from substrate-side
|
|
35
|
-
`scripts/dev/audit-*.mjs` work over multiple cycles. The skill grew its
|
|
36
|
-
6-mode catalog organically; this v0.1.0 cut is the first time the manifest
|
|
37
|
-
reflects the actual content.
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Dogfooding analyzer
|
|
2
|
-
|
|
3
|
-
Walks every `/site/components/*` demo page in headless Chromium and runs
|
|
4
|
-
visual-correctness probes that type-checks and tests don't catch:
|
|
5
|
-
|
|
6
|
-
| # | Probe | Bug class it detects |
|
|
7
|
-
|---|-------|----------------------|
|
|
8
|
-
| 1 | Zero-area | Element collapsed (parent `display:none`, toolbar overflow spilled it, layout glitch) |
|
|
9
|
-
| 2 | Transparent fill | `[data-swatch]` / variant pill / button / chart indicator whose computed bg is `rgba(0,0,0,0)` — fallback token doesn't resolve (the chart-legend `--chart-N` class) |
|
|
10
|
-
| 3 | Empty control | `input-ui` / `search-ui` / `button-ui` / `select-ui` / `tag-ui` whose `connected()` should have stamped internals but didn't |
|
|
11
|
-
| 4 | Synonym-attr / synonym-slot drift | Markers from `docs/conventions/attribute-api-migration.md` (`avatar-ui[name]`, `grid-ui[cols]`, `card-ui [slot=meta]`, etc.) |
|
|
12
|
-
| 5 | Alert flex-row | `alert-ui` with multiple bare `<text-ui>` children (need `<col-ui slot="content">` wrap) |
|
|
13
|
-
| 6 | Console | Every `console.error` + `console.warn` during page load + 800ms settling |
|
|
14
|
-
|
|
15
|
-
Output: severity-ranked markdown report at
|
|
16
|
-
`docs/reports/dogfooding-YYYY-MM-DD.md`.
|
|
17
|
-
|
|
18
|
-
## Run locally
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
# Terminal 1
|
|
22
|
-
npm run dev
|
|
23
|
-
|
|
24
|
-
# Terminal 2
|
|
25
|
-
node .agents/skills/dogfood-sweep/analyze.mjs # full sweep (~82 pages)
|
|
26
|
-
node .agents/skills/dogfood-sweep/analyze.mjs --filter chart-legend # one page
|
|
27
|
-
node .agents/skills/dogfood-sweep/analyze.mjs --port 5174 # custom port
|
|
28
|
-
node .agents/skills/dogfood-sweep/analyze.mjs --out /tmp/r.md # custom path
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Exit code: **1** if any **critical** findings, **0** otherwise. CI-friendly.
|
|
32
|
-
|
|
33
|
-
## Schedule as a remote agent
|
|
34
|
-
|
|
35
|
-
The script is the data gatherer. The remote agent wraps it with git
|
|
36
|
-
orchestration: clone repo, start dev server, run script, triage findings,
|
|
37
|
-
commit/PR.
|
|
38
|
-
|
|
39
|
-
Agent prompt (use `/schedule` skill to register; weekly cadence
|
|
40
|
-
recommended — pages drift slowly):
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
You are the AdiaUI dogfooding agent. Your job is to find visual bugs in
|
|
44
|
-
the component demo pages that type-checks miss.
|
|
45
|
-
|
|
46
|
-
1. `npm install --frozen-lockfile`
|
|
47
|
-
2. Start the dev server in the background:
|
|
48
|
-
npm run dev > /tmp/vite.log 2>&1 &
|
|
49
|
-
Wait for "ready" in /tmp/vite.log (max 30s).
|
|
50
|
-
3. `node .agents/skills/dogfood-sweep/analyze.mjs`
|
|
51
|
-
The script writes `docs/reports/dogfooding-YYYY-MM-DD.md` and exits
|
|
52
|
-
non-zero iff any critical findings.
|
|
53
|
-
4. Read the report. For each *critical* finding, evaluate independently:
|
|
54
|
-
- Is the diagnosis right? (cross-check with component source)
|
|
55
|
-
- Is the fix mechanical and unambiguous?
|
|
56
|
-
- Does memory or `attribute-api-migration.md` already document the
|
|
57
|
-
pattern?
|
|
58
|
-
5. If yes to all three → apply the fix, run the verification gate
|
|
59
|
-
(`node scripts/build/components.mjs --verify && npm run test:a2ui`),
|
|
60
|
-
and include the diff in the PR.
|
|
61
|
-
6. If the diagnosis is right but the fix is non-trivial → leave it for
|
|
62
|
-
a human, just file the report.
|
|
63
|
-
7. Open a PR titled "dogfood: <date> — <N> critical, <M> warning":
|
|
64
|
-
- body = first 100 lines of the report
|
|
65
|
-
- link to the full report file
|
|
66
|
-
- if you applied any fixes, list them as a checklist
|
|
67
|
-
8. If 0 critical and 0 warning, still commit the report file (under
|
|
68
|
-
`docs/reports/`) so we have a paper trail of "things were fine".
|
|
69
|
-
9. Stop the dev server before exiting.
|
|
70
|
-
|
|
71
|
-
Hard rules:
|
|
72
|
-
- Never touch `packages/web-components/components/avatar/avatar.js:48`
|
|
73
|
-
(the deprecation handler string) when sweeping `<avatar-ui name=…>`.
|
|
74
|
-
- Never edit `MIGRATION GUIDE.md` historic sections; only the active
|
|
75
|
-
v0.0.X section.
|
|
76
|
-
- Don't fix more than 5 critical findings in one PR — leave the rest
|
|
77
|
-
for follow-up so humans can review fix shape before scaling.
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Register via `/schedule weekly node .agents/skills/dogfood-sweep/analyze.mjs` or
|
|
81
|
-
hand-author with the agent prompt above.
|
|
82
|
-
|
|
83
|
-
## False positives + tuning
|
|
84
|
-
|
|
85
|
-
The probes are intentionally narrow. Known places where "transparent
|
|
86
|
-
fill" is by design (and shouldn't be added to `COLORED_SELECTORS`):
|
|
87
|
-
|
|
88
|
-
- `tag-ui` without a variant (`muted` / default) — bg is correctly
|
|
89
|
-
`--a-bg-muted`, not transparent.
|
|
90
|
-
- `button-ui[variant=ghost]` — transparent by design.
|
|
91
|
-
- `[data-swatch]` for `chart-legend-ui[shape=dashed]` — intentionally
|
|
92
|
-
transparent bg + colored `border-top`. The probe handles this case.
|
|
93
|
-
|
|
94
|
-
If a finding is a known false positive, add the parent component or
|
|
95
|
-
selector to the skip-list rather than removing it from
|
|
96
|
-
`COLORED_SELECTORS` (preserves coverage on the canonical case).
|
|
97
|
-
|
|
98
|
-
## When to revisit the probe set
|
|
99
|
-
|
|
100
|
-
- New component ships → add to `STAMP_CONTRACTS` if it has internal
|
|
101
|
-
stamping logic.
|
|
102
|
-
- New synonym-attribute drift class documented in
|
|
103
|
-
`attribute-api-migration.md` → add to `DRIFT_MARKERS`.
|
|
104
|
-
- A class of bugs slips past the analyzer in a real PR → add a probe
|
|
105
|
-
for that bug class first, *then* fix it. Test for the test.
|