@mytegroupinc/myte-core
v0.0.57
Published
Myte CLI core implementation.
Readme
@mytegroupinc/myte-core
Implementation package for the myte CLI.
Most users should install the public wrapper instead:
npm install myte- run with
npx myte ...
This package exists so the public wrapper can stay small and versioned cleanly. It is not the recommended public install target.
Requirements
- Node
18.17+ MYTE_API_KEYfor project-scoped commandsMYTEAI_API_KEYformyte aiMYTEAI_API_KEYformytecodygitonly when usingquery --with-diff- The CLI uses Node built-ins for env loading, argument parsing, direct HTTP,
and local serialization.
undicisupplies portableHTTP_PROXY/HTTPS_PROXY/NO_PROXYsupport across the supported Node versions.
Behavior Summary
myte doctor --jsonperforms read-only package, credential-presence, DNS, TCP/TLS, authenticated config, proxy, and workspace checks without exposing keys, proxy values, request bodies, or response bodies.myte infoandmyte --version --verboseshow the wrapper/core topology, runtime dependencies, expected npm graph size, and version compatibility.- Network diagnostics preserve nested transport causes and distinguish DNS, TCP, TLS/certificate, timeout, captive portal/non-JSON, authentication, authorization, rate-limit, and server failures.
- Safe transient reads and query polling use bounded retries. Query creation reuses one idempotency key across ambiguous retries.
- Snapshot-style commands such as
bootstrap,sync-qaqc,feedback-sync, andsuggestions syncwrite localMyteCommandCenterdata. bootstrapalso writesMyteCommandCenter/MyteBuildHarness.mdandMyteCommandCenter/data/build-topology.yml; these capture the project execution protocol and normalized topology without granting write permission.build verify --jsonis a read-only local convergence check. It verifies the last bootstrap, active mission completion, actionable mission-operation state, per-mission terminal QA/QC coverage with no failed or pending cases, semantic/UI review evidence, and repository-gate evidence. It does not run QA/QC, repository tests, or semantic review itself.- Successful
mytecommands perform a cached, best-effort check for a newer package version and print any notice tostderr;--jsonoutput onstdoutremains valid JSON. Disable it with--no-update-checkorMYTE_PACKAGE_UPDATE_CHECK=0. feedback-syncprefers stable ObjectId cursor pagination so concurrent inserts cannot shift later pages. It remains compatible with older offset-only API versions and rejects duplicate cross-page records instead of committing an ambiguous local snapshot.feedback-synckeeps stable comment IDs and nests every comment attachment under its originating comment. Readable text, Markdown, and DOCX attachment context is materialized underMyteCommandCenter/feedback-sync/comment-attachments; binary formats remain visible as metadata-only context. Raw S3/object-storage URLs are not written into local sync artifacts.feedback status|edit|document-add|assign|archive|refinewrites reviewable local YAML artifacts.feedback submit|revise|commentare live writes that require--confirm-write --approval-artifact <path>.feedback review|move|undo|applyare governed writes with backend permission checks but no approval artifact flags.feedback-sync|get|history|reviews|prd-versions|prd-diff|validateandfeedback tickets list|validate-create|validate-updateare read/sync/validation commands with no approval artifact flags.feedback move|comment|undo|prd-versions|prd-diff|historycalls the project-key Feedback API while leaving lifecycle rules and permissions server-side.feedback move --feedback-idssends one batch move request.feedback validate|applyremains available for validation and owner-direct apply paths; live authorization, stale checks, and history stay server-side.query --with-diffrequires project repos to be configured for diff collection and fails fast when no matching local project repo can be resolved.query --jsonreturns the stable request ID, query job ID, answer, context-block count payload, and telemetry without echoing the query text.- Public package documentation is intentionally minimal. Internal rollout and design notes are not part of the npm package contract.
mytecodyis a model-agnostic MyteCody team launcher. It supportsdoctor,doctor --probe-gateway,update --dry-run, andupdate. On first coding run, it installs the branded MyteCody engine and signed client assets from the Myte release manifest into a user-local Myte cache after signature/hash checks. Coding execution requires those assets, a reachable Myte AI Cody gateway, andMYTEAI_API_KEY. Normal coding runs use the branded Codex harness with Myte context hardening; the experimental controller is not the default product path.mytecody doctorreports both the signed MyteCody engine state and this npm package version.mytecody updateupdates the engine only. Usenpm install -g myte@latestto update the launcher and the Myte API CLI commands shipped by npm.
Live Write Approval
Only selected project-key writes require a server-validated approval envelope. The CLI adds write_approval metadata only for those commands after the caller supplies --confirm-write --approval-artifact <path>.
| Category | Commands | Artifact |
| --- | --- | --- |
| Required | create-prd, update-team, update-owner, update-client, feedback submit, feedback revise, feedback comment, feedback tickets create/update/coverage, suggestions create, suggestions revise | Yes |
| Not required | run-qaqc, mission status, mission archive, suggestions review, feedback review, feedback move, feedback undo, feedback apply | No |
| Never required | config, query, bootstrap, sync-qaqc, feedback-sync, suggestions sync, feedback get/history/reviews/prd-versions/prd-diff/validate, local feedback draft commands | No |
- The approval artifact must be a local
.md,.markdown,.yml,.yaml, or.jsonfile shown to and approved by the user. - The artifact must list the exact operation, proposed change, and every target id or PRD item.
- Batch artifacts for required actions must enumerate every item and the CLI sends the matching batch count to the API.
- For required actions, the API validates the payload hash after stripping transport metadata, so direct HTTP writes with only the API key do not bypass approval.
- For actions marked
Not required, the backend still enforces project-key authentication, idempotency, owner/delegate capability rules, stale-state guards, validation, rate limits, and audit history. - In plain language, the artifact is the human-reviewed record of the exact write the agent is about to send. It is not a permission grant and it does not bypass project owner/delegate checks, idempotency, stale-state guards, validation, or audit.
- Minimum artifact contents are the exact command, every target id or PRD item, a complete proposed-change summary, a reason, and
batch_countwhen one command sends multiple items. - Mission edit/create batches use
suggestions createorsuggestions revise; list every item, includingchange_type,mission_idfor updates, proposed title/description for creates, andsuggestion_idplus expected revision for revisions. - Without
--document-set,create-prd fileA.md fileB.md ...creates independent Feedback items as before. With--document-set, one to three Markdown files of at most 250,000 characters each create one parent Feedback with ordered PRD documents. List every file/title/client ref and the matching count in the approval artifact. - Feedback submit/revise/comment artifacts are usually the same YAML or markdown file being submitted. For inline text or stdin, use a separate approval memo with the feedback id or request id and exact content.
feedback document-add --feedback-id <id> --prd-file ./document.mdcreates a governed proposal to append one linked PRD document to the existing Feedback context. The addition is not live until the normalfeedback submit-> owner/delegatefeedback reviewflow applies it.- Governed document additions preserve existing document IDs, append a new stable document, create a new immutable PRD version, and emit
feedback_prd_document_addedso the Feedback context bubble/notification feed can link users back to the updated PRD context. Existing PRD sets may grow to twelve documents; newcreate-prd --document-setuploads remain capped at three. - Every newly created PRD receives immutable version
1and a stable primary document id. The API response returnsactive_prd_version_id,active_prd_version_number, andprimary_document_idfor immediatefeedback tickets createuse. - A sub-ticket may link at most 25 PRD documents. The backend validates that every version/document pair belongs to that exact Feedback/PRD before any single or batch mutation.
- Team, owner, and client update artifacts should name the audience and include the exact message body or a complete summary. Client updates should include target contact ids when used.
feedback review --request-ids,feedback move --feedback-ids,mission status --mission-ids,mission archive --mission-ids, andrun-qaqc --mission-idsare batched governed writes, but they are markedNot requiredand should not receive approval artifact flags.- The package does not bundle the large MyteCody engine binary or the async
Responses bridge implementation. See
THIRD_PARTY_NOTICES.mdandTRADEMARKS.mdfor Codex lineage and Myte brand notices.
Agent Usage Contract
Coding agents should treat MYTE_API_KEY as a project-scoped Project Assistant key:
- Load it from the workspace
.envor environment.MYTE_PROJECT_API_KEYis accepted as a compatibility fallback. - Call
myte config --jsonfirst when project identity or local repo detection is uncertain. - Hydrate mission context with
bootstrapfirst instead of scraping the web UI.bootstrapwrites mission cards, mission suggestion thread state, andMyteCommandCenter/AgentsMyteAPI.md. - Read
MyteCommandCenter/MyteBuildHarness.mdandMyteCommandCenter/data/build-topology.ymlbefore implementing a new project. Organize work by workflow/domain topology and map frontend/backend ownership before changing code. - Run
myte build verify --jsononly after the final bootstrap and preserve its QA/QC, semantic-review, and repository-gate evidence files for review. - The build verifier does not run QAQC, repository tests, or semantic review; run those steps first and preserve their evidence for verification.
- Use
suggestions synconly when you need to refresh mission review-thread state without refreshing the full board. - Use
query --with-difffor project-scoped code review, planning, and implementation questions. - Use
create-prdonly with reviewed markdown files and--confirm-write --approval-artifact <path>. The markdown file body is the PRD document;descriptionis only the short board/card summary. - New PRDs are unassigned by default. Add
--assigned-user-id <id>or--assigned-user-email <exact-email>to validate and assign an eligible project user in the same create request. - Use
create-prd --document-setonly when the explicit intent is one parent Feedback with one to three ordered documents; omitting it preserves independent multi-file creation. - Use
feedback status|edit|assign|archive|refinefor reviewable local artifacts.feedback submitandfeedback reviserequire an approval artifact;feedback reviewdoes not because the backend owner/delegate decision is the approval control. - Use
feedback review --request-idsfor batch owner/delegate decisions; it sends one grouped backend batch, not one request per item. - Use
suggestions createfor both existing-mission edits and new-mission proposals, with--confirm-write --approval-artifact <path>. The only validchange_typevalues areupdateandcreate. - Use
suggestions reviseonly against an existingsuggestion_id, with--confirm-write --approval-artifact <path>; do not sendchange_typeon revisions because the backend keeps the thread's original type. - Use
suggestions reviewfor owner/elevated mission-review decisions:approve,request_changes, orreject. No approval artifact is required for review decisions. - Use
mission archivefor project-key lifecycle archival. Do not sendArchivedthroughmission status; restore archived missions from the web archived-board view. - Use
feedback moveonly when a direct audited state move is intended and include a concrete--reason. Use--feedback-idsfor batch active-state moves or authorized batch archive. - Use
feedback comment --feedback-id <id> --body-file ./comment.md --confirm-write --approval-artifact ./comment.mdfor text-only feedback-specific implementation notes. Attachments remain web UI only for this project-key endpoint. - Do not use the project-key API/CLI to unarchive Feedback. Normal
feedback-syncexcludes archived Feedback; unarchive from the web archived Feedback view. - Use
update-team --confirm-write --approval-artifact <path>when an agent needs to leave a project-level implementation note or verification comment.
Do not use MYTE_API_KEY against account/JWT web endpoints. The direct project-key surface is /api/project-assistant/*.
PRD document contract:
- Always put the complete PRD in the markdown file passed to
myte create-prd. titlemaps to the feedback/board title.descriptionmaps to the short feedback/card summary and must not contain the full PRD.- Raw markdown uploads send
{ title, description?, prd_markdown }. myte-kanbanuploads send{ ticket_markdown }, where the leading JSON block contains metadata and the remaining markdown is the PRD body.- The backend stores the markdown as
prd_markdown, mirrors it as PRD text for search/sync, generates a DOCX attachment from it, and marksprd_format=markdown. - The UI renders the PRD from stored PRD text/document content, not from
description. - Renderer-friendly PRDs should use one
# Title,##sections, concise paragraphs, bullets, GitHub tables/checklists where useful, and fenced code blocks only for real code/config. - Do not wrap the whole PRD in a
```markdownfence. Do not use raw HTML, inline style blocks, or decorative banners. - PRD identity is explicit:
myte create-prdcreates a PRD asset with PRD metadata. Generic uploaded.md,.docx,.pdf, and.txtfiles remain normal attachments unless explicitly created as PRDs. - Document sets retain exact source Markdown plus canonical rendering Markdown, stable document IDs, per-document hashes, and independent download/read targets.
Project Assistant Connectivity
myte doctor --json should be the first diagnostic when a command reports
fetch failed. A DNS or TCP result means the request did not reach HTTP. A
TLS reset means the secure connection was interrupted before Myte could
receive the API key. Authentication and authorization are reported only when
the API actually returns those responses.
For policy_consent_required, the CLI prints the required policy version and
the mission-board review path. This confirms that the key is valid; the user
who created the key must accept the current policy before Project Assistant
routes can run. Key rotation does not replace that consent step.
The CLI honors HTTP_PROXY, HTTPS_PROXY, and NO_PROXY. It does not log
their values and does not disable TLS verification. Captive portals and
intercepting gateways are reported as non-JSON/HTML transport failures rather
than as malformed Myte API responses.
Feedback comment support:
feedback-syncincludes existing feedback comments withcomment_id, sender, content, timestamps, and attachments nested under the originating comment.- Readable text, Markdown, and DOCX comment attachments are extracted by the
backend under attachment safety limits and written to
MyteCommandCenter/feedback-sync/comment-attachments/<feedback>/<comment>/. The local YAML points to the file. Unsupported binary formats remain listed withcontext_status: metadata_only. Extraction is capped at 20 readable comment attachments per API page by default; additional readable files stay linked to their comments withcontext_status: deferred. Use--comment-attachment-limit <0-100>to change that bounded limit. --no-with-prd-textdisables readable PRD and comment-attachment extraction while retaining comment and attachment metadata.- Feedback-specific comment creation exists in the web backend at
/api/feedbacks/<feedback_id>/comments, protected by JWT/project assignment. - Project-key comment creation is available through
myte feedback comment --feedback-id <id> --body "..." --confirm-write --approval-artifact ./comment.mdor--body-file ./comment.md --confirm-write --approval-artifact ./comment.md. - The project-key feedback comment endpoint is text-only in this slice and caps content at 500,000 characters. Use the web UI when comment attachments are required.
feedback apply --forceis an owner/elevated emergency override for a stale local artifact. It requires the artifact to contain a non-empty reason and returns the persisted force/warning audit context; normal edits should use submit followed by owner/elevated review.
Mission Action Map
| Action | Command / Surface | Contract |
| --- | --- | --- |
| Sync mission cards and review threads | myte bootstrap --json | Refreshes MyteCommandCenter/data/missions/*.yml, project structure, and MyteCommandCenter/data/mission-ops.yml. |
| Sync only mission review threads | myte suggestions sync --json | Refreshes MyteCommandCenter/data/mission-ops.yml while preserving local workspace drafts. |
| Suggest edit to existing mission | myte suggestions create --file ./create.yml --confirm-write --approval-artifact ./create.yml with change_type: update and mission_id | Creates or appends to an active review thread; live mission is unchanged until approval. |
| Suggest new mission | myte suggestions create --file ./create.yml --confirm-write --approval-artifact ./create.yml with change_type: create | Requires change_set.title and change_set.description; creates a review thread only; the mission card is created only after approval. |
| Revise a suggestion | myte suggestions revise --file ./revise.yml --confirm-write --approval-artifact ./revise.yml with suggestion_id | Adds another revision to the same thread. Do not include change_type. |
| Review a suggestion | myte suggestions review with review_action: approve|request_changes|reject | Project Owner or elevated mission-review delegate required; no approval artifact required. Approval mutates/creates the mission once; reject archives the thread only; request_changes keeps it actionable. |
| Update mission status | myte mission status --mission-ids "M001" --status todo|in_progress|done | Project-key surface updates canonical mission status for active cards; no approval artifact required; refreshes local bootstrap + mission-ops by default. |
| Archive mission | myte mission archive --mission-ids "M001[,M002]" --reason "..." | Project Owner or elevated delegate required; no approval artifact required. Sets Archived, removes cards from normal bootstrap/board state, writes mission activity, and refreshes local bootstrap + mission-ops by default. |
Create payloads:
items:
- change_type: update
mission_id: M001
change_description: Tighten acceptance criteria
change_set:
acceptance_criteria:
- The API returns a stable error code for invalid input.items:
- change_type: create
change_description: Add observability mission
change_set:
title: Add mission observability
description: Track mission lifecycle actions with safe audit metadata.Revise payload:
items:
- suggestion_id: 507f1f77bcf86cd799439302
expected_revision: 1
change_description: Revise after review
change_set:
description: Updated proposed mission description.YAML note: quote scalar values that contain : or other YAML-significant punctuation.
Finding Mission And Suggestion IDs
Run this first:
myte bootstrap --jsonThen read:
| Needed Value | Local Source |
| --- | --- |
| Existing mission business id | MyteCommandCenter/data/missions/*.yml -> mission_id, for example M001. |
| Pending suggestion id | MyteCommandCenter/data/mission-ops.yml -> queue[].suggestion_id or threads[].suggestion_id. |
| Existing suggestion latest revision | MyteCommandCenter/data/mission-ops.yml -> threads[].latest_revision or threads[].latest_server_revision.revision. |
| Existing suggestion review revision | MyteCommandCenter/data/mission-ops.yml -> threads[].review_revision. |
| Thread type | MyteCommandCenter/data/mission-ops.yml -> threads[].change_type, either update or create. |
Agent rule: never guess suggestion_id. If mission-ops.yml is missing or stale, run myte bootstrap --json again. Use myte suggestions sync --json only for a narrow refresh after a mutation.
Feedback Action Map
| Command | What It Does | Governance |
| --- | --- | --- |
| feedback-sync | Pulls non-archived feedback metadata, comments, and PRD context into MyteCommandCenter. | Read-only project-key API call; archived Feedback is intentionally excluded. |
| feedback get | Reads one feedback item's current server snapshot and snapshot_hash. | Read-only; backend checks project access. |
| feedback status | Creates a local YAML proposal to change canonical lifecycle state. | No live mutation until submit and owner/delegate review, except owner-direct apply. |
| feedback edit / feedback refine | Creates a local YAML proposal for title, description/body, priority, due date, tags, or notes. | Content changes go through owner-review membrane. |
| feedback document-add | Creates a local YAML proposal to append one linked Markdown PRD document to an existing Feedback item. | Owner-only field; normal submit/review/apply flow, stale protection, idempotency, version history, and notification apply. |
| feedback assign | Creates a local YAML proposal to change assignee. | Goes through review unless applied through owner-direct path. |
| feedback archive | Creates a local YAML proposal to archive. | Archive is governed by backend owner/delegate capability. |
| feedback submit | Sends a local proposal artifact to the backend as a review request. | Requires --confirm-write --approval-artifact <path>; does not mutate live feedback before approval. |
| feedback revise | Resubmits the original submitter's request after request_changes. | Requires --confirm-write --approval-artifact <path>; only valid for the original submitter and needs_changes requests. |
| feedback reviews | Lists review requests or fetches one request by --request-id. | Read-only; response includes backend permissions. |
| feedback review | Approves, rejects, requests changes, or cancels one review request, or a batch with --request-ids. | No approval artifact required; backend restricts approval/review decisions to Project Owner or elevated delegate for Feedback scope; batch review uses one grouped notification path. |
| feedback move | Moves a card or batch of cards across allowed board states directly with an audit event. | No approval artifact required. --feedback-ids sends one batch request. Blocked with pending_feedback_review while an active linked review request exists; governed states such as archive/reject/deploy/freeze remain backend-authorized. Project-key unarchive is not supported. |
| feedback comment | Creates a text-only comment on one Feedback item. | Requires --confirm-write --approval-artifact <path>; backend checks project-key access, owner/assigned permission, idempotency, and the 500,000-character content cap. Attachments remain web UI only. |
| feedback tickets list | Lists all engineering subtickets linked to one Feedback/PRD. | Synchronous project-bound read; ticket summaries are also present in feedback-sync. |
| feedback tickets create | Creates one ticket or one bounded batch from JSON/YAML. | --dry-run calls server validation; live writes require an approval artifact and idempotency. Batches are capped at 100 and return per-ticket receipts. |
| feedback tickets update | Revision-fences one update or batch-updates --ticket-ids in one request. | CLI reads current revisions for flag-based batches; stale or duplicate targets fail the whole batch. |
| feedback tickets coverage | Updates one ticket-to-PRD document coverage state. | Requires the ticket revision plus structured approval; the CLI resolves the current revision when omitted. |
| feedback undo | Reverses an audited board event when there is no conflict. | No approval artifact required; backend validates event ownership/project scope and conflict state. |
| feedback prd-versions | Lists retained PRD baselines/revisions for a feedback item. | Read-only; old S3 objects are retained by reference. |
| feedback prd-diff | Fetches backend-generated text diff for PRD versions. | Read-only; backend controls version access. |
| feedback history | Lists audited feedback board/refinement events. | Read-only; backend checks project access. |
| feedback validate | Sends an artifact to backend validation without mutation. | Useful before submit or owner-direct apply. |
| feedback apply | Applies an artifact through the owner-direct/emergency path. | No approval artifact required; not the normal collaborator flow; normal flow is submit -> review. |
Canonical feedback lifecycle states are frozen, todo, in_progress, in_review, completed, deployed, rejected, and archived.
Feedback Permission Matrix
| Project role | Feedback permissions |
| --- | --- |
| Project Owner | Full Feedback lifecycle: view/sync/comment, draft/validate/submit, direct apply, approve/request changes/reject/cancel reviews, assignment, governed board states, archive, version history, and diffs. |
| Elevated collaborator (owner_delegate) | Same operational Feedback authority as the Project Owner, including direct apply, approval, assignment, governed board states, and archive. Project-level privilege grant/revoke and unrelated destructive infrastructure operations remain real-owner controls. |
| Builder collaborator | View/sync/comment, create and validate local edits, submit/revise/cancel their review requests, self-assign, and move active work through todo, in_progress, in_review, and completed. Cannot approve, directly apply, unassign others, archive, reject, freeze, or deploy Feedback. |
| Client collaborator | View/sync and participate in Feedback discussion. Does not receive builder edit, submit, assignment, or board-operation capabilities. |
| Organisation owner not assigned to the project | View access only; no project Feedback mutation authority. |
Stale local artifacts fail validation/apply with snapshot_mismatch. Re-sync,
review the newer server state, and create a fresh artifact; force is not part
of the normal collaborator workflow.
Reusable live smoke harness after deploy:
node ./scripts/feedback-live-full-harness.js --confirm-live --base-url https://api.myte.dev/apiFor strict owner/elevated/builder permission certification, set distinct
MYTE_OWNER_API_KEY, MYTE_DELEGATE_API_KEY, and
MYTE_COLLABORATOR_API_KEY values scoped to the same test project and add
--require-role-matrix. To certify a real web-created comment attachment,
provide an ephemeral MYTE_WEB_ACCESS_TOKEN for an assigned test user and add
--require-comment-attachment-sync.
The harness creates five disposable TEST feedback items plus one
three-document Feedback item. It verifies comment sync, optional comment
attachment materialization, stale-artifact rejection and fresh re-sync,
request-changes/revise, owner and elevated approvals, regular collaborator
denials, batch review and board movement, per-document refinement/version diff,
exact-ID archival, archived sync exclusion, and project-key unarchive denial.
Direct Project API Surface
All routes use Authorization: Bearer <MYTE_API_KEY>. The CLI adds idempotency and client-session headers on mutation routes.
myte ai is separate from this project-scoped surface. It uses MYTEAI_API_KEY and calls POST https://api.myte.ai/v1/chat/completions, or ${MYTEAI_API_BASE}/v1/chat/completions when that base is configured.
Read/sync routes:
GET /api/project-assistant/query/<job_id>GET /api/project-assistant/configGET /api/project-assistant/bootstrapGET /api/project-assistant/qaqc-syncGET /api/project-assistant/feedback-syncGET /api/project-assistant/feedback/<feedback_id>GET /api/project-assistant/feedback/<feedback_id>/refinement/historyGET /api/project-assistant/feedback-review-requestsGET /api/project-assistant/feedback-review-requests/<request_id>GET /api/project-assistant/feedback/<feedback_id>/eventsGET /api/project-assistant/feedback/<feedback_id>/ticketsGET /api/project-assistant/feedback/<feedback_id>/prd/versionsGET /api/project-assistant/feedback/<feedback_id>/prd/versions/<version_id>/diffGET /api/project-assistant/suggestionsGET /api/project-assistant/run-qaqc/<batch_id>
Mutation routes:
POST /api/project-assistant/queryPOST /api/project-assistant/run-qaqcPOST /api/project-assistant/mission-status-updatePOST /api/project-assistant/mission-archivePOST /api/project-assistant/project-commentPOST /api/project-assistant/update-ownerPOST /api/project-assistant/client-update-draftsPOST /api/project-assistant/create-prdPOST /api/project-assistant/create-prdsPOST /api/project-assistant/feedback/<feedback_id>/refinement/validatePOST /api/project-assistant/feedback/<feedback_id>/refinement/requestsPOST /api/project-assistant/feedback-review-requests/<request_id>/revisePOST /api/project-assistant/feedback/<feedback_id>/refinement/applyPOST /api/project-assistant/feedback-review-requests/<request_id>/reviewPOST /api/project-assistant/feedback-review-requests/batch-reviewPOST /api/project-assistant/feedback-review-requests/<request_id>/request-changesPOST /api/project-assistant/feedback-review-requests/<request_id>/cancelPOST /api/project-assistant/feedback/<feedback_id>/board-movePOST /api/project-assistant/feedback/batch-board-movePOST /api/project-assistant/feedback/<feedback_id>/commentsPOST /api/project-assistant/feedback/<feedback_id>/ticketsPOST /api/project-assistant/feedback/<feedback_id>/tickets/batchPOST /api/project-assistant/feedback/<feedback_id>/tickets/batch/validatePATCH /api/project-assistant/feedback/<feedback_id>/tickets/<ticket_id>PATCH /api/project-assistant/feedback/<feedback_id>/tickets/batchPOST /api/project-assistant/feedback/<feedback_id>/tickets/batch-update/validatePATCH /api/project-assistant/feedback/<feedback_id>/tickets/<ticket_id>/prd-coveragePOST /api/project-assistant/feedback/<feedback_id>/events/<event_id>/undoPOST /api/project-assistant/suggestionsPOST /api/project-assistant/suggestions/revisePOST /api/project-assistant/suggestions/review
Query and QAQC status polling honors additive server timing from Retry-After
and next_poll_after_ms, with bounded client jitter. This keeps one busy IDE
fleet from synchronizing poll bursts. Older servers remain compatible through
the existing bounded backoff fallback.
The API keeps bounded CRUD and snapshot reads synchronous. Query and QAQC are
durable asynchronous workflows; the CLI never assumes that every API action is
a separate Celery task. Feedback sync pages are bounded (100 by default, 500
maximum) and create-prd batch uploads are capped at 20 items by the backend.
