Skip to content

V0.1.3/m1/foundation scaffold#6

Open
Vedansi18 wants to merge 48 commits into
hi0001234d:v0.1.3/m1/foundation-scaffoldfrom
Vedansi18:v0.1.3/m1/foundation-scaffold
Open

V0.1.3/m1/foundation scaffold#6
Vedansi18 wants to merge 48 commits into
hi0001234d:v0.1.3/m1/foundation-scaffoldfrom
Vedansi18:v0.1.3/m1/foundation-scaffold

Conversation

@Vedansi18
Copy link
Copy Markdown
Collaborator

Adds src/agents/: 4 adapter interfaces (HookAdapter, VSCodeExtensionAdapter, CLIWrapAdapter, BrowserExtensionAdapter), in-process registry (registerAdapter,
detectAll, getAdapter), unit tests, and empty index.ts placeholder.
Adds install.snapshot.test.ts + generated baseline snapshot — captures current installAction output (settings.json bytes + stdout). M1 Branch 2 must keep this snapshot
byte-identical.
No existing source code is modified. Zero-diff verified.

hi0001234d and others added 30 commits May 5, 2026 20:43
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nt sets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ofile

Adds selectAbsenceMap helper (hardcore_pro → formal, else → casual) and
updates resolveDecisionContent to use it for non-vibe profiles. Updates
6 no-profile tests and 2 priority-override tests to assert casual variants,
consistent with selectNonBeginnerVariant's undefined → casual behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add 3 hardcore_pro routing tests for remaining formal absence variants,
add all 8 non-beginner absence sets to allContent and per-set count tests,
add 4 beginner absence sets to C-02 structural validation block with
missing imports for ABSENCE_REGRESSION_CHECK_BEGINNER and
ABSENCE_SPEC_ACCEPTANCE_BEGINNER.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three changes to buildMjsScript() in TtySelectFn.ts:
- Fix _lineCount to split labels by \n and compute per-line visual rows
  instead of treating the whole label as one long string; this correctly
  estimates height for multi-line (numbered-steps) option labels
- Add wrapping guard: when all options fit within budget (no-overflow) but
  their total visual lines exceed the option count, recompute _maxItems
  using the option count as a tight budget ceiling so visually dense
  option sets always get a viewport rather than a flat list
- Pass maxItems to select() so @clack/prompts k() uses _maxItems as the
  viewport window instead of rows-4; without this, maxItems computation
  had no effect on the actual rendered UI

Applies to Mac, Windows, and Linux new-window paths (all share buildMjsScript).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…word lists

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ded vibeKeyword sets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds formal, casual, and beginner DecisionContent objects for
idea_scoping, idea_constraint_check, and idea_user_definition.
Includes content existence tests covering shape and non-empty strings.
Map wiring deferred to Phase 4.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds formal, casual, and beginner DecisionContent objects for
task_ordering, task_sizing, and task_definition_of_done.
Includes content existence tests covering shape and non-empty strings.
Map wiring deferred to Phase 4.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hi0001234d and others added 18 commits May 7, 2026 18:03
Adds formal, casual, and beginner DecisionContent objects for
user_feedback_review and iteration_planning. Wires all 8 new signal
keys (Groups A, B, C) into ABSENCE_CONTENT, ABSENCE_CONTENT_CASUAL,
and ABSENCE_CONTENT_BEGINNER. Adds 24 routing tests covering all
3 registers for all 8 signals, plus Group C content existence tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…INNER

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…cture test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… map

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…NG_CASUAL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 8 new absence signal definitions in signals.ts (scope_creep, context_loss, api_design_review, accessibility, environment_and_secrets, data_validation, ci_pipeline, rate_limiting)
- 24 new content set constants across 3 registers (formal, casual, beginner) in options.ts and options-beginner.ts
- All 8 keys added to ABSENCE_CONTENT, ABSENCE_CONTENT_CASUAL, ABSENCE_CONTENT_BEGINNER maps
- relevantProjectTypes filter on api_design_review, accessibility, rate_limiting signals
- AbsenceDetector.ts: Gate 3 now uses per-signal absenceThreshold with profile multiplier; project-type gate added
- types.ts: relevantProjectTypes field added to SignalDefinition
- auto.ts: projectType extracted from getProject() and passed to detectAbsenceFlags
- Tests: routing, content existence, structure, and buildOptionList coverage for all 8 new signals

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds the new src/agents/ module: four adapter interfaces (HookAdapter,
VSCodeExtensionAdapter, CLIWrapAdapter, BrowserExtensionAdapter), an
in-process registry (registerAdapter, detectAll, getAdapter), and an
empty index.ts placeholder for future adapter registrations. Unit tests
in registry.test.ts cover the registry behaviour.

Adds src/cli/commands/install.snapshot.test.ts plus its generated
baseline snapshot. The snapshot captures current installAction output
(settings.json bytes + stdout) with $HOME and platform-dependent
strings normalised so the snapshot is portable across machines. This
is the zero-diff safety net for M1 Branch 2 (claude-code refactor):
that branch must keep this snapshot byte-identical.

No existing source code is modified. Per dev plan §1.6 in
reviewduel-submodule.

Branch: v0.1.3/m1/foundation-scaffold

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Vedansi18 added a commit to Vedansi18/nexpath that referenced this pull request May 21, 2026
…istorical prompts

The chat-history watcher's initial pass over an existing state.vscdb was
emitting EVERY pre-existing prompt as if it were brand new, on every
extension activation. This flooded Layer C with backlog inputs the
Claude-Code hook semantics were never designed to handle: Layer C's
session-state machine (`SessionStateManager`, untouched) keys on
projectRoot and accumulates promptCount across all events it sees, so
once N existing prompts cleared the 3-prompt warmup gate
(`MIN_PROMPTS_BEFORE_ADVISORY = 3` at `src/cli/commands/auto.ts:51`),
multiple advisories would fire back-to-back in rapid succession — well
above the intended ~1-per-5-to-7-prompts cadence enforced by the
post-advisory cooldown (`POST_ADVISORY_COOLDOWN = 5`). Surfaced during
M2 manual testing R2/R3 on 2026-05-20.

Layer C was never modified — diff against
`upstream/user-experience-improvements-sub-7` for `src/server/`,
`src/classifier/`, `src/decision-session/`, `src/store/`,
`src/cli/commands/auto.ts`, and `src/cli/commands/stop.ts` is empty.
The bug was at the Layer-B → Layer-C boundary: our M2 watcher was
feeding Layer C a flood of inputs the original Claude-Code hook flow
never sent. Locked decision hi0001234d#6 (Layer C untouched) holds.

Fix: introduce `primedTargets: Set<string>` tracking which targets have
completed their initial read. On the first read for a target, rows are
processed through extractors and their signatures registered in
`seenSignatures` as usual — but `onEvent` is NOT called. Subsequent
fs.watch fires (when Cursor writes a new prompt to state.vscdb-wal or
the main file) then emit only truly-new signatures. This matches the
"only fire on NEW prompts" semantics that the Claude-Code hook always
provided.

Trade-off: a prompt typed during the brief window between Cursor
finishing startup and the extension finishing activation will be
primed-not-emitted. The very next prompt after that emits correctly.

Tests: the existing 'initial-pass after start() reads + emits events'
test (which asserted the old buggy behaviour) is updated to assert the
new prime-only contract. Four other tests that incidentally assumed
the old behaviour are updated to use a prime-empty-then-add-row
pattern so they exercise the post-prime emit path. Test count
unchanged at 254 across 20 sub-package files; full root tsc clean;
26/26 chat-history-watcher tests pass.

Pre-existing TtySelectFn Windows-sim 18 failures carry forward (out of
scope per dev plan §3.0).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

2 participants