ci-readiness-check
Skill4.9k starsChanged 3 months agoMITView on GitHub
Use when the user explicitly asks for a CI check or to push their branch — e.g. "ci readiness", "check ci", "pre-push check", "ready for CI", "ci check", "ready to push", "push my changes", "push the branch", "let's push". Catches common CI failures before pushing — formatting, stale API reports, missing changesets, policy violations.
Trending
Less talk lately.about the whole repository
Who's talking about microsoft/FluidFramework
- A Hacker News story“Library for building distributed, real-time collaborative web applications”Hacker News · Sep 9, 2020 · 19 points
- microsoft/rushstack“[rush] Why does many Microsoft open-source projects not use rush.”GitHub · Oct 31, 2021 · 3 reactions
- Stack Overflow“How to connect to a Routerlicious local server?”Stack Overflow · Apr 27, 2021 · 3 votes
- microsoft/TypeScript“Design Meeting Notes, 2/17/2021”GitHub · Feb 17, 2021 · 3 reactions
- microsoft/TypeScript“Inline *_base declaration in d.ts files”GitHub · Aug 7, 2024 · 2 reactions
The biggest 5 of 62 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 62
Talked about on GitHub, Stack Overflow and Hacker News (62 times).
On GitHub · 50
- Oct 31, 2021[rush] Why does many Microsoft open-source projects not use rush. — microsoft/rushstack3 reactions · 6 comments
- Feb 17, 2021Design Meeting Notes, 2/17/2021 — microsoft/TypeScript3 reactions
- Aug 7, 2024Inline *_base declaration in d.ts files — microsoft/TypeScript2 reactions · 5 comments
- Jun 7, 2024[api-extractor] API report does not indicate if a class was `type` exported. — microsoft/rushstack2 reactions · 2 comments
- Mar 12, 2024Add support for pnpm lock file format 6 — microsoft/component-detection2 reactions · 7 comments
45 more on GitHub
- Apr 23, 2026[aw-compat] Bug: serena-tools-to-shared-import codemod leaves workflows broken in two edge cases — github/gh-aw1 reaction
- Sep 16, 2023Recursive types can depend on presence and source location of unused type declaration — microsoft/TypeScript1 reaction · 12 comments
- Mar 31, 2023Module-level tsdoc doesn't work — matrix-org/matrix-js-sdk1 reaction · 7 comments
- Oct 6, 2022Migrate to `pnpm` or Yarn 3 (from Yarn 1) — microsoft/vscode1 reaction · 2 comments
- Nov 3, 2026build(deps): Bump the fluid-framework-dependencies group across 3 directories with 39 updates — microsoft/FluidExamples0 reactions · 1 comment
- Oct 12, 2026Regressions between 0.34.13 and 1.3.34 — sinclairzx81/typebox0 reactions · 1 comment
- Oct 1, 2026build(deps): Bump the fluid-framework-dependencies group with 29 updates — microsoft/FluidHelloWorld0 reactions · 1 comment
- Jul 6, 2026Bump the fluid-framework-dependencies group across 1 directory with 51 updates — nmsimons/table-example0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27546 - [bench] prefix@b5720370 improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27546 - [bench] prefix@b5720370 improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27546 - [bench] prefix@9e4e683c improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27546 - [bench] prefix@9e4e683c improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27546 - [bench] prefix@0412ca76 improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27546 - [bench] prefix@0412ca76 improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27497 - [bench] improvement(client-ordered-collection): ConsensusQueueFactory generic — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27497 - [bench] improvement(client-ordered-collection): ConsensusQueueFactory generic — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27530 - [bench] Updated the client release group to use eslint-config-fluid v13.0 — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27530 - [bench] Updated the client release group to use eslint-config-fluid v13.0 — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27546 - [bench] improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFramework0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27546 - [bench] improvement(client): fix `exactOptionalPropertyTypes` for telemetry-utils — qodo-benchmark/FluidFrameworksays it tested it0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27521 - [bench] Fix version utils to get the versions it tries from the set it has installed — qodo-benchmark/FluidFrameworksays it tested it0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27521 - [bench] Fix version utils to get the versions it tries from the set it has installed — qodo-benchmark/FluidFrameworksays it tested it0 reactions
- Jun 21, 2026[CORRUPTED] Synthetic Benchmark PR #27508 - [bench] Remove unused credential flows in e2e tests and examples — qodo-benchmark/FluidFrameworksays it tested it0 reactions
- Jun 21, 2026[CLEAN] Synthetic Benchmark PR #27508 - [bench] Remove unused credential flows in e2e tests and examples — qodo-benchmark/FluidFrameworksays it tested it0 reactions
- Jun 4, 2026Bump @fluidframework/synthesize from 2.0.0-rc.1.0.1 to 2.0.0-rc.1.0.9 — jikanter/FluidHelloWorld0 reactions
- Jun 4, 2026Bump @fluidframework/tinylicious-client from 2.0.0-rc.1.0.1 to 2.102.0 — jikanter/FluidHelloWorld0 reactions
- Jun 4, 2026Bump @fluidframework/view-interfaces from 2.0.0-rc.1.0.1 to 2.0.0-rc.1.0.9 — jikanter/FluidHelloWorld0 reactions
- Jun 4, 2026Bump @fluidframework/merge-tree from 2.0.0-rc.1.0.1 to 2.0.0-rc.1.0.9 — jikanter/FluidHelloWorld0 reactions
- Jun 4, 2026Bump @fluidframework/driver-base from 2.0.0-rc.1.0.1 to 2.0.0-rc.1.0.9 — jikanter/FluidHelloWorld0 reactions
- May 30, 2026chore(deps): bump axios, @fluidframework/azure-client, @microsoft/live-share, fluid-framework and start-server-and-test in /live-share-dice-roller — VikkiDFoxCSA/microsoft-365-agents-toolkit-samples0 reactions
- May 1, 2026Bump fluid-framework from 1.4.0 to 2.100.0 in /samples/javascript/22.react-agile-poker — microsoft/live-share-sdk0 reactions
- May 1, 2026Bump @fluidframework/azure-client from 1.2.0 to 2.100.0 in /samples/typescript/21.react-media-template — microsoft/live-share-sdk0 reactions
- Apr 1, 2026Bump @fluidframework/azure-client from 1.2.0 to 2.91.0 in /samples/javascript/03.live-canvas-demo — microsoft/live-share-sdk0 reactions
- Apr 1, 2026Bump fluid-framework from 1.4.0 to 2.91.0 in /samples/javascript/01.dice-roller — microsoft/live-share-sdk0 reactions
- Apr 1, 2026Bump fluid-framework from 1.4.0 to 2.91.0 in /samples/javascript/03.live-canvas-demo — microsoft/live-share-sdk0 reactions
- Apr 1, 2026Bump @fluidframework/azure-client from 1.2.0 to 2.91.0 in /samples/javascript/01.dice-roller — microsoft/live-share-sdk0 reactions
- Mar 23, 2026Bump @fluidframework/test-utils from 1.4.0 to 2.91.0 in /packages/live-share-media — microsoft/live-share-sdk0 reactions
- Mar 23, 2026Bump fluid-framework from 1.4.0 to 2.91.0 in /packages/live-share-canvas — microsoft/live-share-sdk0 reactions
- Mar 23, 2026Bump @fluidframework/test-utils from 1.4.0 to 2.91.0 in /packages/live-share — microsoft/live-share-sdk0 reactions
- Mar 23, 2026Bump @fluidframework/test-runtime-utils from 1.4.0 to 2.91.0 in /packages/live-share-media — microsoft/live-share-sdk0 reactions
- Mar 4, 2026Bump the fluid-framework-dependencies group across 1 directory with 29 updates — nmsimons/fluid-vibe0 reactions
- Feb 10, 2026Bump axios, @fluidframework/server-services-client, @fluidframework/server-services-core, @fluidframework/server-services-shared and @fluidframework/server-services-utils in /server/gitrest — sniten/FluidFramework0 reactions
- Feb 9, 2026Bump axios, @fluidframework/server-lambdas, @fluidframework/server-local-server, @fluidframework/server-memory-orderer, @fluidframework/server-services-client, @fluidframework/server-services-core, @fluidframework/server-services-shared, @fluidframework/server-services-utils and @fluidframework/serv — sniten/FluidFramework0 reactions
- Nov 26, 2025[Dependabot] build(devdeps): bump @fluidframework/eslint-config-fluid from 5.7.4 to 8.1.0 — tylerbutler/tools-monorepo0 reactions
- Sep 25, 2025Bump the fluid-framework-dependencies group across 1 directory with 40 updates — augustniehaus/resourcemapfluid0 reactions · 1 comment
On Stack Overflow · 8
- Apr 27, 2021How to connect to a Routerlicious local server?3 votes · 1 answer
- Oct 14, 2020How to insert SharedMap into SharedObjetSequence2 votes
- Feb 19, 2021How to understand SequencedLambda(KafkaRunner) and DocumentPartition(DocumentLambda),and their related, in fluid-framework1 vote · 1 answer
- Jan 9, 2021How to start the Fluid Framework Server with minimum requirements?1 vote
- Jun 20, 2022How to deploy the Routerlicious fluid-server(fluid framework) using the Kubernetes?0 votes · 1 answer
3 more on Stack Overflow
- Oct 29, 2021How to consume routerlicious without experimental packages?0 votes
- Jul 9, 2021Can the tinylicious server be launched at a port other than 3000?0 votes
- Jun 4, 2021What is the strategy of SharedString on Merging data?0 votes
On Hacker News · 4
- Sep 9, 2020Library for building distributed, real-time collaborative web applications19 points
- Sep 9, 2020Microsoft/FluidFramework: Library for building real-time collaborative web apps2 points
- Jan 11, 2024FluidFramework: Build distributed, real-time collaborative web applications1 point
- Sep 9, 2020TypeScript library for building distributed, real-time collaborative web apps1 point
In this repository34 other files it gives its agents.
- server/gitrest/CLAUDE.mdCLAUDE.md
- server/historian/CLAUDE.mdCLAUDE.md
- build-tools/.github/copilot-instructions.mdCopilot instructions
- .github/copilot-instructions.mdCopilot instructions
- ff-oce-dashboardSkill
- ff-oce-kustoSkill
- brainstormingSkill
- building-ui-uxSkill
- creating-debug-tests-and-iteratingSkill
- creating-skillsSkill
- finishing-a-development-branchSkill
- handle-large-tasksSkill
- receiving-code-reviewSkill
- root-cause-tracingSkill
- starting-noriSkill
- systematic-debuggingSkill
- test-driven-developmentSkill
- testing-anti-patternsSkill
- updating-noridocsSkill
- using-git-worktreesSkill
- using-screenshotsSkill
- using-skillsSkill
- webapp-testingSkill
- writing-plansSkill
- api-changesSkill
- comparison-baseSkill
- fluid-pr-guideSkill
- fluid-prSkill
- fluid-releaseSkill
- pipeline-test-triageSkill
- policy-checkSkill
- review-pr-localSkill
- reviewSkill
- trigger-pipelines-for-copilot-prSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. About 0 are common, 12 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈12
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
When you apply an exception, you MUST explicitly report — every single time, with no abbreviation across repeated runs — that (a) you …
- Distinctive: line 23
Check: Run CI script → Review output → Report final status
- Distinctive: line 25
Test: same as Build, plus Run tests
- Distinctive: line 34
Before doing anything, ask the user:
- Distinctive: line 43
Wait for the user's response.
- Distinctive: line 47
Run the bundled script from the repository root:
- Very specific: line 60
Check changeset warnings against the release-group guidance.
- Very specific: line 61
If API reports changed, use the api-changes skill for details.
- Distinctive: line 81
Check mode stops here — skip steps 4–8 entirely.
- Very specific: line 105
If @fluidframework/tree is among the changed packages and its API surface likely changed, read …
- Very specific: line 113
If API Extractor fails with ae-missing-release-tag, add a TSDoc release tag (@alpha, @beta, @public, or @internal) to the new export, …
- Distinctive: line 117
After regenerating reports, check whether any api-report files actually changed:
- Very specific: line 123
If any api-report files changed, run the api-changes skill.
- Very specific: line 133
If you see ae-unresolved-link errors, the {@link} or {@inheritdoc} tag references an ambiguous name.
- Distinctive: line 145
Run whichever test scripts exist in each built changed package:
- Distinctive: line 156
Run git status and report:
- Distinctive: line 160
Test results — if Test mode, pass/fail per package
- Distinctive: line 166
If further code changes are made after this check, re-run ESLint and — if the API surface changed — regenerate API reports before pushing.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<required>
**You MUST ask the user the Step 1 mode-choice question before doing anything else.** Do not pick a mode for them. Do not default to a mode. Auto/autonomous mode does NOT authorize you to skip this question - being in auto mode is never a valid reason to bypass the prompt.There are exactly two narrow exceptions where you MAY skip the Step 1 mode-choice question. Both must be applied conservatively; if you are not certain an exception applies, you MUST ask.
- No-op since the last check in this conversation. The most recent CI readiness check in the current conversation already ran, and every change since then is obviously/provably outside the scope of any check the skill performs. Examples that qualify: edits only to comments; edits only to repository agent configuration under
.github/skills/; edits only to repo-rootREADME.md/CHANGELOG.md; or edits only to top-level docs not in adocs/*package. Watch out:docs/api/and similar are themselves workspace packages — markdown inside a workspace package does NOT automatically qualify. If you cannot quickly verify the changed files are outside every workspace package, ask. - Explicit standing instruction. The user has explicitly told you — in this conversation or in a saved memory entry — to auto-skip the CI readiness check without asking. Inferred preference, prior approvals of past runs, or general "be less interruptive" guidance does NOT qualify.
If either exception applies, treat it as equivalent to the user picking Skip in Step 1: do NOT ask the mode-choice question, do NOT create CI-readiness tasks/todos, and do NOT run the CI script or any other build/test/API-report steps. Stop the skill after reporting the skip.
When you apply an exception, you MUST explicitly report — every single time, with no abbreviation across repeated runs — that (a) you skipped asking the mode-choice question, (b) the CI readiness check itself was skipped, and (c) which exception applied. Silent skipping is forbidden.
When neither exception applies, ask the user and wait for their response. Immediately after they respond, create one task/todo item per applicable step using the available Copilot task-management tooling — before doing any other work. Mark each task in progress when you start it and completed when you finish. This prevents steps from being silently skipped as context grows.
Tasks to create by mode:
- Check: Run CI script → Review output → Report final status
- Build: Run CI script → Review output → Build unbuilt packages → ESLint auto-fix → Regenerate API reports → API changes review → Run build:docs → Regenerate type tests → Report final status
- Test: same as Build, plus Run tests
For Build/Test: if @fluidframework/tree is among the changed packages and its API surface likely changed, add a "Cascade API reports to aggregator packages" task after "Regenerate API reports".
Omit steps that don't apply (e.g. skip "Build unbuilt packages" if everything is already built; skip "Regenerate API reports" and "Regenerate type tests" if the API surface didn't change).
</required>
Step 1: Confirm with the user
Before doing anything, ask the user:
I can run a CI readiness check on your branch. Pick a mode (fastest to slowest):
- Skip — skip the CI readiness check
- Check (quick) — auto-fix formatting, policy, and syncpack on changed packages
- Build — Check + build unbuilt packages + ESLint + regenerate API reports and type tests
- Test (slower) — Build + run the test suite in changed packages
Wait for the user's response. If they say skip (or anything clearly negative), stop here. Otherwise, note their choice and immediately create tasks for all remaining steps as described in the required block above before proceeding.
Step 2: Run the script
Run the bundled script from the repository root:
bash .github/skills/ci-readiness-check/ci-readiness-check.sh [base-branch]The base branch defaults to main. Pass a different branch if needed (e.g., next).
The script detects changed packages, installs dependencies if needed, runs fluid-build --task checks:fix (auto-fixing formatting, policy, syncpack, and build version consistency), verifies all checks pass, checks for a changeset, and reports uncommitted changes and build status.
Step 3: Review output
Report to the user: packages changed, what was auto-fixed, any checks still failing, and uncommitted files.
Check changeset warnings against the release-group guidance.
If API reports changed, use the api-changes skill for details.
If you see unexpected generated artifacts unrelated to the branch's changes (especially in *.api.md files), stale build artifacts from a previous session or the incremental TypeScript bug are likely the cause. For @fluidframework/tree or its aggregator (fluid-framework), a scoped per-package clean is not reliable — you must do a full clean build from the repo root:
# From the repo root — no shortcuts
pnpm clean
pnpm buildThe full build includes API report generation for all packages (including the fluid-framework aggregator), so no separate regeneration step is needed. Check the reports afterward — if only your intended changes appear, you're good.
For other packages, a scoped clean may suffice:
cd $PKG && pnpm exec fluid-build . --task clean && pnpm exec fluid-build . --task compileThen re-run the CI readiness check. Never hand-edit *.api.md files — they are generated artifacts. If they're wrong, rebuild and regenerate.
Check mode stops here — skip steps 4–8 entirely. Note what was skipped in the final report.
Step 4: Handle unbuilt packages (Build and Test only)
cd $PKG && pnpm exec fluid-build . --task compileStep 5: ESLint auto-fix (Build and Test only)
cd $PKG && pnpm exec fluid-build . -t eslint:fixeslint:fix ensures compilation is current before linting and uses incremental caching so it's fast when the package is already built. If it fails due to non-auto-fixable errors, note them but continue.
Determining if the public API surface changed
Steps 6 and 7 only run if the public API surface changed. Proceed if: src/index.ts or any entry point (src/alpha.ts, src/beta.ts, src/legacy.ts, src/internal.ts) was modified; any exported type/interface/class/function signature changed; or package.json exports changed. Skip if only tests, internal implementation, comments, or function bodies (not signatures) changed.
Running build:api-reports when nothing changed can introduce spurious diffs — specifically for the @fluidframework/tree and fluid-framework packages, which surface a known incremental TypeScript bug that non-deterministically reorders type unions and can cause other phantom changes. If you see any unexpected API report diffs, do a full clean build from the repo root (pnpm clean && pnpm build) and regenerate. Per-package cleans are not reliable for the tree package. See tree-api-checks.md for details.
Step 6: API reports and cross-package cascade (Build and Test only)
If @fluidframework/tree is among the changed packages and its API surface likely changed, read .github/skills/ci-readiness-check/tree-api-checks.md before proceeding with 6a.
6a. Regenerate API reports
cd $PKG && pnpm exec fluid-build . -t build:api-reportsIf API Extractor fails with ae-missing-release-tag, add a TSDoc release tag (@alpha, @beta, @public, or @internal) to the new export, rebuild, then retry.
6b. API changes review
After regenerating reports, check whether any api-report files actually changed:
git diff --name-only HEAD -- | grep api-reportIf any api-report files changed, run the api-changes skill. It will classify the changes by release tag, determine whether API Council approval is needed, flag any breaking changes that require process steps, and verify changeset and deprecation requirements.
6c. Run build:docs to catch TSDoc errors
build:api-reports suppresses ae-unresolved-link errors; CI catches these via build:docs. Run for each built changed package with a build:docs script, regardless of API surface change:
cd $PKG && pnpm run build:docsIf you see ae-unresolved-link errors, the {@link} or {@inheritdoc} tag references an ambiguous name. Fix by linking to an unambiguous target. The TSDoc :instance/:static selectors are not supported by this version of API Extractor.
Step 7: Type test regeneration (Build and Test only)
For each built changed package with a typetests:gen script and where the public API surface likely changed:
cd $PKG && pnpm run typetests:genStep 8: Run tests (Test mode only)
Run whichever test scripts exist in each built changed package:
cd $PKG && pnpm run test:mocha
cd $PKG && pnpm run test:jestSkip test:benchmark, test:stress, and test:realsvc — too slow and flaky for a pre-push check. Report all results for the final report even if some fail.
Step 9: Final status
Run git status and report:
- Files auto-fixed — formatting, policy, ESLint fixes (unstaged; user should review and stage)
- Generated files updated — API reports, type tests (need to be committed with the PR)
- Test results — if Test mode, pass/fail per package
- Remaining issues — anything the skill couldn't auto-fix
- Skipped checks — anything skipped due to mode choice or unbuilt packages
End with a clear statement: "Your branch is ready to push" or "These issues remain: ..."
If further code changes are made after this check, re-run ESLint and — if the API surface changed — regenerate API reports before pushing.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

