Skip to content

Commit 2bfe746

Browse files
authored
Merge branch 'main' into fix-xeus-kernel-missing-status
2 parents 61ee3ad + 44a3292 commit 2bfe746

9 files changed

Lines changed: 142 additions & 56 deletions

File tree

.claude/CLAUDE.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ The feature format matrix in `dev-docs/feature-format-matrix/` documents and tes
163163
Comprehensive methodology for debugging flaky tests documented in [dev-docs/debugging-flaky-tests.md](../dev-docs/debugging-flaky-tests.md).
164164

165165
Key phases:
166+
166167
1. Reproduce locally (outside CI)
167168
2. Binary search to isolate culprit test
168169
3. Narrow down within test file
@@ -236,8 +237,8 @@ LaTeX error pattern maintenance is documented in [dev-docs/tinytex-pattern-maint
236237

237238
## Documentation
238239

239-
- Documentation is at <https://quarto.org> with a sitemap at <https://quarto.org/sitemap.xml>
240-
- Prerelease docs: <https://prerelease.quarto.org/> for features in dev versions
240+
- Documentation is at <https://quarto.org/llms.txt>
241+
- Prerelease docs: <https://prerelease.quarto.org/llms.txt> for features in dev versions
241242
- Dev documentation in `dev-docs/` includes:
242243
- Checklists for releases and backports
243244
- Dependency update procedures
@@ -246,7 +247,7 @@ LaTeX error pattern maintenance is documented in [dev-docs/tinytex-pattern-maint
246247

247248
## Contributing
248249

249-
See CONTRIBUTING.md for pull request guidelines. Significant changes require a signed contributor agreement (individual or corporate).
250+
See [.github/CONTRIBUTING.md](../.github/CONTRIBUTING.md) for contributing and pull request guidelines.
250251

251252
## Maintaining Memory Files
252253

@@ -258,11 +259,11 @@ This project uses Claude Code memory files for AI-assisted development. When upd
258259

259260
**Memory file types:**
260261

261-
| Location | When Loaded | Use For |
262-
|----------|-------------|---------|
263-
| `.claude/CLAUDE.md` | Always | Project overview, essential commands |
264-
| `.claude/rules/<feature>/` | When paths match | Feature-specific conventions |
265-
| `llm-docs/` | When explicitly read | Architectural deep dives |
262+
| Location | When Loaded | Use For |
263+
| -------------------------- | -------------------- | ------------------------------------ |
264+
| `.claude/CLAUDE.md` | Always | Project overview, essential commands |
265+
| `.claude/rules/<feature>/` | When paths match | Feature-specific conventions |
266+
| `llm-docs/` | When explicitly read | Architectural deep dives |
266267

267268
**Personal overrides:** Create `CLAUDE.local.md` (gitignored) for personal preferences like preferred shell syntax or workflow customizations. This file is loaded alongside the project CLAUDE.md but won't be committed.
268269

.github/CODE_OF_CONDUCT.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,13 @@ Examples of unacceptable behavior include:
3636
* Other conduct which could reasonably be considered inappropriate in a
3737
professional setting
3838
* Providing bad information by copying output from AI assistants
39-
without verifying its validity. This _specifically_ includes autonomous agents
40-
from OpenClaw, etc. We consider these account-bannable on first offense.
39+
without verifying its validity.
40+
* Submitting issues or pull requests via autonomous AI agents acting without
41+
human oversight. This _specifically_ includes autonomous agents such as
42+
OpenClaw. AI assistants are accepted only when a human contributor has
43+
reviewed and verified the submission (see [CONTRIBUTING.md](CONTRIBUTING.md)).
44+
Autonomous agents deciding on their own to open issues or PRs in this
45+
repository are not. We consider these account-bannable on first offense.
4146
You have been warned.
4247

4348
## Enforcement Responsibilities

.github/CONTRIBUTING.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,23 @@ You can contribute in many ways:
99
- By submitting Pull Request (PR) to fix opened issues
1010
- By submitting Pull Request (PR) to suggest new features (it is considered good practice to open an issue for discussion before working on a pull request for a new feature).
1111

12+
## Opening an issue
13+
14+
Before opening an issue, please search [existing issues](https://github.com/quarto-dev/quarto-cli/issues) to avoid duplicates.
15+
16+
When reporting a bug, include a minimal reproducible example. For feature requests, describe the use case and expected behavior.
17+
18+
### Using AI tools to investigate
19+
20+
If you are using an AI assistant to help investigate a bug or prepare an issue, point it to the Quarto codebase before asking it to analyze the problem:
21+
22+
- **[DeepWiki](https://deepwiki.com/quarto-dev/quarto-cli)** — AI-indexed documentation for the repository. Available as a web UI for human queries and as an [MCP server](https://docs.devin.ai/work-with-devin/deepwiki-mcp) to give your AI assistant direct access. Useful for understanding architecture, finding relevant source files, and asking questions about how Quarto works internally.
23+
- **[Context7](https://context7.com)** — Provides up-to-date Quarto documentation and related tool docs. Available as a web UI, a [cli tool](https://context7.com/docs/clients/cli) and as an [MCP server](https://context7.com/docs/resources/all-clients) so AI assistants can fetch current docs on demand.
24+
- **`https://quarto.org/llms.txt`** — Machine-readable index of Quarto documentation, following the [llms.txt convention](https://llmstxt.org/). Point your AI assistant at this URL to give it a structured map of available documentation.
25+
- **Clone the repo** — AI tools that can run code or search files benefit from a local clone. Cloning the repository lets the AI search source files, trace code paths, and verify behavior directly rather than relying on potentially outdated training data.
26+
27+
Grounding your AI assistant in the actual codebase leads to more accurate root cause analysis and better-quality issue reports.
28+
1229
## To submit a contribution using a Pull Request
1330

1431
1. [Fork](https://github.com/quarto-dev/quarto-cli/fork) the repository, clone it locally, and make your changes in a new branch specific to the PR. For example:
@@ -25,8 +42,6 @@ You can contribute in many ways:
2542
$ git checkout -b bugfix/myfix
2643
```
2744

28-
2. For significant changes (e.g more than small bug fixes), ensure that you have signed the [individual](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Indiv_contrib_agreement.pdf) or [corporate](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Corp_contrib_agreement.pdf) contributor agreement as appropriate. You can send the signed copy to <[email protected]>.
29-
30-
3. Submit the [pull request](https://help.github.com/articles/using-pull-requests). It is ok to submit as a draft if you are still working on it but would like some feedback from us. It is always good to share in the open that you are working on it.
45+
2. Submit the [pull request](https://help.github.com/articles/using-pull-requests). It is ok to submit as a draft if you are still working on it but would like some feedback from us. It is always good to share in the open that you are working on it.
3146

3247
We'll try to be as responsive as possible in reviewing and accepting pull requests. Very much appreciate your contributions!

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ body:
2222
2323
Finally, so that we can get the most out of your bug report, consider reading our ["Bug Reports" guide](https://quarto.org/bug-reports.html).
2424
25+
**Using an AI assistant to investigate?** Point it to the codebase first — see [Using AI tools to investigate](https://github.com/quarto-dev/quarto-cli/blob/main/.github/CONTRIBUTING.md#using-ai-tools-to-investigate) in CONTRIBUTING.md.
26+
2527
Thank you for using Quarto!
2628
2729
---

.github/pull_request_template.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ Welcome to the quarto GitHub repo!
22

33
We are always happy to hear feedback from our users.
44

5-
To file a _pull request_, please follow these instructions carefully: <https://yihui.org/issue/#bug-reports>
6-
7-
If you're a collaborator from outside `quarto-dev` making changes larger than a typo, please make sure you have filed an [individual](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Indiv_contrib_agreement.pdf) or [corporate](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Corp_contrib_agreement.pdf) contributor agreement. You can send the signed copy to <[email protected]>.
5+
To file a _pull request_, please follow these instructions : <https://github.com/quarto-dev/quarto-cli?tab=contributing-ov-file>
86

97
Also, please complete and keep the checklist below.
108

@@ -22,9 +20,23 @@ print("Hello Quarto!")
2220

2321
I have (if applicable):
2422

25-
- [ ] filed a [contributor agreement](https://github.com/quarto-dev/quarto-cli/blob/main/CONTRIBUTING.md).
2623
- [ ] referenced the GitHub issue this PR closes
2724
- [ ] updated the appropriate changelog in the PR
2825
- [ ] ensured the present test suite passes
2926
- [ ] added new tests
3027
- [ ] created a separate documentation PR in [Quarto's website repo](https://github.com/quarto-dev/quarto-web/) and linked it to this PR
28+
29+
<!-- If an AI assistant helped prepare this PR, uncomment and complete this section:
30+
31+
<details>
32+
<summary>AI-assisted PR</summary>
33+
34+
- **AI tool used**: e.g., Claude Code, Copilot, ChatGPT
35+
- **Codebase grounding**: e.g., DeepWiki MCP, Context7 MCP, local clone, llms.txt
36+
- **Human review**: I have reviewed, tested, and verified the AI-generated content before submitting.
37+
38+
Note: autonomous AI agents submitting PRs without human oversight are not permitted — see the [Code of Conduct](CODE_OF_CONDUCT.md).
39+
40+
</details>
41+
42+
-->

CONTRIBUTING.md

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
main_commit: 10946d28a
3+
analyzed_date: 2026-04-17
4+
key_files:
5+
- src/format/html/format-html-axe.ts
6+
- src/resources/formats/html/axe/axe-check.js
7+
- src/resources/schema/document-a11y.yml
8+
---
9+
10+
# Testing Axe Accessibility Checks
11+
12+
Workflow for exercising Quarto's `axe:` feature against real rendered output when triaging accessibility reports or validating fixes. For the internal architecture (dependency injection, reporters, sass bundles), see `axe-accessibility-architecture.md`.
13+
14+
## Quarto's Scan Configuration
15+
16+
`axe-check.js` calls `axe.run()` with only these options:
17+
18+
- `exclude: ["[data-tabster-dummy]"]` — works around microsoft/tabster#288
19+
- `preload: { assets: ["cssom"], timeout: 50000 }`
20+
21+
No `runOnly` filter — Quarto surfaces the full default rule set (WCAG 2.0 A/AA + WCAG 2.1 + best-practice). This matters when comparing Quarto's output against an external axe scan: they should agree rule-for-rule.
22+
23+
## Runtime Signals
24+
25+
Two DOM markers are useful for automated testing:
26+
27+
- **`<script id="quarto-axe-checker-options" type="text/plain">...`** — base64-encoded JSON of the `axe:` options, injected at build time by `format-html-axe.ts`. Patching this string switches output mode in a pre-rendered HTML file without re-rendering:
28+
29+
```bash
30+
# Switch output: document → json in place
31+
sed -i 's|eyJvdXRwdXQiOiJkb2N1bWVudCJ9|eyJvdXRwdXQiOiJqc29uIn0=|g' output/index.html
32+
# ({"output":"document"} ↔ {"output":"json"})
33+
```
34+
35+
- **`document.body.dataset.quartoAxeComplete === "true"`** — set by `axe-check.js` once the scan finishes. Use as a wait condition in headless-browser tests.
36+
37+
## Output Modes Recap
38+
39+
- `json` — one `console.log(JSON.stringify(result, null, 2))` call with the full axe result. Not stdout. Needs a browser to capture.
40+
- `console` — one `console.log` per violation with targets.
41+
- `document` — visual overlay (HTML), slide (RevealJS), or offcanvas (dashboard).
42+
43+
## Testing Pipeline
44+
45+
For a11y triage against a user's repro repo:
46+
47+
1. Clone the repro into a scratch dir (not inside `quarto-cli`).
48+
2. Render with the dev Quarto build: `package/dist/bin/quarto.cmd render`.
49+
3. Either run with `axe: output: json` in `_quarto.yml`, or patch the base64 config in the rendered HTML as above.
50+
4. Serve the output locally — `simple-http-server.exe --nocache -i -p PORT path/`.
51+
5. Scan with `agent-browser` (uses Chrome via CDP):
52+
53+
```bash
54+
agent-browser --session scan open "http://localhost:PORT/index.html"
55+
agent-browser --session scan wait --fn \
56+
'document.body.getAttribute("data-quarto-axe-complete") === "true"'
57+
agent-browser --session scan console > result.txt
58+
# extract the last [log] entry and feed to jq
59+
```
60+
61+
## Running Axe Manually (Full Control)
62+
63+
Quarto's built-in scan fires soon after `DOMContentLoaded`. For pages with late-arriving content (htmlwidgets, profvis, late-mounted callouts), the built-in scan can miss violations that a later scan would catch. Run axe directly via `agent-browser eval`:
64+
65+
```bash
66+
agent-browser --session scan eval --stdin <<'EOF'
67+
(async () => {
68+
const axe = await import("https://cdn.jsdelivr.net/npm/[email protected]/+esm");
69+
const results = await axe.default.run(document, { resultTypes: ["violations"] });
70+
return results.violations.map(v => ({
71+
id: v.id, impact: v.impact, nodes: v.nodes.length,
72+
targets: v.nodes.map(n => n.target), tags: v.tags
73+
}));
74+
})()
75+
EOF
76+
```
77+
78+
Use the same axe-core version (`4.10.3` at the time of writing) as bundled in `axe-check.js` to keep rule parity with Quarto's own scan.
79+
80+
## Comparing With / Without Fixes
81+
82+
To identify which violations a proposed patch resolves vs. which remain, render twice — once with the patch disabled, once with it enabled — and diff the rule IDs. `include-after-body:` is the right hook for injecting a JS fix without touching Quarto internals during triage.
83+
84+
## Tips
85+
86+
- The axe-core bundled version is loaded from `cdn.skypack.dev` at runtime. Offline environments will silently fail; note this when triaging reports that blame a "missing" scan.
87+
- If a scan only surfaces 1–2 violations where you expected many, the built-in scan likely ran before the page finished rendering. Run axe manually via eval to confirm.
88+
- Some violations change with viewport size (sidebar visibility, scrollable regions). Note the viewport when recording findings — `agent-browser` defaults to 1262×568 in headless mode.

src/resources/language/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,4 @@ We welcome contributions of additional languages! To contribute a localization:
4646

4747
2. Translate the English strings therein to the target language.
4848

49-
3. Submit a [pull request](https://help.github.com/articles/using-pull-requests) with your new language translation. Before doing this please ensure that you have signed the [individual](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Indiv_contrib_agreement.pdf) or [corporate](https://posit.co/wp-content/uploads/2023/04/2023-03-13_TC_Corp_contrib_agreement.pdf) contributor agreement as appropriate. You can send the signed copy to [jj\@rstudio.com](mailto:[email protected]).
49+
3. Submit a [pull request](https://help.github.com/articles/using-pull-requests) with your new language translation.

tests/smoke/build-ts-extension/_extensions/test-engine/_extension.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ version: 1.0.0
44
quarto-required: ">=1.6.0"
55
contributes:
66
engines:
7-
- test-engine.js
7+
- path: test-engine.js

0 commit comments

Comments
 (0)