Skip to content

Fixes#1

Closed
tomusdrw wants to merge 15 commits intomainfrom
td-fix-specs-gp-alignment
Closed

Fixes#1
tomusdrw wants to merge 15 commits intomainfrom
td-fix-specs-gp-alignment

Conversation

@tomusdrw
Copy link
Copy Markdown
Member

@tomusdrw tomusdrw commented Apr 7, 2026

  • refactor: auto-scan specs and add --last/--dry CLI flags
  • docs: split sprint-42 into two sprints and add all-ecalli fixture
  • docs: align sprint-42/43 specs with graypaper-ab2cdbd
  • feat: implement sprint-42 host call UX redesign and GP 0.7.2
  • fix: E2E test button IDs and RegistersPanel min-height
  • fix: preserve host-call-header/hint testids and fix sprint-20 storage detection
  • test: add unit tests for parseAllCommands, safeFromHex, formatRegValue
  • fix: use trace proposals for auto-continue instead of stale pending effects
  • feat: implement sprint-43 fetch handler, JAM codec, and all-ecalli support
  • refactor: clean up jam-codec comments, extract concatParts, fix require()
  • fix: eagerly compute fetch default blob to fix initial effects race
  • fix: use fixed u16 LE encoding for is_authorized core index
  • feat: add GitHub Actions CI/CD, Biome lint, and Changesets release
  • style: auto-fix biome lint and format across codebase
  • fix: improve CI workflow and add changeset README

tomusdrw and others added 15 commits April 1, 2026 15:14
Replace hardcoded spec list with directory scanning so new specs
are picked up automatically. Remove per-spec log file plumbing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Split the oversized sprint-42 spec into:
- Sprint 42: Host Call UX Redesign, Handler Improvements, GP 0.7.2
- Sprint 43: Fetch Handler, JAM Codec

Add all-ecalli.jam fixture and example entries for both sprints.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace incorrect "GP 0.7.2" references with the actual target
graypaper revision (ab2cdbd). Fix sprint-43 spec to match the
real GP data: correct fetch register layout (ω₇=dest, ω₁₀=kind),
correct FetchKind enum (Entropy=1, AuthorizerTrace=2, etc.),
correct ProtocolConstants field names and encoding order, correct
ImportRef (u16 high-bit tag, not 1-byte prefix), ExtrinsicRef
(u32, not VarU64), and WorkItem.exportcount (u16, not VarU64).
Remove superseded sprint-42 stub file.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two-column HostCallTab layout with sidebar (registers, output preview,
memory write count) and content area. Auto-apply replaces manual Apply
button. NONE toggle for lookup/read/info handlers.

GP-aligned HOST_CALL_NAMES (graypaper-ab2cdbd): refine 6-13,
accumulate 14-26, log 100. Fixed refine entrypoint encoding
(workPackageHash as fixed 32 bytes).

Storage read with correct offset/maxLen slicing, service ID scoping,
trace seeding. Generic handler with comments, line numbers, setgas.
Pending changes coalescing and scrollable display.
removeMemoryWrite added to usePendingChanges for stale write cleanup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix Playwright E2E tests to use correct test IDs (run-button,
next-button instead of btn-run, btn-next). Add proper run-to-host-call
pattern matching existing passing tests. Fix GP 0.7.2 badge test to
pause on host calls first so trace entries are visible.

Add min-h-[4.5rem] Tailwind class to RegistersPanel scroll area
so registers maintain minimum height when pending changes are shown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… detection

Add data-testid="host-call-header" wrapping badge + index in the
sidebar, and data-testid="host-call-hint" in the content area for
backwards compatibility with sprint-19, sprint-20, and integration
smoke E2E tests.

Fix sprint-20 stepToStorageHostCall to detect storage host calls by
checking for storage-host-call testid instead of matching host call
names in the header (fetch/lookup matched but aren't StorageHostCall).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 22 unit tests covering sprint-42 utility functions:
- parseAllCommands: 12 tests covering setreg/memwrite/setgas parsing,
  comments, line-numbered errors, register sort, range validation
- safeFromHex: 6 tests covering hex decoding, odd-length padding,
  invalid input fallback
- formatRegValue: 3 tests covering hex/decimal/custom formats
- NONE constant: 1 test verifying 2^64-1

Update spec edge cases to document backwards-compat testid
requirements (host-call-header, host-call-hint) and sprint-20
storage detection fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ffects

During auto-continue in the run loop, resumeAllHostCalls was passing
getHostCallEffects which returned stale pending changes from the
auto-apply mechanism (set by HostCallTab for the previous host call).
This caused incorrect effects to be applied during auto-continue,
breaking tests that rely on always_continue policy.

Fix: only use getHostCallEffects for the initial resume (where the
user may have edited pending changes). For auto-continue resumes,
fall back to trace proposals.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pport

Add JAM codec library (VarU64, LE primitives, variable-length containers)
in packages/types. Implement all 16 fetch variant codecs with TypeScript
interfaces, encode/decode per GP §B.5/Appendix D. Build FetchHostCall UI
with Trace/Raw/Struct modes, per-variant struct editors (ProtocolConstants,
WorkPackage, RefinementContext, TransferOrOperand, etc.), slice preview,
and NONE toggle support. Add computeFetchEffects utility, fetch register
metadata, and E2E tests using all-ecalli fixtures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…re()

- Remove stale reasoning comments from VarU64 encode/decode in jam-codec.ts
- Extract concatParts helper in fetch-codec.ts (removes 6x inline concat)
- Replace require("@pvmdbg/types") with proper ESM import in test
- Remove unused tryDecode import from fetch-codec.ts
- Add WorkItem roundtrip test with nested imports/extrinsics
- Add Transfer memo truncation test

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
FetchHostCall previously initialized blob from empty traceData and
relied on StructEditor's async effect to report encoded defaults. This
caused ω₇=0 on first render because the parent's blob effect fired
before the child's state update propagated. Now the initial blob is
computed synchronously via computeDefaultEncodedBlob(), eliminating the
race. Also gates "Use Trace Data" button on hasProposal so it doesn't
appear when there is no trace data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The GP spec defines the is_authorized entrypoint parameter as a fixed
2-byte little-endian core index, not a variable-length integer. Replace
encodeVarU32/decodeVarU32 with encodeU16LE/decodeU16LE.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add three workflow files: CI (PR checks for lint, test, build, e2e,
changeset), publish-next (npm next tag + GitHub Pages deploy on push
to main), and release (Changesets version PR + latest tag publish).

Configure Biome 2.0 for linting/formatting, Changesets for version
management, and set the GitHub Pages base path in the web app.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Run `biome check --write .` to fix all auto-fixable issues (import
sorting, formatting, template literals, etc.) and configure biome
rules to downgrade a11y and React hook rules to warnings so CI
passes on the existing codebase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix ci.yml to build only packages/* (not apps/web) before lint/test,
  avoiding redundant web app build since it's built again explicitly later
- Fix publish-next.yml to use subshells for safer directory handling
- Add .changeset/README.md with contributor instructions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 7, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0aca37a1-96da-452c-9926-310fbefeebcc

📥 Commits

Reviewing files that changed from the base of the PR and between dec9a64 and c7f2bbe.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (217)
  • .changeset/README.md
  • .changeset/config.json
  • .github/workflows/ci.yml
  • .github/workflows/publish-next.yml
  • .github/workflows/release.yml
  • apps/web/e2e/integration-smoke.spec.ts
  • apps/web/e2e/smoke.spec.ts
  • apps/web/e2e/sprint-01-app-shell.spec.ts
  • apps/web/e2e/sprint-02-load-example.spec.ts
  • apps/web/e2e/sprint-03-instructions.spec.ts
  • apps/web/e2e/sprint-04-registers.spec.ts
  • apps/web/e2e/sprint-05-single-step.spec.ts
  • apps/web/e2e/sprint-06-memory.spec.ts
  • apps/web/e2e/sprint-07-layout.spec.ts
  • apps/web/e2e/sprint-08-execution-controls.spec.ts
  • apps/web/e2e/sprint-09-example-browser.spec.ts
  • apps/web/e2e/sprint-10-file-upload.spec.ts
  • apps/web/e2e/sprint-11-url-and-hex.spec.ts
  • apps/web/e2e/sprint-12-detection-summary.spec.ts
  • apps/web/e2e/sprint-13-spi-config.spec.ts
  • apps/web/e2e/sprint-14-drawer.spec.ts
  • apps/web/e2e/sprint-15-settings.spec.ts
  • apps/web/e2e/sprint-16-stepping-modes.spec.ts
  • apps/web/e2e/sprint-17-shortcuts.spec.ts
  • apps/web/e2e/sprint-18-host-call-resume.spec.ts
  • apps/web/e2e/sprint-19-host-call-tab.spec.ts
  • apps/web/e2e/sprint-20-host-call-storage.spec.ts
  • apps/web/e2e/sprint-21-ecalli-trace.spec.ts
  • apps/web/e2e/sprint-22-trace-raw.spec.ts
  • apps/web/e2e/sprint-23-logs.spec.ts
  • apps/web/e2e/sprint-24-pvm-tabs.spec.ts
  • apps/web/e2e/sprint-25-divergence.spec.ts
  • apps/web/e2e/sprint-26-breakpoints.spec.ts
  • apps/web/e2e/sprint-27-blocks-virtual.spec.ts
  • apps/web/e2e/sprint-28-asm-raw-popover.spec.ts
  • apps/web/e2e/sprint-29-register-editing.spec.ts
  • apps/web/e2e/sprint-30-change-highlighting.spec.ts
  • apps/web/e2e/sprint-31-memory-editing.spec.ts
  • apps/web/e2e/sprint-32-memory-changes.spec.ts
  • apps/web/e2e/sprint-33-block-stepping.spec.ts
  • apps/web/e2e/sprint-34-persistence.spec.ts
  • apps/web/e2e/sprint-35-responsive.spec.ts
  • apps/web/e2e/sprint-42-host-call-ux.spec.ts
  • apps/web/e2e/sprint-43-fetch-host-call.spec.ts
  • apps/web/src/App.test.tsx
  • apps/web/src/App.tsx
  • apps/web/src/components/debugger/BlockHeader.tsx
  • apps/web/src/components/debugger/BottomDrawer.tsx
  • apps/web/src/components/debugger/DebuggerLayout.tsx
  • apps/web/src/components/debugger/DrawerContext.tsx
  • apps/web/src/components/debugger/ExecutionControls.tsx
  • apps/web/src/components/debugger/HexDump.test.tsx
  • apps/web/src/components/debugger/HexDump.tsx
  • apps/web/src/components/debugger/InstructionBinary.tsx
  • apps/web/src/components/debugger/InstructionRow.tsx
  • apps/web/src/components/debugger/InstructionsPanel.tsx
  • apps/web/src/components/debugger/MemoryPanel.test.ts
  • apps/web/src/components/debugger/MemoryPanel.tsx
  • apps/web/src/components/debugger/MemoryRange.tsx
  • apps/web/src/components/debugger/PendingChanges.test.ts
  • apps/web/src/components/debugger/PendingChanges.tsx
  • apps/web/src/components/debugger/PvmTabs.test.tsx
  • apps/web/src/components/debugger/PvmTabs.tsx
  • apps/web/src/components/debugger/RegisterRow.tsx
  • apps/web/src/components/debugger/RegistersPanel.test.tsx
  • apps/web/src/components/debugger/RegistersPanel.tsx
  • apps/web/src/components/debugger/StatusHeader.tsx
  • apps/web/src/components/debugger/value-format.test.ts
  • apps/web/src/components/debugger/value-format.ts
  • apps/web/src/components/drawer/AutoContinueConfig.tsx
  • apps/web/src/components/drawer/EcalliTraceTab.tsx
  • apps/web/src/components/drawer/HostCallTab.tsx
  • apps/web/src/components/drawer/LogEntry.tsx
  • apps/web/src/components/drawer/LogsTab.tsx
  • apps/web/src/components/drawer/PvmSelectionConfig.tsx
  • apps/web/src/components/drawer/SettingsTab.tsx
  • apps/web/src/components/drawer/SteppingModeConfig.tsx
  • apps/web/src/components/drawer/TraceColumn.tsx
  • apps/web/src/components/drawer/TraceEntryRow.tsx
  • apps/web/src/components/drawer/TraceRawView.tsx
  • apps/web/src/components/drawer/hostcalls/FetchHostCall.tsx
  • apps/web/src/components/drawer/hostcalls/GasHostCall.tsx
  • apps/web/src/components/drawer/hostcalls/GenericHostCall.test.ts
  • apps/web/src/components/drawer/hostcalls/GenericHostCall.tsx
  • apps/web/src/components/drawer/hostcalls/LogHostCall.tsx
  • apps/web/src/components/drawer/hostcalls/StorageHostCall.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/AllTransfersEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/AllWorkItemsEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/AuthorizerInfoEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/BytesBlobEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/ProtocolConstantsEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/RawEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/RefinementContextEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/SlicePreview.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/StructEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/TraceView.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/TransferOrOperandEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/WorkItemInfoEditor.tsx
  • apps/web/src/components/drawer/hostcalls/fetch/WorkPackageEditor.tsx
  • apps/web/src/components/drawer/hostcalls/host-call-registers.ts
  • apps/web/src/components/drawer/trace-display.test.ts
  • apps/web/src/components/drawer/trace-display.ts
  • apps/web/src/components/load/ConfigStep.tsx
  • apps/web/src/components/load/DetectionSummary.tsx
  • apps/web/src/components/load/ExampleList.tsx
  • apps/web/src/components/load/FileUpload.tsx
  • apps/web/src/components/load/ManualInput.tsx
  • apps/web/src/components/load/SourceStep.tsx
  • apps/web/src/components/load/SpiEntrypointConfig.tsx
  • apps/web/src/components/load/UrlInput.tsx
  • apps/web/src/components/load/format.ts
  • apps/web/src/components/ui/drawer.tsx
  • apps/web/src/components/ui/table.tsx
  • apps/web/src/components/ui/tabs.tsx
  • apps/web/src/context/debugger-settings.tsx
  • apps/web/src/context/orchestrator.tsx
  • apps/web/src/hooks/useBasicBlocks.test.tsx
  • apps/web/src/hooks/useBasicBlocks.ts
  • apps/web/src/hooks/useBlockStepping.test.ts
  • apps/web/src/hooks/useBlockStepping.ts
  • apps/web/src/hooks/useDebuggerActions.test.ts
  • apps/web/src/hooks/useDebuggerActions.ts
  • apps/web/src/hooks/useDebuggerSettings.ts
  • apps/web/src/hooks/useDisassembly.test.tsx
  • apps/web/src/hooks/useDisassembly.ts
  • apps/web/src/hooks/useDivergenceCheck.test.tsx
  • apps/web/src/hooks/useDivergenceCheck.ts
  • apps/web/src/hooks/useHostCallState.ts
  • apps/web/src/hooks/useLogMessages.ts
  • apps/web/src/hooks/useMemoryReader.ts
  • apps/web/src/hooks/useOrchestrator.ts
  • apps/web/src/hooks/useOrchestratorState.ts
  • apps/web/src/hooks/usePendingChanges.test.tsx
  • apps/web/src/hooks/usePendingChanges.ts
  • apps/web/src/hooks/usePersistence.ts
  • apps/web/src/hooks/useStableCallback.ts
  • apps/web/src/hooks/useStorageTable.ts
  • apps/web/src/lib/debugger-settings.test.ts
  • apps/web/src/lib/debugger-settings.ts
  • apps/web/src/lib/dev-bridge.ts
  • apps/web/src/lib/fetch-codec.test.ts
  • apps/web/src/lib/fetch-codec.ts
  • apps/web/src/lib/fetch-defaults.ts
  • apps/web/src/lib/fetch-utils.test.ts
  • apps/web/src/lib/fetch-utils.ts
  • apps/web/src/lib/runtime.ts
  • apps/web/src/lib/storage-utils.test.ts
  • apps/web/src/main.tsx
  • apps/web/src/pages/DebuggerPage.tsx
  • apps/web/src/pages/LoadPage.tsx
  • apps/web/src/styles/debugger-layout.css
  • apps/web/src/styles/global.css
  • apps/web/src/workers/ananas.worker.ts
  • apps/web/src/workers/typeberry.worker.ts
  • apps/web/vite.config.ts
  • biome.json
  • fixtures/all-ecalli.jam
  • fixtures/examples.json
  • fixtures/json/inst_add_32.json
  • package.json
  • packages/cli/src/index.test.ts
  • packages/cli/src/index.ts
  • packages/cli/src/replay.test.ts
  • packages/cli/src/replay.ts
  • packages/content/src/decode-generic.ts
  • packages/content/src/decode-json-test-vector.ts
  • packages/content/src/decode-spi.ts
  • packages/content/src/decode-trace.ts
  • packages/content/src/detect.ts
  • packages/content/src/examples-manifest.ts
  • packages/content/src/index.test.ts
  • packages/content/src/index.ts
  • packages/content/src/program-envelope.ts
  • packages/content/src/sources/example.ts
  • packages/content/src/sources/local-storage.ts
  • packages/content/src/sources/url.ts
  • packages/content/src/spi-entrypoint.ts
  • packages/orchestrator/src/host-call-handler.ts
  • packages/orchestrator/src/index.ts
  • packages/orchestrator/src/orchestrator.test.ts
  • packages/orchestrator/src/orchestrator.ts
  • packages/orchestrator/src/session.ts
  • packages/runtime-worker/src/adapters/ananas-shell.ts
  • packages/runtime-worker/src/adapters/ananas.ts
  • packages/runtime-worker/src/adapters/typeberry.ts
  • packages/runtime-worker/src/adapters/types.ts
  • packages/runtime-worker/src/commands.ts
  • packages/runtime-worker/src/direct-adapter.ts
  • packages/runtime-worker/src/index.test.ts
  • packages/runtime-worker/src/index.ts
  • packages/runtime-worker/src/utils.ts
  • packages/runtime-worker/src/worker-bridge.ts
  • packages/runtime-worker/src/worker-entry.ts
  • packages/trace/src/comparator.ts
  • packages/trace/src/host-call-names.ts
  • packages/trace/src/index.test.ts
  • packages/trace/src/index.ts
  • packages/trace/src/parser.ts
  • packages/trace/src/serializer.ts
  • packages/trace/src/types.ts
  • packages/types/src/encoding.ts
  • packages/types/src/index.test.ts
  • packages/types/src/index.ts
  • packages/types/src/jam-codec.test.ts
  • packages/types/src/jam-codec.ts
  • packages/types/src/orchestrator.ts
  • packages/types/src/program.ts
  • packages/types/src/pvm-adapter.ts
  • packages/types/src/pvm-status.ts
  • run-specs.sh
  • spec/ui/sprint-42-host-call-ux-redesign-and-gp072.md
  • spec/ui/sprint-43-fetch-handler-and-jam-codec.md
  • spec/ui/sprint-44-fetch-eager-blob-and-trace-button.md
  • spec/ui/sprint-45-is-authorized-core-encoding-fix.md
  • spec/ui/sprint-46-github-actions-ci-cd.md
  • vitest.config.ts
  • vitest.setup.ts

📝 Walkthrough

Walkthrough

This pull request introduces comprehensive host-call infrastructure, fetch codec system, and tooling setup. It adds Changesets version management, Biome linting, GitHub Actions CI/CD workflows, new E2E test suites, and widespread code formatting standardization. The SPI entrypoint refactors the refine parameter from package to workPackageHash. Multiple new components enable editing and previewing fetch host-call variants with encodable structured data.

Changes

Cohort / File(s) Summary
Configuration & CI/CD Setup
.changeset/*, .github/workflows/*, biome.json, package.json
Adds Changesets configuration for version management, three GitHub Actions workflows (CI, publish-next, release), Biome linting configuration, and root package scripts (lint, lint:fix). Workflows handle testing, building, publishing to npm, and managing a version bump PR.
Code Formatting & Import Reordering
apps/web/src/**/*.{ts,tsx}, packages/**/*.ts, apps/web/e2e/*.spec.ts, fixtures/*
Widespread import reordering (alphabetizing, grouping type vs. value imports), multiline parameter/object formatting, and assertion layout standardization across the codebase. Changes are primarily cosmetic and follow consistent patterns.
Fetch Host-Call System
apps/web/src/lib/fetch-codec.ts, apps/web/src/lib/fetch-defaults.ts, apps/web/src/lib/fetch-utils.ts, apps/web/src/components/drawer/hostcalls/fetch/*
Introduces 900+ lines of binary encoding/decoding for fetch variants, defines FetchKind enum and per-kind codec functions, exports new fetch editor components (StructEditor, TraceView, RawEditor, AllTransfersEditor, ProtocolConstantsEditor, RefinementContextEditor), and utility functions (computeFetchEffects, safeFromHex, formatRegValue).
SPI Entrypoint Refactoring
packages/content/src/spi-entrypoint.ts, packages/content/src/examples-manifest.ts, apps/web/src/components/load/SpiEntrypointConfig.tsx, apps/web/src/hooks/usePersistence.ts
Changes refine entrypoint from varU32-length-prefixed package blob to fixed 32-byte workPackageHash; is_authorized now uses encodeU16LE/decodeU16LE instead of varU32. Persistence and session restoration support both old and new formats for backward compatibility.
Host-Call UI & Effects System
apps/web/src/components/drawer/HostCallTab.tsx, apps/web/src/components/drawer/hostcalls/*.tsx, apps/web/src/components/drawer/EcalliTraceTab.tsx, apps/web/src/components/drawer/TraceColumn.tsx
Extends HostCallTab with two-column layout (sidebar + content), adds pendingChanges prop, implements effect tracking for register/memory/gas writes. Updates EcalliTraceTab to highlight active host-call entries. Refactors GenericHostCall to support command-based effect editing.
Memory & Pending Changes
apps/web/src/components/debugger/PendingChanges.tsx, apps/web/src/hooks/usePendingChanges.ts, apps/web/src/components/debugger/RegistersPanel.tsx
Adds coalesceMemoryWrites function to merge adjacent memory write ranges, introduces removeMemoryWrite hook API, adds scrollable pending-changes container with sticky header. RegistersPanel receives min-h-[4.5rem] min-height class.
Storage & Host Call Handlers
apps/web/src/components/drawer/hostcalls/StorageHostCall.tsx, apps/web/src/components/drawer/hostcalls/GasHostCall.tsx, apps/web/src/components/drawer/hostcalls/LogHostCall.tsx
Updates storage handler to derive keys from PVM memory, adds scoped key display, implements seeded table entry population for read ops. GasHostCall simplifies to text-only display with auto-report of effects. LogHostCall adjusts formatting.
E2E Test Suites
apps/web/e2e/sprint-42-host-call-ux.spec.ts, apps/web/e2e/sprint-43-fetch-host-call.spec.ts, apps/web/e2e/*.spec.ts (formatting only)
Adds two new Playwright specs testing host-call UX redesign (two-column layout, auto-apply changes bar, trace badges) and fetch host-call workflow (loading, stepping, handler editing, struct mode toggling). Reformats existing sprint specs with import/assertion standardization.
Codec & Utility Testing
apps/web/src/lib/fetch-codec.test.ts, apps/web/src/lib/fetch-utils.test.ts, apps/web/src/components/debugger/PendingChanges.test.ts
Adds 365+ test lines validating fetch-codec encode/decode roundtrips, variant-specific handling, boundary conditions (memo truncation, fixed sizes). Tests fetch utilities (NONE sentinel, hex conversion, effect computation) and memory write coalescing.
Host-Call Register Metadata
apps/web/src/components/drawer/hostcalls/host-call-registers.ts
Defines exported RegisterMeta, OutputRegisterMeta, HandlerRegisterMeta interfaces and HOST_CALL_REGISTER_META constant mapping host-call indices to input/output register descriptions and formats (hex/decimal/custom).
Debugger Actions & State
apps/web/src/hooks/useDebuggerActions.ts, apps/web/src/hooks/useStableCallback.ts
Changes auto-continue resume path to skip user-edited pending effects, instead always using trace proposals. Adds new useStableCallback hook providing function identity stability via useRef + useCallback.
Drawer & Context Updates
apps/web/src/components/debugger/BottomDrawer.tsx, apps/web/src/components/debugger/ExecutionControls.tsx, apps/web/src/context/debugger-settings.tsx
BottomDrawer accepts pendingChanges prop, passes it to HostCallTab. ExecutionControls adjusts tooltip formatting. DebuggerSettingsProvider reformatted for multiline context value expression.
Web App Routing & Pages
apps/web/src/App.tsx, apps/web/src/pages/DebuggerPage.tsx, apps/web/vite.config.ts
App.tsx adjusts import grouping and JSX indentation (no behavior change). DebuggerPage wires pendingChanges into BottomDrawer. Vite config adds explicit base: "/pvm-debugger/" path.
Trace & Comparison
packages/trace/src/comparator.ts, apps/web/src/components/drawer/trace-display.ts
Reformats compareTraces signature and call sites to multiline style. Updates trace-display imports to separate type-only blocks.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

The PR combines heterogeneous changes across multiple domains: widespread formatting (repetitive, low effort per file), new codec/utility modules (dense logic), breaking API changes (workPackageHash), new host-call feature surface (multiple interacting components), and E2E test coverage. While formatting changes dominate the file count, the logic density in fetch-codec, host-call handlers, and effect propagation requires careful review to ensure correctness and backward compatibility.

Possibly related PRs

  • #455 — Adds host-call dialog, handlers, and store APIs for host-call feature surface that overlaps with this PR's host-call infrastructure.
  • #476 — Implements Ecalli trace support and host-call trace parsing/UI, directly related to the trace badge and active-entry highlighting added here.
  • #463 — Extends SPI entrypoint encoding/configuration; related to the workPackageHash refactoring and SPI parameter changes in this PR.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch td-fix-specs-gp-alignment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant