Repository navigation
Promote apps/integration-0.1.9 into 0.1.9 - #1823
Merged
Merged
Conversation
…ts source A monorepo imports a sibling package by its name, and that package's main / types / exports name build output that is not in the source tree. tsc then resolved nothing, or a dist file no program walks, so every call, type and const across the package boundary was matched by name only. The package-entry rows already map a dist target back to the source it is built from; import resolution now uses the same mapping (subpaths and patterns included) for any bare specifier whose package.json lives under the walked tree, in the TypeScript and JavaScript front ends. A package tsc resolves inside node_modules is left alone. impact: asked of an interface method, the implementations the engine dispatches to are listed under "must change with it". Without an override table they had no row at all, and one only surfaced through a wrong by-name edge that the resolved import removed. The hook's SQL summary gets the same leg and now drops shape-only pairs as the rules do. Tests: new TypeScript case 85-workspace-package-import (scoped package with exports, subpath, pattern, unscoped deep import, a field-typed receiver, and a third-party control); the three JavaScript alias cases fold into 70-bare-specifier-to-project-source with a workspace-package table row; the dispatch-base CLI case checks the base side. Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
…hers of that type [by key]
A service publishes an event by its type string, often through a constant
(publish(TOPICS.CREATED, doc)); another holds a handler table keyed by the
same string ({ [TOPICS.CREATED]: onCreated }, { 'doc.created'(e) {} },
{"doc.created": on_created}) that a consumer dispatches by the message's
type. Nothing joined the two ends.
- ax_registration: table entries are registrations (kind table); string
constants resolve to their value; a key written as a dotted literal or
through a constant is a write, never the table's own key position or the
constant's declaration.
- impact.dl: impact of a publisher lists each handler of its type [by key];
tests that publish the type reach the handler. Only production writers
count against the key cap, and a handler writing its own type is no writer.
- path and the SQL port's key join read the same writes.
Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
…join-across-services impact, path: a handler table keyed by an event type joins the publishers of that type [by key]
…same-named field on its line
What was wrong
- `const meta: EventMeta = { eventId: options.eventId ?? … }` stopped listing its function
under `impact EventMeta.eventId`. The per-line rule that drops a name match on a line where
the engine bound a field access (to this field or to another field of that name) drops every
ref of that name on the line. Refs carry no column, and TypeScript stored the literal key
`eventId` as a plain UNKNOWN identifier, so the key went with the bound `options.eventId`
read of PublishOptions.eventId. field_access has no row for an object literal key, so
nothing else reported the write.
The change
- axiomcode-index: a TypeScript expression in the OBJECT_PROPERTY_KEY role is stored with
entity kind OBJECT_PROPERTY_KEY instead of UNKNOWN.
- dl/impact.dl: fref keeps a ref of that kind past fa_line. A bound access on another line,
and the bound access itself, are still not this field's readers.
- IMPACT_VERSION 56.
tests/cases/typescript/object-key-beside-a-bound-access: red before, green after, with two
controls (a line that only reads the other type's field stays out; the bound read stays the
other field's resolved reader). tests/run.py --lang typescript: 204 of 204.
Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
…nd-access impact: a TypeScript object-literal key survives the bound-field-access line rule
…s with their code An agent was offered 8 MCP tools with 69 parameters and ~10,000 characters of descriptions, and the CLI 10-37 flags per verb; in practice agents asked two questions with no options, and after every located answer read the file. The offering is now four questions and a setup verb, the same on the CLI and over MCP, with no options: - find "<question>" / find(question): where the code for a task lives (context underneath); a name the task writes that the code calls and nothing declares is listed with its call sites - impact <name> / impact(name): callers, what a change reaches, the tests; with no name, the same for the declarations the uncommitted edits changed - path <A> <B> / path(start, end): the call chain - tests / tests(): the tests the uncommitted edits reach, and the command that runs exactly those - index: build the graph (--lang, --src, --library) Each answer is numbered places, each with the enclosing function's code (whole when short, else its header and a window around the lines that matter), one block per function, at most 10, word-match filler and module-scope rows dropped (ax_blocks.py). The shape applies at the front doors (the installed command, the MCP server) when no flag is passed; the dispatcher called directly, AXIOMCODE_RAW, or any flag gives the verb's own answer, so hooks, suites and scripts are unchanged. Old verbs and flags still work and are no longer advertised. Help, SKILL.md, AGENTS.md, the Cursor rule, the Gemini copy, README and the hooks' hints teach only the four. MCP answers drop any clause that names an option the tools refuse; code blocks are never touched. CI: engine (<lang>) runs tests/run.py --lang <lang> after the engine suite (every case must pass; a pending case that passes fails until its mark is removed), and the python leg runs tests/front_door.py, which checks the shape through the installed command and MCP and that direct calls and flags keep the old answers. Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
A small surface: find, impact, path and tests, answered with their code; CI runs the query cases
…ackage-import-to-source parser: a bare import of a package the repository declares binds to its source
…s four at a time The query-case step made engine (typescript) a 28-minute job (19 of them the cases, one after another). Each case indexes its own directory and shares nothing but the compiled rules, so the first case runs alone (it compiles and caches them) and the rest run N at a time; each case's output is printed as one block, in case order. TypeScript locally: 175 s -> 41 s with --jobs 6, the same 204/204 checks and the same case order and outcomes. Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
typescript/evidence-for-uncertain-rows indexed five languages, so the typescript leg compiled the java, csharp, python and javascript engines it has no cache for: 964 s of the leg's 19-minute query-case step, where the median case takes 4 s. The case is now one per language (ts 9 checks, js 1, python 1, java 2, csharp 1), each indexed in the leg whose engine is already built; the 14 checks are unchanged. Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
tests/run.py --jobs N; CI runs the query cases four at a time
swapnilpaliwal-sd
requested review from
JaredHLZhang,
Whua689 and
suyashpaliwal26
as code owners
September 30, 2026 10:24
swapnilpaliwal-sd
enabled auto-merge
September 30, 2026 10:27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotes
apps/integration-0.1.9into0.1.9:Gates: CI with the query-case suite on all five languages (required, branch up to date), and the 5-language release end-to-end harness run from this tip before auto-merge is enabled.