🎉 VSEC Test v4.0.1 is now live! Release Notes ↗
Asset Context Curation

Asset Context Curation

The Context tab on every asset is a living workspace where you feed information to the AI curation engine. The engine processes your inputs and returns an Understanding document — a structured markdown summary of what it knows about the asset — alongside concrete suggestions for properties, links to other assets, and child assets to create. All suggestions are human-confirmed; nothing is written to your assets automatically.

How Curation Works

Curation is triggered automatically in the background whenever you add a context note or upload a document to an asset. The engine:

  1. Assembles the asset’s corpus — all context notes, uploaded documents, inherited material from ancestor assets, and the structured facts already in VSEC: current property values, fully-expanded Record data (with record attachments), and the names of linked assets and risks.
  2. Computes a corpus hash. If the hash matches the last run, the asset is skipped (no re-billing for unchanged assets). Clicking Re-curate bypasses this check and always runs.
  3. Sends the corpus to the configured intelligence provider.
  4. Stores the result: updated Understanding document + structured suggestion rows.
Curation runs are debounced (5 seconds) — rapid successive note additions or uploads coalesce into a single run so you are not charged for every keystroke.

Corpus Limits

LimitValue
Max text per document60,000 characters
Max total corpus text200,000 characters
Max media files (vision)6 files
Max media size per file20 MB
Max media total28 MB
Ancestor depth for inherited context5 levels

Inherited Context

Descendants automatically inherit context from their ancestors (up to 5 ancestor levels): each ancestor’s Understanding document is folded into the corpus, truncated to 4,000 characters per ancestor, and each ancestor’s PDF and image files ride along as vision media. Ancestor text and office documents are not re-read — their content reaches the child only through the ancestor’s Understanding. Curating a parent asset therefore enriches the context available to all of its children without any manual re-upload.

PDFs and images (including wiring diagrams and topology charts) are sent directly to the model’s vision capability. The engine reads diagrams, component labels, and layout information — not just embedded text.

Adding Context Notes

Context notes are free-text observations, summaries, or any other information you want the engine to consider. Example: “The team confirmed this ECU has a debug UART on pins 4 and 5.”

  1. Open an asset and click Add context in the header (or Add context… from the asset’s right-click menu).
  2. On the Add context tab of the dialog, type your note under What do you know about this asset?
  3. Click Add context. The note is saved and a background curation run is queued.

Notes are stored individually and listed in the Context tab’s Context notes panel. You can delete a note at any time from there; deletion also queues a curation re-run.

Uploading Documents

The engine can ingest a wide range of file formats to extract text and visual content.

Supported Formats

CategoryFormats
Office documents.docx, .pptx, .xlsx and their ODF equivalents (.odt, .odp, .ods)
Spreadsheets.xls, .xlsm, .xlsb
Plain text.txt, .md, .csv, .json, .log, .xml, .yaml, .yml, .html
PDF.pdf — sent whole to the provider’s vision capability (no local text extraction)
Images.png, .jpg, .jpeg, .gif, .webp — sent to vision
  1. Open an asset and click Add context in the header (or Add context… from the right-click menu).
  2. On the Add context tab of the dialog, click Attach files and select one or more files, then click Add context to submit them (a note is optional alongside them).
  3. Per-file ingestion status is displayed in the Context tab’s Documents in context list and updates as each file is processed.

Ingestion Status

Each uploaded file shows a color-coded status chip after curation:

StatusColorMeaning
full / visionGreenFile was fully ingested
truncated / not_reachedYellowFile was partially read (corpus size limit reached)
skipped_providerYellowPDFs skipped because the active provider lacks PDF vision
skipped_too_big / skipped_unreadableRedFile could not be processed
skipped_unsupported / skipped_emptyGreyFormat not supported or file was empty
pendingBlueProcessing in progress

A summary line shows “X of Y files ingested in the last curation.”

The Understanding Document

After curation, the Understanding section displays a markdown document written by the AI describing what it knows about the asset: its purpose, interfaces, connectivity, data and functions, and open questions. This document is re-generated on every curation pass and serves as the anchor for all downstream suggestions.

Reviewing Suggestions

Curation produces four categories of suggestions — properties, links, link removals, and child assets — each shown in its own section. Use the Apply selected (N) button to commit accepted rows.

Property Suggestions

The engine proposes values for every property defined by the asset’s type, covering:

  • Scalar fields — plain text or numeric values
  • Single-select enumerations — one value chosen from the type’s allowed list
  • Multi-select / tag fields — zero or more values from the allowed list

Record-type properties are excluded from AI property proposals — their values reference human-managed record instances, so the engine never proposes values for them.

Each row shows the property name, current values (outlined chips), the proposed values (filled chips for new values), and a rationale. For multi-valued properties, accepting a suggestion adds the proposed values without removing existing ones.

Accepting a property suggestion is merge-safe: it sets or appends that specific field only. No other properties are silently deleted.

Link Suggestions

The engine identifies existing assets in your workspace that appear to be related to the current asset. Each suggestion shows the candidate asset name, its type, and the evidence from the corpus.

Select the rows you want and click Apply selected to create the links.

Link Removal Suggestions

The engine can also propose detaching existing links it believes no longer belong, based on the corpus. Removals are destructive, so they are held to a higher bar: only assets that are actually still linked are surfaced, low-confidence removal suggestions are dropped server-side, and rows are opt-in — nothing is detached without explicit confirmation. Accepting a removal detaches the link only; it never deletes the linked asset.

Child Asset Suggestions

When the corpus contains evidence of sub-components, sub-features, or other children not yet in the hierarchy, the engine surfaces them as candidates with a confidence rating.

ConfidenceDefault selectionMeaning
HighPre-checkedAsset is named explicitly in the context
MediumUncheckedAsset is inferred from context

Low-confidence child suggestions are never shown — they are dropped server-side before the list reaches the UI.

Accepting Child Asset Suggestions

  1. Review the suggested children and their rationales.
  2. Check the ones you want to create.
  3. Click Create selected (N).
  4. The platform creates each new asset, links it as a child, generates initial property values from the parent’s corpus, and seeds it with a provenance note explaining its origin so its own curation loop can continue downward.
If an asset with the same name and type already exists in the hierarchy, it will be linked rather than duplicated. The response indicates which assets were created and which were linked.

API Reference

All paths are relative to /api/v1/asset-manager.

MethodPathDescription
GET/assets/:id/contextFetch current context, understanding, and all suggestion rows.
POST/assets/:id/context/entryAdd a new context note. Body: { text }
DELETE/assets/:id/context/entry/:entryIdDelete a context note.
POST/assets/:id/context/applyApply confirmed suggestions. Body: confirmedProperties, confirmedLinks, confirmedRemoveLinks. Child assets are created via create-assets, not here.
POST/assets/:id/context/create-assetsCreate accepted child-asset suggestions. Body: { uuid, children: [{name, type}] }
POST/assets/:id/context/analyzeTrigger a forced re-curation run (ignores corpus hash).

Database Schema

Two schema objects underpin the context system.

am_asset_context (one row per asset, extended by this release)

ColumnTypeNotes
lastCorpusHashVARCHAR(64)SHA-1 of the last curated corpus; prevents redundant re-runs. Added by idempotent bootstrap migration.

am_asset_context_entries (new table — one row per context note)

ColumnTypeNotes
idint PKAuto-generated.
baseAssetIdFK → AMAssetsThe asset this note belongs to.
sourcevarchar(16)'user' for notes typed in the UI; 'system' for provenance notes seeded on child-asset creation; 'email' for submissions from an outside person via a context-request magic link.
textmediumtextThe free-text note body.
authorEmailvarchar, nullableAttribution for an external (source='email') contributor who is not a VSEC user.
authorNamevarchar, nullableDisplay name for an external contributor.
createdByFK → UserOptional — set to the acting user’s ID (null for external contributors).
createdAtdatetimeAuto-managed.
updatedAtdatetimeAuto-managed.

Both schema changes are applied automatically on server startup via idempotent bootstrap checks — no manual migration is required.

Last updated on