Repository navigation
Conversation
Reproduce every point from the 2 October review call in a real browser against a Django 5.2.7 index and this repository as control, and record the plan with measured causes, priorities and open decisions. The capture script splits each interaction into numbered screenshots with a visible cursor ring and records canvas identity, camera and the prompt sent to the browser model, so resets, zoom direction and chat evidence are measurable rather than described. Only 17 downscaled images are committed; the full series stays local. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Selecting a symbol in the Galaxy loaded zero hops, so the toolbar read "0 layers, 1 node, 0 edges" and the edge-type filter had nothing to offer until the reader pressed Expand. A single node has no relationships of its own, so node and symbol scopes now start at depth 1 and cannot go below it. File and folder scopes keep depth 0, where their internal edges are already included. The reader range label uses a plain hyphen. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The Galaxy workspace gave .atlas-galaxy no position, so the absolutely positioned Selection details box was placed against the workspace grid that also holds the chat column. With chat open it covered the chat input and swallowed clicks on Send. The galaxy stage is now the containing block; fullscreen keeps its own fixed box. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Wheel zoom in the Overview, Routes, System structure and Behavior scenes moved the orthographic camera along its view direction only, so scrolling over a corner of the map always zoomed into the screen centre. The installed three-stdlib OrbitControls support zoomToCursor for orthographic cameras: they keep the point under the cursor fixed and move the orbit target with it, which the fit and scope-camera code already reads back. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The organic layout returned nothing while it computed, so every selection, expansion and preview-to-complete step unmounted the scene and built a new WebGL canvas, and each new picture counted as a fit request. The camera jumped to a new orientation every time, and the quick unmount let React Three Fiber connect its events to a canvas that was already gone, which is the intermittent "reading 'addEventListener'" page error. The layout hook now exposes the previous arrangement as stale while the next one runs, and the panel keeps showing it (or the whole graph before the first scoped picture). In the scoped Galaxy a fit is requested by the scope itself (root, direction, edge types), not by each picture; nodes that arrive later are brought into view by stepping the camera back along its view direction, as long as the reader has not moved it. A fly-to set before the scene mounted is not replayed. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Wheel zoom moved the camera exactly along its view direction for every cursor position, so the reader could not zoom into the part of the graph they were pointing at. The Galaxy OrbitControls now use zoomToCursor, which three-stdlib 2.36 supports and drei passes through. Fits and fly-tos still set the pivot themselves, and the distance limits apply to the new radius. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
For Django, get_architecture returns status "limited" with zero groups and the warning that the response exceeded its memory budget. The empty map said only "No component projection is available within this analysis budget", or, with Group cycles enabled, that no cycles matched the filters; the actual reason sat in the collapsed Evidence and limits. A limited or group-less projection now picks its empty state before any filter message and shows the warnings that limited it. The two standing interpretation caveats every response carries are left out there; any other or reworded warning stays visible. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The prompt for a Galaxy selection was a dump of JSON paths: snapshot, view, generation, rendered sizes and omission paths. Relationship items were cut to 24 before anyone looked at their direction and then to three before the budget applied, so "who calls JSONBAgg" reached the model with one outgoing INHERITS edge and no caller. GalaxyPanel now classifies every scope edge against the roots first and publishes incoming and outgoing groups per edge type with complete counts and the related names by file. The agent prompt states the selection with kind and file:lines, both sides in words, the scope (depth, direction, filters) and its completeness. Names are listed until the budget ends and followed by an explicit "+N more"; the packet reports how many it could name. Other evidence kinds keep the generic formatter. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
RpcIntelligenceClient.tracePath sent direction "callers"/"callees" and "max_depth", but the trace_path schema in src/mcp/mcp.c accepts "inbound"/"outbound"/"both" and "depth". The server therefore ignored both arguments and always traced with its defaults. The client now takes and sends the schema's names. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
scopedHierarchy derived each node's hop column from its z coordinate, which only the arranged hop rings encode. While a scope loads, its preview is built from the overall layout and keeps the server's global coordinates, so the columns were wrong until the complete answer arrived. The hop now comes from the levels the traversal records (roots at 0); z is only a fallback for callers without levels. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
"Who calls JSONBAgg?" got no caller: the model saw one relationship, decoded greedily without repetition controls and repeated one line until the 512 token budget ran out. Caller and callee questions about the current Galaxy selection, in English or German, are now answered without the model from the loaded scope: every edge type with its complete count, the related names by file and an explicit "+N more" beyond the evidence bound, CALLS first. The answer says when the scope does not follow that direction or is still loading, instead of reporting no callers. For everything else: - manual chat gets a repetition penalty and an n-gram block as well; the n-gram block now checks the answer against itself only, because counting the prompt forces quoted names and paths off course - the worker reports why generation ended and the dock marks answers cut at the output limit as "Shortened (token limit)" - a scope larger than the prompt can name shows "<nodes> nodes / <edges> edges: too large for the local <model> model; showing <n>" - history is trimmed oldest first to the input limit, with a note, before the request is refused Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Without a refit, a scope's complete answer could arrive far smaller than the preview the camera had been fitted to, and keeping the preview's positions pinned froze layout-derived nodes far out of the complete picture. Positions are again only carried over from complete pictures. Instead the scene steps the camera back or forward along its view direction until the outermost drawn node sits at the margin, never closer to the pivot than a fit would stand, and only while the last camera move was a fit the reader has not touched since. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Every return to a selection showed "Explaining selection..." and ran the model again: there was one explanation slot, and the selection key held the whole evidence text, so counts and the loading state changed it while the scope loaded. An explanation could also start on the preview and describe the state before the expansion. A Galaxy selection is now identified by project, workspace, the selected scope, direction, edge types and depth. Finished explanations are kept per selection (at most 32) and shown again on return without a new generation; "Explain again" replaces the entry. An explanation starts only once the scope is complete; until then the card says it is waiting. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
After expanding JSONBAgg to two layers the starting node could not be found: nothing marked it, the fit centred the cloud instead of the root, and the screen-space separation pushed the root out of the middle. - The organic layout keeps roots at the origin: a fresh layout is re-centred on them, an expansion keeps the centred positions, and a root the previous picture does not hold is placed at the origin instead of drifting. - The scene draws a ring and an always-visible name on each root (up to 12 roots, DOM like the hierarchy ring), and its plain label is not repeated. - Screen separation never moves a pinned root; pinned disks are hashed at the largest scale so later disks still see them. - The scoped fit centres on the roots with extents measured symmetrically around them, so the farthest node still fits. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
get_architecture(system_structure) returned status "limited" for Django 5.2.7 (52,402 nodes, 274,549 edges, below both graph budgets). The overview listed one entry with a full representative symbol for each of its 12,700 components. That section alone grew the mutable document to 16.7 MB, the capped components and dependency witnesses took it to 29.4 MB, and serializing the result then crossed the 32 MB response budget, so the whole projection fell back to the empty limited render. List at most 4096 overview entries, chosen by the same rank that picks the displayed components, so every displayed component keeps its entry. Groups still carry every component id and all counts, and the omission is explicit: overview.complete is false and overview.limits reports omitted_components. Graphs with up to 4096 components are unchanged apart from that new zero count. Django now renders "ready" with 12,700 components, 256 displayed, 2048 dependencies and 4096 overview entries in a 4.1 MB result (peak 23.2 MB of the budget, below the 8 MiB job result cap). Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The agent configuration offered model, automatic explanations and history only, and the model choice and the automatic flag reset on every reload. It now has an input (context) and an output limit for the selected model, bounded by the model policy: the answer stays within the model's output ceiling and question plus answer within its browser context. Limits, the chosen model and "Explain selections automatically" are stored in this browser under a versioned key and validated on read, as the view preferences are. Manual chat uses the limits for its prompt budget and asks the worker for that many output tokens; automatic explanations keep their short budget but never exceed the limits. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The header read "Agent active · Qwen2.5 Coder 0.5B" next to the chat toggle. It is now a robot icon drawn on the same grid as the chat toggle, with the status lamp at its corner; a click still opens the agent configuration. The state and the model name move into the tooltip and the accessible name, and the model is chosen in the configuration. The header's agent and chat labels now come from the workspace strings, which removes the seven hardcoded chrome strings the style gate found in AtlasChrome.tsx. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The call asked for step-by-step tracing, modelled on Graphify's shortest-path view. In the scoped Galaxy workspace the toolbar now offers: - "Path to...": a searchable list of the nodes already loaded in the scope. The shortest path from the root follows the scope's trace direction (outgoing, incoming walked backwards, or both) over the loaded edges only. - "Call order": the root's outgoing CALLS sorted by call-site line. The path or call order is highlighted and everything else dimmed; its edges are drawn over the scene in their type colour with type labels on the path edges only, and the active step carries a ring. A compact step list shows "A --CALLS--> B" with the hop (or call-site line), Previous/Next moves the highlight, and Clear or Escape returns to the normal view. A new root, direction or edge filter drops the path; an expansion recomputes it. Hops are the only distance used here, in line with the plan (G6). Nothing is fetched from the server, and /api/trace is unchanged. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The style gate forbids U+2013 and found nine in the reader context notes, the chat source ranges and their tests. Ranges now use a hyphen. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
For Django the Behavior start list held only "Choose an operation...": the limited projection emits no entry points, Python entry points are only functions named main, the auto-pick accepted only main, and the behavior source_id 0 the server sends for "nothing selected" was taken as a real node ID because ?? does not fall through on 0. source_id 0 now means no selection. When the projection classifies no entry point, the start list comes from /api/flows (ranked route handlers and call-graph roots), and among those a conventional handler name such as handle or run is suggested after main. A limited projection shows the warnings that limited it in the empty journey instead of "No direct call witnesses were returned". Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
In the browser check, searching the path picker for "Aggregate" listed __all__ first, because a qualified-name match sorted alphabetically ahead of the node actually called Aggregate. Name matches now rank first (exact, prefix, anywhere), as in the node search. The ring on the active step also carries the node's name, since plain labels of path nodes are too small to read at the framed distance. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
At 1600 CSS px the scoped toolbar broke into a second row with the chat closed, and the path controls made it longer. The search field now starts from a smaller basis and the scope name is capped earlier, the status and group count no longer wrap internally, "N connection groups" reads "N groups" (the full sentence stays in the tooltip), and inside a scope the node and edge render limits step back into a compact "Limits" menu. The whole-graph toolbar keeps them inline. With the chat open the row still wraps, but only the status, group count and limits move to the second row. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…ojection ap_test_path missed Django's app convention tests.py and treated every file below a singular test/ directory as test code, so django/test/, Django's public testing API, became test components. Python discovers tests by file name, so recognize tests.py and conftest.py next to the existing test_*.py and *_test.py rules, and stop a singular test/ directory from being the only signal for a .py file without a test name. The indexed is_test flag of such a file comes from the same directory rule at extraction time, so it is set aside there as well; otherwise the class (unflagged) and its methods (flagged) would get different roles and split into separate components. tests/, __tests__/ and test/ for other languages keep their meaning. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Opening "django" in the Overview jumped straight to its files: areas were one folder deep except under src, lib and similar containers. The folder layout was computed for every file while only 40 were drawn, so the pruned platforms kept their full size, filled the canvas and flattened the tilted view; full-path labels overlapped and heights were scaled against the largest repository area. An opened area now shows its next folder level as area blocks, applying the repository area rule to the path below it (so graph-ui shows src/app as one step, and django shows contrib, db, utils ...). The node cap runs before the folder layout, so platforms are sized to what is drawn; a filter that only narrows the drawn map keeps its positions. Outside areas are named as siblings of the opened one and sit in their own lane in front of its platform. Labels are relative to the opened area with the full path in the tooltip, heights compare the bricks of the current scope, and the Overview uses adaptive labels whose culling measures the real label boxes instead of the larger service-map estimate. The location trail offers every drill-in level. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Routes > Endpoints drew every route on its own: for Django dozens of
overlapping labels, nearly all of them only registered, handled or called
from tests/. The model already supported a filter, but the workspace
hard-wired it to an empty string.
Routes sharing a first path segment now fold into one counted group
("/accounts · 12") whose relationships keep their evidence; selecting or
double-clicking a group narrows the view to its routes through the filter,
which the Routes view now offers and which lists matching routes one by
one. A route whose registration, handlers and callers all lie in test code
is hidden by default behind an "Include test routes" toggle that states
how many are hidden; a test calling a production route stays visible.
Endpoint labels use the adaptive label culling of the Overview.
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The projection took entry points only from the indexed is_entry_point flag, which the extractor sets for main and JS/TS exports. Python web code never calls main, so Django's Behavior list stayed empty even once the projection rendered. Mark a Function or Method as an entry point when it has a HANDLES edge to a Route node, the same route evidence atlas_flows.c already scores. Handlers in test code stay out: they are fixtures, and the projection keeps test and production roles apart everywhere else. The index and the extractor are unchanged. For Django 5.2.7 this adds four production handlers to main (five entry points, 12 paths instead of 4). The other 130 indexed handlers are test methods and stay excluded. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
npm run check:style failed on the PR head. This removes the hits that do not belong to the chat and header work: - the six long dashes in the ADR preview fixtures become colons; - the projects menu entry, the coverage selection label and the "Open ADR" button take their text from the message catalog again, with the wording unchanged; - the README names the bundled hook by its installation section instead of by product name; - the configuration reference keeps the installer's exact environment variable through a narrow exemption in the operational client rule, limited to that one variable in that one file, with tests showing that any other mention or an authorship claim there still fails. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The worker inferred "length" whenever the answer used every allowed token. Transformers.js also hands the end-of-sequence token to the streamer, so an answer that ended exactly on the limit was reported as cut and the chat showed "Shortened (token limit)". The worker now remembers the last token and reports "length" only when it is not an end-of-sequence id of the model or tokenizer. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The selection snapshot has a 16,000 character budget. Roots came first with up to 1,200 characters of documentation each, so in a large scope the copy cut whole relationship groups, the symbol totals and names. The answer then said "to 0 symbols", dropped edge types and still called the list complete. When a side was dropped entirely the reader fell back to the old path dump, caller questions went to the model and the explanation key lost its waiting gate. GalaxyPanel now builds its evidence through galaxyScopeEvidence. Root documentation stops at the 300 characters the readers use. Counts come before names, and the names of all groups share an explicit budget, so a scope fits the snapshot. The reader recognises a Galaxy scope by its identity and depth, accepts a missing or cut side and reads the snapshot omissions. The prompt and the listed answer then say that relationships were left out instead of claiming a complete list. The capacity note now appears only when the prompt could not name every symbol the snapshot carried. The snapshot's own bound of 24 names per group is no longer reported as too large for the model. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…elds A path or call order selection was only hidden when the root, trace direction or edge filter changed. Setting the direction back, or selecting the same root again after "All graph", brought the old path back. The selection is now dropped on every new scope key, on a new selection and on reset. The window Escape handler for the path view ignored escapeTaken and typing targets, so one Escape could clear the path while Help, Settings or Projects stayed open, or take the key from a field. It now steps back like the fullscreen handler does. The picked target keeps its name, so removing a layer no longer shows it as a raw node id. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
A short general question about JSONBAgg ("was macht diese klasse? sehr
kurze antwort") got four lines of counts: the model's sentence claimed
"Arrays" and was dropped every time, so the answer never said what the
class is. The answer and the automatic card now list the lines read from
the selected symbol's source under "In the source:" ("Im Quelltext:"),
between the graph facts and the checked sentence.
For a Python class that is its definition with its bases, its class level
assignments and then its methods with their decorators. For a function it
is the signature, joined where it runs over several lines, the first line
of its docstring and, when the body has at most four lines, the body. At
most six lines; the rest is counted ("+3 more attributes and methods").
Other languages get their definition line. Without source nothing changes.
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
When a path label found no free spot along its edge, it was drawn where it covered the least, and that could still be the hierarchy band title (a wide title across a steep edge): both texts were unreadable. The hierarchy edge labels already leave out a label in that case. Path labels now do the same. The edge type stays in the step list, and the label comes back as soon as the camera gives it a free spot. A later label keeps clear of the earlier ones as before. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The card showed "2310 files · 15299 indexed nodes" beside "2,163 measured files of 2,310". The view's own detail now gets the same grouping as the rest of the card, while line numbers after a path stay as they are. Files by language are listed largest first with Unknown last. The note that opened every Source block, "Static graph relationships do not establish runtime execution or repository purpose.", now says plainly that the relationships come from reading the code and do not show what runs at runtime, in German under a German answer. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
While a layer loads, Expand +1 is blocked (aria-disabled) and still takes the pointer and the focus, but it showed no tooltip: there was no text for that state, and an empty hint shows nothing. It now reads "Layer 3 is loading; "−" cancels it." on hover and on focus. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
"was macht diese datei?" about an open Python file in Explore, or "explain this" about marked code, still got the free model answer, while the same question about a Galaxy selection got listed facts and one checked sentence. These questions now get that shape too, in the language of the question: the file with its kind and length, a module's docstring and its top level definitions, or the marked lines; for one marked class or function also the lines of its code. The model adds at most two sentences, checked like those of the explanation card, and the note says what was read from the file and what the model wrote. Questions that ask for detail or anything else still go to the model as before. Architecture selections keep their English facts. Tests that used "Explain" only as some question to the model now ask a specific one. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Back, Forward and the subtabs share one row since A1, but the row jumped when switching between Overview, Routes and Hotspots and the two system views: System structure and Behavior set the view's frame to 16 px instead of 28 and 32 and gave the tabs their own padding and gap. "← Back" stood at x 32, y 98 in the first three and at x 16, y 86 in the other two. The system views now use the frame and the row of the other subtabs. The Back button stands at x 32, y 98.3 in all five. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
With a filter the Start field kept the current start under "Matching operations · N of M" even when it did not match, so the group held one entry more than its count: "5 of 61" with six entries, the last one "main · …/manage.py-tpl". It also stood among the suggestions. A current start that the filter does not match now has a group of its own, "Current start, not matching the filter", at the top of the list. The suggestions and the matches hold only matches, so each count equals its entries. A current start that matches stays in its place. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…rings The line of the service map that got the shared Refresh control (A3) still had "Fit map" written into the TSX, and so had the repository map. The label now lives in architecture/strings.ts and both maps read it there. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The hand test asked for every Refresh button to say what it did; only the
four in Architecture did. Measured in the browser, three more showed
nothing that lasted: Refresh in ADR changed nothing for a single frame,
Refresh projects in the project picker showed "Loading projects..." for
about 150 ms and then the same list, and Refresh in the file impact of
Explore folded the details into "Reading dependencies…" for two seconds
and brought back the same numbers.
The control and its hook move from architecture/ to ui/refresh/, with the
shared words "Up to date at …: no changes since the last load" and
"Refresh failed at …", and these three buttons use it: they read
"Refreshing…" while they run and then name the time and whether anything
changed. Where the view already shows an error in its own words, the
status names only the time. The file impact keeps its details on screen
while a refresh of the same file runs. In the project picker the status
stands on its own line under the buttons.
The System buttons already show it ("Updated" and "Read" with the time),
and the Refresh buttons of Settings, of the projects panel and of the
daemon alerts are not mounted anywhere in the app, so they stay as they
are.
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The lines read from JSONBAgg ended mid-template at the panel edge, behind the scrollbar macOS hides. Code blocks in chat answers now wrap long lines, as the Source block does since K15. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…story
After a few answers built from facts, "Explain the marked code line by
line" got the first fact line back from the model ("Marked lines 50-54 of
general.py"). The history of a later request now carries a grounded answer
as its model sentence (its facts only when the sentence was left out), a
file outline as its heading and purpose and a listed answer as its list.
The code lines and the note on who wrote what stay out: the request carries
the source anyway, and a model answer must not say "not generated by the
model".
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The outline of django's pyproject.toml showed "dependencies [; authors [". An array or inline table that runs over several lines is now read to its end, and its items are split at its own commas only, so an inline table such as an author stays one item. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…and hint while loading, steady tab row, current start apart, Refresh feedback across the app Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…answers, code file questions, topic return, probe words, INI outline and file purpose Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…ence, dropped sentence reason, token note, unknown names, German answers, Architecture card Both chat branches touched the same places. The grounded answer keeps the lines read from the code and takes the reason of a dropped sentence; the divider says "Back to" for a returning topic and "New topic" in the language of the turn otherwise; examples follow the kind of the selection and the hint offers no model. The new tests of the behaviour branch now expect the reworded texts, and the German follow up answer quotes the prompt like the other German hints. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
|
Thanks for opening this — it has been seen, and it is queued. This note is automated, but it is not a brush-off: it exists so you know where your PR stands instead of having to guess from silence. Current review status: working through a backlog. What that means for this PR, concretely:
Things that will genuinely speed it up whenever review does happen:
If this fixes a bug, a reproduction we can run is worth more than a description of the symptom. Thanks for contributing, and sorry in advance for the wait. |
…tch restated answers With .github selected in the Galaxy hierarchy, "kkannst du mir die heirarchie erklären" and "erkläre die aktuelle hierarchy" went to the free model, which answered "Ich kann dir die Heirarchy erklären." and "Die aktuelle Hierarchie erklärt.". Questions about the current view (die Hierarchie, die Ansicht, den Graphen, den Ausschnitt, die Struktur, this view, the hierarchy, what am I looking at, was sehe ich hier), typos included, now get a listed answer from the loaded scope in the language of the question: the root with its kind in the middle, incoming and outgoing relationships by type with count and bounded names, how far the scope reaches and how the picture is read. The Galaxy evidence carries which picture is shown; switching it keeps the content identity, so the automatic explanation is not written again. A free model answer that only restates its question is no longer shown as an answer: the turn says the model gave no answer, lists the facts of the selection and offers Ask again, which tells the model not to restate the question. A restating sentence under the facts of a general question is left out. Short real answers such as "Ja, 11." stay. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…eside Explore
N1: The index puts a Branch node above the top level folders and files,
named after the branch, "DETACHED" for a detached HEAD and "working-tree"
where no branch is known. Galaxy showed that bare name, and in the
hierarchy of .github it read like a folder. One helper
(galaxy/node-names.ts) now names it from the label Branch or the qualified
name pattern <project>.__branch__.<slug>: "django-demo · detached HEAD",
"cbm · working tree", "django-demo · branch main". Galaxy labels in both
views, root markers, the hover card, the search, the toolbar root, history,
Path to, Selection details and the chat evidence, topic and listed answers
use it; German answers read "losgelöster HEAD", "Arbeitsverzeichnis" and
"Branch-Knoten". Tooltips and the hover card keep the name in the index.
The "{}" the index stores as the file of a Branch node is no file any more
(no file "{}" in the search, no open source button), the scoped hierarchy
frames the wider name instead of cutting it at the left edge, and line 0 is
no line range in the hover card. Scopes, history keys and the chat snapshot
keep the names of the index, so typed names match as before.
N2: The note "nothing of this walk is in focus: the ring follows the symbol
in front of the reader" stood under the scoped hierarchy in the Galaxy tab,
where the root stands in the middle and Explore is not open. It now shows
only beside Explore's reader, when no node of the walk is open there, and
says "None of these nodes is open in Explore; the ring marks the symbol
open there." Both hierarchy strings moved to galaxy-strings.ts in plain
words.
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…ng note beside Explore (K47, K48) Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
…scope and catch restated answers (K45, K46) Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The server writes next_offset and truncation_reason under a full page, candidate_window_saturated for very many candidates, and the lines of a too small output budget. The search parser knew none of them, so every search with more than one page fell back to "Index search unavailable". Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
The answer about the current view listed the branch node by its bare "DETACHED", and the card of a folder said "Selected: .github (Folder) in .github". Both now use the names the Galaxy shows. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Since the branch node reads "cbm · working tree", a search for "working" ranked it behind the folders of the other hits and cut it from the list. Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
Signed-off-by: Bernhard Jackiewicz <bj@techport.io>
|
Thanks so much, Bernhard 🙂 I really appreciate all the care you put into the review feedback and the repeated hands on testing. The navigation, architecture views and chat improvements are now included in #2068, with all your commits and authorship preserved. I also added small integration fixes for rapid project switching, graph completeness reporting at the render limit, and safe temporary browser profiles in the test helper. This PR is now merged into the branch behind #2068 at 7cfc1b8. Really happy we are building this together! |
Martin, these are the fixes from our call on 2 October and from two rounds of hand testing afterwards. After the second round two reviewers went through every change and every chat answer once more, and what they found is fixed here too. Every fix has a test and was checked in a headless browser; the browser checks, the UI tests and the C suites are green.
Galaxy
Chat and local model
Architecture
Other
Backend (architecture projection, with C tests)
Still open: the local 0.5B model is weak, especially in German; its free answers are labelled now, but they are not better. Behavior resolves os.environ.setdefault in the Django project template to a QueryDict method, which comes from call resolution in the index.
It is a large PR with 204 commits.