Skip to content

Add Copilot app for Beginners to the Learning Hub 🤖🤖🤖 - #4485

Open
DanWahlin wants to merge 2 commits into
mainfrom
danwahlin-app-course-learning-hub
Open

DanWahlin wants to merge 2 commits into
mainfrom
danwahlin-app-course-learning-hub

Conversation

@DanWahlin

@DanWahlin DanWahlin commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • I have read and followed the Guidance for submissions involving paid services.
  • My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
  • I have run npm start and verified that README.md is up to date.
  • I am targeting the main branch for this pull request.

Description

Add the approved GitHub Copilot app for Beginners course to the Learning Hub. Import from github/copilot-app-for-beginners at 61a5da6f2e73c1ca2025061a1611bc7c19b83d69 (source commit). All pages and images use this one source commit. The target branch was created from main at 143a3d976b3c1603cc8932984d5e1f28501cb5fc.

The approved scope is the source overview README and chapters 00-07: nine Markdown pages under website/src/content/docs/learning-hub/app-for-beginners/. They use the existing shared Markdown article layout. There is no separate React course overview or new video carousel. The source video reference remains unchanged.

Copy 79 referenced images (71 WebP and eight SVG files, 6.35 MiB) into website/public/images/learning-hub/copilot-app-for-beginners/, using overview/ and 00/ through 07/. Keep their original formats and bytes. Add course-specific CODEOWNERS entries for the actual docs and public-image paths.

Preserve the source wording, headings, examples, steps, prompts, commands, and assignments. Adapt only frontmatter, website routes, image paths, and required presentation details. Remove the duplicate overview H1 while retaining its anchor. Keep glossary, three appendices, sample documentation, executable files, skills, and setup scripts as specific upstream file or directory links, with their fragments. Retain the source attribution and MIT license link; include the complete source copyright and permission notice. No sample app or training scripts are copied into this repository, and the source repository is not changed.

Expose the course through the current WORKSHOP_LANDING_IDS list and a recommended course card. Keep it classified as a Workshop under Getting started. Update the Markdown hub entry and both surfaces of the existing app guide with a course link. Preserve the Desktop App introductory guide. The existing llms.txt and Pagefind generation include the new pages without a search refactor.

A browser check found that the shared article splitter moved nested H2 headings out of a <details> block. The small shared fix keeps section boundaries and callout extraction outside details and list containers. Add regression tests and exclude hidden nested headings from the article TOC.


Type of Contribution

  • New instruction file.
  • New prompt file.
  • New agent file.
  • New plugin.
  • New skill file.
  • New agentic workflow.
  • New canvas extension.
  • Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
  • Other (please specify): Learning Hub course import, discovery links, and a shared article-layout regression fix.

Additional Notes

Weekly/manual sync: Add .github/workflows/app-for-beginners-sync.md and its compiler-produced .lock.yml using the installed gh-aw v0.89.21. This is active repository automation under .github/workflows/, not a contributed catalog workflow under workflows/. Keep all existing workflow locks unchanged. The shared actions lock adds only the new compiler setup pin and retains the old pins.

The sync has read-only repository and PR access, restricted shell commands and download domains, and safe outputs for a draft PR against main or an update to an owned bot PR. Both outputs restrict paths and use bundle transport, a 10 MiB patch limit, and a 250-file limit. The complete initial course patch measured 8,789,867 bytes. Larger output remains a visible error; images must not be dropped to meet a limit.

The checked-in import helper downloads text and binary images from one exact source SHA. It detects asset-only updates, added or removed referenced images, and chapter directory renames or deletions. It retains stable chapter routes and updates dates only for changed pages or their images. New content outside the approved scope remains linked upstream. It validates the complete import before writing and prunes only manifest-owned files.

source.json records the exact source SHA and file hashes. It is the durable baseline only after its PR merges to main. Cache records are inspected or pending evidence, not applied state. Cache loss, a failed output, or a declined PR cannot suppress an older update. An open owned sync PR is updated rather than skipped. The workflow cannot close human PRs, force-push, or auto-merge. The general Learning Hub updater now explicitly excludes this course and its sync-owned links.

Validation performed: Commands used Node 24.21.0 where applicable. Root and website dependencies were restored after the first build reported missing packages; no dependency manifests changed.

Command or check Result
npx --yes --package=node@24 -c 'npm ci --quiet && npm ci --prefix website --quiet' Passed
npx --yes --package=node@24 -c 'npm start' Passed; no unrelated generated changes
npx --yes --package=node@24 -c 'npm run website:build' Passed locally; the updated preview CI build also passed
npx --yes --package=node@24 -c 'node --test .github/scripts/app-for-beginners-sync.test.mjs website/src/lib/learning-hub-article.test.ts' Passed, ten tests
node .github/scripts/app-for-beginners-sync.mjs --sha 61a5da6f2e73c1ca2025061a1611bc7c19b83d69 --check Passed against the actual upstream downloads; nine pages, 79 images, no differences
gh aw compile app-for-beginners-sync --validate --no-check-update Passed; generated the new lock
gh aw compile app-for-beginners-sync --no-emit --validate --no-check-update Passed
gh aw compile learning-hub-updater --no-emit --no-check-update Passed; its body is a runtime import, so its existing lock stays unchanged
A11Y_BASE_URL=http://127.0.0.1:4337/ npx --yes --package=node@24 -c 'npm run --prefix website a11y' Passed, 24 routes in light and dark, including all nine course pages and a visible fallback-anchor regression check; zero axe violations
Independent local Marked/Playwright comparison script Passed: source prose/code/structure for all nine pages; all 79 image hashes and bytes; all nine HTTP routes; local images and anchors; 13 specific upstream supporting links and fragments; source previous/next/home navigation; visible catalog card; HTML, details, tables, and admonitions
Live preview browser checks Passed for all nine pages at 1440px and 390px, in light and dark: 36 passing states, no page errors, duplicate IDs, image overflow, or axe violations
Live image checks Passed: every course image decoded; all 79 localized images returned HTTP 200 and matched the source SHA-256 hashes
Pagefind and llms.txt checks Passed; course results and all nine canonical listings are present
bash eng/fix-line-endings.sh Ran, but BSD sed on macOS rejected the script's GNU sed -i syntax. Portable LF checks passed. The script was not changed.
git diff --cached --check Passed after normalization

The helper tests cover initial import, unchanged content, unrelated commits, cache loss, pending-PR updates, image-only changes, renames/deletions, out-of-scope additions, source failures, and path guards. The layout tests cover nested details/list structure, existing section/callout behavior, and redundant heading anchors. No source training scripts or practice issue/PR creation were run. The temporary preview and dev servers were stopped.

Follow-up live review: Commit d1bb5aa7 fixes the Chapter 06 fallback link. An empty source anchor duplicated the rendered heading ID, and the sticky hero could cover the target heading after a fragment jump. The render pass now removes only redundant empty heading anchors, and nested IDs use the existing hero scroll offset. The source Markdown is unchanged. The accessibility route matrix now covers every course page and checks that the fallback link opens its details block and leaves the heading visible.

The updated preview was built and deployed successfully by preview run 37244895047. The complete nine-page live audit was repeated against this commit and passed. Internal links and chapter navigation passed. Of 52 external destinations, 49 returned HTTP 200; two rate-limited GitHub file links were verified through the GitHub API. The public GitHub signup page blocked automated verification with HTTP 403. No course link returned HTTP 404.

Maintainer runtime check: The new app-for-beginners label was created and verified; automated-update and learning-hub already exist. Live scheduled execution was not run, so the Copilot runtime checkbox above remains open. Confirm repository/organization credential availability and scope for the existing GH_AW_GITHUB_TOKEN / GH_AW_GITHUB_MCP_SERVER_TOKEN pattern, and GH_AW_CI_TRIGGER_TOKEN if generated PRs must trigger CI. These names were not present in the repository secret-name listing; organization availability was not verified. Reading the repository Actions PR-permission setting returned HTTP 403. A maintainer must confirm that Actions can create/update PRs and run one manual sync after merge. Do not provide token values in this PR.

This PR is now ready for human review. Do not merge it or enable Agent Merge without explicit user approval.


By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.

@github-actions github-actions Bot added new-submission PR adds at least one new contribution website-update PR touches website content or code workflow PR touches workflow automation labels Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

🟡 Contributor Reputation Check: MEDIUM risk

Check Risk
Profile MEDIUM
Credential audit NONE

Maintainers: please review this contributor before merging.
See the workflow run for full details.
Automated check powered by AGT.

@github-actions github-actions Bot added needs-review:MEDIUM Contributor reputation check flagged MEDIUM risk awaiting-automation merge-risk:high labels Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

🚦 Submission status: 👀 Ready for review

Risk tier: merge-risk:high — Privileged execution, automation, or review-policy change
Required to merge: passing submission-gate checks plus 2 approvals from reviewers with write access, including a maintainer with admin or maintain permission.

Why this tier
  • .github/aw/actions-lock.json is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/scripts/app-for-beginners-sync.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/scripts/app-for-beginners-sync.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/workflows/app-for-beginners-sync.lock.yml is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/workflows/app-for-beginners-sync.md is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/workflows/learning-hub-updater.md is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • CODEOWNERS is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/workflows/app-for-beginners-sync.lock.yml has no diff available to scan for privileged capabilities

Automated checks

Check Status Details
Line endings ✅ Passed Passed · logs
Spelling ✅ Passed Passed · logs
Submission gate tests ✅ Passed Passed · logs
Contributor reputation ✅ Passed Passed · logs
Duplicate resource scan ✅ Passed Passed · logs
PR quality signal ⚠️ Failed (advisory, non-blocking) The workflow did not complete successfully · logs

Action needed

  • ⚠️ Advisory checks did not complete (PR quality signal). This does not block the PR.

Review

  • Approvals: 0/2
  • Assigned reviewer: not assigned yet — comment /request-review to ask for one
  • Review target date: not set
  • Still needed: 2 more approval(s); an approval from a maintainer with admin or maintain permission
  • The core-maintainers pool is not staffed yet; an approver with admin or maintain permission is required instead.

Commands

Command Who What it does
/rerun-checks PR author, maintainers Re-runs failed or incomplete checks and re-evaluates this gate
/request-review PR author, maintainers Asks the review rotation to assign a reviewer (adds needs-reviewer)

Updated for d1bb5aa · gate run · This comment is maintained automatically — see submission gate docs.

@DanWahlin DanWahlin added app-for-beginners Copilot app for Beginners Learning Hub course learning-hub labels Oct 4, 2026
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Oct 4, 2026
@DanWahlin
DanWahlin marked this pull request as ready for review October 5, 2026 00:04
@DanWahlin
DanWahlin requested a review from a team as a code owner October 5, 2026 00:04
Copilot AI balanced review requested due to automatic review settings October 5, 2026 00:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The sync can emit metadata-only PRs and does not enforce the promised 250-file limit when updating an existing PR.

Review effort: Balanced
Findings: 2 Medium severity

Open (2)
What changed in this PR

Imports the approved GitHub Copilot app for Beginners course into the Learning Hub and adds automation for future upstream synchronization.

Changes:

  • Adds nine course pages, licensing data, and 79 referenced images.
  • Adds discovery links plus article-layout, anchor, TOC, and accessibility fixes.
  • Adds a weekly sync workflow, import helper, generated lock, and regression tests.
File Description
CODEOWNERS Assigns course ownership.
.github/​aw/​actions-lock.json Pins the new workflow compiler action.
.github/​scripts/​app-for-beginners-sync.mjs Implements source-faithful imports.
.github/​scripts/​app-for-beginners-sync.test.mjs Tests import and update scenarios.
.github/​workflows/​app-for-beginners-sync.md Defines weekly/manual synchronization.
.github/​workflows/​app-for-beginners-sync.lock.yml Compiles the sync workflow.
.github/​workflows/​learning-hub-updater.md Excludes sync-owned course content.
website/​scripts/​a11y-audit.mjs Audits course routes and anchors.
website/​src/​components/​brand/​LearningHubIndex.tsx Adds the recommended course card.
website/​src/​components/​brand/​learning-hub/​GithubCopilotApp.tsx Links the app guide to the course.
website/​src/​components/​brand/​styles/​github-copilot-app.module.css Offsets nested anchor targets.
website/​src/​layouts/​LearningHubArticle.astro Filters nested headings and duplicate anchors.
website/​src/​lib/​learning-hub-article.ts Preserves nested HTML structure.
website/​src/​lib/​learning-hub-article.test.ts Covers article splitting and anchors.
website/​src/​pages/​learning-hub/​index.astro Registers the workshop landing page.
website/​src/​content/​docs/​learning-hub/​index.md Adds the Learning Hub course link.
website/​src/​content/​docs/​learning-hub/​github-copilot-app.md Adds a guided-course link.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​index.md Adds the course overview.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​00-setup.md Adds setup instructions.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​01-tour-the-app.md Adds the app tour.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​02-sessions-worktrees-context.md Adds sessions and context training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​03-development-workflows.md Adds development workflow training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​04-skills-custom-agents.md Adds skills and agents training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​05-mcp-plugins.md Adds MCP and plugin training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​06-canvases.md Adds canvas training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​07-automations.md Adds automation training.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​source.json Records source provenance and hashes.
website/​src/​content/​docs/​learning-hub/​app-for-beginners/​source-license.txt Preserves the upstream MIT notice.
website/​public/​images/​learning-hub/​copilot-app-for-beginners/​** Adds 79 course images across the overview and chapters 00–07.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +220 to +221
const sourceMappingChanged = !existing || JSON.stringify(existing.files) !== JSON.stringify(files);
if (changed.length || sourceMappingChanged) {
fetch: ["*"]
fetch-depth: 0
safe-outputs:
max-patch-files: 250

This branch was successfully deployed

1 active deployment
github-pages — d1bb5aa7 Deployed Oct 4, 2026 by DanWahlin via deploy #681
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app-for-beginners Copilot app for Beginners Learning Hub course learning-hub merge-risk:high needs-review:MEDIUM Contributor reputation check flagged MEDIUM risk new-submission PR adds at least one new contribution ready-for-review Submission passed intake validation and is ready for maintainer review website-update PR touches website content or code workflow PR touches workflow automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants