Files
sencho/.gitignore
T
Anso 7e3e22138b fix(mesh): name actual bridge kind in proxy-bridge rejection (#1075)
* fix(mesh): distinguish proxy bridge from pilot tunnel in registerProxyBridge rejection

When central's MeshProxyTunnelDialer dials a node whose slot is already
held by a peer-initiated proxy bridge, the registration is correctly
refused, but the activity-log message read "pilot tunnel already
registered for node N; proxy bridge refused" regardless of which kind
of bridge was actually in the slot. No pilot tunnel exists in
proxy-mode remotes by definition, so the wording pointed operators at
the wrong subsystem.

Use the existing bridgeKinds index (already consulted correctly by the
sister method replaceOrRegisterProxyBridge) to emit a kind-accurate
message: "proxy bridge already registered for node N; concurrent dial
refused" when the existing bridge is a peer-initiated proxy bridge,
keeping the original "pilot tunnel" wording for the pilot-agent case
so existing log filters and the sister test still match.

Pure cosmetic; the rejection behavior is unchanged.

New regression test asserts the discriminator in both directions. Also
tightens the test-fixture beforeEach to clear bridgeKinds alongside
bridges so future tests cannot read a stale kind.

* chore: ignore local trailer directory in git repository

* refactor(mesh): centralize bridge-kind type and conflict-message formatter

Followup tidy on PilotTunnelManager after /simplify flagged two related
items in the F-R-2 change:

- Extract `BridgeKind = 'pilot' | 'proxy'` as a module-scoped type alias
  so the kind taxonomy lives in one place. `bridgeKinds` and
  `injectBridgeForTest` now consume it; the inline union literal is
  gone.
- Extract `formatBridgeConflict(nodeId, existingKind)` as a private
  helper. Both `registerProxyBridge` and `replaceOrRegisterProxyBridge`
  call it from their "slot already held" rejection paths, removing the
  byte-identical "pilot tunnel already registered for node N; proxy
  bridge refused" string copy across the two sites.
- Trim the 6-line WHAT comment above the rejection throw to a 2-line
  WHY so the call site stays scannable.

No behavior change; the three relevant test suites stay green.
2026-05-17 01:16:21 -04:00

68 lines
872 B
Plaintext

# Dependencies
node_modules/
# Environment Variables (CRITICAL: Never commit secrets)
.env
.env.*
!.env.example
# Build Outputs
dist/
*.tsbuildinfo
backend/public/
# Sencho User Data & Mocks
data/
mock_data/
docker/
sencho.json
# OS Generated Files
.DS_Store
Thumbs.db
Desktop.ini
ehthumbs.db
# IDE / Editors
.vscode/
.idea/
*.swp
*.swo
*~
*.sublime-project
*.sublime-workspace
# Testing artifacts
test-results/
e2e/report/
html-report/
.coverage/
coverage/
.playwright-mcp/
# Logs
*.log
npm-debug.log*
# Auto-generated files
backend/cookies.txt
backend/src/generated/version.ts
# Local-only working files
.claude/
.worktrees/
plans/
CLAUDE.md
# Design system (local-only authoritative reference)
frontend/DESIGN.md
.design-bundle/
# Local-only projects (separate repos)
demo-video/
trailer/
website/
# Internal engineering docs (not published)
docs/internal/