Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
23529b0
ecosystem CI scaffolding + super-rentals triage
johanrd May 7, 2026
97d1da4
triage: ember-modifier (TP=0) + ember-simple-auth (TP=6 FP=0)
johanrd May 7, 2026
5905aa7
triage: ember-a11y-testing (TP-intentional=4 FP-plugin=4)
johanrd May 7, 2026
9d9e357
triage: ember-primitives (TP=3 stylistic=5 strictness=1 FP-plugin=4)
johanrd May 7, 2026
da7a59b
triage: aria-voyager (intentional=13 — all `<div role="listbox">`)
johanrd May 7, 2026
ee22d8e
triage: ember-power-select (TP=27 stylistic=6 FP-plugin-suspect=1)
johanrd May 7, 2026
382eb40
triage: limber (TP=28 stylistic=10 strictness=1 FP-plugin=0)
johanrd May 7, 2026
7d1f9da
triage: ember-website (TP=17 stylistic=163 FP-plugin=98)
johanrd May 7, 2026
9384572
triage: hds-design-system (TP=~52 stylistic=9 FP-plugin=~217)
johanrd May 7, 2026
3495fcd
triage: add Phase 1 summary to FP-FIX-REPORT
johanrd May 7, 2026
cdab9da
add overlap discussion in readme and add an ECOSYSTEM-OVERLAP.md
johanrd May 7, 2026
bf4fce1
Merge branch 'fix/fp-htmlelement-generic-fallback' into combined-fp-f…
johanrd May 7, 2026
ea6b6d3
Merge branch 'fix/fp-blank-component-yield' into combined-fp-fixes
johanrd May 7, 2026
6bfd91b
Merge branch 'fix/fp-img-splat-required-attrs' into combined-fp-fixes
johanrd May 7, 2026
9508c34
Merge branch 'fix/fp-toc-satisfies-element' into combined-fp-fixes
johanrd May 7, 2026
eecc83b
Merge branch 'fix/fp-yielded-curried-component' into combined-fp-fixes
johanrd May 7, 2026
8128fda
Merge branch 'fix/fp-classic-addon-hbs-resolution' into combined-fp-f…
johanrd May 7, 2026
d05ee5b
Merge branch 'fix/fp-arg-bound-required-attrs' into combined-fp-fixes
johanrd May 7, 2026
58f999c
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd May 7, 2026
a86ce53
ecosystem: add 7 new targets (ember-concurrency, warp-drive, ember-in…
johanrd May 7, 2026
a0f3f07
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd May 7, 2026
5c1a99c
ecosystem: re-baseline against post-fix plugin + seed 7 new targets
johanrd May 7, 2026
d67d537
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd May 7, 2026
35149c9
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd May 7, 2026
61af30a
ecosystem: hds form/index.gts wcag/h32 cleared after directive fix
johanrd May 7, 2026
7aa2b20
recommended: disable noisy stylistic rules; demote prefer-native-element
johanrd May 7, 2026
a2b1f4b
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd May 7, 2026
239a8f4
ecosystem: re-baseline after :recommended rule-trim
johanrd May 7, 2026
9b39389
ecosystem: record severity (error|warning) on each baseline finding
johanrd May 7, 2026
e2753d5
ecosystem: drop noise-only targets (aria-voyager, ember-resources, em…
johanrd May 7, 2026
425037b
ecosystem: drop ember-a11y-testing — intentional violations, not regr…
johanrd May 7, 2026
2692d28
Invalidate disk cache when plugin source files change
johanrd May 7, 2026
8071596
Merge branch 'fix/fp-htmlelement-generic-fallback' into combined-fp-f…
johanrd May 7, 2026
e1c166e
Merge branch 'fix/fp-blank-component-yield' into combined-fp-fixes
johanrd May 7, 2026
28d55e9
Merge branch 'fix/fp-img-splat-required-attrs' into combined-fp-fixes
johanrd May 7, 2026
2a98e9d
Merge branch 'fix/fp-toc-satisfies-element' into combined-fp-fixes
johanrd May 7, 2026
9e0a6f5
Merge branch 'fix/fp-yielded-curried-component' into combined-fp-fixes
johanrd May 8, 2026
b42bb57
Merge branch 'fix/fp-classic-addon-hbs-resolution' into combined-fp-f…
johanrd May 8, 2026
c18c90e
Merge branch 'fix/fp-arg-bound-required-attrs' into combined-fp-fixes
johanrd May 8, 2026
6089b30
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd May 8, 2026
3c6283b
Merge branch 'fix/cache-invalidate-on-plugin-source-change' into comb…
johanrd May 8, 2026
eff8171
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd May 8, 2026
ce48736
ecosystem: re-baseline with fresh caches + latest fix tips
johanrd May 8, 2026
2a5ea54
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
3d1e9a0
ecosystem: re-baseline on top of PR #21 (heuristic + classic-by-name)
johanrd May 8, 2026
cec8c2e
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
63abcd0
ecosystem: clear 2 ResponsiveImage FPs from ember-website baseline
johanrd May 8, 2026
9a571db
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
33d40b6
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
3762854
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
cdd0ed1
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
7d96e89
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 8, 2026
d464e81
Extend wcag/h32, wcag/h71, and form-submit suppression
johanrd May 9, 2026
eb7ae0e
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 9, 2026
f79b0fa
Dual-tag substitution: prefer yield-nearest-ancestor over outer wrapper
johanrd May 9, 2026
909643a
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd May 9, 2026
41e05a8
Hook-time setAttribute fallbacks for narrow Glimmer-attr slot cases
johanrd May 9, 2026
8997acf
Address Copilot review (round 6)
johanrd May 9, 2026
fa2ff3d
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 9, 2026
3089365
ecosystem: re-baseline against PR #21 tip (round 6)
johanrd May 9, 2026
5c95cba
Suppress element-permitted-* on transparent-curried-child / structura…
johanrd May 9, 2026
de38093
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 9, 2026
8723fd6
ecosystem: re-baseline after case (C) suppression (HDS 276→258, -18)
johanrd May 9, 2026
50cf376
Bail yield-ancestor resolution when template has multi-distinct yield…
johanrd May 9, 2026
8194c7b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 9, 2026
6b25ad1
ecosystem: re-baseline after multi-yield bail (HDS 258→299)
johanrd May 9, 2026
affd09c
Skip leaf-fallback resolution for multi-template files
johanrd May 9, 2026
49e59e5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 9, 2026
8bf5d11
ecosystem: re-baseline after multi-template-file fix (limber -5)
johanrd May 9, 2026
a9f8641
Hook-time setAttribute for substituted <button> + multi-template root…
johanrd May 9, 2026
df6fc2a
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 9, 2026
b9af7d7
ecosystem: re-baseline after button-type + multi-template fixes (HDS …
johanrd May 9, 2026
cd175ad
Anchor-aware aria-* injection: drop aria-* when role can't fit
johanrd May 9, 2026
0bf855a
ecosystem: re-baseline after anchor-aware aria-* injection (HDS -14)
johanrd May 9, 2026
eb0212d
Reject DynamicValue placeholder from `isLiteralSafeForAttr`
johanrd May 9, 2026
a4e423b
Backfill regression tests for prior PR #21 commits
johanrd May 9, 2026
b04c5f0
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
01c7b98
Polymorphic-tag chain trace via Glimmer (element ...) helper
johanrd May 10, 2026
12e4276
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
b3787ff
Narrow .d.ts → .gts mapping to polymorphic chain only
johanrd May 10, 2026
5be89e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
f327688
Polymorphic-tag chain trace: extract from compiled .js via TS parser
johanrd May 10, 2026
86407e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
bd1f2a3
ecosystem: re-baseline after polymorphic chain trace via TS (HDS -10)
johanrd May 10, 2026
b140bee
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
91b7fa7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
fe2b17c
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
2dd1dd8
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
3c2c525
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
1df193c
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
d7467a5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 10, 2026
644d0e0
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
ec427b3
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
4a755ff
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
7c73436
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
3823a83
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
35eea4b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
9ffd3e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
cf015e3
ecosystem: re-baseline HDS (-10) + limber (+6) after FP-resolver work
johanrd May 11, 2026
677e54b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
68fbae5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
f174457
ecosystem: re-baseline HDS for 8 line-position shifts from lowercase-…
johanrd May 11, 2026
5d50341
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd May 11, 2026
cf9b6d4
run: stop counting no-template .gts files as "from cache"
johanrd May 11, 2026
246ce40
Merge branch 'main' into ecosystem-ci
johanrd May 11, 2026
dda255a
add severity: 'errror' to run.js
johanrd May 12, 2026
c32a2c6
Merge branch 'main' into ecosystem-ci
johanrd May 12, 2026
029894f
Address PR #24 Copilot review
johanrd May 12, 2026
0622a32
Address second pass of PR #24 Copilot review
johanrd May 12, 2026
958e5ca
Merge branch 'main' into ecosystem-ci
johanrd May 19, 2026
346945d
Merge branch 'main' into ecosystem-ci
johanrd May 20, 2026
eaf8c9e
Fix: force HVE_GLINT='0' (not delete) when target opts out of Glint
johanrd May 20, 2026
d81f43b
Fix #38 (partial): suppress technique-rule FPs per-element, not file-…
johanrd May 20, 2026
3248fa1
Add regression tests for invalid-markup patterns unmasked by fix/38
johanrd May 20, 2026
79eb1e5
Address PR #41 Copilot review
johanrd May 20, 2026
f98e9b7
Address PR #41 Copilot review (round 2)
johanrd May 20, 2026
28db028
Address PR #41 Copilot review (round 3)
johanrd May 20, 2026
35304b5
Address PR #41 Copilot review (round 4): drop dead disableForRules
johanrd May 20, 2026
1fe83c4
Merge branch 'fix/38' into ecosystem-ci
johanrd May 20, 2026
9afe121
Merge branch 'main' into ecosystem-ci
johanrd May 20, 2026
b534081
ecosystem: re-baseline after fix/38 (per-element technique-rule suppr…
johanrd May 21, 2026
107e296
ecosystem CI: corepack enable so package-manager-pinned targets install
johanrd May 21, 2026
8c60f5b
Merge branch 'main' into ecosystem-ci
johanrd May 21, 2026
d2b5e07
Merge branch 'main' into ecosystem-ci
johanrd May 21, 2026
85a19a4
ecosystem: build source-only workspace deps + re-baseline HDS
johanrd May 21, 2026
aef31e8
ecosystem: label-gate CI + commit refreshed baselines back to PR
johanrd May 22, 2026
799d314
ecosystem: rename gate label to run-ecosystem-ci
johanrd May 22, 2026
9397e4c
ecosystem: suppress stylistic-noise rules in CI config, not the plugin
johanrd May 22, 2026
791a233
ecosystem: document label-gated trigger + baseline auto-commit in README
johanrd May 22, 2026
5bb6bbe
ecosystem: gate baseline auto-commit to same-repo PRs; fix triage typo
johanrd May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions .github/workflows/ecosystem.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
name: ecosystem

on:
pull_request:
# `labeled` is included so that adding the `run-ecosystem-ci` label *after* a PR is
# opened kicks off a run — the label does NOT need to exist at creation time.
# `opened`/`synchronize`/`reopened` are the defaults; with the label gate in
# the job's `if:` below, an unlabeled PR triggers the event but skips the job.
types: [opened, synchronize, reopened, labeled]
branches: [main, master]
workflow_dispatch:

# Cancel in-flight ecosystem runs when a PR force-pushes — clones are
# expensive and the only result we care about is the latest one.
concurrency:
group: ecosystem-${{ github.ref }}
cancel-in-progress: true

# Needed so the job can push refreshed baselines back to the PR branch.
permissions:
contents: write

Comment on lines +19 to +22
jobs:
ecosystem:
# This is a ~20-min clone-and-install marathon (12 real-world targets get
# cloned + their deps installed for Glint type-aware extraction), so we
# don't pay it on every PR. Opt in per-PR with the `run-ecosystem-ci`
# label, or run it by hand via the Actions tab (workflow_dispatch).
if: >-
github.event_name == 'workflow_dispatch' ||
contains(github.event.pull_request.labels.*.name, 'run-ecosystem-ci')
runs-on: ubuntu-latest
# Generous because targets get cloned + their deps installed for Glint
# type-aware extraction. First run is the slow path (cold caches);
# subsequent runs hit the pnpm store + clone cache and are much faster.
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
# Check out the PR's head branch (not the detached merge ref) so the
# refreshed-baseline commit below can be pushed back to it. Empty on
# workflow_dispatch, where checkout falls back to the default branch.
# Note: the auto-commit path assumes a same-repo PR — fork PRs get a
# read-only token and can't be pushed to (a non-issue for this repo,
# where only the maintainer applies the `run-ecosystem-ci` label).
ref: ${{ github.head_ref }}

- uses: pnpm/action-setup@v4

- uses: actions/setup-node@v4
with:
node-version: '22'
cache: pnpm

Comment thread
johanrd marked this conversation as resolved.
# Targets pin their package manager via package.json#packageManager
# (e.g. cardstack-ui-components → yarn). Corepack routes the `yarn`
# / `pnpm` shims to the pinned version instead of the runner's
# global yarn 1.x — without it, `installDeps` falls back to
# no-Glint validation for those targets and the baseline silently
# loses Glint-resolved findings.
- run: corepack enable

- run: pnpm install --frozen-lockfile

Comment thread
johanrd marked this conversation as resolved.
# Cache target repo clones AND their installed node_modules across runs.
# The exact key tracks the pinned SHAs (via targets.json); `restore-keys`
# lets a SHA bump warm-start from the previous cache instead of a cold
# clone+install. Reuse is safe: run.ts re-fetches + re-checks-out the
# pinned ref and re-runs `install --frozen-lockfile` on every run, so the
# cached node_modules is always reconciled to the checked-out lockfile —
# the cache is only ever a head start, never a stale baseline. The pnpm
# store itself is cached by setup-node's `cache: pnpm` (above) against this
# repo's lockfile, so target installs reuse the content-addressed store.
- name: Cache target clones + node_modules
uses: actions/cache@v4
with:
path: ecosystem/.cache
key: ecosystem-clones-${{ hashFiles('ecosystem/targets.json') }}
restore-keys: |
ecosystem-clones-

# The contract (run.ts, default --check): exit 1 if any target's findings
# drift from its committed baseline. We don't fail here — `continue-on-error`
# lets the following steps capture the drift, regenerate the baselines, and
# commit them back so the baseline JSON diff is reviewable inline on the PR.
- name: Check ecosystem baselines
id: check
continue-on-error: true
run: pnpm run ecosystem:check

# Regenerate baselines from current findings and surface the delta in the
# run summary (works for both PRs and manual dispatch).
- name: Refresh baselines on drift
if: steps.check.outcome == 'failure'
run: |
pnpm run ecosystem:update
if git diff --quiet -- ecosystem/baselines; then
echo "Drift reported but no baseline changes to write — likely a transformer crash; check the logs above." >> "$GITHUB_STEP_SUMMARY"
else
{
echo "### Ecosystem baseline changes"
echo
echo '```'
git --no-pager diff --stat -- ecosystem/baselines
echo '```'
echo
echo '<details><summary>Full baseline diff</summary>'
echo
echo '```diff'
git --no-pager diff -- ecosystem/baselines
echo '```'
echo
echo '</details>'
} >> "$GITHUB_STEP_SUMMARY"
fi

# Commit the refreshed baselines onto the PR branch so the diff lands in
# the PR's "Files changed". Pushes made with the default GITHUB_TOKEN do
# NOT trigger a new workflow run, so this can't loop. Gated to same-repo
# PRs: fork PRs get a read-only token and can't be pushed to, and making
# the condition explicit keeps the workflow's trust model clear.
- name: Commit refreshed baselines to PR
if: >-
steps.check.outcome == 'failure' &&
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository
run: |
Comment thread
johanrd marked this conversation as resolved.
git diff --quiet -- ecosystem/baselines && exit 0
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add ecosystem/baselines
git commit -m "ecosystem: refresh baselines"
git push

# Keep the job red on drift so an unreviewed change can't sail through —
# the baseline diff committed above is the thing to review.
- name: Fail if baselines drifted
if: steps.check.outcome == 'failure'
run: |
echo "::error::Ecosystem findings drifted from committed baselines. Review the baseline diff (committed to this PR / shown in the run summary); merge if the change is intended."
exit 1
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ node_modules/
dist/
*.log
.DS_Store
ecosystem/.cache/
.claude/
Loading
Loading