Skip to content

Feat/context overlay sidecar - #16

Merged
FScholPer merged 30 commits into
mainfrom
feat/context-overlay-sidecar
Sep 17, 2026
Merged

FScholPer merged 30 commits into
mainfrom
feat/context-overlay-sidecar

Conversation

@FScholPer

@FScholPer FScholPer commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Why

An agent working in one S-CORE repository knows nothing about what was decided
in another session, in another module, last week. The knowledge exists — it is
just not selectable. Storing context is not the hard part; selecting the
context that matters for the task at hand is.

This PR adds that selection layer to context-discipline. It is local,
deterministic, and Git-native: no service, no embedding model, no network call.

What an agent gets

get_prior_context(task_text, current_nodes) returns the reasoning records
from other sessions that are relevant to the current task, plus the score
factors of the ones it rejected, so an empty result is diagnosable instead of
silent.

Relevance is one number per candidate:

score = (0.6 * semantic + 0.4 * structural + bonus) * recency * live_ratio
  • semantic — token overlap between the current task and the prior record.
    Unicode-aware, function words filtered; without that filter, German prose
    matched on die/und/wird and produced a measured false positive.
  • structural — the share of the prior record's grounded nodes that lies
    inside the code-graph neighbourhood of the current task. This is what lets
    "same pattern, different module" match at all.
  • live_ratio — how much of a record's ground still exists in the graph;
    floored so that build/config decisions are not permanently unreachable.
  • recencyoff by default; retention already drops records after 90
    days, and on a small corpus age does not discriminate.

Selection is by rank, not by an absolute threshold: candidates above the
measured noise_floor and within rank_gap_ratio of the best one. Every
lookup writes an attention record with all factors, so any decision the layer
made can be replayed afterwards.

Why the numbers are what they are

They are measured, not chosen. Each pair of runs was one task that should
match and one that must not:

  • noise_floor = 0.037 is the geometric mean of the worst relevant score and
    the best control score after tokenization was fixed.
  • rank_gap_ratio = 0.35 is the value that still keeps the weakest relevant
    prior once structural raises the top of the scale.

In the most recent real run, all five relevant priors were returned and both
control records were rejected, with a factor of 36 between them.

Scope and boundaries

  • Everything stays in .score-local/ on the developer's machine. Nothing is
    shared between developers in this PR.
  • Prior reasoning is rendered inside an explicitly untrusted block: it is data
    recorded by other sessions, never instructions to follow.
  • record_outcome now requires verdict to be exactly pass or fail, with
    the justification in the new rationale field. This is a breaking change
    for callers that passed prose verdicts.
  • structural only contributes when current_nodes contains module or
    directory paths; the tool schema now says so at call time, and the response
    reports focus_size so an agent can see that its input carried no structural
    signal.

What is deliberately not in here

Exploration sampling, IDF weighting (it makes every score depend on corpus
composition, so a recorded decision stops being reproducible), and a
specificity cap on focus expansion (measured, it lost more signal than it
saved). Each was tried against the real graph and rejected on evidence.

Frank Scholter Peres frank.scholter_peres@mercedes-benz.com, Mercedes-Benz Tech Innovation GmbH
Provider Information

AI Assisted by Devin

Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter.peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter.peres@mercedes-benz.com>
Signed-off-by: Frank Scholter Peres <frank.scholter.peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
@FScholPer
FScholPer force-pushed the feat/context-overlay-sidecar branch from 62d4d31 to e6137cf Compare September 9, 2026 06:55
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
@FScholPer
FScholPer force-pushed the feat/context-overlay-sidecar branch from d11e42e to fddf9f7 Compare September 10, 2026 09:46
@FScholPer
FScholPer marked this pull request as ready for review September 14, 2026 12:34
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Co-Authored-By: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Signed-off-by: frank.scholter_peres <frank.scholter_peres@mercedes-benz.com>
Comment thread scripts/intersession-demo Outdated
Comment thread scripts/intersession-demo Outdated
Comment thread pyproject.toml
@FScholPer
FScholPer merged commit f38cbc3 into main Sep 17, 2026
4 checks passed
@FScholPer
FScholPer deleted the feat/context-overlay-sidecar branch September 17, 2026 14:40
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