This report tracks implementation against SPEC.HTTP_API_TEST_MODULE.md.
Status values:
[x]complete[~]implemented with a documented limitation[ ]not implemented
- 1. Primary goals — single persisted collection, tree, editors, execution, response view, import/export, selectable sequential runs, and persistence are implemented.
- 2. Postman format compatibility — the collection is retained as a
JsonObjectAST so unknown fields survive save/export. - 3. Collection tree — nested folders/requests, context operations, ordering, duplicate, move, delete confirmation, import, export, and run actions are wired.
- 4. Node types and Postman mapping — collection, item-group folders, and request items map directly to v2.1 JSON.
- 5. Variable system — inheritance, disabled values, recursive substitution, cycles, masking, type/enabled editing, and local/effective row views are implemented.
- 6. URL/path variables —
{{name}}and:pathVariableare resolved separately. - [~] 7. Collection/folder editor — Overview, Authorization, and Variables tabs are present; advanced auth value editing is intentionally compact.
- 8. Authentication inheritance — omitted auth inherits through collection/folder/request ancestry and explicit
noauthoverrides it. - [~] 9. Authentication types — all Postman auth objects are preserved; noauth, bearer, basic, and API key execute natively, while unsupported types fail explicitly.
- [~] 10. Credentials — sensitive values are masked by default, have an explicit reveal/edit path, and resolve only at execution; a secure vault remains future work.
- 11. Request editor layout — method/URL/send row, configuration tabs, and response area are implemented.
- 12. Params tab — query/path entries, duplicate ordering, enabled state, and bidirectional raw URL/query synchronization are implemented.
- 13. Headers tab — duplicate/case/order/disabled/description fields are preserved and auth headers are generated at runtime.
- 14. Body tab — raw, urlencoded, multipart, file, and GraphQL execution models and controls are implemented, including editable GraphQL variables and multipart text/file fields.
- [~] 15. Authorization tab for requests — inheritance/effective source and native auth choices are shown; inherited values are read-only.
- 16. Variables tab for requests — request-local variables and inherited effective variables are displayed separately.
- 17. URL representation — string and structured Postman URLs are accepted and Kode-created requests use structured URLs.
- 18. Sending requests — execution is asynchronous, cancelable, and keeps the TUI responsive.
- 19. Request construction order — variables, URL/path/query, headers, auth, body, settings, execution, and response capture follow the specification order.
- 20. Response panel — status, text, timing, size, body, headers, cookies, raw view, final URL, JSON formatting, and binary summaries are supported.
- 21. Runtime response persistence — responses and cookies stay runtime-only and are not written into the collection.
- 22. Running folders and collections — deterministic sequential execution, cancellation, selectable summary rows, captured per-request responses, and success/failure output are implemented.
- 23. Scripts and Postman tests — events/scripts are retained losslessly and are not falsely executed.
- 24. Settings — redirects, timeout, SSL validation, and body-mode execution settings are represented and editable; SSL validation defaults to enabled.
- 25. Cookies — workspace runtime cookie jar, response ingestion, request reuse, expiry/path/secure handling, and a clear control are implemented.
- 26. Import — v2.1-shaped JSON is validated, replacement is confirmed, and the original AST is retained.
- 27. Export — only
restApi.collectionis exported as formatted Postman v2.1 JSON. - 28. Editing and persistence — edits use the workspace session, debounce behavior, and atomic
.kode.jsonwrites. - 29. Node creation — folders, requests, stable request IDs, and default Postman request structures are implemented.
- 30. Rename/move semantics — rename preserves fields; move and duplicate operate on existing JSON nodes and regenerate duplicate request IDs.
- 31. Validation and error reporting — incomplete editing is tolerated while send-time URL, variable, file, auth, and network errors remain actionable.
- 32. Architecture — model, workspace storage, resolver, HTTP runtime, and UI layers are separate.
- 33. Suggested execution models — immutable resolved requests and runtime-only execution results are implemented.
- 34. HTTP client — Java
HttpClientprovides HTTP/HTTPS, redirects, duplicate headers, cancellation, body bytes, cookies, timeouts, and TLS defaults. - 35. Large responses — response previews are bounded at 10 MiB and truncation reports received/displayed sizes.
- 36. Search/filtering —
/opens a non-destructive filter over request/folder names, methods, and URLs; matching ancestors remain visible. - [~] 37. Keyboard usability — tree navigation, creation, rename/delete/menu, tabs, URL/body focus, send, and cancellation are available; response-pane focus navigation remains basic.
- 38. Mouse usability — tree/context actions, tabs, send, row editing, dialogs, and response-height dragging work.
- [~] 39. Secrets and logging — normal REST code does not log resolved credentials, sensitive UI values are masked with explicit reveal controls, and dedicated logging tests remain.
- [~] 40. Required automated tests — model round-trip, unknown-field preservation, tree mutations, variables/auth resolution, cookies, duplicate headers, truncation, and local HTTP execution are covered; full UI and every listed HTTP matrix case remain to be expanded.
- [~] 41. Acceptance scenario — the collection/variable/auth/request/send/reopen/export path is implemented; it still needs a manual terminal walkthrough for final UX verification.
- 42. Explicit non-goals — cloud sync, multiple collections, environments, Vault, monitors, browser OAuth,
pm.*, v3 YAML, GraphQL exploration, gRPC, WebSocket, and SOAP remain outside scope. - 43. Implementation approach — existing sidebar, central-pane, session persistence, event, style, and test conventions were reused.
The implementation preserves the imported Postman collection as a JSON AST. Kode-only UI state and runtime response state remain outside the exported collection document.
- REST-focused suite:
GRADLE_USER_HOME=./.gradle-user ./gradlew --no-daemon test --tests 'editor.rest.*'— 7 tests passed. - Kotlin compilation passed after the final UI/runtime changes.
- A clean full-suite run completed 134 tests with one unrelated existing failure:
TypescriptIdentifierPathScanTestcannot find its external TypeScript corpus fixture atTypescriptIdentifierPathScanTest.kt:20.
editor.rest.model: lossless Postman document, paths, tree operations, workspace state.editor.rest.resolve: variable inheritance/substitution, path/query construction, auth inheritance, body materialization.editor.rest.http: asynchronous Java HTTP client, cookies, cancellation, bounded response capture.editor.rest.ui: REST tree, context menus, import/export dialogs, collection/folder/request editor, response display.src/test/kotlin/editor/rest: model, resolver, persistence-facing, and embedded HTTP regression tests.