-
Notifications
You must be signed in to change notification settings - Fork 1
Ecosystem ci #24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
johanrd
wants to merge
122
commits into
main
Choose a base branch
from
ecosystem-ci
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Ecosystem ci #24
Changes from all commits
Commits
Show all changes
122 commits
Select commit
Hold shift + click to select a range
23529b0
ecosystem CI scaffolding + super-rentals triage
johanrd 97d1da4
triage: ember-modifier (TP=0) + ember-simple-auth (TP=6 FP=0)
johanrd 5905aa7
triage: ember-a11y-testing (TP-intentional=4 FP-plugin=4)
johanrd 9d9e357
triage: ember-primitives (TP=3 stylistic=5 strictness=1 FP-plugin=4)
johanrd da7a59b
triage: aria-voyager (intentional=13 — all `<div role="listbox">`)
johanrd ee22d8e
triage: ember-power-select (TP=27 stylistic=6 FP-plugin-suspect=1)
johanrd 382eb40
triage: limber (TP=28 stylistic=10 strictness=1 FP-plugin=0)
johanrd 7d1f9da
triage: ember-website (TP=17 stylistic=163 FP-plugin=98)
johanrd 9384572
triage: hds-design-system (TP=~52 stylistic=9 FP-plugin=~217)
johanrd 3495fcd
triage: add Phase 1 summary to FP-FIX-REPORT
johanrd cdab9da
add overlap discussion in readme and add an ECOSYSTEM-OVERLAP.md
johanrd bf4fce1
Merge branch 'fix/fp-htmlelement-generic-fallback' into combined-fp-f…
johanrd ea6b6d3
Merge branch 'fix/fp-blank-component-yield' into combined-fp-fixes
johanrd 6bfd91b
Merge branch 'fix/fp-img-splat-required-attrs' into combined-fp-fixes
johanrd 9508c34
Merge branch 'fix/fp-toc-satisfies-element' into combined-fp-fixes
johanrd eecc83b
Merge branch 'fix/fp-yielded-curried-component' into combined-fp-fixes
johanrd 8128fda
Merge branch 'fix/fp-classic-addon-hbs-resolution' into combined-fp-f…
johanrd d05ee5b
Merge branch 'fix/fp-arg-bound-required-attrs' into combined-fp-fixes
johanrd 58f999c
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd a86ce53
ecosystem: add 7 new targets (ember-concurrency, warp-drive, ember-in…
johanrd a0f3f07
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd 5c1a99c
ecosystem: re-baseline against post-fix plugin + seed 7 new targets
johanrd d67d537
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd 35149c9
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd 61af30a
ecosystem: hds form/index.gts wcag/h32 cleared after directive fix
johanrd 7aa2b20
recommended: disable noisy stylistic rules; demote prefer-native-element
johanrd a2b1f4b
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd 239a8f4
ecosystem: re-baseline after :recommended rule-trim
johanrd 9b39389
ecosystem: record severity (error|warning) on each baseline finding
johanrd e2753d5
ecosystem: drop noise-only targets (aria-voyager, ember-resources, em…
johanrd 425037b
ecosystem: drop ember-a11y-testing — intentional violations, not regr…
johanrd 2692d28
Invalidate disk cache when plugin source files change
johanrd 8071596
Merge branch 'fix/fp-htmlelement-generic-fallback' into combined-fp-f…
johanrd e1c166e
Merge branch 'fix/fp-blank-component-yield' into combined-fp-fixes
johanrd 28d55e9
Merge branch 'fix/fp-img-splat-required-attrs' into combined-fp-fixes
johanrd 2a98e9d
Merge branch 'fix/fp-toc-satisfies-element' into combined-fp-fixes
johanrd 9e0a6f5
Merge branch 'fix/fp-yielded-curried-component' into combined-fp-fixes
johanrd b42bb57
Merge branch 'fix/fp-classic-addon-hbs-resolution' into combined-fp-f…
johanrd c18c90e
Merge branch 'fix/fp-arg-bound-required-attrs' into combined-fp-fixes
johanrd 6089b30
Merge branch 'fix/fp-yield-only-form-fieldset' into combined-fp-fixes
johanrd 3c6283b
Merge branch 'fix/cache-invalidate-on-plugin-source-change' into comb…
johanrd eff8171
Merge branch 'combined-fp-fixes' into ecosystem-ci
johanrd ce48736
ecosystem: re-baseline with fresh caches + latest fix tips
johanrd 2a5ea54
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 3d1e9a0
ecosystem: re-baseline on top of PR #21 (heuristic + classic-by-name)
johanrd cec8c2e
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 63abcd0
ecosystem: clear 2 ResponsiveImage FPs from ember-website baseline
johanrd 9a571db
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 33d40b6
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 3762854
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd cdd0ed1
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 7d96e89
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd d464e81
Extend wcag/h32, wcag/h71, and form-submit suppression
johanrd eb7ae0e
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd f79b0fa
Dual-tag substitution: prefer yield-nearest-ancestor over outer wrapper
johanrd 909643a
Merge branch 'fix/fp-classic-resolver-by-name-hbs' into ecosystem-ci
johanrd 41e05a8
Hook-time setAttribute fallbacks for narrow Glimmer-attr slot cases
johanrd 8997acf
Address Copilot review (round 6)
johanrd fa2ff3d
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 3089365
ecosystem: re-baseline against PR #21 tip (round 6)
johanrd 5c95cba
Suppress element-permitted-* on transparent-curried-child / structura…
johanrd de38093
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 8723fd6
ecosystem: re-baseline after case (C) suppression (HDS 276→258, -18)
johanrd 50cf376
Bail yield-ancestor resolution when template has multi-distinct yield…
johanrd 8194c7b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 6b25ad1
ecosystem: re-baseline after multi-yield bail (HDS 258→299)
johanrd affd09c
Skip leaf-fallback resolution for multi-template files
johanrd 49e59e5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 8bf5d11
ecosystem: re-baseline after multi-template-file fix (limber -5)
johanrd a9f8641
Hook-time setAttribute for substituted <button> + multi-template root…
johanrd df6fc2a
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd b9af7d7
ecosystem: re-baseline after button-type + multi-template fixes (HDS …
johanrd cd175ad
Anchor-aware aria-* injection: drop aria-* when role can't fit
johanrd 0bf855a
ecosystem: re-baseline after anchor-aware aria-* injection (HDS -14)
johanrd eb0212d
Reject DynamicValue placeholder from `isLiteralSafeForAttr`
johanrd a4e423b
Backfill regression tests for prior PR #21 commits
johanrd b04c5f0
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 01c7b98
Polymorphic-tag chain trace via Glimmer (element ...) helper
johanrd 12e4276
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd b3787ff
Narrow .d.ts → .gts mapping to polymorphic chain only
johanrd 5be89e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd f327688
Polymorphic-tag chain trace: extract from compiled .js via TS parser
johanrd 86407e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd bd1f2a3
ecosystem: re-baseline after polymorphic chain trace via TS (HDS -10)
johanrd b140bee
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 91b7fa7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd fe2b17c
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 2dd1dd8
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 3c2c525
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 1df193c
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd d7467a5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 644d0e0
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd ec427b3
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 4a755ff
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 7c73436
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 3823a83
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 35eea4b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 9ffd3e7
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd cf015e3
ecosystem: re-baseline HDS (-10) + limber (+6) after FP-resolver work
johanrd 677e54b
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd 68fbae5
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd f174457
ecosystem: re-baseline HDS for 8 line-position shifts from lowercase-…
johanrd 5d50341
Merge remote-tracking branch 'origin/fix/fp-classic-resolver-by-name-…
johanrd cf9b6d4
run: stop counting no-template .gts files as "from cache"
johanrd 246ce40
Merge branch 'main' into ecosystem-ci
johanrd dda255a
add severity: 'errror' to run.js
johanrd c32a2c6
Merge branch 'main' into ecosystem-ci
johanrd 029894f
Address PR #24 Copilot review
johanrd 0622a32
Address second pass of PR #24 Copilot review
johanrd 958e5ca
Merge branch 'main' into ecosystem-ci
johanrd 346945d
Merge branch 'main' into ecosystem-ci
johanrd eaf8c9e
Fix: force HVE_GLINT='0' (not delete) when target opts out of Glint
johanrd d81f43b
Fix #38 (partial): suppress technique-rule FPs per-element, not file-…
johanrd 3248fa1
Add regression tests for invalid-markup patterns unmasked by fix/38
johanrd 79eb1e5
Address PR #41 Copilot review
johanrd f98e9b7
Address PR #41 Copilot review (round 2)
johanrd 28db028
Address PR #41 Copilot review (round 3)
johanrd 35304b5
Address PR #41 Copilot review (round 4): drop dead disableForRules
johanrd 1fe83c4
Merge branch 'fix/38' into ecosystem-ci
johanrd 9afe121
Merge branch 'main' into ecosystem-ci
johanrd b534081
ecosystem: re-baseline after fix/38 (per-element technique-rule suppr…
johanrd 107e296
ecosystem CI: corepack enable so package-manager-pinned targets install
johanrd File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| name: ecosystem | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: [main, master] | ||
| paths: | ||
| - '*.ts' | ||
| - 'lib/**' | ||
| - 'ecosystem/**' | ||
| - 'package.json' | ||
| - 'pnpm-lock.yaml' | ||
| - 'tsconfig.json' | ||
| - '.github/workflows/ecosystem.yml' | ||
| 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 | ||
|
|
||
| jobs: | ||
| ecosystem: | ||
| 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/npm store cache and are much faster. | ||
| timeout-minutes: 60 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - uses: pnpm/action-setup@v4 | ||
|
|
||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: '22' | ||
| cache: pnpm | ||
|
|
||
| # 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 | ||
|
|
||
|
johanrd marked this conversation as resolved.
|
||
| # Cache target repo clones AND their installed node_modules across runs. | ||
| # Keyed on targets.json so any SHA bump invalidates the cache and forces | ||
| # a fresh fetch + reinstall (we want the baseline-vs-actual diff to | ||
| # reflect the pinned SHA, not whatever was cached from a previous run). | ||
| # The pnpm store itself is cached by setup-node's `cache: pnpm` (above) | ||
| # against the current repo's lockfile, so target installs reuse the same | ||
| # content-addressed store transparently. | ||
| - name: Cache target clones + node_modules | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: ecosystem/.cache | ||
| key: ecosystem-clones-${{ hashFiles('ecosystem/targets.json') }} | ||
|
|
||
| - name: Run ecosystem checks | ||
| run: pnpm run ecosystem:check | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,5 @@ node_modules/ | |
| dist/ | ||
| *.log | ||
| .DS_Store | ||
| ecosystem/.cache/ | ||
| .claude/ | ||
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| # Ecosystem CI | ||
|
|
||
| Runs `html-validate-ember` against pinned snapshots of public Ember repos and diffs the findings against committed baselines. A non-empty diff fails the workflow. | ||
|
|
||
| ## What's here | ||
|
|
||
| - `targets.json` — the list of pinned repos (owner/repo + SHA + globs + per-target options). | ||
| - `run.ts` — the runner. Clones, installs deps, validates with Glint, diffs. | ||
| - `baselines/<name>.json` — committed expected output per target. The runner refuses to diff if the baseline's pinned SHA disagrees with `targets.json`. | ||
|
|
||
| Cached clones (with their installed `node_modules`) live in `.cache/` (gitignored). | ||
|
|
||
| ## Glint | ||
|
|
||
| By default each target is validated with Glint on (`HVE_GLINT=1`). That requires the target's deps installed locally — Glint resolves `@glint/ember-tsc` and the target's TypeScript types from the target's own `node_modules`. The runner detects the package manager from the lockfile and installs with `--ignore-scripts`. If install fails the runner falls back to no-Glint validation for that target and prints a warning rather than failing the run. | ||
|
|
||
| Per-target opt-out: set `"glint": false` on a target in `targets.json` (e.g., for repos where install doesn't work cleanly or isn't worth the time). | ||
|
|
||
| ## Local commands | ||
|
|
||
| ```bash | ||
| npm run ecosystem:check # all targets, fail on diff | ||
| npm run ecosystem:check -- --target=limber # just one | ||
| npm run ecosystem:check -- --target=a,b,c # subset | ||
| npm run ecosystem:check -- --no-clone # skip clone/fetch (faster, uses .cache) | ||
| npm run ecosystem:update # rewrite all baselines | ||
| npm run ecosystem:update -- --target=foo # rewrite one | ||
| ``` | ||
|
|
||
| ## When to update a baseline | ||
|
|
||
| You're working on the plugin and a real-world target's findings changed. That's the signal — the diff is the value statement of the change. Inspect the `added:` and `removed:` blocks in the runner output: | ||
|
|
||
| - **Removed findings** (fewer reports) — usually a fix landed; a FP got eliminated. Good. Update the baseline in the same PR; reviewer sees what disappeared. | ||
| - **Added findings** (new reports) — either the plugin now catches something it didn't before (good — explain in the PR), or it's a regression (don't update the baseline; fix it). | ||
|
|
||
| The runner's diff output is the input to the PR description. Don't paraphrase it; paste the relevant lines. | ||
|
|
||
| ## Bumping target SHAs | ||
|
|
||
| Manual for now. Re-fetch the default branch's HEAD, update `ref` in `targets.json`, run `npm run ecosystem:update -- --target=<name>`, commit baseline + targets.json together. The diff in the PR shows what changed in the target's templates between the old and new SHA — those are upstream-side changes, not plugin-side, but they're still worth reading: they're candidates for issue drafts to file with the upstream repo. | ||
|
|
||
| If a baseline is committed against a different SHA than `targets.json`, the runner refuses to diff (apples-to-oranges) and asks you to re-baseline. This guards against forgetting the second commit. | ||
|
|
||
| ## Triage flow (separate from CI) | ||
|
|
||
| The committed baselines contain a mix of real bugs, plugin FPs, and html-validate rules that fire on legitimate Ember patterns. Triaging them is *not* what CI does — CI only catches regressions. Triage is a manual, batched activity that produces: | ||
|
|
||
| 1. **Plugin fixes** for the FPs (which then show up as `removed:` in the next baseline update). | ||
| 2. **Issue drafts** for the real bugs in the target repos (one per repo, batched, you file). | ||
|
|
||
| The expected workflow is to triage one target at a time, file an issue with the upstream repo if findings warrant it, and let the natural flow of plugin fixes update baselines over time. | ||
|
|
||
| ## Adding a target | ||
|
|
||
| 1. Pick a repo with non-trivial templates (`.gts`/`.gjs`/`.hbs`). | ||
| 2. Probe its layout: `git clone --depth=1 --filter=blob:none <url> /tmp/probe && find /tmp/probe -name '*.gts' -o -name '*.gjs' -o -name '*.hbs' | head`. | ||
| 3. Pin the current default-branch SHA: `git ls-remote <url> HEAD`. | ||
| 4. Add a target entry. Globs should cover *real* templates (addon source + docs/test apps), not test fixtures (those often contain intentionally broken HTML for integration tests). | ||
| 5. `npm run ecosystem:update -- --target=<name>` to seed the baseline. | ||
| 6. Commit `targets.json` and `baselines/<name>.json` together. | ||
|
|
||
| ## Why bake findings into the baseline rather than gate on zero findings | ||
|
|
||
| These targets have hundreds of real-world findings — some genuine, some plugin FPs, some debatable a11y choices. Refusing to merge any plugin change that doesn't drive findings to zero is impractical (the targets are out of our control). Refusing changes that *introduce* new findings is tractable. So the baseline is "current state", and the CI signal is "did this PR change real-world output, and is the change intentional?". |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| { | ||
| "ref": "589ad84bdf3afe4f35628f70497d720b9a89c193", | ||
| "fileCount": 31, | ||
| "findings": [ | ||
| { | ||
| "file": "app/templates/components/cta.hbs", | ||
| "line": 1, | ||
| "column": 2, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-button-type", | ||
| "message": "<button> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/emails.hbs", | ||
| "line": 5, | ||
| "column": 8, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-button-type", | ||
| "message": "<button> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/file-upload-dialog.hbs", | ||
| "line": 20, | ||
| "column": 71, | ||
| "severity": "error", | ||
| "ruleId": "element-permitted-content", | ||
| "message": "<div> element is not permitted as content under <span>" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/file-upload-dialog.hbs", | ||
| "line": 21, | ||
| "column": 101, | ||
| "severity": "warning", | ||
| "ruleId": "prefer-native-element", | ||
| "message": "Prefer to use the native <button> element" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/password-field/visibility-toggle.hbs", | ||
| "line": 1, | ||
| "column": 2, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-button-type", | ||
| "message": "<button> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/phone-number-fields.hbs", | ||
| "line": 10, | ||
| "column": 8, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-button-type", | ||
| "message": "<button> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "app/templates/components/street-addresses.hbs", | ||
| "line": 9, | ||
| "column": 8, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-button-type", | ||
| "message": "<button> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "tests/dummy/app/templates/examples/configurator.hbs", | ||
| "line": 6, | ||
| "column": 75, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-input-type", | ||
| "message": "<input> is missing recommended \"type\" attribute" | ||
| }, | ||
| { | ||
| "file": "tests/dummy/app/templates/examples/configurator.hbs", | ||
| "line": 7, | ||
| "column": 75, | ||
| "severity": "error", | ||
| "ruleId": "no-implicit-input-type", | ||
| "message": "<input> is missing recommended \"type\" attribute" | ||
| } | ||
| ] | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.