Skip to content

fix(datasets): a chat attachment IS a Fileshare file - #73

Merged
sauterbe merged 1 commit into
mainfrom
fix/csv-import-attachments-are-fileshare-files
Aug 12, 2026
Merged

fix(datasets): a chat attachment IS a Fileshare file#73
sauterbe merged 1 commit into
mainfrom
fix/csv-import-attachments-are-fileshare-files

Conversation

@sauterbe

Copy link
Copy Markdown
Contributor

Why

Phase 0 of the guided CSV import currently reads:

Never ask for the CSV as a chat attachment. Attachments cap at 512 KB and inlined text truncates at 20 000 characters — a few percent of a typical export.

That was accurate when a chat attachment travelled inline as base64. It no longer is: the client uploads an attached file to the tenant's file service (Shared Drive / Fileshare) and the agent receives its file_key — the very same key xentral_fileshare(action='upload') returns. See xentral/agent-os#147.

So the instruction now tells the agent to ask a customer to upload a file they already uploaded, and to refuse the shortest path to the import.

What changes

Phase 0 says both routes end in a file_key and that an attached file is already in Fileshare.

The hazard the passage was really about is kept, in the shape it takes now: a file too big to inline arrives as a key plus a labelled sample of the first lines, and a row count or sum taken from that sample is wrong while being specific enough to be believed — import_analyze reads every row for a few KB. That warning is the load-bearing half, so it gets the emphasis rather than being dropped along with the obsolete numbers.

Only skills/xentral-datasets/SKILL.md phase 0 changes; no other skill makes a claim about attachment caps (grepped). reference/csv-import.md is unaffected — its token table is about rows_bulk output, which is unchanged.

python scripts/validate_library.pyOK: 337 library items valid against their schemas. SKILL.md stays at 298 lines, under the 500-line guideline.

After merge

Cut a tag and bump LIBRARY_VERSION in the backend, so the vendored copy stops prescribing the old route. Until then backend/_vendor/skills/ still carries the old text — it must not be edited there directly.

Noticed, not touched

manifest.json's skills array lists eight skills and omits xentral-datasets (the repo has nine). The backend loader resolves skills by directory, so this looks inert, but if the customer plugin reads that array the datasets skill would be missing for them. Worth a look by someone who knows whether that array is load-bearing — deliberately left alone here rather than guessed at.

Phase 0 told the agent to never accept a CSV as a chat attachment, because
attachments capped at 512 KB and inlined text was cut at 20 000 characters. That
stopped being true: a file the customer attaches is uploaded to Fileshare by the
client, and the agent receives its `file_key` — the same key an explicit upload
returns. Telling the customer to upload a file they already uploaded is now the
wrong move, and the old text prescribes exactly that.

What remains true is the danger the passage was really about, so it is restated in
the form it now takes: a file too big to inline arrives as a key plus a labelled
sample, and a row count or total taken from that sample is wrong while being
specific enough to be believed. `import_analyze` reads every row.
@sauterbe
sauterbe merged commit ce0479f into main Aug 12, 2026
1 check 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