Commit Graph
1935 Commits
Author SHA1 Message Date
Edgar Arakelyan 3de21ef5da Merge main ca3fd7ba into feat/recorder-saved-values 2026-10-26 14:26:51 -07:00
Edgar ArakelyanandClaude Opus 5.5 6f6c616133 fix: redact saved secrets as a URL query spells them, budget saved-value fills, and pin a refused slug's source
A secret's redaction spellings include the one a URL's query parser gives
the percent-encoded value (`'` as `%27`), so a saved secret sent in a query
is redacted from captured URLs.

Saved values fill at most 4,000,000 characters into what one step sends,
counted before each fill is built (percent-encoded in a path or goto URL, as
text in a header or JSON body), so a value referenced many times fails the
step instead of multiplying.

A create whose slug the held entities' `&` spellings refuse keeps the
recorded slug, so it now accepts the member slugged only as recorded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:26:35 -07:00
morluto 8b7ee48a46 fix(kuna): bind cache exports to their producing inputs 2026-10-27 05:23:53 +08:00
morluto 63220edcc3 fix(environment)!: withhold clock writes without an anchor
Keep missing or ambiguous scenario request durations unknown, retain learned clock rules, and withhold plans that cannot generate an observed clock. Refuse such writes in older imported states before changing state or generators.

BREAKING CHANGE: The write-plan reason can now be unknown-clock; strict clients must accept the new output value.

Validated state, CLI and advertised MCP workflows, documentation, and focused clock and cleanup regressions.
2026-10-27 05:19:35 +08:00
吴佳浩Alben 9e6dd8e372 docs(desktop): name the get_evidence_bundle tool in the MCP section (#7266)
The collection-paging paragraph says complete Evidence stays accessible through
`get_evidence`, but no tool by that name exists. The session family registers
`get_evidence_bundle`, which is the only name the catalog, the contracts and the
CLI equivalents use.

Every other page already uses the full name, so this was the only place a reader
or agent would look for a tool that cannot be called.
2026-10-27 04:56:17 +08:00
Edgar ArakelyanandClaude Opus 5.5 22a93fadc4 fix: fail saves from malformed UTF-8, and bound secret spellings before building them
A saving response is decoded as fatal UTF-8 in both the request step and a UI
step's save_response, so a malformed byte fails the step instead of saving
U+FFFD in its place.

A secret save first counts a lower bound on its redaction spellings from the
value alone (it and its longer percent-encoded spelling), and refuses there
when that cannot fit, before any spelling is built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:49:32 -07:00
Saim Shafiqueandgensokyo-dev 0d1a454e25 fix(ghidra): admit newer 12.x releases as compatible builds (#6924)
Admit same-major Ghidra releases at or above the verified minor through the existing compatible/unverified policy. Preserve the observed version, verified12.1.4 pin, installation-declared Java floor and separate NativeAOT verification gate.

367 targeted tests/static/docs, all10 real Java bridge-source compilation, and actual Linux12.2/JDK25 CLI/MCP queries and cleanup pass. JDK21 remains refused for12.2. Exact-main controls reproduce all3 unrelated CI assertions; canceled shards and an apt-blocked binary-layout lane remain unverified.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-10-27 03:49:12 +08:00
Edgar Arakelyan 723fe02c85 Merge main dd7a2da5 into feat/recorder-saved-values 2026-10-26 12:40:56 -07:00
morluto ca75643dbc fix(setup): preserve registration choices and own prewarm 2026-10-27 03:23:50 +08:00
Edgar ArakelyanandClaude Opus 5.5 81a275b130 fix: save no number JSON parsing changes, and spell an update's & as held entities do
- A saved number whose JSON spelling names another decimal than the
  parsed value, such as `1e-400` (parsed to 0) or `1.0000000000000001`,
  fails the step that saves it, checked against the number's source
  text through the `JSON.parse` reviver.
- An update plan's slug rule takes the spelling of `&` that the entity's
  earlier value and the type's other entities show, as a create's does,
  and held entities that spell it both ways leave no slug rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:17:01 -07:00
Edgar ArakelyanandClaude Opus 5.5 059322048f fix(browser): bound a saved response's decoded size and count only the spellings a secret save adds
- A UI step reads a saved response only once its decoded size is bounded
  before reading: the bytes received, or the declared length of one
  served from cache, times DEFLATE's 1,032 maximum expansion for gzip or
  deflate, must stay within 12,000,000 bytes. Another content coding
  (br, zstd) or an unknown size fails the step without reading.
- The saved-value cap counts the redaction spellings a secret save
  actually adds, its trimmed spelling included and an already held one
  not again, so re-saving the same secret does not grow the total.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:15:06 -07:00
gensokyo-devandHarsH 6d5532a204 feat(web): page retained bundle endpoint observations and inferences (#7259)
Page retained web-bundle endpoint observations and inferences through shared CLI/MCP projections, preserving source identities, scoped unknowns, coverage and complete Evidence access.

Based on HarsH’s original implementation in #7213 (6b1d5d42). Real Chromium/CLI/SDK verification and whole-task cost limits are recorded in docs/verification/web-bundle-paging-2026-10-26.md.

Explicit user authorization permits leaving human-readiness declarations unchecked and bypassing reproduced main failures (ADB listing fixture, package catalog expectation, untouched APK verifier formatting). No human-review attestation is made.

Co-authored-by: HarsH <harshasalkar7@gmail.com>
2026-10-27 01:37:39 +08:00
Edgar ArakelyanandClaude Opus 5.5 d39f386d20 fix(browser): cap the saved values a scenario keeps
A scenario keeps at most 4,000,000 characters of saved values at once,
counting the current value of each name and the redaction spellings
secret saves keep, and a save that would exceed it fails its step before
anything is kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:37:47 -07:00
Edgar ArakelyanandClaude Opus 5.5 22ac315c34 fix(environment): keep an update's word spelling of & and withhold later creates that omit derived fields
- A later update whose slug slugs no `&` keeps the plan's `and`
  spelling; only a later rule that spells `&` as the word where the plan
  drops it is rechecked against earlier calls.
- A later create whose response leaves out a `composed` or `template`
  field the plan rebuilds is withheld as `unexplained-change`, since
  serving would add the field; an omitted reference still passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:32:00 -07:00
Edgar ArakelyanandClaude Opus 5.5 d0d7c248ba fix(environment): let a later update refine an ambiguous slug spelling
A later update whose slug spells `&` as the word refines a slug rule an
earlier update learned from a name without `&`, as creates do, unless an
accepted call or a held entity dropped it. Every earlier retained update
is rechecked under the refined rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:02:52 -07:00
Edgar ArakelyanandClaude Opus 5.5 a712f52e21 fix(browser): save no number JSON cannot spell back
A saved number that is not finite, such as `1e400`, fails the step that
saves it, since a later step would send it as null in JSON and as
Infinity in a path or header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 08:57:39 -07:00
gensokyo-dev 5508b2affd fix(analysis): retain source evidence through directory exports (#7250)
Retain authenticated provider source records independently of snapshot replay eligibility and return them explicitly to plain application callers, including late cancellation. CLI/MCP commit source records before delivering links; function dossiers share the canonical Evidence constructor. Keep directory replies compact and preserve successful retry verification.

Real Ghidra CLI/MCP investigations verify 652-function ls, historical report provenance, cross-session resume, unchanged source/project content and complete offline Evidence. Final full 14,338-function libcrypto comparison matches all metadata/pseudocode facts and independent fresh-import observations: 14,194 written, 143 external, one recorded deadline; 494.03 s, 445.63 CPU s, 1.584 GiB sampled family peak under 2-CPU/8-GiB guards, with no OOM or cleanup failure.

144 focused tests and static/docs/site checks pass; latest-main integration passes 289 cases plus typecheck/lint and actual CLI snapshot source retrieval. Final CI source/static/build/docs/quality/package checks pass. Four ADB shard failures also occur in main CI 40349559391; cancelled coverage remains unverified and author declarations stay unchecked under the user's explicit bypass authorization. No human-review attestation is made.
2026-10-26 23:56:03 +08:00
YingNingandgensokyo-dev 4da7e46e9c fix(provider-selection): name whether a rejection came from availability or target support (#7220)
Distinguish local provider readiness failures from target-support refusals in shared CLI/MCP diagnostics, preserving original codes and evidence. Avoid claiming configured providers are unconfigured.

120 focused tests, static/docs checks and real ELF CLI/MCP verification pass. Hosted CI has the same four ADB failures as exact main d9908fd7a; three canceled shards remain unverified. Merge uses the user's explicit authorization to bypass proven main failures. Fresh Codex and Greptile reviews are clear.

Fixes #7214

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-10-26 23:49:11 +08:00
Edgar ArakelyanandClaude Opus 5.5 7b2e780776 fix(browser): refuse saved values that make any path segment a dot segment
Each filled path segment is checked after substitution, so a saved `.`
that a literal dot or `%2e` beside it turns into `..` fails the step in a
request path and a goto URL, before URL parsing drops it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 08:40:03 -07:00
Edgar ArakelyanandClaude Opus 5.5 69f38a78b9 fix(browser): bound saved-response reads and refuse values a request cannot carry
- Each read of a saved response (the wait, sizes() and text()) races the
  step's deadline and abort signal, so a body still arriving when the
  step times out or is cancelled saves nothing, and the watcher detaches
  at once.
- A UI step keeps the 4,000,000-character cap and refuses before reading
  only a response received as more than 12,000,000 bytes, three per
  character; the decoded text is then held to the character cap.
- A Basic username with a colon fails the step before anything is sent.
- A saved `.` or `..` that fills a whole URL path segment fails the
  step, since the URL would drop it.
- Held entities that spell `&` both ways leave a create without `&` no
  slug rule.
- The saved-values example in the browser scenario contract is a whole
  scenario, as the catalog test reads every documented example.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 08:15:38 -07:00
Edgar ArakelyanandClaude Opus 5.5 9f2145609e chore: merge main into recorder saved values
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 08:06:06 -07:00
Dery Ferdikaandgensokyo-dev aa6c1d49fd fix(mcp)!: require allowed hosts for non-loopback HTTP binds (#7172)
Require operator-declared hostnames before serving MCP HTTP outside loopback, preserving Host/Origin gates. Parse hostname identities once, share typed startup recovery across CLI/MCP, and announce an admitted client URL. Generated AgentEnv bundles declare their client/service names and validate DNS/HTTP name identity before export.

Validated through real packaged HTTP requests, direct SDK connection, compiled export refusals, 184 focused tests, static and documentation checks on the refreshed main integration. Final CI and review evidence is recorded in the PR body.

BREAKING CHANGE: non-loopback deployments require MCP_ALLOWED_HOSTS or rea mcp --http --allowed-hosts; bundle names must be unchanged HTTP hostnames within the 63-octet DNS label bound.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-10-26 22:55:10 +08:00
Edgar ArakelyanandClaude Opus 5.5 98f18cc52c docs(spec): record the gates after merging main 2b84efe0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 07:47:11 -07:00
Edgar ArakelyanandClaude Opus 5.5 e42362c922 fix(browser): keep saved ids exact, encoded text and unknown slugs as written
- a saved integer past 2^53, which JSON parsing would round to another id,
  fails the step that saves it
- request paths and JSON strings read only `{saved:name}` as written; the
  percent-encoded spelling is read only in a goto URL, whose parsed form
  spells braces that way
- a held slug that neither `&` spelling gives counts as unknown: a create
  whose slug spells `&` learns no slug rule beside it, and no later create
  widens the spelling
- `save_response.path` takes the request path's portable pattern, shared as
  START_ORIGIN_PATH, so JSON Schema clients compiling it with the `v` flag
  read it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 07:46:12 -07:00
Edgar Arakelyan af3d5626d8 Merge remote-tracking branch 'origin/main' into feat/recorder-saved-values
# Conflicts:
#	src/domain/analysisView/environmentStateWriteApply.ts
#	src/domain/analysisView/environmentStateWriteChanges.ts
#	src/domain/analysisView/environmentStateWriteComposed.ts
#	src/domain/analysisView/environmentStateWriteCreate.ts
#	src/domain/analysisView/environmentStateWriteExplain.ts
2026-10-26 07:33:47 -07:00
19447516a4 feat(ghidra): reuse existing projects through verified copies (#7236)
Reuse selected Ghidra projects through verified private read-only copies, with shared CLI/MCP configuration, committed project identity, import-SHA verification and explicit historical/unknown analysis semantics. Preserve exact cancellation and platform capability boundaries.

Actual Ghidra 12.1.4/JDK21 Linux CLI/MCP investigations matched fresh import on 652-function ls and 14,338-function libcrypto inventories and pseudocode; authenticated complete Evidence, mismatch/staleness refusal, saved historical reports and shared /tmp projects verified. 958 focused tests passed with four platform skips; build/static/docs/format passed. Real macOS/Windows reuse remains unverified; Windows reuse is unavailable. See PR verification for measured whole-task costs and final CI attribution.

Co-authored-by: akushonkamen <akushonkamen@163.com>
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
2026-10-26 22:31:13 +08:00
morluto 77468d5043 fix(providers): preserve launch selections and refresh obsolete Kuna exports 2026-10-26 22:22:27 +08:00
morluto eb06e263cb fix(plist): own dictionary decoding across Apple workflows
Preserve XML, OpenStep and binary dictionary keys at their format owners. Share validated binary reference facts with materialization while retaining scalar precision, UID identity and bounded expansion. Migrate archive, Interface Builder, native and app-bundle consumers, then remove obsolete key-omission accounting and schema copies.

Validated source regressions and compiled CLI/MCP workflows, including native plist fidelity and archive identity. Typecheck, lint, docs and test discovery pass. No performance benchmarks were required.
2026-10-26 22:20:00 +08:00
Wenyu Chiou 1a91630b88 fix(setup): preserve Linux Hopper HTTP failure status (#7183)
Preserve observed failed-response HTTP status through Linux Hopper setup diagnostics without changing download rejection, retry, or installation policy. Independently validated on latest main through red/green regressions, actual TLS sockets, focused checks and CI. Closes #7182.
2026-10-26 20:45:06 +08:00
김준호 0211a07ec5 fix(session): report a missing Linux ps as provider unavailability in status (#7180)
Keep binary_session available when Linux owned-child probes lack procps ps. Preserve typed ownership-prerequisite failures in direct execution and report per-provider readiness in status. Independently validated on latest main through real stdio MCP plus focused regression, static and documentation checks. Closes #7164.
2026-10-26 20:35:09 +08:00
gensokyo-devandtijo95 e3066c1705 fix(deps): upgrade zod without narrowing timestamp inputs
Upgrade Zod to 4.6.6 and refresh locked license inventories. Preserve REA's established timestamp spellings through one shared UTC/offset grammar, including completion-verifier consumers. Size the stdin resource regression from the child's actual heap capacity.

Fixes #7173
Includes the dependency and inventory changes proposed in #7184.

Co-authored-by: tijo95 <georgesarmede@gmail.com>
2026-10-26 20:13:12 +08:00
b675073b73 feat(mcp): scope advertised tools by family (#7228)
Scope MCP discovery, setup, doctor, status and recovery guidance by selected tool families using one contract inventory and shared catalog identity. Preserve default discovery, canonical validation and complete Evidence.

Fixes #3246. Builds on #3026. Real libcrypto workflow verifies all 5,367 exports and identical complete Evidence. Static/source/build/docs/Windows/package/Greptile checks pass; ten assertions reproduced identically on clean main and feature across Node 24/22, with cancelled coverage explicitly unverified. Merge uses the user-authorized bypass for baseline failures and unchecked human-readiness declarations, without attesting human review.

Co-authored-by: 0xLLVEL <fakhrezan1@gmail.com>
Co-authored-by: Codebuff <noreply@codebuff.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-26 19:50:12 +08:00
morluto e54bf1006e fix(environment): own JSON fields across capture, state and replay 2026-10-26 18:27:30 +08:00
gensokyo-devandAkshad Jogi 9085222ca1 feat(mcp): support compact output schema advertisements (#7218)
Add opt-in bounded output-schema advertisements while preserving the full default, canonical server validation and complete structured content. Verify real stdio discovery under a 1 MiB receive cap, all 5,367 libcrypto export coordinates, complete Evidence parity, whole-task serialization estimates and resource bounds.

Fixes #2512. Integrates #7054 by Akshad Jogi with original authorship retained.

Co-authored-by: Akshad Jogi <akshadjogi@gmail.com>
2026-10-26 17:59:51 +08:00
morluto f4987281fa fix(setup): forward supported tool and runtime selections 2026-10-26 15:15:00 +08:00
morluto 7404847f64 fix(update): bound and own metadata probe lifetimes 2026-10-26 14:49:10 +08:00
morluto bf876efbaa fix(kuna): bind cached export reads to verified file state 2026-10-26 14:49:10 +08:00
morluto b654ac8b13 fix(setup): retain auxiliary tool selections in registrations 2026-10-26 14:49:10 +08:00
morluto 975900f565 docs(setup): state the FreeBuff minimum release (#7066) 2026-10-26 14:45:43 +08:00
morluto 83a6cdb859 fix(paths): preserve native traversal and unset PATH semantics 2026-10-26 14:17:27 +08:00
morluto 6819cc5b8d fix(setup): preserve explicit configuration independently of readiness 2026-10-26 14:02:55 +08:00
Edgar ArakelyanandClaude Opus 5.5 212063ff6c fix(browser): address review of saved values and slug spellings
- Basic credentials and values saved with `secret: true` are redacted however
  short, as declared secrets are; page values keep the 8-character floor
- a literal Basic password other than empty is refused, since Evidence
  records literals as written
- `save_response` takes only a request the step starts, so an earlier
  autosave cannot answer it, matches its path as the browser spells it, and
  stops watching requests when the step ends
- saving reads are bounded: a request step streams its answer up to
  4,000,000 characters; a UI step refuses a larger received size unread
- goto placeholders fill the destination URL before structured query values
  join it
- reading a composed string stops at the reading cap before comparing or
  allocating more
- a slug's `&` spelling follows every create the plan accepted and every held
  entity; direct slug rules and composed strings take it from held entities
  when the create slugs none, and a slug rule they contradict is not learned

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:49:33 -07:00
Edgar ArakelyanandClaude Opus 5.5 812f9ff2fa docs(spec): record the gates after merging main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:43:52 -07:00
Edgar Arakelyan 8218b0b246 Merge remote-tracking branch 'origin/main' into feat/recorder-saved-values 2026-10-25 16:38:44 -07:00
Edgar ArakelyanandClaude Opus 5.5 cf40db8c5b docs: record the write-model fixes and fresh recordings; ask agents to clear earlier attempts
The skill asks agents to delete what an earlier attempt created before
recording again, since the environment holds a leftover as seeded data
(EspoCRM's fresh run). The spec and verification record the write-model
fixes, the same recordings rebuilt before and after them, and a fresh
recording of every application.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:38:43 -07:00
Edgar ArakelyanandClaude Opus 5.5 31d6e1d978 fix(environment): learn addresses a UI-made create spells, and check templates on later creates
Recording through the UI let Grafana generate folder uids, and three write
model gaps then served folders whose address kept the first folder's slug:

- a template around a generated value won over a composed string that also
  reads the title's slug; the composed string now wins when it reads a field
  besides the template's value
- later creates checked composed strings against their own answers, but not
  templates, so coverage served a template a later folder contradicted; a
  template is now checked the same way
- a slug dropped `&`, which Grafana's Go slugs spell as the word; a slug rule
  or part learns `ampersand: "and"` from the call that shows it, and calls
  that slugged no `&` agree with either spelling

An address whose uid equals its title's slug could come from either field.
The entities the type holds now pick the one reading they share, and when
they cannot, a later create that tells the fields apart lends its composed
rule to the first create, whose body contract is learned again with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:03:15 -07:00
Edgar ArakelyanandClaude Opus 5.5 48a4543b39 docs(spec): record saved values in browser scenarios
Outcome, plan, tasks and verification for saved values, save_response
and Basic credentials, with the agent-built comparison against main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:41:26 -07:00
Edgar Arakelyan 583e104837 Merge remote-tracking branch 'origin/main' into feat/recorder-saved-values 2026-10-25 11:35:14 -07:00
morluto d69a54d592 fix(setup): register explicit MCP runtimes and preserve launcher identity 2026-10-26 02:33:31 +08:00
b8ce3c74cd feat(native): make function matching allowance configurable (#7159)
Allow native matching representation budgets to be selected at runtime or launch while retaining the 96 MiB default and main shared-provenance accounting. Preserve actionable configuration recovery through the setting owner and verify complete CLI/MCP matches for 20k/50k synthetic inventories and real stripped LLVM 14/15 inventories.

Fixes #6406.

Based on #7112 by Kaoru0822; original authorship and co-author credit retained.

Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:22:32 +08:00