Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .telemetry/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# .telemetry/

This folder contains product telemetry artifacts β€” structured descriptions of what the product tracks, why, and how. It was created by **Product Tracking Skills**.

## What's in here

| File | Purpose | Created by |
|------|---------|------------|
| `README.md` | This file | **product-tracking-model-product** skill |
| `business-case.md` | Why add telemetry β€” stakeholder-ready business case | **product-tracking-business-case** skill |
| `product.md` | Product description β€” what it does, who uses it, how value flows | **product-tracking-model-product** skill |
| `current-state.yaml` | Reverse-engineered tracking from the codebase | **product-tracking-audit-current-tracking** skill |
| `tracking-plan.yaml` | Target tracking plan β€” what should be tracked | **product-tracking-design-tracking-plan** skill |
| `delta.md` | Diff from current state to target plan | **product-tracking-design-tracking-plan** skill |
| `instrument.md` | SDK-specific instrumentation guide | **product-tracking-generate-implementation-guide** skill |
| `changelog.md` | History of tracking plan changes | **product-tracking-instrument-new-feature** skill |
| `audits/` | Timestamped audit snapshots | **product-tracking-audit-current-tracking** skill |

## Workflow

These artifacts follow a seven-skill lifecycle:

```
product-tracking-business-case β†’ product-tracking-model-product β†’ product-tracking-audit-current-tracking β†’ product-tracking-design-tracking-plan β†’ product-tracking-generate-implementation-guide β†’ product-tracking-implement-tracking ← product-tracking-instrument-new-feature
```

Each phase reads upstream artifacts and produces its own. Phases can be replayed as the product evolves.

## Version control

**Commit** everything in this folder except `.session-log.json` (ephemeral session data β€” add to `.gitignore`).

## Source

Product Tracking Skills β€” by Accoil.
https://github.com/accoil/product-tracking-skills
78 changes: 78 additions & 0 deletions .telemetry/product.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Product: SigTrace

**Last updated:** 2026-09-10
**Method:** codebase scan + conversation

## Product Identity
- **One-liner:** A developer drops SigTrace into their Vite build, and it draws a live map of every reactive signal in their app β€” every read, write, and effect β€” right inside their editor; when an update misfires or loops, they watch it happen on the graph and click straight to the line of code responsible, instead of guessing.
- **Category:** developer-tooling (IDE debugger / build-time instrumentation)
- **Product type:** B2C / prosumer today, with a stated ambition toward enterprise adoption. There is no account or organization concept in the product at all β€” every install is a fully independent, anonymous instance.
- **Collaboration:** single-player. Each developer runs their own local instance against their own local app; there is no shared session, no multi-user view, and no way for two people to look at the same trace together today.

## Business Model
- **Monetization:** free / open-source under the Elastic License 2.0 (ELv2). No paid tier exists today.
- **Pricing tiers:** none currently shipped. The team explored moving to an open-core freemium-to-premium model this session and reached two firm decisions rather than a shipped plan: (1) no new paid features will be built until there is real signal to justify them, and (2) that signal will come from an explicit, opt-in public feedback/community channel (e.g. GitHub Discussions), not from passive runtime telemetry β€” the team judged that a phone-home mechanism in a localhost-only debugging tool creates more enterprise security-review and community-trust risk than the data would be worth. This is a deliberate, recorded product stance, not an oversight.
- **Billing integration:** none. No billing code, license-key validation, or payment integration exists anywhere in the codebase.

## Tech Stack
- **Primary language:** TypeScript (core runtime, Vite plugin, VS Code extension); Kotlin (JetBrains plugin)
- **Framework:** none in the application-framework sense β€” the product is built directly against the Vite plugin API, the VS Code Extension API, and the JetBrains Plugin SDK (with Ktor used for the JetBrains-side WebSocket server)
- **Database:** none. There is no persistence layer anywhere β€” all state is in-memory for the life of a single debugging session and is discarded on reload.
- **Background jobs:** none.
- **HTTP client patterns:** none for outbound calls; the only network activity is a local WebSocket server (`ws` in the VS Code extension, Ktor WebSockets in the JetBrains plugin) bound to `localhost`, carrying instrumentation events from the running app to the IDE panel. No process in the product makes an outbound network call off the developer's machine.
- **Module organization:** npm workspaces monorepo β€” `packages/core` (@sigtrace/core), `packages/vite-plugin` (@sigtrace/vite-plugin), `packages/extension` (VS Code), `packages/jetbrains-plugin` (JetBrains/Kotlin), plus a `demo` app and a `docs` marketing/documentation site.

## Value Mapping

### Primary Value Action
**Watch a live signal update and jump to its source.** A developer sees a signal read, write, computed recalculation, or effect fire on the graph/table/timeline in real time, and can click through to the exact line of code responsible. If the event stream stops being trustworthy or the visualization becomes unreadable, the product has failed β€” the entire promise is "see it happen, then go fix it," not just "collect the data."

### Core Features (directly deliver value)
1. **Live Activity Table** β€” a real-time, filterable, pinnable log of every signal read/write/effect with an inline JSON value inspector. This is the primary surface developers watch while reproducing a bug.
2. **Timeline / Causal Chains** β€” chronological swimlane view of sequential update chains, with ghost-update and circular-invalidation detection, so a developer can see *why* a chain of updates happened, not just that it did.
3. **Dependency Graph Visualizer** β€” the interactive node graph (per the PRD) mapping how state propagates, color-coded by signal/computed/effect/DOM-sink type.
4. **Click-to-Navigate** β€” double-clicking any node, row, or timeline card jumps the editor cursor to the exact declaration line. This is what converts "I can see the bug" into "I fixed the bug," and is the feature that makes the other three worth using.

### Supporting Features (enable core actions)
1. **Component Audits** β€” groups updates by component, flags circular-invalidation loops, computation hotspots (>2.0ms), and dead signals, so a developer knows *where* to look before diving into the table or graph.
2. **AST-based Vite instrumentation** β€” the build-time compiler pass that makes zero-refactor setup possible; instrumentation only runs in development, so production bundles are untouched. This is the enabling mechanism, not something a user interacts with directly.
3. **Dual-IDE support (VS Code + JetBrains)** β€” the same debugging capability delivered natively in both major IDE families, so adoption isn't gated by editor choice.

## Entity Model

### Users
- **ID format:** not applicable β€” the product has no concept of a user identity. There is no login, no device ID persisted across sessions, and no way to distinguish one developer's install from another's.
- **Roles:** none.
- **Multi-account:** not applicable β€” there are no accounts.

### Accounts
- **ID format:** not applicable β€” no account entity exists.
- **Hierarchy:** not applicable β€” flat, single-tenant-per-machine by construction; there is no organization or team concept anywhere in the product today.

## Group Hierarchy

Not applicable. SigTrace has no groups, organizations, workspaces, or any multi-level entity β€” every install is an independent, isolated instance with no relationship to any other install. This is a direct consequence of the product being local-only with no backend; introducing any group hierarchy would require building an account/backend layer that does not exist today.

| Group Type | Parent | Where Actions Happen |
|------------|--------|---------------------|
| β€” | β€” | β€” |

**Default event level:** not applicable (no groups)
**Admin actions at:** not applicable (no groups)

## Current State
- **Existing tracking:** none. Confirmed by a full-repository scan for analytics/telemetry SDK patterns (Stripe, Segment, Amplitude, Mixpanel, PostHog, generic "analytics"/"telemetry" strings) β€” zero hits outside third-party vendored files (a bundled `d3.min.js`) and the marketing PRD's own prose. The product has never collected usage data.
- **Documentation:** yes, and mature β€” a public marketing/docs site (sigtrace.dev), a detailed README, a formal PRD, CONTRIBUTING.md, SECURITY.md, and CODE_OF_CONDUCT.md all exist and are current as of the latest release (v1.2.1).
- **Known issues (resolved this session):** two live-update scroll-reset bugs β€” the Activity tab's default sort-by-update-count re-ordering rows under a fixed scroll offset during continuous live events, and the Value tab only preserving scroll on node-switch rather than on in-place live updates to the currently viewed node β€” plus a non-responsive Activity table (`overflow-x:hidden` with no minimum width, clipping columns instead of scrolling) were diagnosed and fixed in `packages/extension/src/webview/` and mirrored into the identical `packages/jetbrains-plugin/src/main/resources/webview/` copy. Not yet rebuilt into new `.vsix`/Gradle release artifacts.
- **Recorded product decision:** after evaluating a freemium-to-premium path, the team explicitly decided *against* adding runtime telemetry, judging the trust/security cost (particularly for enterprise teams whose security review processes flag dev tools that make outbound network calls) higher than the analytics value. Future product decisions will lean on direct, opt-in community feedback instead of passive usage data β€” see Integration Targets below.

## Integration Targets

| Destination | Purpose | Priority |
|-------------|---------|----------|
| None (by decision) | The team has deliberately chosen not to integrate any analytics/telemetry destination. See Current State above for the reasoning. | N/A |
| GitHub Discussions (proposed, not yet built) | A public, opt-in feedback and feature-request channel, positioned as a direct substitute for the demand-validation signal telemetry would otherwise provide. Nothing leaves a user's machine unless they manually click through and post. | Proposed |

## Codebase Observations
- **Feature areas inferred:** activity/event log, causal timeline, component/hotspot audit, alerts, and a dedicated value inspector β€” inferred directly from the tab structure in `packages/extension/src/webview/app.js` and mirrored in the JetBrains webview resources.
- **Entity model inferred:** there are no database models or schema anywhere in the codebase. The only "entities" are runtime, in-memory concepts β€” a signal/computed/effect node, a component, and a causal chain/event β€” that exist only for the duration of a single debugging session and are discarded on reload or on hitting "Clear." Nothing about a signal, a component, or a chain is ever persisted to disk or sent off the developer's machine.
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- **`npx sigtrace web`**: opens the SigTrace dashboard in a browser tab on a free local port β€” no VS Code or JetBrains required. Reuses the same tracing WebSocket protocol as the IDE panels (attaches to an existing session instead of double-hosting if one is already tracing on port 8420).

### Fixed
- **Activity tab scroll reset (regression from 1.2.0's scroll lock)**: expanding a signal and scrolling would snap back near the top during live tracing, because the default "sort by updates" re-ordered rows on every incoming event out from under a fixed scroll offset. Scroll now anchors to the focused row's on-screen position instead of a raw pixel offset, so it holds steady regardless of re-sorting.
- **Value tab scroll reset**: scroll position was only preserved when switching between signals, not during live updates to the signal currently being viewed β€” so it reset to the top on every event for an actively-updating signal. Now preserved on every render.
- **Activity table not responsive**: narrowing the panel clipped columns with no way to recover them (`overflow-x: hidden`, no minimum width). Now scrolls horizontally below a sensible minimum width instead of hiding content.
- **Tracing no longer starts automatically on IDE open**: the extension previously opened a listening WebSocket server the moment VS Code (or JetBrains) activated the extension β€” which can happen just from restoring a window, with no user action at all. Tracing now only starts when explicitly requested via the panel's Start Tracing button or the `SigTrace: Start Tracing` / `SigTrace: Stop Tracing` commands.

### Planned
- Vue 3 signals (`ref`, `computed`, `watchEffect`) adapter
- SolidJS 1.8+ `createSignal` / `createMemo` adapter
- Performance timeline integration with browser DevTools
- npm `sigtrace` CLI for zero-config setup

---

Expand Down
6 changes: 3 additions & 3 deletions demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
"build": "vite build"
},
"dependencies": {
"solid-js": "^1.8.0",
"@sigtrace/core": "*"
"@sigtrace/core": "*",
"solid-js": "^1.8.0"
},
"devDependencies": {
"@sigtrace/vite": "*",
"vite": "^5.0.0",
"vite": "^8.1.5",
"vite-plugin-solid": "^2.8.0"
}
}
Loading
Loading