Repository navigation
Description
Review the November 6 snapshot and use the existing issues to track the follow-ups. The S3 Vectors pagination fix is tracked in #352.
Scope and evidence
Audit baseline: development at b9c90d7. GitHub inventory was read on 6 November 2026: 192 issues, 79 open and 113 closed; 158 pull requests, 7 open before PR #352 opened. Every open issue appears exactly once in the inventory below. Closed issues were sampled against relevant code and PRs; this is not a reproduction of every closed issue.
Assessments compare issue acceptance criteria, current source/tests, and merged/open PR metadata. A linked or closed PR is not proof that a feature shipped. In particular, the comment on #29 links provisioning-test PR #315, not an edge-storage implementation. Static code presence is not an end-to-end production guarantee.
Issue tracker · Pull requests · Contribution/assignment policy. Ownership is the snapshot assignee shown on each row; “unassigned” is not an assignment. Coordinate existing work before claiming an issue. PR #352 addresses the S3 Vectors regression discovered during the audit.
| Assessment | Open issues | Meaning |
|---|---|---|
| Review closure | 11 | Implementation evidence exists; maintainer acceptance or a narrow follow-up is still required. |
| Partial | 28 | Some requested behavior exists, with explicit gaps listed below. |
| Open PR | 4 | Implementation is being proposed; review/merge and acceptance checks remain. |
| Missing | 31 | The requested public flow or essential deliverable was not found in the inspected code. |
| Epic | 5 | Parent tracking issue; resolve its children rather than treating it as one patch. |
Priorities are audit recommendations: P1 correctness/security or a blocking integration; P2 functional completion; P3 documentation, polish or later architecture. They are not repository labels.
Recommended order
| Order | Work | Completion check |
|---|---|---|
| 1 | Review the QueryVectors fix in #352. | Real boto3/aioboto3 stubs work without a query paginator; all pages are consumed using nextToken; top-k, buffering, errors and rate limiting remain correct. |
| 2 | Coordinate correctness/security gaps #8, #28, #97, #100, #137 and #342 with their owners. | Cross-model caches are isolated; partial writes have a repair strategy; sample IAM is scoped; formatted secrets are redacted; dashboard APIs enforce their access model; routing is invoked once. |
| 3 | Review pending PRs: #348 → #349, #351, and draft #316. | Verify acceptance cases before merging; retire superseded #332/#336 in coordination with their authors. |
| 4 | Review the closure candidates below and reconcile #130/#141. | Update issue state only after maintainer acceptance; retain specific remaining gaps as follow-ups. |
| 5 | Finish persistent telemetry/run history and the shared graph schema. | #127/#128/#299/#301/#302 and #282/#284 provide stable data contracts before building dependent UI. |
| 6 | Build visual/eval/deployment flows on those contracts. | Dataset/gate/run links, canvas round-trip and deployment each have an executable acceptance scenario; expand to GCP/Azure afterward. |
Confirmed defects found while auditing
Selected fix: S3 Vectors queries stop early or cannot start
Both stores requested a query_vectors paginator. The environment produced by make install resolves boto3/botocore 1.40.61, where client.can_paginate("query_vectors") is false and get_paginator raises OperationNotPageableError. Newer AWS APIs support continuation, but both stores checked NextToken instead of the documented nextToken. This silently discarded later results. Earlier tests used the same incorrect uppercase key.
The fix calls query_vectors directly in sync and async stores and forwards a nonempty nextToken. This supports a single response on older SDKs and continuation on SDK/service versions exposing it, without changing dependency constraints. A caller still needs an SDK supporting any request fields/features it uses; this change does not add pagination support to an old service model.
Regression coverage includes real SDK clients with Stubber/AioStubber, multiple service pages, empty intermediate pages, client chunk buffering (including a page size larger than top-k), cursor forwarding, top-k limits, one rate-limit acquisition per request, permanent error translation and retry restart. Tests with realistic lowercase tokens reproduced 15 failures before the production fix. The historical pagination issue #16 is closed, so its tracker state alone did not establish correctness.
Sources: AWS QueryVectors request/response, boto3 query_vectors, and the installed SDK service/paginator model inspected offline.
Follow-ups reproduced without external services
- Optional embedding cache to avoid re-embedding identical text #8: two CachedEmbedder instances of the same backend class, with different model identities and a shared cache, reuse the first model's vector under the default class-based key. Use explicit distinct
model_keyvalues as the current workaround; a full fix must encode actual embedding identity. - feat(dynaflow): introduce multi-agent supervisor and handoff primitives #342: one Supervisor.run call invokes a configured router twice, as shown by a counting router. A stateful router can produce different selections between validation/execution. Reuse the first selected route and add an invocation-count regression.
Track each finding in its corresponding issue. Security-related reproduction details are excluded from this public report in accordance with SECURITY.md.
Open-issue inventory
Each row states source evidence and a concrete next action. “Review closure” is a recommendation for maintainer review, not an automatic closure request. UI acceptance and cloud deployment checks remain separate from offline Python tests.
Review closure (11)
| Issue and snapshot owner | Priority | Evidence | Resolution and acceptance |
|---|---|---|---|
#7 — Retry/backoff for OpenAI embedder rate limits@tikhandesanket |
P2 | src/dynavec/embeddings/openai.py tests/test_openai_embeddings.py PR #242 merged |
429/5xx retries and numeric Retry-After handling exist. Compare the tested header formats with the intended acceptance criteria, then close or narrow the issue. |
#39 — TTL jitter for DynamoDBCache@be-student |
P3 | src/dynavec/cache.py tests/test_cache.py tools/build_docs.py |
DynamoDBCache has bounded configurable TTL jitter, validation, deterministic tests and a caching guide. Review the existing behavior and close; a closed-unmerged PR alone would not establish completion. |
#43 — Cache warmup utility@arshsk16 |
P3 | src/dynavec/cache.py tests/test_cache.py CHANGELOG.md |
warm_cache(client, queries) already populates a configured cache and has tests. Confirm the accepted public name relative to warm(queries), finish any dedicated usage docs, then close or narrow. |
#69 — Semantic Kernel memory connector@tikhandesanket |
P2 | src/dynavec/integrations/semantic_kernel.py tests/test_semantic_kernel.py examples/semantic_kernel_vector_store.py |
A Semantic Kernel vector-store adapter, example and tests exist. Confirm that this fulfills the intended memory connector API on supported Semantic Kernel versions; close or specify the remaining interface gap. |
#75 — Optimized Product Quantization (OPQ)@tikhandesanket |
P2 | src/dynavec/quantization.py tests/test_quantization.py benchmarks/benchmark_opq.py |
OPQRotation and OptimizedProductQuantizer, tests and a recall benchmark exist. Review benchmark methodology/results against the acceptance criteria and close or narrow; PR #198 being closed is not sufficient evidence on its own. |
#79 — Hot/cold sync on writes@Isha-Zaka |
P2 | src/dynavec/client.py tests/test_hot_tier.py |
The sync client fans successful writes/deletes into the hot tier, with write-through and delete consistency tests. Verify the intended scope, then close; failure recovery across stores remains separate work under #28. |
#103 — Cookbook: production RAG with namespaces@tikhandesanket |
P3 | examples/multi_tenant_rag.py tools/build_docs.py PR #239 merged |
The multi-tenant RAG example and namespaces documentation exist. Review the recipe and tenant-authentication guidance against production expectations, then close or narrow. |
#138 — Dashboard: dark mode + theme parity with the landing page@tikhandesanket |
P3 | dashboard/components/ThemeToggle.tsx dashboard/app/layout.tsx dashboard/app/globals.css PR #187 merged |
Dark palette and persisted theme toggle are implemented. Capture the requested parity screenshots and obtain design acceptance before closing; no new theme implementation is needed. |
#176 — dynavec complete landing page revamp@tikhandesanket |
P3 | opensource/dynavec/index.html opensource/dynavec/styles.css PR #347 merged |
The latest merged PR redesigns the landing page and docs. Request visual acceptance of that implementation and close or list concrete remaining defects; avoid starting another full redesign. |
| #310 — Landing page: "How they fit together" diagram unassigned |
P3 | opensource/dynavec/index.html opensource/dynavec/styles.css PR #347 merged |
The landing page now includes a four-stage ecosystem cycle and SVG artwork. Verify the single flow/caption and desktop/mobile readability against the issue, then close or specify the visual gap. |
| #311 — Landing page: positioning vs LangChain / LangGraph (parity + differentiators) unassigned |
P3 | opensource/dynavec/index.html docs/roadmap.md PR #347 merged |
The landing page includes a capability comparison with availability markers. Cross-check every status against the actual SDK/visual/deployment flows and approve the wording before closure. |
Open PR (4)
| Issue and snapshot owner | Priority | Evidence | Resolution and acceptance |
|---|---|---|---|
#40 — Redis Cluster / TLS support@sriram1900 |
P2 | src/dynavec/cache.py PR #316 open |
PR #316 describes itself as work in progress. Coordinate with its author to add cluster-client selection, TLS options and docs, then run backend parity tests. Keep the issue open until implementation is merged. |
#290 — Conversation / short-term memory store on DynamoDB@shivamm-gupta |
P2 | PR #349 open PR #336 open src/dynavec/agents/react.py |
Review #348 first, then the maintainer port #349 stacked on it. The #349 description supersedes #336; avoid another implementation and verify multi-turn memory, trimming, restart and interrupt/resume together. |
#296 — Human-in-the-loop / interrupts@Uzmaa7 |
P1 | PR #348 open PR #332 open src/dynavec/agents/react.py |
Review maintainer port #348, which supersedes #332. Verify approve/reject, provider-valid tool message ordering and restart-safe resume; separately verify the issue's timeout/expiry criterion before closure. |
| #305 — Regression runs & CI gating (fail when a metric drops) unassigned |
P1 | src/dynavec/eval/trend.py PR #351 open |
Review #351 instead of rebuilding its gate. Verify threshold polarity, zero/NaN/missing metric handling, persisted baselines, CLI exit codes and the GitHub Actions example; the unmerged PR does not resolve the issue. |
Partial (28)
| Issue and snapshot owner | Priority | Evidence | Resolution and acceptance |
|---|---|---|---|
#8 — Optional embedding cache to avoid re-embedding identical text@tikhandesanket |
P1 | src/dynavec/embeddings/cached.py src/dynavec/embeddings/cache.py tests/test_embedding_cache.py |
Caching exists, but the default model key is the embedder class name. Include provider/model/dimension identity or require an explicit key when sharing a cache; test two models of the same class sharing one backend. |
| #26 — Support provisioned billing + autoscaling docs unassigned |
P3 | src/dynavec/provisioning.py src/dynavec/config.py ARCHITECTURE.md |
PROVISIONED mode already creates 5 RCU/5 WCU. Document capacity planning, application autoscaling setup/IAM and an example config; distinguish the current fixed defaults from automatic scaling. |
#51 — Client-side rate limiting / backpressure@GenZ-CODER-X |
P2 | src/dynavec/utils.py src/dynavec/config.py src/dynavec/stores/s3vectors.py tests/test_s3vectors.py tests/test_async_s3vectors.py |
TokenBucket, put_rps/query_rps and sync/async hooks already exist. Add deterministic burst/refill and concurrent contention tests, document limits, and audit remaining put/query paths before closure. |
#62 — Incremental / delta ingestion@Pratham1603 |
P2 | src/dynavec/ingest.py src/dynavec/metadata.py |
Within-call deduplication exists, but there is no stored-hash comparison across runs. Add an opt-in per-chunk skip_unchanged path, preserve unconditional overwrite by default, and test changed metadata/text plus records without hashes. |
#64 — Ingest MCP tools & prompts primitives@GenZ-CODER-X |
P2 | src/dynavec/ingest.py src/dynavec/agents/connectors.py |
MCPResourceSource ingests resources and agent connectors expose tools, but ingestion adapters for tool/prompt definitions are absent. Add duck-typed source adapters and fake-session tests without executing tools. |
| #85 — dynavec CLI: provision/upsert/query/stats unassigned |
P2 | src/dynavec/cli.py tests/test_cli.py pyproject.toml |
The CLI already has version/doctor/export/import/mcp. Add provision/upsert/query/stats commands, explicit config/.env precedence and offline parser/error tests. |
| #89 — moto-based DynamoDB integration tests unassigned |
P2 | tests/test_provisioning.py tests/test_dynamodb.py tests/test_dynamodb_ttl.py tests/test_async_dynamodb_moto.py .github/workflows/ci.yml |
Moto provisioning/versioning/TTL and async round-trip tests already run through pytest in CI. Complete explicit batch put/get/delete round-trips and failure cases, then close or narrow instead of adding a duplicate suite. |
| #93 — Credentials assume-role test unassigned |
P2 | src/dynavec/credentials.py tests/test_credentials.py |
The async test mocks AWSCredentials.session(), bypassing STS. Stub STS assume_role directly and assert role/session/external ID forwarding and temporary credentials, including failures and source-profile region behavior. |
| #95 — Release automation notes / changelog unassigned |
P3 | CHANGELOG.md .github/workflows/publish.yml tools/build_docs.py |
Changelog, release publishing workflow and release notes already exist. Add a maintainer release checklist covering version/tag consistency, build checks and verification of the published package. |
| #96 — Coverage + PyPI + CI badges in README unassigned |
P3 | README.md opensource/dynavec/index.html .github/workflows/ci.yml |
README PyPI/CI badges exist; coverage publishing and a coverage badge are absent. Define the coverage source/threshold, publish its report and verify all requested badge links on both surfaces. |
| #99 — KMS encryption docs for table + bucket unassigned |
P2 | ARCHITECTURE.md docs/iam-policy.json src/dynavec/provisioning.py |
Encryption has a brief architecture note, but no SSE-KMS recipe or key-policy guidance. Document table/bucket creation settings, required KMS/IAM permissions and an example; do not imply provisioning currently accepts KMS configuration. |
#100 — Redact secrets from any logging/errors@tenten48tenten |
P1 | src/dynavec/logging.py tests/test_logging.py tests/test_run_logging.py |
Redaction helpers and tests exist. Complete an audit and synthetic-secret coverage across messages, tracebacks and AWS/provider errors; coordinate remediation with the assignee and follow SECURITY.md for any vulnerability details. |
#101 — Auto-generate API reference (pdoc)@raunak3208 |
P3 | tools/build_docs.py .github/workflows/pages.yml |
The static docs are hand-authored in build_docs.py. Add a reproducible pdoc API-reference build/publish step, optional dependency handling and a public-symbol smoke check. |
| #128 — Client telemetry hook (opt-in) to record query events unassigned |
P2 | src/dynavec/client.py src/dynavec/telemetry.py tests/test_telemetry.py |
Search telemetry is opt-in via a recorder and omits query text by default. Add stage timings/result IDs as approved by the privacy contract, and a nonblocking persistent sink tied to #127; test enabled/disabled behavior. |
#132 — Dashboard view: Query analytics (latency, QPS, cache hit-rate)@raunak3208 |
P2 | src/dynavec/telemetry.py dashboard/components/Kpis.tsx dashboard/components/LatencyChart.tsx dashboard/components/VolumeChart.tsx |
KPIs, percentiles, cache hit-rate and a range selector already exist. Add the requested latency percentile time-series and verify real-data behavior; coordinate with the current assignee. |
| #133 — Dashboard view: Per-query drill-down unassigned |
P2 | dashboard/components/TraceDrawer.tsx src/dynavec/dashboard.py src/dynavec/client.py |
The query drawer and trace endpoint exist, but the drawer lacks stage waterfalls and result links/IDs. Persist stage timings and approved result details, then test drill-down with text capture both enabled and disabled. |
#136 — Dashboard view: Retrieval-quality trends over time@tikhandesanket |
P2 | src/dynavec/eval/trend.py src/dynavec/telemetry.py src/dynavec/dashboard.py dashboard/components/Sidebar.tsx |
EvalRunStore trends/comparison and eval API endpoints exist. Add the dashboard score/trend panel with dataset/model filters and run comparison; backend support alone does not finish the UI issue. |
| #137 — Dashboard: security — local-only, server-side creds, API token unassigned |
P1 | src/dynavec/dashboard.py dashboard/lib/api.ts |
The server binds to 127.0.0.1 by default, but APIs have no token check and serve() allows another host. Add a server-side local API authentication/origin model, document it and test unauthorized requests and credential exclusion. |
| #281 — Snapshots for resume, time-travel & replay unassigned |
P2 | src/dynavec/checkpoint.py src/dynavec/nodes/graph.py tests/test_checkpointer.py |
Checkpoint history and failed-run resume exist. Add explicit immutable snapshot/fork/replay APIs with input overrides and tests proving historical snapshots stay unchanged. |
| #282 — Typed node system / node schema (ReactFlow-compatible) unassigned |
P2 | src/dynavec/nodes/base.py src/dynavec/nodes/graph.py src/dynavec/nodes/registry.py |
Typed port declarations, dictionaries and a canvas palette exist. Add a versioned graph JSON loader/round-trip and validate port compatibility across edges; declarations alone do not enforce types. |
| #284 — Custom nodes via the SDK unassigned |
P2 | src/dynavec/nodes/base.py src/dynavec/nodes/registry.py tests/test_nodes.py |
Node subclassing/registration is already possible. Document a public custom-node example, execute it in CI and verify graph serialization/restoration through the shared schema from #282. |
| #295 — SDK & CLI: run / deploy / inspect with code⇄visual parity unassigned |
P2 | src/dynavec/agents/graph.py src/dynavec/cli.py |
SDK graph execution exists; orchestration run/inspect/deploy CLI and code/canvas parity do not. Land the shared schema first, then add offline-tested commands; deployment also depends on #298. |
#299 — Per-node traces/spans assembled into a run tree@Isha-Zaka |
P2 | src/dynavec/logging.py tests/test_run_logging.py |
Run/node/span correlation IDs exist, but a parented run tree is missing. Add parent_span_id, start/end timing and stable span events, then test nested/parallel propagation and tree assembly. |
| #301 — Run history: searchable / filterable list with drill-down to a trace unassigned |
P2 | src/dynavec/checkpoint.py src/dynavec/logging.py dashboard/components/TracesTable.tsx |
The UI lists query events; checkpoints/log sinks hold pieces of agent runs. Add a durable, indexed run-list API plus run detail/tree UI with status/time/model/tag filters and pagination. |
| #302 — Metrics: latency percentiles, QPS, cache hit-rate, error rate, token/cost per run unassigned |
P2 | src/dynavec/telemetry.py dashboard/components/Kpis.tsx src/dynavec/logging.py |
Query latency, traffic, cache and error aggregates exist. Add per-run model token/cost accounting, parented run attribution and consistent aggregates; test real usage values and unknown-price behavior. |
| #304 — Test cases & datasets (labeled inputs → expected outputs/relevance) unassigned |
P2 | src/dynavec/eval/retrieval.py src/dynavec/eval/runner.py tests/test_retrieval_eval.py |
LabeledQuery, JSON/JSONL loading and per-example/aggregate retrieval scores exist. Add dataset saving/round-trip, tags/expected-output schema and graph-suite support without duplicating the retrieval runner. |
| #306 — In-loop eval: attach evals to the same run/trace view unassigned |
P2 | src/dynavec/telemetry.py src/dynavec/dashboard.py src/dynavec/eval/trend.py |
Eval metric fields and endpoints exist, but no complete run/span-tree association and score drill-down UI. Join eval results to execution run IDs and test query-by-run plus dashboard visibility. |
#342 — feat(dynaflow): introduce multi-agent supervisor and handoff primitives@tikhandesanket |
P1 | src/dynavec/agents/supervisor.py src/dynavec/agents/handoff.py src/dynavec/agents/state.py tests/test_supervisor_routing.py PR #345 merged |
Supervisor/state/handoff implementations exist under dynavec. Supervisor.run currently calls its router twice per run: call once and test a stateful router. Separately agree whether the dynaflow package-boundary requirement remains before closure. |
Missing (31)
| Issue and snapshot owner | Priority | Evidence | Resolution and acceptance |
|---|---|---|---|
| #17 — Add delete-by-filter helper unassigned |
P2 | src/dynavec/client.py src/dynavec/namespace.py tests/test_list_vectors.py |
Define supported filter semantics, enumerate the complete namespace, evaluate matching metadata, and batch delete both stores with cache/hot-tier invalidation. Test more than one batch, empty matches, failures and tenant isolation; ANN top-k is not exhaustive deletion. |
| #21 — Optional GSI for metadata access patterns unassigned |
P2 | src/dynavec/config.py src/dynavec/provisioning.py |
Design explicit metadata access patterns and projected/indexed fields; add opt-in GSI provisioning and a query helper. Cover existing-table migration, pagination and the no-GSI default. |
| #28 — Transactional write across both stores (best-effort) unassigned |
P1 | src/dynavec/client.py src/dynavec/async_client.py |
Document the two-store failure model and implement a bounded repair/journal strategy for partial writes. Test failure of either store and retries over existing records; blind deletion as rollback can destroy an earlier version. |
#29 — Sort-key adjacency design for high fan-out nodes@tikhandesanket |
P2 | src/dynavec/graph.py PR #315 merged |
Adjacency still lives in embedded lists. Propose separate edge items and a migration/backfill path, then benchmark high fan-out and pagination. PR #315 tests table provisioning; it does not implement this issue despite the issue comment linking it. |
#42 — Memcached backend@GenZ-CODER-X |
P3 | src/dynavec/cache.py pyproject.toml |
Add an optional Memcached client extra and BaseCache implementation, including namespace invalidation and TTL/stats parity tests. |
#45 — Cohere Rerank API integration@troublerone |
P2 | src/dynavec/retrieval.py src/dynavec/client.py pyproject.toml |
Add a pluggable hosted reranker with caller-supplied Cohere credentials and an optional extra. Test ordered result mapping, empty inputs and provider errors; existing cross-encoder reranking is a different backend. |
| #52 — Thread-safety tests for stores unassigned |
P2 | tests/test_client_inmemory.py tests/test_connection_pool.py |
Add barrier-driven concurrent upsert/search scenarios against the fakes, asserting complete payloads and namespace isolation. Separate fake-store thread safety from guarantees of the AWS-backed client. |
#53 — Process pool for CPU-bound PQ training@tikhandesanket |
P3 | src/dynavec/quantization.py benchmarks/benchmark_quantization.py |
Add opt-in process-based PQ fitting only after benchmarking serialization/startup costs. Keep deterministic seeds, a sequential default and a benchmark demonstrating where the process pool helps. |
| #82 — OpenTelemetry tracing unassigned |
P2 | src/dynavec/logging.py src/dynavec/client.py pyproject.toml |
Add optional OpenTelemetry spans for embed/query/hydrate/rerank, preserve caller trace context, and supply a collector example. Test span parentage and operation without the extra installed. |
| #83 — CloudWatch metrics emission unassigned |
P2 | src/dynavec/telemetry.py src/dynavec/config.py docs/iam-policy.json |
Add an opt-in CloudWatch emitter with batching, bounded buffers and documented IAM. Test dimension/cardinality limits and ensure emitter failure does not fail retrieval. |
#88 — CLI: migrate from Pinecone@Isha-Zaka |
P2 | src/dynavec/cli.py examples/pinecone_vs_dynavec.py |
Add a resumable, batched Pinecone migration command preserving IDs, namespaces, metadata and vector dimensions. Test source pagination and interrupted migration; comparison examples are not an importer. |
| #97 — Tighten S3 Vectors resource ARNs in the sample policy unassigned |
P1 | README.md docs/iam-policy.json ARCHITECTURE.md |
Separate account-level list/create permissions from bucket/index data permissions using the current AWS authorization resource table. Scope data actions to the configured bucket/index and test documented runtime/provisioning policies. |
| #102 — Migrating from Pinecone guide unassigned |
P3 | examples/pinecone_vs_dynavec.py tools/build_docs.py |
Write a migration guide with a concepts table, namespace/metric/filter differences, batched export/import examples and a verification checklist. Keep documentation separate from the importer in #88. |
| #114 — Add Python 3.13 to the CI matrix unassigned |
P2 | .github/workflows/ci.yml pyproject.toml CONTRIBUTING.md |
Add Python 3.13 to CI and run the suite plus dependency installation there. Update supported-version claims only after the run is green; retain coverage of existing supported versions. |
| #115 — Dependency vulnerability audit in CI unassigned |
P1 | .github/workflows/ci.yml pyproject.toml |
Add a dependency vulnerability audit job with a documented triage/expiry process for exceptions. Define which base and optional extras it covers; demonstrate the job fails for a known vulnerable fixture or controlled check. |
#125 — Dashboard: dynavec dashboard CLI to launch it locallyunassigned |
P2 | src/dynavec/cli.py src/dynavec/dashboard.py dashboard/next.config.mjs |
Add dynavec dashboard --port, documented telemetry wiring and static bundle serving/browser launch. Test startup, port conflicts and API integration; depend on the security model in #137. |
| #127 — Telemetry data model: DynamoDB events table unassigned |
P2 | src/dynavec/telemetry.py src/dynavec/provisioning.py |
TelemetryRecorder is an in-memory ring buffer. Add an opt-in DynamoDB event schema/store with TTL, bounded asynchronous writes, provisioning and privacy documentation. |
| #129 — Dashboard view: Resources (buckets, indexes, tables) unassigned |
P2 | src/dynavec/client.py src/dynavec/dashboard.py dashboard/components/Sidebar.tsx |
Reuse describe/list helpers in a resources API and dashboard cards for buckets/indexes/tables. Add pagination, empty/error states and tests; there is no /api/resources route today. |
| #130 — Dashboard view: Namespace explorer unassigned |
P2 | src/dynavec/dashboard.py dashboard/components/Sidebar.tsx |
Share one namespace-explorer implementation with #141. Add paginated counts/size summaries and detail/search UI, avoiding an unbounded full scan for each dashboard refresh. |
#131 — Dashboard view: Cost panel@tikhandesanket |
P2 | benchmarks/cost_model.py src/dynavec/dashboard.py dashboard/components/Sidebar.tsx |
Expose the existing cost model through a cost API using live size/volume inputs, then build a breakdown panel. Show assumptions, pricing date and an explicit estimate label. |
#141 — Dashboard: Add Namespace Explorer@osamashabih6960 |
P2 | dashboard/components/Sidebar.tsx src/dynavec/dashboard.py |
This overlaps #130. Agree on one owner/acceptance checklist and implement one namespace list, counts, filter and detail flow; link or consolidate the duplicate issue. |
#286 — Prompt templates & output parsers@tikhandesanket |
P2 | src/dynavec/chat src/dynavec/nodes/builtin.py |
LLMNode accepts messages, but a reusable template/output-parser module is absent. Add message templates and JSON/Pydantic parsers with clear validation errors and rendering/parser tests. |
| #291 — Visual builder: ReactFlow canvas to compose orchestrations unassigned |
P2 | dashboard/package.json dashboard/app/page.tsx src/dynavec/nodes/registry.py |
Choose dashboard versus standalone ownership, then implement a ReactFlow canvas using the node registry and #282 graph schema. Test create/connect/configure/save/reload and incompatible ports. |
| #292 — Code ⇄ visual round-trip (import/export graph as code) unassigned |
P2 | src/dynavec/nodes/base.py src/dynavec/agents/graph.py |
Define one versioned graph representation first (#282), then implement SDK/code-to-canvas import/export. Add semantic round-trip tests for nodes, edges, config and custom nodes; do not execute arbitrary source to import it. |
| #293 — Live run visualization on the canvas unassigned |
P2 | src/dynavec/logging.py dashboard/app/page.tsx |
After #291/#299, stream the same run/span events to canvas nodes. Test start/finish/error state, reconnects and inputs/outputs without creating a second telemetry format. |
| #294 — Debug & iterate: step through, re-run a single node, pin test inputs unassigned |
P3 | src/dynavec/checkpoint.py dashboard/app/page.tsx |
Build on #281/#291: add step/pause, pinned inputs and single-node replay with inspectable edge state. Test reproducibility and preservation of the original run. |
| #297 — Durable execution on Step Functions / Workflows unassigned |
P2 | src/dynavec/agents/graph.py src/dynavec/checkpoint.py |
Specify a durable execution backend around stable graph/state interfaces, then implement Step Functions/Workflows adapters with idempotent steps, retries and resume tests. DynamoDB checkpoints alone do not provide managed execution. |
| #298 — One-command serverless deploy (Lambda / Cloud Run), in-account unassigned |
P2 | docs/DEPLOY.md src/dynavec/cli.py |
The deployment document is not a one-command agent deployment flow. Add packaging and a deploy command with an explicit resource/IAM plan; verify provision/run/log/teardown in a dedicated cloud test environment. |
| #307 — Multi-cloud: pluggable GCP backends (Vertex, Firestore, Cloud Run, Workflows) unassigned |
P3 | src/dynavec/config.py src/dynavec/stores pyproject.toml |
Stabilize provider-neutral store/model/execution interfaces, then implement GCP adapters and a parity matrix. Keep GCP dependencies optional and add contract tests plus a documented cloud smoke run. |
| #308 — Multi-cloud: pluggable Azure backends (Azure OpenAI, Cosmos DB, Functions, Durable Functions) unassigned |
P3 | src/dynavec/config.py src/dynavec/stores pyproject.toml |
Reuse the backend contracts from #307, add Azure model/store/compute/durable/secrets adapters as optional extras, and verify an example graph against the published parity matrix. |
#321 — feat(ingest): Support cursor pagination in MCPResourceSource@neha-5456 |
P2 | src/dynavec/ingest.py tests/test_ingest.py |
MCPResourceSource still calls list_resources once. Coordinate with the assignee to follow nextCursor/next_cursor in objects and mappings, forward cursor and test multiple/empty pages plus repeated-cursor protection. |
Epic (5)
| Issue and snapshot owner | Priority | Evidence | Resolution and acceptance |
|---|---|---|---|
| #122 — [EPIC] Telemetry & resource dashboard unassigned |
P2 | dashboard/README.md src/dynavec/dashboard.py dashboard/app/page.tsx |
Track child completion individually: persistence #127, launch/security #125/#137, resources/namespaces #129/#130/#141, cost #131 and eval UI #136. Reconcile the original Vite plan with the shipped Next.js app. |
| #273 — [EPIC] dynaflow — serverless agent orchestration engine + visual builder unassigned |
P2 | src/dynavec/agents/graph.py src/dynavec/nodes/graph.py src/dynavec/checkpoint.py docs/roadmap.md |
Graph runtimes, nodes, agents and checkpointing have landed. Track remaining schema/round-trip, snapshots, visual builder and deployment children; update the stale roadmap claim that the engine is only pseudocode. |
| #274 — [EPIC] dynalogs — in-account observability for agent runs unassigned |
P2 | src/dynavec/logging.py src/dynavec/dashboard.py |
Structured run/node logs and query telemetry exist. Complete parented spans, durable run history, metrics and dashboard integration under #299/#301/#302 rather than recreating logging. |
| #275 — [EPIC] dynaevals — evaluation, datasets & CI gating unassigned |
P2 | src/dynavec/eval PR #351 open |
Retrieval/RAG metrics and trend tracking exist. Finish dataset round-trip #304, review CI gate #305 and attach evals to runs #306; keep the epic open until those flows are verified. |
| #276 — [EPIC] Ecosystem launch — landing page & cross-library story (dynavec / dynaflow / dynalogs / dynaevals) unassigned |
P3 | opensource/dynavec/index.html tools/build_docs.py docs/roadmap.md |
Ecosystem pages and landing-page sections exist after #347. Review #310/#311, then reconcile capability claims with shipped runtime/visual/deployment status before closing the ecosystem epic. |
Validation and limits
- Python 3.12.15, installed via
uv venv --python 3.12and the repository'smake installtarget. - Focused query/store/error tests pass, including real SDK stubs; lint passes for the changed tests.
make run-cipassed: ruff, strict mypy (87 checked files), 1,125 tests passed, 2 opt-in live AWS tests skipped, and 1 snapshot passed. The focused store/error/logging selection passed all 100 tests; changed-test lint andgit diff --checkalso passed.- No live AWS resources, credentialed model calls, external Redis/Memcached clusters, browser layout acceptance, or deployed orchestration were exercised. Missing/partial assessments concern inspected deliverables and explicitly identified acceptance gaps.
- This is a dated snapshot. Recheck current issue assignments, PR state and source before starting follow-up work. Use the existing issues to coordinate any ownership or status changes.
Activity