Skip to content

Releases: pinoox/neuromesh

v0.7.15

Choose a tag to compare

@yoosefap yoosefap released this 28 Aug 05:26
7a993ab

Adaptive context routing: learning now drives emission with full observability and benchmark harness.

  • Emission pipeline. EmissionPipeline tracks emitted / drop_stage per file through filters, penalized suppression, learning rerank, fill cap, and packet cap. rank_candidates refreshed after materialization.
  • Unified score. compute_unified_file_score merges utility, semantic, graph, learned (focus-aware + decay), pheromone, and penalty into ContextScoreBreakdown.
  • Explainability. RankCandidateView adds emitted, drop_stage, score_breakdown for explain_packet diagnostics.
  • Configurable thresholds. penalized_suppression_threshold, learning_relevance_cap_unrelated, learning_decay_half_life_days, max_learned_influence.
  • Learning eval. neuromesh eval --learning dose-response sweep; learning_eval module with MRR, NDCG@K, Learning Gain, Emission Gain.
  • CI tests. LearningToEmissionCausalTest (T5 + Kosha), determinism (4-run identical), catastrophic learning on unrelated queries, generalization, persistence reload.
  • Fixture. tests/fixtures/learning-causal/ for reinforcement benchmarks.

Complete the learning→emission loop and close v4 mini decoy gaps from benchmark reports.

  • Emission. promote_high_learning_into_emitted swaps high-bonus learned files into the emitted optional set (displaces low-utility slots). Heavily reinforced files bypass per-crate caps (learning_bonus ≥ 28).
  • Feedback semantics. access_count increments only on successful reinforcement; node_learning_bonus applies a demerit when base_relevance < 1.0. Penalized files show penalized: reasons in selection.candidates.
  • Seed demotion. file_min_base_relevance demotes seeds when any symbol on the path is penalized (not only the file node).
  • v4/mini decoy. is_alt_surface_path penalizes mini / lite / slim / light paths in activation scoring and decoy filters; mini-schema gold tasks forbid v4/mini/schemas.ts.
  • Tests. Negative-feedback bonus regression, routes.py emission after saturation, alt-surface scoring.

What's Changed

  • Enhance learning emission loop, adaptive routing, and mobile docs by @yoosefap in #25
  • Sync README and landing page stats with v0.7.15 release by @yoosefap in #26

Full Changelog: v0.7.11...v0.7.15

v0.7.11

Choose a tag to compare

@yoosefap yoosefap released this 28 Aug 01:18
c874072

Learning weights now change get_context packet selection, not just persisted graph state.

  • Learning → routing. file_learning_boost aggregates symbol + file reinforcement; learned files enter optional fill via focus-term match or high-bonus saturation; penalized seed files (base_relevance < 0.55) leave the required set.
  • Activation scoring. ActivationScorer adds a learning_lift from access_count / base_relevance so inactive_hints and fallback scores reflect feedback.
  • Explain diagnostics. neuromesh_explain_packetselection.candidates lists {path, score, learning_bonus, reason, selected} for before/after feedback comparison.
  • Tests. Selector acceptance tests for promote (PromoCodeInput), demote (App.vue), and kosha-style saturation (+50 on routes.py / schema.py).
  • Docs & landing. MCP client lists now include OpenCode, MiMo CLI, and Gemini CLI in README, mcp.md, agent-guide.md, and the GitHub Pages site. OpenCode and MiMo CLI setup sections added to the agent guide.
  • Perf. file_learning_boost_index builds learning scores in one graph pass; fixes gold harness latency regression on Linux CI (>200ms) from per-candidate full-graph scans.

v0.7.10

Choose a tag to compare

@yoosefap yoosefap released this 27 Aug 23:55
0774b21

Honest bounded coverage, physarum sidecar cap, and clearer learning feedback fields.

  • Coverage bounded. no_recorded_gap only when seeds resolve, gaps are empty, no sidecar connector files, and the packet was not budget-truncated. Tasks with physarum/utility fill now report bounded instead of false-complete.
  • Sidecar files. Optional connector fill (physarum_tube, utility:*) is capped at 3 files and marked sidecar: true in packet output; coverage.sidecar_files lists them.
  • Learning feedback clarity. record_feedback returns episode_saved_this_call, learning_episodes_in_store, and persisted_to: graph.bin. episodes_recorded kept for compatibility (per-call 0/1).

v0.7.9

Choose a tag to compare

@yoosefap yoosefap released this 27 Aug 23:18
2ff5f39

durable learning, parser relink, and Vue trace on stale snapshots.

  • Learning persistence (real). record_feedback saves graph.bin via workspace_root (not MCP cwd). Episode IDs are checkpointed in the snapshot (applied_learning_episodes). Replay on startup applies only episodes missing from the checkpoint, then persists. MCP flushes graph state on graceful stdio shutdown.
  • Parser epoch relink. GRAPH_PARSER_EPOCH (3) in snapshots; loading an older epoch clears file_hashes so the next index re-parses all files (Vue CALL edges on upgraded installs without manual --force).
  • Windows routing fix. tighten_focused_view_selection normalizes \ paths so cart.js is kept on checkout stepper tasks (gold checkout_qty_stepper).
  • Benchmark fixture. ProductGrid.vue @view binding corrected to ui.openProduct (action lives in ui.js).

v0.7.8

Choose a tag to compare

@yoosefap yoosefap released this 27 Aug 22:11
21bce7d

RETEST v0.7.7 follow-up: cross-session learning, Vue trace edges, and honest fuzzy trace.

  • Learning persistence. graph.bin snapshot digest now includes access_count, base_relevance, and edge pheromone weights so save_persisted after record_feedback is not skipped as “structurally unchanged”. Episodes replay on MCP startup when graph nodes are still cold (warmup_project_learning).
  • Vue trace / dead-code. Pinia actions methods become Function symbols; template @click / @view and <script setup> store calls emit Calls edges; store file hints are extension-agnostic (stores/ui resolves ui.js). trace inbound callers work for goCheckout and similar.
  • Trace honesty. TraceResult.origin_reliable and match_reason: "fuzzy" when the seed is not an exact/prefix hit — agents must not treat fuzzy origins as dead-code proof.
  • Pinia alias resolve. Store alias ui maps to useUiStore::action during call linking.

v0.7.7

Choose a tag to compare

@yoosefap yoosefap released this 27 Aug 21:11
f8e4878

Benchmark-driven routing, honest coverage, and a falsifiable learning loop (Vue shop fixture).

  • Shop gold fixture. tests/fixtures/mini-shop/ (Vue 3 + Pinia + SCSS) with gold tasks for price-card SCSS (T6), dead-code goCart (T7), and checkout setQty (T5). Runs in gold_harness_on_fixture_repos.
  • Style routing. Unified SCSS file hints (tokens.scss / mixins.scss with and without _), _priceCard.scss seeds, StyleToken search seeds, and cart/promo noise filtering so style tasks do not ship cart components.
  • View seeds. related_concepts become seeds; checkout/stepper prompts inject CheckoutView without checkoutcart false positives; focused checkout tasks tighten optional fill.
  • Coverage honesty. CoverageReport adds covered, skipped, semantic_coverage, and packet_gaps (with optional line). no_recorded_gap only when seeds and packet gaps are both empty.
  • Structural proof. structural_evidence includes exact_line, who_reads, callers_count, and is_dead; bug-hunt tasks can emit bug_line gaps (e.g. duplicate discount in total()).
  • Vue template → store. @click / @submit handlers (ui.goCart()) emit Calls edges to Pinia actions for dead-code and caller tracing.
  • Learning loop. record_feedback resolves human names, persists base_relevance to graph.bin, saves episodes, reinforces callee edges, and recalls successful episodes on the next get_context. neuromesh_get_node_weights exposes deltas for verification.
  • New MCP tools. neuromesh_expand_gap (cheap skeleton for gap paths) and neuromesh_get_node_weights (observability).
  • Selector / skeleton. learning_bonus boosts file fill from access_count / base_relevance; files ≤60 lines fold more aggressively.
  • Docs / ops. README and mcp.md warn against mcp without a workspace path; mcp.md documents learning timing and new tools.

v0.7.6

Choose a tag to compare

@yoosefap yoosefap released this 27 Aug 12:07
0927f2f

Agent setup guide, HTTP route seeds, Pinx/Vue overlays, Laravel/SQL/JSON, and tighter TS seed ranking.

  • Agent guide (all clients). agent-guide.md walks connect → instructions for Cursor, VS Code/Copilot, Claude, Codex, Antigravity, Kilo, Trae, MiniMax, Windsurf, Cline/Roo, and Zed, plus a universal paste block, one-shot prompt, and smoke test. Cursor template remains agent-rule.mdc; mcp.md links the tutorial.
  • Route identifiers. POST /sms, /api/v1/sms, and https://example.com/sms (path only) are identifiers — never file hints — so /sms cannot steal every SMS fixture via resolve_file_hint. GitHub-style /org/repo URLs stay out.
  • Api path aliases. An Api node named POST /sms is also indexed as /sms for exact search; the last segment (sms) is not aliased.
  • Route→handler edges. Laravel Route::post('/sms', [SmsController::class, 'store']), Axum .route(..., post(store)), FastAPI @app.postdef, and Express named handlers emit Calls from POST /sms to the handler. Gold: mini-laravel / mini-express route-only prompts.
  • Pinx get()/post() routes. get('/')->action([MainController::class, 'index'])->name('home') is an Api node, not only the older action([Class, method]) form. collection('/api'), action('home', [Class, method]), render() / view(), app.php package/theme/pinx, and vite() entry hints are overlayed too.
  • Single-app vs multi-app. Root app.php + bin/pinx is Pinx single-app; apps/com_* with nested app.php is multi-app. Theme package.json under theme/ is scanned for Vue, PrimeVue, PrimeUIX, Pinia, and React.
  • Vue kebab-case and React FC. <data-table> becomes DataTable; const StatCard: FC = () => is a Component. Gold: mini-pinoox dashboard/StatCard, mini-pinoox-platform shop vs blog.
  • Laravel is a real stack, not only Route::get. Eloquent Model / $table / belongsTo become DbModel nodes; Schema::create, seeders, factories, Route::resource / match, and Blade @include overlay too. Gold: mini-laravel store/route/migration/seeder/SQL/JSON.
  • SQL and JSON are parsed. CREATE TABLE / views / routines are DbModel symbols; config/*.json and package.json scripts are Config (dependency maps are skipped). Lockfiles stay out of the walk.
  • JS/TS modules and stylesheets. require() / import() / CSS+JSON side-effect imports; nested SCSS @include / @function / @keyframes; comma-nested classes in CSS/SCSS/Less. Gold: mini-store theme+CJS, mini-styles SCSS+CSS.
  • Tighter name matches beat decorated twins. safeParse outranks parseSimpleObject / parseNestedObject for the identifier parse; substring score now scales with how much of the symbol name is the identifier.
  • Bench, locale, and legacy paths are decoys. bench/, locales/ / i18n/, and v3/ / compat/ / legacy/ are penalized like tests unless the prompt is about them. to-json-schema loses to core/parse on parse/validate questions.
  • Type aliases seed. z.infer extracts infer and stems to output / input, so generic questions hit export type output<T> in core.ts instead of a runtime schema helper.
  • Natural phrasing still seeds. parse() and z.object are identifiers; parsing stems to parse, so "how does parsing work" is not an empty packet.

CI gold harness: migration vs SQL decoys, and a slightly looser debug latency gate.

  • Schema decoys are prompt-kinded. A "migration" question no longer seeds database/sql/*.sql; a .sql / CREATE TABLE prompt no longer seeds migrations/. Seeder and factory twins follow the same split.
  • Migration short name. 2024_…_create_sms_messages_table also registers create_sms_messages_table so that identifier seeds the PHP file.
  • Debug gold latency. Non-Windows gold harness allows < 200 ms (was 150) so Linux CI debug builds do not flake at ~157 ms.

v0.7.4

Choose a tag to compare

@yoosefap yoosefap released this 26 Aug 23:32
af196cb

Compound-task quality, Pinoox View→Twig, and complete MCP usage telemetry.

  • Cluster seeds pick the router guard, not a UI helper. A "router permission guard" clause still splits, but the noun permission now prefers src/permission.js / store permission modules over directive/permission. Clipboard and profile decoys are forbidden in gold.
  • Pinoox View→Twig is a walkable Calls edge. View::render('hello') attaches to the rendering method, binds theme/{theme}/hello.twig by file path before the stem hello can steal another symbol, and get_context / trace on MainController::index ship the template without the prompt saying twig.
  • MCP usage is complete. Handshake writes one mcp_session row; trace, deps, stats, explain, architecture, impact, and feedback append too. Mean reduction ignores 0-token rows so search/session do not drag the %. Monitor GET /api/usage reports the token-weighted overall %, and telemetry POST works without a Tokio handle.
  • Explicit MCP workspace stays put. neuromesh mcp <dir> and initialize rootUri no longer walk up to a parent git/Cargo.toml root, so a fixture like mini-auth is not mixed with the rest of the repo.
  • Type::method seeds resolve, templates beat namesake helpers. MainController::index binds the method (not a missed seed), and hello.twig outranks Greeter.hello() so the decoy stays out of the packet.

v0.7.3

Choose a tag to compare

@yoosefap yoosefap released this 26 Aug 12:05
819f12b

Workspace confinement, first-query readiness, and compact MCP packets.

  • Workspace confinement. get_file_skeleton and read_source refuse absolute paths, ../ traversal, and symlink escape. neuromesh index / start / monitor / eval / connect refuse home and filesystem roots in under 100ms. CLI Processed Tokens is the current run; Workspace Tokens is the graph total.
  • Index readiness. Cold MCP get_context waits for the first index (or returns indexing_in_progress) instead of an empty no_seed_resolved packet. neuromesh_get_stats includes index_state, generation, and ready.
  • Coverage honesty. Imperative verbs (Modify, Refactor, …) are not seeds. Equivalent file-path forms count as a hit. Unknown mode is a tool error. .env is skipped; .env.example and siblings are indexed.
  • Pinoox View→Twig. View::render('hello') links theme/{theme}/hello.twig with a Calls edge so the template ships with the controller.
  • No fold bodies on the wire. get_file_skeleton and get_context return FoldDescriptor (id, symbol, signature, lines, saved tokens). original_body stays in the session registry and returns only from neuromesh_expand_fold.
  • Minimal get_context by default. Response is packet_id, coverage (no_recorded_gap | partial | no_seed_resolved), tokens, skeletonized files, missing/next only when coverage is incomplete. mode still picks files; response_detail (minimal | standard | diagnostic) picks metadata.
  • neuromesh_explain_packet. Fetch seeds, selection, budget, physarum, and membrane for a packet_id from a 32-slot / 10-minute LRU (no source bodies). Unknown or expired ids are a tool error.
  • Compact MCP wire. Tool content[].text is minified JSON of the same object as structuredContent (not pretty-printed). HTTP /api/simulate still requests diagnostic so the VS Code inspector is unchanged.

v0.7.1

Choose a tag to compare

@yoosefap yoosefap released this 26 Aug 01:29
ac28945

Compound-task coverage is honest: each topical cluster seeds independently, and a named half that misses is partial — never a silent no_recorded_gap.

  • Cluster seeds. including / and how / as well as split the prompt. A clause with no camelCase identifier (e.g. "router permission guard") still tries those nouns against the graph, so src/permission.js ships with the login module instead of being omitted while coverage.claim says complete.
  • False-complete coverage. If that second cluster resolves nothing, seeds_missed is non-empty and claim is partial (Grep in next_actions). unresolved stays graph call/import gaps — it is not a list of missing task nouns.
  • Usage from IDE chat. neuromesh_expand_fold now appends a telemetry row (it previously only recorded the inactive-node path). Handshake / chatting without a tool call still does not. Rows use unique request ids so two calls in the same millisecond are not dropped.