From 25f9e0e7357206923385039be61b878b1fa5f21e Mon Sep 17 00:00:00 2001 From: ArthurErlich Date: Tue, 1 Sep 2026 21:07:19 +0200 Subject: [PATCH] chore: pin Symfony and Microsoft Graph skills for this repo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Research in docs/research flagged missing tooling for the project's actual stack: Symfony backend work and Microsoft Graph calendar sync had no matching local skill. Searched skills.sh and installed project-level: - dev-toolings/superpowers-symfony (11 of 44 skills, matching what stack.md/config-secrets.md already decided on: config/secrets vault, bootstrap check, PHPUnit TDD + functional tests + mocking, controller cleanup, quality checks, DI/autowiring, Cache component, Doctrine migrations). Skipped the API Platform, Messenger/CQRS, hexagonal- architecture, Twig-component, and Pest skills — none of those are part of the decided stack (plain MVC JSON API, no API Platform, TS frontend not Twig, PHPUnit not Pest). - merill/msgraph (offline-indexed Graph API search, no network calls) for the Outlook/Exchange calendar sync decided in stack.md. No CalDAV/Nextcloud skill was installed: every candidate on skills.sh is either a personal-calendar CLI wrapper (vdirsyncer+khal) or gated behind a third-party SaaS account (Membrane) — neither fits writing a PHP backend integration against sabre/dav, which the research doc already speccs out directly. skills-lock.json is tracked; .claude/skills/ payloads are gitignored (msgraph alone is 112MB of multi-platform binaries + SQLite indexes) and restored per-clone via `npx skills experimental_install -y`. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Tu1c13iVNdj1iWL633yazG --- .gitignore | 5 ++++ AGENTS.md | 10 +++++++ skills-lock.json | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 skills-lock.json diff --git a/.gitignore b/.gitignore index 13ff59d..5dd0133 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,8 @@ # Embedded web-server pid file /.web-server-pid +# Claude Code skill payloads (restorable via `npx skills experimental_install` +# from skills-lock.json, which IS tracked) and agent worktree scratch space +/.claude/skills/ +/.claude/worktrees/ + diff --git a/AGENTS.md b/AGENTS.md index 24b5174..735c043 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,3 +7,13 @@ Issues live as Gitea issues on git.arthurerlich.de/haylan/Smart-Tablet-Screen, m ### Domain docs Single-context: `CONTEXT.md` + `docs/adr/` at the repo root. See `docs/agents/domain.md`. + +### Project skills + +`skills-lock.json` at the repo root pins the extra Claude Code skills this project relies on (Symfony, Microsoft Graph). Their payloads aren't committed (large binaries/indexes — see `.gitignore`); restore them once per clone/worktree with: + +``` +npx skills experimental_install -y +``` + +No CalDAV/Nextcloud skill is pinned — none found on skills.sh fit writing a PHP backend integration (candidates were CLI personal-calendar tools or SaaS-gated); see `docs/research/smart-tablet-screen-nextcloud-todos.md` for the sabre/dav-based approach instead. diff --git a/skills-lock.json b/skills-lock.json new file mode 100644 index 0000000..5a3862c --- /dev/null +++ b/skills-lock.json @@ -0,0 +1,77 @@ +{ + "version": 1, + "skills": { + "msgraph": { + "source": "merill/msgraph", + "sourceType": "github", + "skillPath": "skills/msgraph/SKILL.md", + "computedHash": "f5a3d61621226c55a9c4e62831da4176e58239c71e9f8067937dba5d6d86c3f7" + }, + "symfony:bootstrap-check": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/bootstrap-check/SKILL.md", + "computedHash": "b0770d00e974d3077f0dbab3aaab5b644a67cce72f099a9363fd68a6e7262b43" + }, + "symfony:config-env-parameters": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/config-env-parameters/SKILL.md", + "computedHash": "29c30ab73cf591f6940991e1e297836499e1760d390d0fea4faffbf9bc0d42d0" + }, + "symfony:controller-cleanup": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/controller-cleanup/SKILL.md", + "computedHash": "e581ac4fa9f7e59035e17a96cdb306ae6fb4c1fe2bb2ddea75fbc8b3c61b7a7f" + }, + "symfony:doctrine-migrations": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/doctrine-migrations/SKILL.md", + "computedHash": "f567cc35a98fe8ac6e6632d4da5990f974d4028c9517672586c42a3528861425" + }, + "symfony:functional-tests": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/functional-tests/SKILL.md", + "computedHash": "fe487c7a86acc172e4d2d9130d04f7377f3950ce654d095f64a25829b9811435" + }, + "symfony:interfaces-and-autowiring": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/interfaces-and-autowiring/SKILL.md", + "computedHash": "18efd79e2b99806aaf7e3311391191e3041fede2e347d474a3c592af5b6e43e7" + }, + "symfony:quality-checks": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/quality-checks/SKILL.md", + "computedHash": "603a2a61a4515727f2de2a93d5ef7fcc6bb24da6b3d096f58724b81f18b437a4" + }, + "symfony:symfony-cache": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/symfony-cache/SKILL.md", + "computedHash": "92bfade421c2190100ba603b9d0d05d260594be3b4725ba98a9c8963433d7a97" + }, + "symfony:tdd-with-phpunit": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/tdd-with-phpunit/SKILL.md", + "computedHash": "484f05f7a16bf1e161eb4d2770b693526eb156f2a7502ea5833f64f5ef83e233" + }, + "symfony:test-doubles-mocking": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/test-doubles-mocking/SKILL.md", + "computedHash": "943d6a81a333d1a3a454510cf972c38181428a6d6186d1a19cfbe99ea7ffe3e1" + }, + "symfony:using-symfony-superpowers": { + "source": "dev-toolings/superpowers-symfony", + "sourceType": "github", + "skillPath": "skills/using-symfony-superpowers/SKILL.md", + "computedHash": "8666a5b730f5cd8d1b66d07bfdf2afee3bdf0b41acc2a3d699a2bcff55c4151b" + } + } +}