mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[PR #5664] [MERGED] feat(analysis-view): share templated positions across manifest tools #7021
Closed
opened 2026-11-01 21:44:47 +00:00 by bsakaguchi
·
0 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
morluto/rea#7021
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/5664
Author: @earakely-scale
Created: 10/20/2026
Status: ✅ Merged
Merged: 10/21/2026
Merged by: @morluto
Base:
main← Head:feat/manifest-item-write-templates📝 Commits (10+)
c4b4302docs(specs): plan a template rule that shares templated positions6d8aa4bfeat(analysis-view): share templated positions across manifest tools72fbed5refactor(analysis-view): drop the unused ManifestRule alias930c96ddocs(specs): record the prefix-variance checks and corpus results33b0643fix(analysis-view): share positions with digit-free generated identifiers9a025b3docs(specs): record five environments rebuilt end to end with the rule6ef39ecchore: merge main (52c84f6f) into the prefix-variance branch75af11ffix(analysis-view): share a position with the parameter that observed the literal6a8beb5docs(specs): record the prefix-variance review round03b66dffix(analysis-view): bound the spelling summary of shared positions📊 Changes
13 files changed (+962 additions, -196 deletions)
View changed files
➕
docs/specs/agent-environments/prefix-variance/plan.md(+18 -0)➕
docs/specs/agent-environments/prefix-variance/spec.md(+59 -0)➕
docs/specs/agent-environments/prefix-variance/tasks.md(+10 -0)➕
docs/specs/agent-environments/prefix-variance/verification.md(+149 -0)📝
docs/web-network-captures.md(+18 -7)📝
src/domain/analysisView/EnvironmentManifestAccumulator.ts(+11 -10)➕
src/domain/analysisView/environmentManifestNames.ts(+157 -0)📝
src/domain/analysisView/environmentManifestRules.test.ts(+1 -1)📝
src/domain/analysisView/environmentManifestRules.ts(+182 -177)➕
src/domain/analysisView/environmentManifestSpelling.test.ts(+29 -0)➕
src/domain/analysisView/environmentManifestSpelling.ts(+84 -0)📝
src/domain/analysisView/environmentManifestView.test.ts(+243 -0)📝
src/domain/analysisView/environmentManifestView.ts(+1 -1)📄 Description
Summary
A capture session usually edits one scratch entity: it creates it, then updates and deletes it at a fixed path such as
/api/v1/collections/0RZ576QZQA5KG. The environment manifest templates a segment only when sibling routes of the same method and segment count vary there. So those writes stay literal single-entity tools (patch_collections_0rz576qzqa5kg), even though the reads of the same collection were templated as/api/v1/collections/{collection_id}.This PR adds an opt-in template rule,
prefix-variance. It templates such a literal with the parameter another tool already uses at that position, so the write becomespatch_collections_by_collection_idon the read's exact template.Part of #4933. Spec, plan, tasks and verification are in
docs/specs/agent-environments/prefix-variance/.Problem and expected behavior
A literal write tool addresses one entity that may not exist in any later state. Nothing can model its effect. The write-effects gate in #5600 reports these tools as
no-state-target, and they were the largest group it could not serve.With the rule listed in
template_rules:When it applies: a literal at position
pis templated when another tool on the same origin has a parameter atpfrom one of the other opt-in rules, after the same preceding parts. The other tool can have any method and any segment count, so deeper routes such as…/collections/{collection_id}/booksare covered too.Which literals qualify:
Empty literals, stop words and
v1-style versions never qualify, and format-rule positions ({numeric}, …) are never shared.Naming: the parameter takes the shared parameter's name (
collection_id,uid, a pair's_namespaceand_name) and is labelledprefix-variance.Merging: tools whose routes now match merge, and a merged position keeps a tool's own rule when one templated it.
Segment limit: like the sibling rules, it compares routes of at most 32 segments and says so in a limitation.
Change and scope
environmentManifestRules.tsgains the pass. It runs last, so it can share every parameter the other rules produce.prefix-varianceparameter records the rule it shares (sharedRule), which both names it and keys it when routes are compared.environmentManifestNames.ts, so the rules file stays under the length limit;/api/are still excluded asnon-json. That hides 13 write tools in 5 of the showcase captures (Directus, Jellyfin, Keycloak, Miniflux, Shlink). Fixing it changes default output, so it belongs in a separate change.Within the contribution scope: an analysis-view projection change inside an existing boundary; no target execution.
Contract and boundary impact
src/domain/analysisView/), at template-rule application.template_rulesacceptsprefix-variance. The request schema's description names it, which changes the generated tool catalog. Toolparams[].rulecan now beprefix-variance. Requests that don't list it give identical results.basis: "inferred", with its observed values.docs/public/product-catalog.json), package, or installation impact: none beyond the generated MCP catalog.Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.
Evidence and regression coverage
Tests added. Seven cases in
environmentManifestView.test.ts:Corpus evidence (executed over the 50 showcase captures: 45 HAR inspections, 5 browser scenarios):
Unchanged without the rule. Main's build and this branch give byte-identical results without the rule: the manifest with no rules, with the four existing opt-in rules, and the environment-state view. All 150 of 150 hash equal.
Templated with the rule. Added to
after-uid-literal,opaque-tokenandsibling-variance, the rule templates 25 literal write tools and 44 read tools in 10 captures:PATCH,DELETE, archive, and the reads of a workflow whose id holds no digit;mereads.Tools go from 1,591 to 1,578, because Redpanda Console's per-subject reads and the per-memo and per-workflow reads merge.
Left alone, as intended: Espo CRM
layout, Federal Registerfacets, Ghostslug, Shlinkstats, LycheeMetrics::photoand Vault's path names.Combined with #5600 (merged locally with main):
Newly modelled but still unserved, because of what the capture holds:
sharedrelation its create response never returned;tagswhile the update echoes the request's order.End to end on five random environments. Komga, Mealie, n8n, Sentry and Shlink were drawn at random from the ten environments the rule changes, redrawing until one had newly served writes. Each was rebuilt on its own Linux VM from its published scoped HAR with
npm packof #5600 + main + this branch: manifest, bundle, smoke, retrieval tasks forgpt-oss-120bandGLM-5.3-Flash, write tasks graded from the state throughdata/get, and a dry-run dataset. Published results are in brackets.Every smoke task passed. The misses:
id: "sentry"for the/api/0/segment, which the tool schema describes asobserved: 0. Every passing episode, and every GLM episode, passed0.nullorundefinedoptional arguments).qa-03with GLM: the model never called the alert-rules tool.The first n8n run showed that a digit-free workflow id stayed literal: reading that workflow by id failed because the state held only its list fields. The fixed-length clause fixed that, and the rebuilt n8n reads it correctly.
Live comparison, seeded by the same scripts:
Komga 1.29.1: 9 of 12 steps equal. Collection create, update, delete and the reads after them agree apart from the generated id. Two differences remain: the collection list after a create omits the new collection (recorded membership), and a deleted collection's 404 replays the recorded body.
n8n 1.123.85: 3 of 8 steps equal.
These gaps belong to the write and list serving in #5600 and its base, not to this rule.
User-visible output. Komga, with the rule:
Without the rule the same record is
patch_collections_0rz576qzqa5kgwithparams: [].Remaining proof gaps. The rule is an inference from paths. An app whose identifier-like literal sits beside an opt-in parameter but names a different resource would be templated wrongly. In the 50 captures, every such literal that qualified was the same resource, and every one that didn't qualify was a word.
For evidence-bearing changes:
Validation performed
Run on macOS with Node v22.23.1 at
33b0643e(the rule, the alias removal, and the fixed-length clause);9a025b32adds only the verification record.npm run build:cached,npm run check:fast,npm run format:check,npm run scan:todos,npm run docs:check,npm run verify:test-discovery,npm run mcp-catalog:check: passed.npx knip: passed.npm run jscpd: 3.49% over 3561 files, 3067 clones. Main is 3.49% with 3068.npx vitest run --project domain --project services: 7119 passed, 5 pre-existing skips.npm run test:prepare, thennpm run test:focused --the analysis-view MCP and CLI boundaries, compact input schema, tool schema validity, and environment serve and export boundaries: 7 files, 76 passed.npx vitest run src/domain/analysisView/: 280 passed.33b0643e.6a8beb58): merged main at52c84f6f, then fixed the five bot threads in75af11fd. Shared values stay with the parameter that observed them, each donor's spelling is summarised once, and one observation forms a fixed-length family. Both new tests fail on the previous head. The gates above passed again (domain and services 7255, 5 pre-existing skips; focused boundaries 76;jscpd3.49%), and the tools with and withoutprefix-varianceover the 50 captures are unchanged, name for name.03b66df9): bounded the spelling summary for Codex's follow-up: characters are classified in one pass, and a value over 128 characters is compared only exactly. Its test fails on6a8beb58; the gates passed again (domain and services 7257, focused boundaries 76,jscpd3.49%), and the census over the 50 captures is unchanged.Compatibility, safety, and release
Author readiness
Human owner:
Before merge
type(scope): outcome.🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.