Skip to content

Ecosystem ci#24

Draft
johanrd wants to merge 109 commits into
mainfrom
ecosystem-ci
Draft

Ecosystem ci#24
johanrd wants to merge 109 commits into
mainfrom
ecosystem-ci

Conversation

@johanrd
Copy link
Copy Markdown
Owner

@johanrd johanrd commented May 12, 2026

No description provided.

johanrd added 30 commits May 7, 2026 11:57
Pinned-snapshot validation against 10 public Ember repos (super-rentals,
ember-website, ember-power-select, ember-modifier, ember-simple-auth,
aria-voyager, ember-a11y-testing, hashicorp/design-system,
ember-primitives, NullVoxPopuli/limber). Each target lives in
`ecosystem/targets.json` with a pinned SHA, glob, and per-target Glint
flag. The runner clones, installs deps (best-effort, lockfile-driven),
validates with the same `:gts-recommended` config that `validate-gts`
uses, and diffs against committed baselines. A non-empty diff fails the
workflow.

`ecosystem/run.ts` is single-file, runs via `tsx`, no heavy deps. Glint
extraction is gated by `glint` flag per target (default true) and falls
back to no-Glint when install fails so the run continues.

Per-target triage docs live under `ecosystem/triage/`:
  - `<name>/triage.md` — every finding classified
  - `<name>/issue.md` — draft to file upstream when warranted
  - `FP-FIX-REPORT.md` — aggregate FPs across targets
  - `STYLISTIC-FINDINGS.md` — input for default-policy review

super-rentals triaged. 11 TP, 2 FP-plugin (img splat → required-attr
missing), 0 FP-rule. The 2 FPs are the first entry in FP-FIX-REPORT.

`vitest.config.ts` scopes test discovery to `test/**` so cloned repos'
test files don't get picked up. `tsconfig.test.json` typechecks
`ecosystem/**`.
ember-modifier has a single trivial template (`{{outlet}}`) — no
findings; kept as a smoke target.

ember-simple-auth surfaces 6 real findings in the demo test-app, all
a11y-related: 3× anchor-as-button (`<a role='button' href='#'>`
pattern), 1× missing autocomplete on password input, 1× form without
submit, 1× implicit button type. No FPs.
The demo app contains deliberate a11y fixtures (`violations.gts`,
`ignored-image-alt.gts`); html-validate's reports on those are correct
but by-design — marked TP-intentional, no upstream issue.

The 4 element-permitted-content findings are all one root cause:
`ViolationsGridItem` is a TOC declared via
  `<template>...</template> satisfies TOC<{ Element: HTMLLIElement }>`
which our Glint resolver doesn't recognize (works for `class extends
Component<Sig>` but not the TOC `satisfies` form). Without resolution,
the children float to <ul> instead of being correctly seen as inside
<li>.

New entry in FP-FIX-REPORT for the TOC-Element-resolution gap.
13 findings on 58 files.

Real bugs (3): non-semantic heading `<div role="heading">` should be
`<h*>`; non-semantic `<div role="progressbar">` should be `<progress>`;
`readonly` on `<input type="radio">` is invalid (use `disabled`).

Stylistic (5): inline styles in docs landing, region-as-div in
accordion content. Tracked in STYLISTIC-FINDINGS for default-policy
review.

Strictness (1): `<style>` inside `<fieldset>` for SR-only CSS;
debatable per spec.

FP-plugin (4): wcag/h32 on `<form ...attributes>{{yield}}</form>` and
wcag/h71 on `<fieldset ...attributes>{{yield ...}}</fieldset>`. The
plugin blanks the yield and html-validate sees empty body. At runtime
the consumer provides the required submit-button / legend. New entry
in FP-FIX-REPORT — same shape as multipass yield-only-branch but for
non-multipass templates.
All 13 findings are prefer-native-element on `<div role="listbox">`
patterns in rendering tests. The addon's whole purpose is providing
listbox/menu/tablist keyboard+ARIA behavior on non-native elements;
replacing with <select> would defeat the tests. No issue to file, no
plugin fix.

Triage doc notes this is an applicability question (not FP, not
stylistic-default) — addons that enhance ARIA-pattern widgets should
disable prefer-native-element in their tests. Worth a "recommended
overrides per project type" section in the plugin README.
34 findings on 114 files. Three real-bug clusters:

- 12× <div role="button"> tabs in code-example.gts (anchor/div-as-
  button anti-pattern, or arguably should be role="tab" since they're
  inside <nav class="code-example-tabs">).
- 14× misnested <p> containing <ul>/<dl> (7 implicit-close + 7
  stray-</p> pairs, same root cause).
- 1× <br> inside <ol> for visual spacing (should be CSS).

6× no-inline-style in demo placeholders — tracked stylistic.

1× FP-plugin-suspect: html-validate reports <div> not permitted under
<abbr> at power-select.gts:1443 but the file has no literal <abbr>.
A component's Signature['Element'] = HTMLElement (the generic) is
likely being resolved by our plugin to "abbr" via a fallthrough in
the element-class → tag mapping. Added to FP-FIX-REPORT for scoped
investigation.
39 findings on 67 files. No new FP-plugin patterns — all real bugs or
stylistic.

Real bugs (28):
- 20× misnested <p> containing <ul>/<dl> (10 blocks, two findings
  each — same root cause as ember-power-select's docs).
- 2× aria-label on <span> with no role (silently ignored by ATs).
- 2× unlabeled <footer> landmarks in same component (unique-landmark).
- 2× <input> missing type, 1× <button> missing type, 1× wcag/h32 form
  without submit.

Stylistic (10): no-inline-style across repl/components and templates.
no-inline-style is now 20 across 3 targets — strong default-off
candidate per STYLISTIC-FINDINGS.

Strictness (1): <style> inside <label> in apps/tutorial selection.gts.
Same shape as ember-primitives <style>-in-<fieldset>; defensible in
practice (component-scoped CSS).
279 findings on 73 files; the largest target after HDS.

Stylistic cluster (163) dominated by 153× void-style — the site's
.hbs templates use omitted void-element form (<br>) over self-closing
(<br />). Plugin's :gts-recommended forces selfclosing. After this
target void-style is the largest stylistic cluster across all
ecosystem targets — strong default-off candidate.

Real bugs (17): <image> typo for <img>, 6× form-dup-name on commission
form, 4× obsolete IE conditional comments, 2× deprecated attrs
(frameborder, align), 1× misnested <p> with <ul>, 1× aria-labelledby
on element that doesn't accept it, 1× <pre> in <code>, 1× ad-hoc
inline style.

FP-plugin (98): classic Ember addon component <EsCard> from
ember-styleguide renders <li> but our plugin can't resolve the root
tag without JS-side type info — its template is .hbs (no Signature,
no `satisfies TOC`). Transparent-blanking floats children to the
parent <ul> and element-permitted-content fires.

New entry in FP-FIX-REPORT for the classic-addon-template-resolution
gap. Substantial extension of existing splatted-root resolution to
walk .hbs files.
303 findings on 859 files. Per-finding triage at this scale is
infeasible; classified by-rule + by-pattern.

By far the largest cluster is plugin-side limitations (~70%):

- 107× <option> under <div> — yielded curried sub-components like
  `<HdsFormSelectBase as |C|><C.Options>...</C.Options>` lose Glint
  resolution. New entry in FP-FIX-REPORT for yielded-curried-component
  resolution.
- 39× <iframe> missing title — `<ShwFrame @Label={{...}}>` provides
  title via arg-binding; plugin's splatted-root extractor only handles
  literal values. New entry for arg-bound-attribute resolution.
- 25× <div> under <ul> — same EsCard-class addon-list-item pattern as
  ember-website (now bumped on existing entry).
- 8× <div> under <abbr> + cascading abbr-flagged children — bumps the
  ember-power-select abbr-mystery entry significantly.
- 10× wcag/h32 + wcag/h71 on yield-only HdsForm/HdsFormFieldset (bumps
  the ember-primitives form/fieldset entry).

Real bugs (~52): 14× <div> in <button>, 5× <input> in <a>, 2× nested
<a>, 28× prefer-native-element, 6× implicit button-type, 8× aria-label
misuse warnings, plus misc.

Notable defensive pattern: 15× role="list" on <ul> — html-validate
flags as redundant but it's a deliberate Safari/VoiceOver fallback for
when list-style:none strips the implicit list role. Marked TP-rule-
context (correct per spec, intentional in practice).

issue.md is selective — filing 303 on HDS is unrealistic; surfaces
the ~10 highest-value real findings.
# Conflicts:
#	lib/glint.ts
#	test/glint.test.ts
…tl, vertical-collection, ember-resources, cardstack-ui-components, discourse)
Merged combined-fp-fixes into ecosystem-ci, reseeded all 17 baselines
against the latest plugin so the diff isolates the FP-fix impact.

Existing 10 targets:
  super-rentals          -1 element-required-attributes (img splat FP, PR #13)
  ember-primitives       -2 wcag/h32 (yield-only form FP, PR #17)
  hds-design-system      -2 wcag/h71 (yield-only fieldset FP, PR #17)
                         +1 prefer-native-element (newly visible after
                            other fixes resolve a previously-blanked
                            region)
  others (7)             unchanged

7 new targets seeded (file count / finding count):
  ember-concurrency       56 / 32   (element-permitted, no-inline-style)
  warp-drive               8 /  0
  ember-intl              79 /  0
  vertical-collection     14 / 10   (no-implicit-button-type)
  ember-resources          3 /  0
  cardstack-ui-components 31 / 21   (void-style, no-implicit-button-type)
  discourse             1309 / 495  (Glint disabled — too heavy to
                                     install; mostly TPs in legacy .hbs)

Baselines reflect current findings; CI guards against future regressions.
Re-baseline after the comma-vs-space fix in transform.ts. The HDS
`form/index.gts:81` wcag/h32 was the canonical multipass case that
exposed the bug — both arms of `{{#if (eq this.tag "form")}}` carry
yield, so multipass injects a directive carrying both
`no-unused-disable` and `wcag/h32`. With space-separated rules only
the first was disabled and h32 leaked through; comma-separated now
suppresses both correctly.

No other baselines moved.
Goal: ":recommended" should give "pure value" — content-model bugs,
a11y issues, missing required attributes — not pedantic style
preferences. Trim the html-validate-recommended noise that fires on
legitimate Ember/Glimmer patterns:

- `no-inline-style: off` — bans `style=` attribute. Breaks legitimate
  runtime style-binding (`<div style={{this.computedStyle}}>`). Use a
  separate stylelint pipeline for inline-style policy if needed.

- `void-style: off` — html-validate defaults to omit, Ember/Glimmer
  convention is selfclosing, mixing is harmless. Previously the
  `:gts-recommended` preset overrode to `selfclosing`, which fought
  projects using the omit form. Now disabled entirely; teams enforce
  via `ember-template-lint` if they want that policy.

- `prefer-native-element: warn` — kept on but demoted from error.
  Real a11y signal (`<div role="button">` should usually be
  `<button>`), but design systems intentionally wrap generic elements
  with role+keyboard handling. Surfaced as a warning so it doesn't
  fail builds; teams can promote back to error per-project.

`:recommended` and `:gts-recommended` now resolve to identical rule
sets. The alias stays for backwards compatibility — existing
consumers' `extends` keep working.

151/151 pass.
Removed 329 baseline entries across 11 targets (0 new findings) by
disabling stylistic rules from html-validate's recommended preset that
fire on legitimate Ember/Glimmer code without catching real bugs:

  void-style              -170  (disabled — Ember mixes both styles)
  no-inline-style          -87  (disabled — runtime style-binding pattern)
  prefer-native-element    -72  (demoted to warn — surfaces in lint
                                 output, doesn't fail builds, design
                                 systems can intentionally wrap divs)

The 5 already-removed FPs from the plugin fix-branches (super-rentals
img splat, ember-primitives 2x wcag/h32, hds 2x wcag/h71) plus the
hds form/index.gts:81 wcag/h32 cleared by the directive comma fix
all stayed cleared.
The runner previously skipped any file where `report.valid === true`,
which silently dropped warning-only files from the baseline — every
`prefer-native-element` warning on an otherwise-clean file was
invisible to CI, and the next run that introduced a warning to such
a file wouldn't show in the diff.

Changes:
- `Finding` interface gains a `severity: 'error' | 'warning'` field
  derived from html-validate's numeric `m.severity` (1=warn, 2=error).
- Drop the `if (report.valid) continue;` early-out so warning-only
  files reach the recording loop.
- `findingKey` and the sort comparator include severity, so a finding
  whose severity flips between runs counts as a real diff.
- Per-target stderr summary now reads
  `findings: N (errors: X, warnings: Y)`.
- `summarizeFindings` prefixes each line with `[severity]`.

All 17 baselines re-seeded. Net delta vs the previous baselines:

  aria-voyager           +13 warnings (previously fully skipped:
                          0 errors → report.valid → file dropped)
  cardstack-ui-components +1
  discourse              +33 (49 warnings now; 16 were on
                          mixed-error files and already recorded)
  ember-concurrency       +1
  ember-power-select     +12 (warnings on previously-clean files)
  ember-primitives        +3
  ember-simple-auth       +3
  hds-design-system      +10 (29 warnings now; 19 previously on
                          mixed-error files)

No error-severity findings changed (the rule trim already settled
those). Warnings-only files now visible to baseline diffs.
…ber-intl, warp-drive)

These four were noise-only against the trimmed ruleset:

  aria-voyager   13 warnings, all `<div role="listbox">` patterns
                 — intentional ARIA wrappers, not bugs
  ember-resources    0 errors, 0 warnings
  ember-intl         0 errors, 0 warnings
  warp-drive         0 errors, 0 warnings

Three were always-clean (no signal to guard against), one is
intentionally-different (signal we'd never want to fix). Removing
them shrinks the per-PR CI runtime, focuses the baseline diff on
targets where regressions actually matter, and removes the
"baseline at zero forever" noise from PR review.

Down from 17 → 13 targets.
johanrd added 20 commits May 10, 2026 20:10
…hbs' into ecosystem-ci

# Conflicts:
#	lib/cache.ts
…hbs' into ecosystem-ci

# Conflicts:
#	.gitignore
HDS (258 → 248):
  Cleared:
  - 8 element-permitted-content '<div> under <h1>' on flex/sub-sections/
    display.gts — old Glint-TS-side union pick of HTMLHeadingElement
    for <HdsTextBody @tag="p"> superseded by polymorphic-chain trace.
  - 4 element-permitted-content '<div> under <h1>' on form/layout/
    sub-sections/containers.gts (same root cause via <FORM.HeaderTitle>).
  - 5 element-permitted-content '<div> under <h1>' on rich-tooltip/
    sub-sections/options.gts + states.gts (same).
  - 4 element-permitted-content '<h1> under <span>' on radio-card/
    sub-sections/base-control.gts (same union-pick FP, different shape).
  - 6 element-permitted-content '<div> under <span>'/'<button>' on
    HDS source (tag/index.gts, advanced-table/th-selectable.gts) and
    advanced-table/sub-sections/base-elements.gts — cleared by yield-
    ancestor preference now correctly tracking the inner wrapper.
  - 2 aria-label-misuse 'aria-labelledby cannot be used' on flyout/
    modal — canonical resolver now reaches the <dialog> outer.
  - 8 aria-label-misuse 'aria-label not recommended on this element' on
    breadcrumb/page-header/stepper-list/focus-ring consumers — cleared
    by the yield-ancestor + aria-* strip (lands on the actual splat
    target at runtime).
  - 4 wcag/h32 '<form> must have a submit button' on form/layout/
    within-containers.gts — chain resolution surfaced submit buttons.
  - 8 element-permitted-content position-shifts (added/removed pairs
    where the substituted output's line numbers shifted by a column).
  - 1 attribute-misuse 'target requires href' — chain href injection.
  Newly surfaced (real HTML5 violations in HDS showcase code, not FPs):
  - 4 containers.gts no-implicit-close/close-order on <p> from
    HdsFormHeaderDescription (@tag='p') containing <ShwPlaceholder>
    (<div>) — <p> can't contain block content.
  - 6 radio-card element-permitted-content '<div> under <span>' —
    HdsFormRadioCard yields inside <span class="content"> at runtime
    and consumers put <R.Badge> (<div>) there.
  - 2 super-select no-implicit-close/close-order on <li> —
    HdsFormSuperSelectOptionGroup renders <li role="group"> with
    sibling <li> children inside (no <ul> between).
  - 8 page-header unique-landmark — showcase has 3+ <HdsPageHeader>
    (= <header>) on one page without distinct aria-labels.
  - several rich-tooltip/focus-ring no-implicit-close on <p>.

limber (28 → 34):
  Newly surfaced (real HTML5 violations in docs/embedding.gts):
  - 6 no-implicit-close/close-order on <p> containing <ul>/<div>.

Also: bring back HVE_FULL_DIFF=1 env var on summarizeFindings to
print the complete added/removed lists without truncation (used
during this triage to enumerate every cluster).
…dotted resolution

Same findings (8 prefer-tbody + 1 prefer-native-element), just at
slightly earlier line positions. The previous baseline pre-dated the
fix that lets buildConsumerInfo + walkMapping process dotted
invocations through lowercase-headed block-params (`<dd.Interactive>`
in HDS dropdown showcases — `<HdsDropdown as |dd|><dd.Interactive>`).
Resolving those now substitutes them in the blanked output, which
shifts downstream substitution offsets and reports the same TPs at
new line numbers.

No findings added or removed in substance; net change is 0 findings.
The 8 +/- diff is purely positional.
On a first run, the Glint summary reported

  Glint: 311 analyzed, 3 from cache

even though the cache was empty for every file — those 3 were
`.gts` files with no `<template>` block (rewriteEmpty). We write a
tombstone for them AFTER the run so they show up as literal cache
hits on the NEXT run, but at summary-print time none of them are
actually cached.

Tighten the message to report only real disk-cache hits in the
"from cache" number. When some `.gts` files had no template, surface
the count in a parenthetical instead of folding it into "from cache".
Read / rewrite errors continue to surface via HVE_DEBUG=1 only.

  before: Glint: 311 analyzed, 3 from cache
  after:  Glint: 311 analyzed, 0 from cache (3 .gts files had no <template>)
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an “ecosystem CI” harness to run html-validate-ember against pinned snapshots of real Ember repositories, diff results against committed baselines, and fail CI on unexpected output changes. It also adjusts the plugin presets to reduce stylistic noise (e.g. disables void-style and turns prefer-native-element into a warning), and adds supporting docs/triage notes.

Changes:

  • Add an ecosystem runner (ecosystem/run.ts) + targets list (ecosystem/targets.json) + committed baselines, plus a GitHub Actions workflow to execute it.
  • Add a Vitest config to avoid accidentally executing tests inside ecosystem/.cache clones.
  • Update preset rule defaults to reduce stylistic false-noise; add documentation and triage artifacts.

Reviewed changes

Copilot reviewed 41 out of 43 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
vitest.config.ts Restricts Vitest’s test glob to repo tests (avoids running tests from cached third-party clones).
tsconfig.test.json Includes ecosystem/**/*.ts in test typechecking; excludes ecosystem/.cache.
test/cache.test.ts Adds an additional cache staleness test around pluginSourceSha.
README.md Adds a section describing where this plugin fits among Ember linting/formatting tools.
package.json Adds ecosystem:check / ecosystem:update scripts.
index.ts Adjusts presets to disable or soften noisy stylistic rules; keeps gts-recommended as an alias.
ecosystem/triage/super-rentals/triage.md Captures triage notes/findings for the super-rentals target.
ecosystem/triage/super-rentals/issue.md Draft upstream issue text for super-rentals findings.
ecosystem/triage/STYLISTIC-FINDINGS.md Tracks stylistic-rule finding counts to inform default policy.
ecosystem/triage/limber/triage.md Captures triage notes/findings for the limber target.
ecosystem/triage/limber/issue.md Draft upstream issue text for limber findings.
ecosystem/triage/hds-design-system/triage.md Captures triage notes/findings for the HDS target.
ecosystem/triage/hds-design-system/issue.md Draft upstream issue text for HDS findings.
ecosystem/triage/FP-FIX-REPORT.md Aggregates plugin-side FP patterns discovered during ecosystem runs.
ecosystem/triage/ember-website/triage.md Captures triage notes/findings for the ember-website target.
ecosystem/triage/ember-website/issue.md Draft upstream issue text for ember-website findings.
ecosystem/triage/ember-simple-auth/triage.md Captures triage notes/findings for ember-simple-auth target.
ecosystem/triage/ember-simple-auth/issue.md Draft upstream issue text for ember-simple-auth findings.
ecosystem/triage/ember-primitives/triage.md Captures triage notes/findings for ember-primitives target.
ecosystem/triage/ember-primitives/issue.md Draft upstream issue text for ember-primitives findings.
ecosystem/triage/ember-power-select/triage.md Captures triage notes/findings for ember-power-select target.
ecosystem/triage/ember-power-select/issue.md Draft upstream issue text for ember-power-select findings.
ecosystem/triage/ember-modifier/triage.md Captures triage notes/findings for ember-modifier target.
ecosystem/triage/ember-a11y-testing/triage.md Captures triage notes/findings for ember-a11y-testing target.
ecosystem/triage/aria-voyager/triage.md Captures triage notes/findings for aria-voyager target.
ecosystem/targets.json Defines pinned target repos + SHAs + include/exclude globs (+ Glint toggles).
ecosystem/run.ts Implements cloning, dependency install, validation, diffing, and baseline updates.
ecosystem/README.md Documents ecosystem CI workflow and local usage.
ecosystem/baselines/vertical-collection.json Adds a pinned baseline snapshot for the vertical-collection target.
ecosystem/baselines/super-rentals.json Adds a pinned baseline snapshot for the super-rentals target.
ecosystem/baselines/limber.json Adds a pinned baseline snapshot for the limber target.
ecosystem/baselines/hds-design-system.json Adds a pinned baseline snapshot for the HDS target.
ecosystem/baselines/ember-website.json Adds a pinned baseline snapshot for the ember-website target.
ecosystem/baselines/ember-simple-auth.json Adds a pinned baseline snapshot for the ember-simple-auth target.
ecosystem/baselines/ember-primitives.json Adds a pinned baseline snapshot for the ember-primitives target.
ecosystem/baselines/ember-power-select.json Adds a pinned baseline snapshot for the ember-power-select target.
ecosystem/baselines/ember-modifier.json Adds a pinned baseline snapshot for the ember-modifier target.
ecosystem/baselines/ember-concurrency.json Adds a pinned baseline snapshot for the ember-concurrency target.
ecosystem/baselines/cardstack-ui-components.json Adds a pinned baseline snapshot for the cardstack-ui-components target.
ECOSYSTEM-OVERLAP.md Documents overlap between eslint-plugin-ember template rules and html-validate/html-eslint.
.gitignore Ignores ecosystem/.cache/.
.github/workflows/ecosystem.yml Adds a dedicated workflow to run ecosystem checks on PRs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ecosystem/run.ts
Comment thread ecosystem/run.ts Outdated
Comment thread ecosystem/run.ts Outdated
Comment thread ecosystem/run.ts
Comment thread .github/workflows/ecosystem.yml
Comment thread ecosystem/triage/super-rentals/triage.md
Comment thread ecosystem/triage/ember-website/triage.md
Comment thread ECOSYSTEM-OVERLAP.md Outdated
Comment thread index.ts
Comment thread ECOSYSTEM-OVERLAP.md Outdated
johanrd added 3 commits May 12, 2026 13:31
- ecosystem.yml: switch to pnpm to fix failing CI (setup-node was
  looking for package-lock.json that doesn't exist); also swap the
  paths filter from package-lock.json to pnpm-lock.yaml
- ecosystem/run.ts: fix three stale comments (the void-style note in
  makeValidator, the "Glint intentionally not enabled" paragraph, and
  the false "fall back to plain yarn install" claim)
- test/cache.test.ts: drop the duplicate pluginSourceSha-mismatch test
- ECOSYSTEM-OVERLAP.md: replace local /Users/... paths with upstream
  repo URLs; reflect that gts-recommended now leaves void-style off
- README.md: rewrite the preset descriptions to match index.ts
  (void-style off, prefer-native-element warn; gts-recommended is
  now a backwards-compat alias of recommended)
- ecosystem/triage/*.md: mark the void-style triage docs as historical
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 42 changed files in this pull request and generated 5 comments.

Comment thread vitest.config.ts
Comment thread .github/workflows/ecosystem.yml
Comment thread .github/workflows/ecosystem.yml Outdated
Comment thread ecosystem/run.ts
Comment thread ecosystem/run.ts
Comment on lines +163 to +167
execFileSync(cmd, args, {
cwd: repoDir,
stdio: 'inherit',
timeout: 5 * 60 * 1000,
});
- tsconfig.json: exclude vitest.config.ts from the build (it was
  being compiled into dist/ and would ship via files=["dist/"])
- ecosystem.yml: drop the redundant explicit pnpm-store cache step;
  setup-node's cache: pnpm already handles it, and the hard-coded
  ~/.pnpm-store path didn't match the runner's actual store
- ecosystem/run.ts: refuse to baseline transformer crashes — a
  __transformer-crash__ finding now skips writeBaseline for that
  target and forces a non-zero exit at end of run. The existing
  comment claimed this behavior; this commit makes it true.

Surfaced as NOT SURE (see not-sure.md): hard-coded 5-min install
timeout. No evidence of flake yet; deferred.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants