Commit Graph
12 Commits
Author SHA1 Message Date
codex_bot Bot ef95d7ff31 Integrate reviewed shared methodology into PDAT/claude-plugins
Local candidate by Codex_pda; combines current default-branch base with reviewed adoption head.
Tree preserves the exact reviewed bootstrap-only content. No remote publication or experiment implementation.
2026-10-03 00:21:21 +02:00
codex_bot Bot 7f20a0a7e2 docs: adopt the shared PDAT methodology revision 2 2026-10-02 13:08:18 +00:00
codex_bot Bot 0d5f55bf73 docs: adopt the shared PDAT methodology revision 2 2026-10-02 13:08:17 +00:00
TomUviandClaude Opus 5 a7f5d352ef Note that testing a translation needs the bundle, not the locale
Fixing the Czech plurals turned up a trap worth recording: String(localized:
locale:) reads the language from the bundle, while locale: only drives
number and date formatting. A test that passes a Czech locale and nothing
else quietly compares English strings — ours failed with "1 coupon" ==
"1 kupón", which reads as broken plurals when the plurals were fine and
the test was looking in the wrong place.

Also that a plural variation must reference the number, so a key
extracted as "%@" cannot carry one and the build says so outright.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:42:28 +02:00
TomUviandClaude Opus 5 3ad73df76a Sweep the whole blog, not just the front page
153 posts under the SwiftUI tag, plus wwdc25 and wwdc26. Filtering them
against what our code actually contains turned up one real defect and a
short list worth keeping.

The defect is plurals. A checkout screen renders "\(count) coupons",
whose Czech translation is the single form "%lld kupónů" — so it says
"1 kupónů" and "3 kupónů", wrong for every count below five. The article
that surfaced it recommends inflect:, which covers English, Spanish and
six others but not Czech, the language that needs three forms rather than
two. Plural variations in the String Catalog are the fix for us; the
entry says so rather than repeating the article's advice.

Two entries are filed against a future rather than now: swipe action
buttons draw their titles from iOS 26, which will surprise us the day we
add a custom one, and a Form inside a sheet covers the glass behind it,
which starts to matter if the payment sheet ever gets a medium detent.

The rest is recorded as swept and skipped, with reasons — including that
Core Spotlight and the search tab are things we already do correctly, and
that three posts are covered better by the skills shipping inside Xcode.
A sweep that leaves no trace of what it rejected gets repeated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 09:38:55 +02:00
TomUviandClaude Opus 5 463f45cacb Write down what actually made a UI test go red
The earlier entry said only "suspect what the test does not control".
Having now found it, the specifics are worth more than the warning.

State leaks between UI tests because @AppStorage is UserDefaults and the
simulator keeps them for days; the fix is a debug hook writing to the
normal domain, because launch arguments land in NSArgumentDomain and
outrank the app, making settings unchangeable rather than merely
predictable. Elements below the fold of a lazy container genuinely do not
exist, which reads exactly like a bug. Both cost a full evening.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 22:23:42 +02:00
TomUviandClaude Opus 5 542dd925d0 Record being wrong about which change broke a test
A UI test went red in the same run that adopted three new APIs. The one
touching that screen was reverted; the test still failed. A modifier
order was corrected; still failed. Simulator data was wiped; still
failed. Running it against a clean checkout — which should have been the
first move, not the fourth — it failed there too, with none of the work
present.

The scrolling entry had already been rewritten to explain the fault in
confident detail. That write-up was fiction, so it now says what actually
happened: the API was convicted on circumstance and remains unproven
here, and the one claim that survives is about its two-way binding
costing invalidations.

xcode-practice gets the general lesson, since it will outlive this
particular test: stash and rerun before reasoning about which edit did
it, and a note recording a false cause is worse than no note, because
the next person believes it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 01:04:24 +02:00
TomUviandClaude Opus 5 f5a3d932fa Correct the source type for the marketplace itself
The previous commit changed the settings snippet to "url" on the grounds
that no "git" type exists. That reasoning conflated two things the
documentation deliberately separates: where the catalogue comes from and
where an individual plugin comes from. The list of github/url/git-subdir
applies to the second. Adding the marketplace for real settled it —
Claude Code wrote "git" into known_marketplaces.json itself.

So the snippet says "git" again, now with the HTTPS URL that works, and
spells out the distinction rather than leaving the next person to trip
over it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 23:27:16 +02:00
TomUviandClaude Opus 5 ed392b8c46 Document the URL that the marketplace command actually accepts
/plugin marketplace add turns down ssh://host:port/path, and SSH's
git@host:path shorthand has nowhere to carry a non-standard port, so the
SSH URL we push over is unusable for installing. The repository is public
and the HTTPS URL needs no credentials, so that is the one to hand out.

Also corrects the settings snippet: the git-based source types are
github, url and git-subdir. There is no "git" type, which is what the
previous version claimed, and a team following it would have got a
marketplace that never loaded.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 23:25:08 +02:00
TomUviandClaude Opus 5 83ae9d6bea Name the marketplace after us, not after one platform
Apple work is what exists today, but the methodology skills sitting
unversioned in ~/.claude/skills are the same problem and will want the
same home. A marketplace name is the key users register it under, so
renaming later would mean everyone removing and re-adding it. Cheaper to
be right now.

Marketplace is `pdat`, repository is claude-plugins, and the install
lines carry the real Gitea URL.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 23:20:35 +02:00
TomUviandClaude Opus 5 f84852d49c Collect findings from other people's writing, with sources
The skill so far only held what we broke ourselves. Most of what is worth
knowing about a new SDK is found rather than suffered — release notes,
other people's articles — and that deserves a place too, on terms that
stay fair to whoever wrote it.

So: entries in our own words, source named and linked, and the one thing
no external article can supply — what it would replace in our code and
whether it is genuinely a step forward. Attribution answers plagiarism,
not copyright, so nothing is pasted; an API signature is a fact, the
paragraph explaining it is not ours to take.

First four entries come from Natalia Panferova's writing at nilcoalescing
.com: the close button role and concentric corners, both of which replace
things we hand-built; ScrollPosition, which replaces one wrapper view;
and the iOS 27 toolbar APIs, which we cannot use at our deployment target
but which would delete a workaround the day we can.

A LICENSE was overdue and now says plainly what is ours, what is Apple's
and stays out of the repository, and what belongs to the authors we cite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 23:14:51 +02:00
TomUviandClaude Opus 5 905ad2ce3e Start a plugin marketplace for Apple platform work
Skills have been living inside one app's repository, which means the next
Xcode project starts without them and a copy is the only way to share.
A marketplace makes them installable once at user scope.

Two kinds of knowledge, handled differently. What Apple ships with Xcode
stays Apple's: this repository carries a script that exports it from the
locally installed Xcode rather than a copy, so nobody redistributes
pre-release material and everyone's guidance matches their own SDK.

What we learned by shipping goes in the skill, and only if it burned us —
the file writes hidden in view bodies, the blobs that froze the main
thread, the watch target that quietly stopped compiling, the test summary
that reads as zero tests when eighty-four passed. Each of those cost real
time twice before being written down.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 23:07:08 +02:00