Skip to content

chore(copilot): add GitHub Copilot skills from awesome-copilot#69

Merged
jwill824 merged 23 commits into
mainfrom
chore/add-copilot-skills
Mar 21, 2026
Merged

chore(copilot): add GitHub Copilot skills from awesome-copilot#69
jwill824 merged 23 commits into
mainfrom
chore/add-copilot-skills

Conversation

@jwill824
Copy link
Copy Markdown
Owner

Summary

Adds three GitHub Copilot CLI skills sourced from
awesome-copilot to .github/skills/.

Skills Added

Skill Description
context-map Generate a map of all files relevant to a task before making changes
conventional-commit Generate standardized commit messages using the Conventional Commits spec

|
| github-issues | Create, update, and manage GitHub issues via MCP tools |

The github-issues skill includes 8 reference files covering advanced search, sub-issues,
dependencies, issue types, Projects V2, issue fields, and image embedding.

Notes

All skills are up-to-date with the upstream awesome-copilot repository as of installation.

jwill824 and others added 23 commits March 18, 2026 21:04
Add three skills to .github/skills/:
- context-map: generate a file context map before making changes
- conventional-commit: generate standardized commit messages
- github-issues: create, update, and manage GitHub issues via MCP tools,
  with reference docs for search, sub-issues, dependencies, issue types,
  projects V2, issue fields, and images

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds .github/hooks/session-logger/ with hooks that log session start/end
events and user prompt submissions to local JSON log files for audit
and usage analytics.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… switching

- Add compound dev/test scenario tasks with split-pane terminal views
- Each scenario first stops all running processes so terminals auto-close
- Add (keep) variants for test scenarios to retain output for review
- Fix terminal close behavior using process-group signals on the task shell
- Update docs/development.md with VS Code tasks reference section

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…E tasks

Each platform now has its own 4-terminal split view:
backend + frontend + simulator/emulator + maestro.
Maestro waits for the device/simulator to be booted before
running tests, so the tasks can all start in parallel safely.

Also fixes accessibility id selector in task-complete.yaml.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Set JAVA_HOME from SDKMAN in Maestro task commands so VS Code
non-interactive shell can find Java (SDKMAN init scripts do not
run in task shells).

Replace xcrun simctl booted check with xcrun simctl get_app_container
for iOS and adb pm list packages for Android so Maestro only starts
once the app is actually installed, not just when the OS boots.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add .maestro/.env.example with MAESTRO_TEST_EMAIL and
MAESTRO_TEST_PASSWORD placeholders. Add .maestro/.env.local
to .gitignore so real credentials are never committed.

Update iOS/Android E2E VS Code tasks to load .env.local and
pass each var as --env flags to maestro test. Update docs with
one-time setup instructions and Java LTS requirement.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
iOS simulator and Android emulator cannot reach localhost on the host
machine. Use cap run --livereload --external so Capacitor sets server.url
to the Mac LAN IP automatically. Add --host to Vite dev for those same
scenarios so Vite binds to all interfaces and is reachable from the
simulator/emulator.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
--external is not a valid cap run flag. Use --host with the LAN IP
detected at runtime via ipconfig getifaddr so the simulator connects
to the correct Vite dev server address.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The WebView in the simulator cannot reach localhost on the host machine.
Add a simulator Vite mode (.env.simulator.local) that sets VITE_API_URL
and VITE_APP_URL to the Mac LAN IP so all API calls route correctly.

Add dev:simulator script to frontend/package.json. Update all simulator
and emulator VS Code tasks to use dev:simulator instead of dev --host.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ackend

The simulator WebView sends requests from http://10.0.0.x:3000 but the
backend CORS allowlist only contained localhost. The live-reload origin
was being blocked.

Inject NATIVE_APP_ORIGINS dynamically in simulator backend tasks using
the runtime LAN IP so credentials are accepted from the WebView origin.
Also add --host to dev:simulator so Vite binds to all interfaces.
Update backend .env.example with simulator setup instructions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
iOS simulator shares the Mac network stack so localhost resolves
correctly - no LAN IP or NATIVE_APP_ORIGINS needed.

Android emulator uses 10.0.2.2 as the host loopback alias.
Add dev:android Vite mode with .env.android.local for Android tasks.
Android backend tasks keep NATIVE_APP_ORIGINS with LAN IP for CORS.

Rename dev:simulator -> dev:ios and .env.simulator -> .env.ios
to match the platform naming convention used by .env.android.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document platform-specific frontend env files (.env.ios, .env.android,
.env.device) with a summary table. Update iOS simulator section to
reflect live-reload workflow and explain why localhost works. Clarify
NATIVE_APP_ORIGINS Android emulator note.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prepend 'xcrun simctl shutdown all' to all three iOS Simulator tasks
([ios-sim], [ios-e2e], [ios-e2e-keep]) so stale simulator sessions are
always cleaned up before cap run starts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Extract login steps into subflows/login.yaml. Update feed-load and
task-complete to clearState + launchApp + runFlow the subflow so each
flow is independently runnable and does not depend on auth.yaml having
run first in the same session.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… routes

Add e2e-suite.yaml orchestrator that runs all Maestro flows in order
with a shared output.testUser context. setup.js creates a fresh
pre-verified user via HTTP before flows run; teardown.js deletes it
after. Credentials flow through output.testUser.email/password instead
of static --env flags.

- .maestro/e2e-suite.yaml — orchestrator: setup → auth → feed-load → task-complete → teardown
- .maestro/scripts/setup.js — POST /api/test/create-user, store in output.testUser
- .maestro/scripts/teardown.js — DELETE /api/test/delete-user
- flows/auth.yaml + subflows/login.yaml — use output.testUser.email/password
- backend/src/api/test.routes.ts — POST/DELETE /api/test/* (ENABLE_TEST_ROUTES guard)
- backend/src/app.ts — register test routes when ENABLE_TEST_ROUTES=true
- backend/.env.example — document ENABLE_TEST_ROUTES
- .vscode/tasks.json — point Maestro tasks at e2e-suite.yaml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…items

After creating the test user, login via API to get a session cookie then
POST /api/tasks to seed one task. Without this feed-load fails because
a fresh account has no tasks and 'Mark complete' is never visible.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… button

aria-label maps to iOS accessibilityLabel, but Maestro's id: selector
matches accessibilityIdentifier (set by the HTML id attribute). Added
id='mark-complete' / id='reopen-task' to the button in FeedItem.tsx and
updated both Maestro flows to use id: 'mark-complete'.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…yLabel in WebView

In a Capacitor WKWebView on iOS, aria-label maps to iOS accessibilityLabel
which Maestro exposes as accessibilityText in the hierarchy. Maestro's
id: selector matches accessibilityIdentifier (a different property).
Switching to text: 'Mark complete' which matches accessibilityText/Label.
Also reverts the unused id HTML attribute from FeedItem.tsx.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…s import

- task-complete.yaml: assert 'Reopen task' instead of 'Completed'
  (CompletedSection is collapsed by default; the button aria-label flips
  from 'Mark complete' to 'Reopen task' which is always visible)

- teardown: always-run guarantee via shell-level cleanup
  * Added POST /api/test/cleanup endpoint (no email needed — deletes all
    @ordrctrl.test users) to test.routes.ts
  * All six Maestro VS Code tasks now append:
    '; curl ... /api/test/cleanup' so cleanup fires even on flow failure
  * teardown.js tolerates 404 (user already cleaned up)

- backend/src/app.ts: change static import of test.routes to dynamic
  import() inside the ENABLE_TEST_ROUTES guard — prevents prisma/bcrypt
  from loading in CI test workers and fixes the Vitest worker panic

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Merge auth.yaml + feed-load.yaml + task-complete.yaml into a single
  app-flow.yaml — one clearState, one login, all assertions in sequence.
  Eliminates redundant clearState+launchApp+login on every sub-flow.

- Add integrations.yaml — tests Apple Calendar connect flow end-to-end:
  navigate settings → tap '+ Add account' → fill iCloud Email and
  App-Specific Password → assert 'Connected'. Gmail and Microsoft To Do
  are OAuth-redirect based (external browser) so not automatable with
  Maestro.

- Update e2e-suite.yaml to reference the new two-flow structure:
  setup → app-flow → integrations → teardown.

- Add APPLE_TEST_EMAIL / APPLE_TEST_PASSWORD to .env.example with
  instructions to generate an App-Specific Password.

- Integration cleanup is handled by user deletion in teardown.js since
  Integration has onDelete: Cascade on the User relation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace hand-rolled orchestration with Maestro built-ins:

onFlowStart / onFlowComplete hooks (docs.maestro.dev/…/hooks)
- Both app-flow.yaml and integrations.yaml now declare:
    onFlowStart:  runScript: ../scripts/setup.js
    onFlowComplete: runScript: ../scripts/teardown.js
- onFlowComplete is guaranteed to run even when the flow fails,
  replacing the shell-level 'curl cleanup' workaround in VS Code tasks.
- teardown.js guards against output.testUser being undefined in case
  onFlowStart itself fails.

config.yaml + executionOrder (docs.maestro.dev/…/sequential-execution)
- New .maestro/flows/config.yaml with executionOrder:
    continueOnFailure: false
    flowsOrder: [app-flow, integrations]
- Replaces e2e-suite.yaml orchestrator entirely.
- VS Code tasks now run: maestro test .maestro/flows/

Subflow directory move (docs.maestro.dev/…/nested-flows)
- Moved .maestro/flows/subflows/ → .maestro/subflows/ so Maestro's
  workspace scan of .maestro/flows/ does not discover and attempt to
  run login.yaml as a standalone test.
- Flows reference it via ../subflows/login.yaml.

Each flow is now fully self-contained and can be run in isolation:
  maestro test .maestro/flows/app-flow.yaml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ons flow

AccountMenu trigger and all dropdown nav items now use onTouchEnd (with
e.preventDefault()) as the primary handler alongside onClick fallback.

In Capacitor WKWebView on iOS, the overflow-hidden container stack can
absorb synthesised click events; touchend fires before the browser
synthesises mousedown/click and is therefore reliable (same pattern
already applied to the FeedItem checkbox).

Also adds waitForAnimationToEnd after the Account menu tap in the Maestro
integrations flow so the dropdown has time to render before Maestro
searches for the 'Integrations' button.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jwill824 jwill824 merged commit 57e8096 into main Mar 21, 2026
10 checks passed
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.

1 participant