Project, evaluation and classifier workflows

Use the expanded CLI commands and understand their authorization and compute prerequisites.

These workflows use the expanded 0.2.0 command tree. Stable neatlogs-cli@0.2.0 was published on October 6, 2026. The published preview remains 0.2.0-team-test.2. Check the package version before following a new command:

npm view neatlogs-cli dist-tags --json
neatlogs --version

Use a profile bound to your intended cloud region and project. OAuth login requests read scopes by default; request the write scopes for your chosen workflow explicitly. Current roles, entitlements and project membership apply to every request. Service-account support is declared separately on each endpoint.

Project lifecycle and existing-member access

OperationWhat it does
Archive / unarchiveHides a project from normal active-project lists and restores it later.
Access grant / revokeAdds or removes a project role override for an existing organization member. Removing an override preserves any access inherited from organization membership.
Soft deleteUses the dashboard-equivalent project deletion behavior. It does not certify scheduled physical deletion or accepted-telemetry recovery.

Project mutations require human OAuth with project:write and a role allowed to manage the project. Select the exact project before a lifecycle operation, and use the resource UUID required by --confirm:

neatlogs projects current --json
neatlogs projects archive --confirm '<project-uuid>' --idempotency-key '<unique-key>'
neatlogs projects list --include-archived --json
neatlogs projects unarchive --confirm '<project-uuid>' --idempotency-key '<new-key>'

Access updates do not invite new organization members:

neatlogs projects access grant '<member-uuid>' --role project_viewer --idempotency-key '<unique-key>'
neatlogs projects access revoke '<member-uuid>' --confirm '<member-uuid>' --idempotency-key '<new-key>'

See project commands for soft deletion and exact options. Lifecycle changes affect the selected project; use a disposable project when testing.

Evaluation drafts and reviewer-aware activation

Saving an evaluation draft does not start review assignments. Before activating it, save its current form, choose eligible reviewers and define a review duration. Existing-trace evaluations also need a selected cohort.

neatlogs evals get '<evaluation-uuid>' --json
neatlogs evals form get '<evaluation-uuid>' --json
neatlogs evals activate '<evaluation-uuid>' --body-stdin --idempotency-key '<unique-key>' <<'JSON'
{
  "reviewerUserIds": ["<reviewer-uuid>"],
  "reviewDuration": "1h",
  "maxItems": 100,
  "maxAssignments": 100
}
JSON

Activation requires human OAuth with evaluation:write. Reviewers must be eligible for the evaluation; duplicate or ineligible reviewer IDs are rejected. maxItems and maxAssignments bound the work admitted by this request. Reuse the same idempotency key only when retrying the exact request.

Evaluation configurationActivation behavior
Existing tracesAssigns the selected cohort using the saved current form.
Future one-time collectionCollects until its configured end, then applies the review window.
Recurring collection starting nowCan create a bounded first batch immediately.
Recurring collection starting laterRetains its future start and next-batch clock without a premature batch.

Scheduled collection caveat (October 6, 2026): Production testing found that traces arriving after the last periodic matcher pass can be omitted from the final batch when collection ends. This affects short future windows and the last interval of longer windows. A backend fix is being prepared for Dev; until it is promoted and retested, independently verify the final cohort before relying on scheduled collection.

An active evaluation cannot be discarded as a draft. A never-launched draft can be discarded with its exact UUID:

neatlogs evals discard '<evaluation-uuid>' --confirm '<evaluation-uuid>' --idempotency-key '<unique-key>'

Draft discard also removes its draft dependencies. It supports the credentials declared on its endpoint, including authorized service accounts. Review submission, evaluation completion and generated batch reports are separate outcomes; read their status independently. See evaluation commands.

Classifier labels, datasets, training and publication

The classifier workflow has explicit stages:

  1. Create an unpublished classifier definition.
  2. Save positive and negative labels referencing real spans in the selected project.
  3. Request a bounded dataset job with an explicit budget.
  4. Train against a ready dataset version with a separate explicit budget.
  5. Publish a ready trained version for the selected span types.
neatlogs classifiers create --body-stdin --idempotency-key '<unique-key>' <<'JSON'
{"displayName":"Support quality","method":"setfit"}
JSON
neatlogs classifiers labels list '<classifier-uuid>' --limit 25 --json
neatlogs classifiers datasets list '<classifier-uuid>' --limit 5 --json
neatlogs classifiers training list '<classifier-uuid>' --limit 5 --json

Classifier reads use configuration:read; writes use configuration:write and human OAuth. Labels must reference spans belonging to the same project. A saved definition is not a trained model, and training does not automatically publish a detector.

Dataset and training requests require budgetMicrousd. One million micro-USD equals one US dollar. The request budget is an admission ceiling; it does not turn on a disabled deployment or bypass provider approval.

The entire public classifier workflow is disabled in production as of October 6, 2026. This includes creating definitions and reading definitions, labels, datasets, training and job status. The disabled tier-c-compute capability returns 404 / NOT_FOUND_OR_OPERATION_DISABLED (CLI exit 5). Provider-job admission is separately disabled. Detection suggestions, detection preview and analytics export share the disabled compute capability. Obtain workflow access and agreed limits before using these operations or starting provider jobs. Use classifier commands for exact bodies, job polling and cancellation.

ProblemCLI result
Invalid label referenceInput/usage exit 2.
Dataset or classifier not readyResource-state exit 6.
Provider admission unavailableAvailability exit 7; no provider job should be inferred from the request.
Response exceeds limits or fails its contractServer/contract exit 11.

Read the structured problem's code and requestId when diagnosing a failure. Repeatedly retrying a disabled admission will not enable it.

Bounded historical detection rescoring

Historical rescoring runs a detection over an explicitly limited range of existing traces. It is separate from Keyword Search indexing and project deletion.

Every request must supply all five limits:

FieldContract bound
days1–90 days
maxTraces1–1,000 traces
batchSize1–100 traces per batch
maxDurationSeconds60–3,600 seconds
budgetMicrousd1–100,000,000 micro-USD

The job records progress so callers can poll its state and request cancellation. Admission, completion and cancellation are separate states; poll until a terminal result before treating the work as finished. The limits describe the request contract, not a recommended production backfill size.

Production execution requires separate compute admission and an explicitly approved historical-work plan. It remains gated in this release. See detection commands for backfill, backfills get and backfills cancel.

Retry and readback

Use a fresh idempotency key for a new mutation and the original key for an exact retry. Wrong confirmation UUIDs are rejected before the intended mutation. Independently read the project, evaluation, classifier or job after changing it; a successful submission alone does not establish asynchronous completion.

The operation availability guide distinguishes deployed contracts from enabled compute and accepted workflows. The OpenAPI JSON provides the exact request and response schemas for client generation.

On this page

Ask Neatlogs AI

Answers from the docs

How can I help?

Ask anything about instrumenting, tracing, or the Neatlogs dashboard.