Skip to content

fix: transfer parked service fixes, cursor hover and section ranges - #5

Merged
deiteris merged 9 commits into
masterfrom
fix/parked-transfers
Oct 10, 2026
Merged

deiteris merged 9 commits into
masterfrom
fix/parked-transfers

Conversation

@deiteris

Copy link
Copy Markdown
Owner

Summary

  • Leave synthesized URI parameters out of the outline.
  • Place the API missing-description finding at its title from the model; the lint command keeps YAML trees only when an enabled rule needs them.
  • Fail bench ab when this tree's worker fails, rather than reporting "not comparable".
  • Drop superseded service cost figures from docs/12 and docs/21; describe docs/reports/ in docs/README.md.
  • Share an open buffer's text with its snapshot instead of a second decoded copy.
  • Read hover's source keys along the cursor's path (syntax.keys_at) instead of a whole-file key index.
  • Record section keys in Raml.written_sections and place outline sections at them: empty sections, schemas:, and an Extension's own types: and restated resources.

Performance and acceptance

  • Buffer text, service-session: retained -1.1%, peak -0.9%, time within noise.
  • Cursor hover, A/B vs 131b08e: service-session -9.3% time (7.4% noise), retained -9.6%; hover retained -9.8%, time within noise. Hover linearity: time 0.992, retained 0.998.
  • Section ranges, A/B vs 7e14745: time within noise on endpoints, templates, large, service-navigation, service-session. Retained endpoints +1.65% (inside the reported noise), large +0.3%, service workloads up to +0.5%; this trade-off is accepted.

Reports: docs/reports/2026-10-11/service-cursor-hover.md, docs/reports/2026-10-11/service-section-ranges.md.

Verification

  • Ruff, formatting, strict mypy and full pytest: 5908 passed, 69 skipped, 1 xfailed; pinned TCK initialized.
  • Over the TCK, the cursor path reaches every key the grammar walk yields, and every outline entry holds its selection and lies in its parent.
  • CI/platform checks must pass before merge.

🤖 Generated with Claude Code

deiteris and others added 9 commits October 11, 2026 00:05
P6 places a parameter synthesized for an undeclared URI variable at its
resource's key, so the authored view counted it as written there and the
outline listed a `uriParameters` section nobody wrote.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`missing-description` placed the API at its fragment's root node, which
only a parse retaining the YAML trees has: the language service keeps none
for the default rules, so the finding sat at an unknown position and its
suppression directive could not apply. It now reads the `title` in force
from the model, the one an Overlay or Extension wrote when it replaced it.

The lint command therefore keeps the text, which suppression reads, and
the trees only when an enabled rule needs them (`Linter.requires_source`).
No benchmark workload runs this path: `unwrap+lint` enables every ruleset,
which includes a source-sensitive rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A worker failure on either side was reported as "not comparable", so a
broken current tree read like a feature the base revision lacks. The base
side may still be unavailable, and B then completes its rounds; a failure
in B ends the command with status 1 and the worker's output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`docs/12` § 5 said a service workload's first-use composition was avoidable
only by retaining the trees, which § 5.2 and the recovery plan no longer
hold; § 5.2 already says how to read parse, first-use and warm costs. The
`docs/21` § 5 latency paragraph quoted a 2026-09-28 run and a compose cache
no longer planned. Dated measurements belong in `docs/reports/`, which
`docs/README.md` now describes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The overlay loader hands the parse a buffer's encoded bytes, so each
snapshot retained its own decoded copy of every open file beside the
buffer's. Where the two are equal the snapshot now keeps the buffer's
string; a buffer with a leading BOM keeps the parse's BOM-free text.

`bench ab HEAD --bench service-session --config unwrap`, 5 rounds:
time within noise (107.5 %); peak 35.62 -> 35.31 MB (-0.9 %); retained
27.81 -> 27.50 MB (-1.1 %).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first hover in a file sorted every key the grammar walk yields and
scanned each type value for built-in tokens, an index kept for the
snapshot's lifetime (15,203 keys and 2.6 MB on the hover corpus). Hover
now reads only the keys enclosing the cursor, `syntax.keys_at`, one per
mapping level found by binary search, and the built-in tokens of the one
type value the cursor is in. A token's offset is taken as its column where
the scalar's one-line span is its text or its text in quotes, instead of
splitting the file to compare.

Over the TCK, the path reaches every key the walk yields.

`bench ab HEAD --bench hover --bench service-session --config unwrap`,
5 rounds:
- hover: time within noise (16.2 %); peak unchanged; retained
  26.29 -> 23.71 MB (-9.8 %).
- service-session: 1260.5 -> 1142.8 ms (-9.3 %, noise 7.4 %); peak
  unchanged; retained 27.50 -> 24.87 MB (-9.6 %).
`bench linearity --bench hover`: time 0.992, peak 0.992, retained 0.998.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dated report holds the scope, reach and measurements; the recovery
plan's execution record and docs/15 now name accurate authored section
ranges as the remaining candidate, recorded by the parser.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model kept no position for a section key, so the outline spanned a
section's entries and selected the first, omitted an empty section, named
a `schemas:` table `types`, and placed what an Extension restated under a
master resource at its first entry.

Decoders now record each section key an entity wrote in its own file in
`Raml.written_sections`, by file: the root's tables and settings, a type's
`facets:`, a resource's `uriParameters:`, a method's and a `describedBy:`'s
parameter groups and `body:`, a response's `headers:` and `body:`. Each
Overlay or Extension document's root keys and resource paths are recorded
from its own tree before the merge, which keeps the master's key. A key is
recorded only inside its owner's span, and not under a method or response
a template wrote, which no outline lists.

`bench ab HEAD --config unwrap`, 5-7 rounds: time within noise on
endpoints, templates, large, service-navigation and service-session.
Retained: endpoints 17.48 -> 17.77 MB (+1.65 %, inside the reported noise;
2,000 response `body:` keys), templates unchanged, large +0.3 %,
service-navigation +0.5 %, service-session +0.3 %.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dated report holds the scope, the rejected first measurement and the
final one; docs/15 and the recovery plan's execution record name the
retained-allocation trade-off and that no Stage C candidate remains.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@deiteris
deiteris merged commit 689fb77 into master Oct 10, 2026
20 checks passed
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.

1 participant