Skip to content

client diff classification

github-actions[bot] edited this page Oct 13, 2026 · 1 revision

Client fork: diff classification

Classifies every difference between the canonical client (client/src on origin/main at 20345e3) and the unversioned mirror (sibling snn_interpreter/client/src) for Capsize-Games/spikeforge#57. Basis: diff -qr over both trees plus inspection of the differing files. The manifests are byte-identical (client/package.json) at the compared revisions; the adopting pull request then adds one line to the canonical manifest (the @capsizellc/commons dependency). Of 165 files under canonical client/src, 68 are identical and 58 differ, with 30 canonical-only entries and 2 mirror-only files.

Classes: upstreamable (moves to a shared package), product-specific (stays in the canonical client), generated (regenerated, never hand-merged), obsolete (superseded; mirror copy retained, not ported).

Routes, tabs, and tour: product-specific

tabs.ts and everything under tour/ are identical. tabLabels.ts is canonical-only: labels for surfaces added since the fork. No route was dropped; the tab set grew.

Types: product-specific

Every top-level type module is identical except hubTypes.ts, which carries the community-catalog evolution: the spikeforge framework id, the bundle (.spkf) artifact kind, HubPullState, HubBundleBuiltPayload, and the hub_pull_state / bundle_built envelopes (protocol 1.1). The shared shapes need no action.

Hooks: product-specific

Both trees carry the same 12 hooks; 11 are identical (useEncodeConfig, useEnergy, useModelActions, useSelectedStage, useServerBootstrap, useStageNeurons, useSurrogateCurve, useTabs, useTargetSelection, useTour, useViewer). Only useHub.ts differs, adding the community pull/build state (hub_pull, bundle_build) that matches the hubTypes.ts evolution.

Protocol: generated

protocol/generated.ts differs by 10 lines: protocol_version 1.0 to 1.1 with the hub_pull / bundle_build request and hub_pull_state / bundle_built reply shapes. Both copies carry the AUTO-GENERATED by protocol/codegen/generate_ts.mjs header. Regenerate with npm run gen:protocol after editing a schema; never hand-merge.

Components that differ (31): product-specific

All 31 are canonical-side evolution, not mirror-side fixes: locale wiring, community-hub UI, pipeline UI, the NumberField/primitive recomposition, NavRail navigation, token scrubbing in accessToken.ts (see below), and theme refinements (for example chartColors.ts re-pointing the train-batch trace at the plot palette).

  • AnalysisPanels.tsx
  • chartColors.ts
  • CheckField.tsx
  • Controls.tsx
  • EncodingControls.tsx
  • EnergyPanel.tsx
  • HelpTip.tsx
  • HubCompatBadge.tsx
  • HubPanel.tsx
  • InputSizeField.tsx
  • LineChart.tsx
  • LoadedModelPanel.tsx
  • MetricsPanel.tsx
  • ModelPanel.tsx
  • ModelSection.tsx
  • ModeToggle.tsx
  • NetworkActivity.tsx
  • PipelinePanel.tsx
  • PredictionPanel.tsx
  • SampleIndex.tsx
  • SelectField.tsx
  • StageNeuronEditor.tsx
  • StatusBar.tsx
  • TargetsPanel.tsx
  • TimeCursor.tsx
  • TopBar.tsx
  • TourLauncher.tsx
  • TrainControls.tsx
  • TrainingPanel.tsx
  • TrajectoryChart.tsx
  • ViewerPanels.tsx

Canonical-only components (23): product-specific

New surfaces since the fork: navigation and shell primitives, the locale picker, pipeline helpers, dataset/hub/panel views, and session state. pipelineInput.ts is the file the adopting pull request touches (see Upstreamable); the rest stay local.

  • AppHeader.tsx
  • ArchitectureStrip.tsx
  • Badge.tsx
  • Button.tsx
  • datasetFields.ts
  • DockPane.tsx
  • FactGrid.tsx
  • IconButton.tsx
  • InspectorSection.tsx
  • LanguageSelect.tsx
  • Metric.tsx
  • ModelWorkspace.tsx
  • NavRail.tsx
  • NetworkInspector.tsx
  • NumberField.tsx
  • PanelHeader.tsx
  • pipelineInput.ts
  • PipelineRunControls.tsx
  • pipelineSources.ts
  • SamplePreview.tsx
  • SessionContext.tsx
  • StatusIndicator.tsx
  • Toolbar.tsx

Mirror-only components (2): obsolete

Both are superseded in the canonical tree; the mirror copies are retained, not ported.

  • SliderField.tsx: a labelled range slider used by the mirror's ModelSection, Controls, and EncodingControls. Canonical NumberField.tsx absorbs the role with its optional beside-the-box range control; canonical TimeCursor.tsx keeps its own range input.
  • TabBar.tsx: the tab strip used by the mirror's App.tsx. The canonical shell recomposed navigation around NavRail.tsx plus TabPanel.tsx; no canonical file references TabBar.

Shell and theme files that differ (8): product-specific

accessToken.ts (token caching plus removal of ?token= from the address bar after read), App.tsx, helpText.ts, main.tsx, styles.css, and theme.tsx track the recomposed shell, locales, and theme. (hooks/useHub.ts, hubTypes.ts, and protocol/generated.ts are covered above.)

Canonical-only shell files (2): product-specific

  • i18n/ (10 files: provider, translations, types, seven locales). The mirror predates localisation.
  • tabLabels.ts (see Routes).

Styles: product-specific

18 stylesheets differ (theme evolution alongside the components above) and 5 are canonical-only (sheets for the new shell, dock, primitives, readouts, and model-action surfaces). Differing: analysis.css, base.css, confirm.css, controls.css, download.css, energy.css, feedback.css, hub.css, mode.css, model-actions.css, model.css, panels.css, pipeline.css, sections.css, tabs.css, targets.css, tour.css, viewer.css. Canonical-only: capsize.css, dock.css, primitives.css, readouts.css, shell.css.

Upstreamable: one adoption in this pull request

pipelineInput.ts now imports isPlainObject from @capsizellc/commons/object instead of its inline typeof guard; the local GeometrySource interface is removed with it. No other file in this pull request adopts a shared package.

Explicitly out of this pull request: further @capsizellc/commons adoptions (follow-ups, one utility each), @capsizellc/ui visual primitives (blocked: the package peers React 19 while the client is React 18), any retirement, any repoint of the 999 consumers, and any workspace restructure.

Clone this wiki locally