Skip to content

Add contacts import and Import History names for CSV imports - #65

Merged
thedogwiththedataonit merged 21 commits into
mainfrom
claude/contact-imports
Oct 24, 2026
Merged

thedogwiththedataonit merged 21 commits into
mainfrom
claude/contact-imports

Conversation

@thedogwiththedataonit

@thedogwiththedataonit thedogwiththedataonit commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Adds contacts import for named JSON batches in Import History and forwards CSV filenames. File/input/flag precedence and consent are preserved; recurring upsert-many remains the sync path. Terminals show submitted totals, outcome counts, failed rows and warnings with optional row metadata, completed deliverability/persistence results or a background validation job. JSON output preserves the complete API envelope.

Refreshed against CLI main 31d26dd190103624e4fd6651f31d91a0226c39eb, preserving merged category/group #68 and drift recovery #67, including its current-main freshness guard. Canonical generation from stable app #2194 source e87215e3c09418b1c43300b4f343b290a28a8f94 corrects the CSV validation billing description without changing fields or runtime behavior. CLI help and its generated reference now distinguish inline charges per submitted CSV data row from background charges per address. The app and all three YAML mirrors share raw SHA-256 89f71c3eaaee5ed17ce090d0488815d41250a86c13a357cf10d3b14d46f9a763. CSV skip warnings retain the first 100 individual rows plus an aggregate; terminal tables show 20 entries and point to the full JSON response.

Coordinated validation pins reviewed, remotely available SDK #76 commit 7ca8cac2d70dd53244a343ee123b75ed9520b988. It preserves SDK 13 features and version while adding the import method, final row/total types and corrected validation descriptions. bun.lock was regenerated from that source, without a local packed SDK or invented checksum. CLI version 0.17.0 and its published notes remain unchanged.

Validation: a fresh frozen installation from an empty node_modules directory, 67 focused tests across eight files, TypeScript, full Biome (240 files), generated-type and command-doc freshness, build/version smoke and diff checks pass. Imports, completed validation output, canvas behavior, template groups and all three parity sentinels are covered. No live API call, import or package publication was performed.

Keep this draft through app #2194's strict cache/cost evaluation, signed-in acceptance, merge and API deployment, then SDK #76's release. Replace the temporary Git pin with the actual published SDK artifact and regenerate the lockfile before CLI release. Publish docs #326 after its examples are available. Category #68 and sentinel #67 are already merged.

Final app owner #2194 head c2ed746b3558f2a849f4410fa21228646563b0d8 contains these same contract descriptions and artifacts. Owner OpenAPI, contract-audit and generated-reference freshness checks pass against the refreshed consumers.

RetriggerView in GreptileConfidence Score: 5/5

The PR appears safe to merge; no blocking issue was established.

Summary

Adds named JSON contact imports and forwards CSV batch names to Import History.

  • JSON contact imports create named batches in Import History.
  • CSV imports can name their Import History batch.
  • Import commands show counts and row details in the terminal.

Reviews (11) · Last reviewed commit: "build(deps): depend on the published @br..." · Reviewed by Greptile

`contacts import` calls the new `POST /v1/contacts/import` with JSON rows
from a file or stdin, recorded as one Import History batch. `contacts
import-csv` sends the file's name (or `--file-name`) as `fileName`, so the
batch is named in Import History. Both print the returned `importId`.

`upsert-many`'s summary now says up to 1000 contacts and no history entry.
Pins the SDK source commit that adds `contacts.import`; re-vendors the spec.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread src/commands/contacts/import.ts Outdated
thedogwiththedataonit and others added 9 commits October 20, 2026 21:33
- `contacts import`: a JSON object body read from --file keeps its own
  `validate`, `consent` and `fileName`; flags override only when given, and
  a non-array, non-object --file is a usage error (Greptile P1).
- `contacts import-csv`: --file-name, else an --input `fileName`, else the
  --file name.
- CSV validation is metered per row (help text).
- Pins the SDK commit with the shared import response type; re-vendors the
  spec and regenerates types and command docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (its PR merged with main)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…IL_RESULT_UNAVAILABLE

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Counts that add up to the rows submitted, then the failed rows and notes
by row number; --json keeps the envelope. Pins the SDK at 09a89b8 (row,
total, CSV_ROW_SKIPPED) and re-vendors the spec from brew-v2#2194.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread src/commands/contacts/import-summary.ts
Comment thread openapi/public-api-v1.yaml
@thedogwiththedataonit
thedogwiththedataonit marked this pull request as draft October 21, 2026 02:15
@thedogwiththedataonit
thedogwiththedataonit marked this pull request as ready for review October 21, 2026 08:09
thedogwiththedataonit and others added 3 commits October 21, 2026 19:42
…ering

Re-vendored from brew-v2#2194: imports of at most 100 submitted contacts
validate inline at 2 credits per submitted contact (failed rows count);
larger imports bill per address in the background workflow, and
validationJobId comes back only when a job is queued.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-vendored from brew-v2#2194: a CSV row is the parsed data row, so the
header and blank lines are not counted. FIELD_TYPE_COERCED is reported
once per field, and a validation failure after an import names the saved
importId.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The SDK release adds contacts.import and the shared import response, so the
temporary source pin and its release gate are gone; bun.lock resolves the
registry artifact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thedogwiththedataonit
thedogwiththedataonit merged commit 361d236 into main Oct 24, 2026
2 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