import: say in the plan that the groups beside a card are filtered
The plan and AGENTS.md still described the picker the filter
replaced: a flat list of boxes with a text field under it for a new
group. Both now say what the screen does — a filtered list whose
filter is also how a group this book does not have yet is asked for,
and the same filter the groups dialog uses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KrREeoPLXx1qsYYq7qkL8h
change
commit 9b672372e3368871c83c8208752d78a73c2b215e
author Claude <noreply@anthropic.com>
date
parent 150dafcb
diff --git a/AGENTS.md b/AGENTS.md
index 22d542d..f20c30f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -40,9 +40,9 @@ profiles, so leave those to the user.
 Importing is not a task at all: a .vcf is uploaded at `/import` in the
 app, and reviewed there contact by contact — the card as the file wrote
 it beside the card that is coming in, with the lines no screen here
-shows struck, and this book's groups as boxes to tick beside a box for a
-new one — before the lot is written through the store, into a group made
-for the import and whichever groups each contact was given
+shows struck, and this book's groups as a filtered list of boxes to tick
+— before the lot is written through the store, into a group made for the
+import and whichever groups each contact was given
 (docs/plans/2026-09-21-import-a-vcf.md). The `import:*` tasks, the Swift
 reader they drove Contacts.app with, and the plan directories they wrote
 are gone.
diff --git a/docs/plans/2026-09-21-import-a-vcf.md b/docs/plans/2026-09-21-import-a-vcf.md
index c5bfc22..a51d455 100644
--- a/docs/plans/2026-09-21-import-a-vcf.md
+++ b/docs/plans/2026-09-21-import-a-vcf.md
@@ -109,10 +109,10 @@ So the review is a walk, four screens rather than a submission:
    imported" beside it, a strike on its own being a color. On the
    right, the contact editor, pre-filled with what was read and
    pointed at the import, with this book's groups under its fields as
-   boxes to tick and a box to name one it does not have yet. Read the
-   spouse's name off the left card and type it
-   into the note on the right, in your own words, and put the contact
-   where it belongs while you are looking at it.
+   a filtered list of boxes to tick, the filter doubling as the way to
+   name one it does not have yet. Read the spouse's name off the left
+   card and type it into the note on the right, in your own words, and
+   put the contact where it belongs while you are looking at it.
 4. **Confirm**, under a group for the lot, and the cards are written as
    the walk left them.
 
@@ -192,16 +192,25 @@ dialog make:
 
    The per-contact boxes ride in the editor's own form, so one Save
    writes the card and its groups together and there is no second
-   button to wonder about. Under them is a box for a group this book
-   does not have yet, and what it writes is a name rather than a
-   group: nothing is in the store until the confirm, and a group
-   created while the walk was still going is one left behind by an
-   import that was abandoned. A name waiting like that shows as a box
-   of its own, ticked and in the italic the groups dialog gives a name
-   that is not a group yet, so it can be taken off again. What each
-   contact is joining is read back on its row in the list, because the
-   walk is a screen at a time and the list is where ten screens' worth
-   of decisions are seen at once.
+   button to wonder about. They are filtered, the groups dialog's own
+   filter rather than a second one (`Admin::GroupFilter`, which both
+   pickers now render): a book with three hundred groups is the same
+   screen as a book with three, and this is the screen the walk opens
+   once per contact.
+
+   The filter is also how a group this book does not have yet is
+   asked for. Naming no group exactly, it offers itself as one to
+   make, and what that writes is a name rather than a group: nothing
+   is in the store until the confirm, and a group created while the
+   walk was still going is one left behind by an import that was
+   abandoned. A name waiting like that shows as a box of its own,
+   ticked and in the italic the groups dialog gives a name that is not
+   a group yet, so it can be taken off again — and filtered alongside
+   the real groups, so a name this import is already making is not
+   offered a second time as a name to make. What each contact is
+   joining is read back on its row in the list, because the walk is a
+   screen at a time and the list is where ten screens' worth of
+   decisions are seen at once.
 
 Importing is not idempotent and cannot be. A `.vcf` carries no id this
 server minted, so a second upload of the same file is a second set of