Repository navigation
ICM: make webhook-client ICM-ready - #16
Merged
Merged
Conversation
AGENTS.md becomes the entry (routes, pipelines, rules) with a one-line CLAUDE.md pointer; the repository had no instruction file before. .github/icm/ adds the fix, endpoint and release pipelines and five shared facts that point at the owning files. The ICM check job and generator are vendored from standard 1.1.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sparck75
marked this pull request as ready for review
October 15, 2026 17:10
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
#17 merged before this branch, so main was merged in and the facts it listed under "ICM facts after #16 merges" are updated: the optional peer now loads on connect() (gotchas, architecture), tests/optional-peer.test.ts is where that is tested, the audit gotcha names the jest 30 move and the js-yaml override, and the changelog gotcha names the [Unreleased] section. npm audit at moderate is clean on this tree; 101 tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
What and why
This makes
webhook-clientICM-ready to the ICM standard 1.1.0 (the one memoryrelay/apimainruns). The repository had no instruction file of any kind.AGENTS.mdis now the entry, a router: what the package is, where things live, a route table by what just happened, and the rules.CLAUDE.mdis a one-line pointer to it..github/icm/holds the three jobs this repository repeats (fix, cover a new connector endpoint, release) and five shared facts. Each fact points at the file that owns it (path:line) and does not restate it.The owner decided (2026-10-15) that this repository becomes its own MemoryRelay workspace,
webhook-client, which the Alteriom hub will delegate to. No code changes. The release pipeline never publishes: a pushedv*tag publishes, and a person pushes it. The repository is public and Alteriom/alteriom-webhook-connector is private, so nothing here names the service's host or describes its internals. The generator and the CI job are vendored byte for byte from the standard.Before / after
AGENTS.md52 lines, 5,370 B (~1,343 tokens);CLAUDE.md1 lineendpoint-spec)Before was zero, so nothing gets cheaper. What this adds is structure. An agent used to start from
README.md(26.7 KB, ~6.7k tokens) and guess. Now it gets a route, a 3k-token stage, the group pattern every API method follows, and the traps the history shows: tags pushed from branches, a changelog behind the tags, and an optional peer that is not optional.Inventory
Top level.
src/: the REST client, receiver, framework adapters, WebSocket client, types, guards, errors.tests/: five jest suites.schemas/: an OpenAPI snapshot from the first commit.docs/superpowers/: the WebSocket design and plan..github/workflows/:ci.yml,docs.yml,release.yml. The root also hasREADME.md,CONTRIBUTING.md,CHANGELOG.md,LICENSEand the build configs (tsconfig.json,jest.config.js,eslint.config.js, a legacy.eslintrc.json).Instruction files. None: no
CLAUDE.md,AGENTS.md,.cursorrules, Copilot instructions,.claude/,.codex/orGEMINI.md.Documents a contributor is expected to read.
README.md,CONTRIBUTING.md,CHANGELOG.md. They are not pinned as workspace nodes: the README and the WebSocket design name the service's host,CONTRIBUTING.mdcarries contact addresses, and the workspace serves pinned files to every reader. The facts cite their sections instead, and_shared/documents.mdlists them.Jobs people repeat, with evidence (
gh pr list --state merged, 11 merged):v*tags, 5 versions on npm, each throughrelease.yml.01-fix, not a pipeline of its own.Pipelines and routes
01-fix02-endpoint03-releasenpm version --no-git-tag-version, changelog) → publish (the person tagsmainafter the merge; the agent confirms npm and the release)Routes:
triage,fix,ci-red,advisory,security(a private report as the contributing guide says),endpoint,fix-to-endpoint,release,publish-check,next,status.Shared facts:
architecture.md,build-and-test.md,release.md,gotchas.md,documents.md.Reconciliation
There was no instruction file, so there is no section to carry over and nothing dropped. The facts come from the code, the workflows and the documents, each cited at
3e2e8fe.Dropped as false
None: there were no instruction files. The documents' disagreements with the code are in
_shared/documents.md"Known drift" (not edited here):CONTRIBUTING.mdasks for 90% coverage;jest.config.js:11enforces about 55%.CHANGELOG.mdends at 1.1.0 and misses AgentSubscriptions and 1.2.0.src/index.tsheader says@version 0.0.1.schemas/openapi.jsonis stale and unused..eslintrc.jsonis ignored by ESLint 9.Memories folded / skipped
None. The brief named no Claude Code memory directory for this repository.
Checks
CI on this pull request. Lint, Test (22), Build, CodeQL and the ICM check pass.
Security Audit(npm audit --audit-level=moderate) fails, and the failure is unrelated to this change. The PR does not touchpackage.jsonorpackage-lock.json(git diff --stat origin/main -- package.json package-lock.jsonis empty). The same audit run onmain's lockfile today reports 37 vulnerabilities (1 critical, 31 high, 5 moderate) in axios ≤ 1.19.0, brace-expansion, braces, handlebars and sprintf-js. The advisories were published aftermain's last green CI run (2026-09-28,3e2e8fe). The next push tomainwill be red for the same reason.The repository's own checks were run locally on the base commit:
npm ci,npm test(5 suites, 99 tests),npm run lint(0 errors, 8 existinganywarnings),npm run build. All passed. The generator was run on a clean tree, with no ignored build outputs on disk. This PR touches no code, test or lint input. No test enumerates workflows.icm-check.ymlparses as YAML.Left for a person
webhook-client(Git, this repository, branchmain, root empty) and sync it; then the Alteriom hub delegates to it.Security Auditis red againstmain's lockfile (see CI above).axiosis a runtime dependency, so its advisories reach consumers whose installs resolve 1.19.0 or older. This needs an advisory run (routeadvisory, the same shape as fix(deps): clear all 40 open Dependabot alerts (brace-expansion, axios, js-yaml, babel, socket.io-parser) #14).socket.io-clientis not optional in practice.src/index.ts:126re-exportsWebSocketClient, andsrc/ws-client.ts:1importssocket.io-clientat module load. Sorequire('@alteriom/webhook-client')without it fails withMODULE_NOT_FOUND: reproduced against a build of3e2e8fewith onlyaxiosandzodinstalled.README.mdtells REST-only users they do not need it. This is a01-fixrun (or a02-endpointone, if the fix is a separate entry point), recorded in_shared/gotchas.md.v1.1.0andv1.2.0point at feature-branch commits, not at the squash merges onmain. Nothing to undo, but future tags go onmain(_shared/release.md).CHANGELOG.mdlags the tags.mainhas nosrc/change sincev1.2.0, so no release is owed.subscription_id:<aggregate id>, orsubscription_id:unknownwithout an aggregate (src/receiver.ts:80). So a second signed delivery for the same subscription with no aggregate counts as a duplicate. The Python SDK does the same, and I reproduced it there (ICM: make alteriom-webhook-client-python ICM-ready alteriom-webhook-client-python#3). Whether that is intended is a decision for both SDKs.src/client.ts.patchis an 18-line patch file committed insidesrc/in the first commit. Keep or delete it._shared/documents.md, each a small docs PR.No committed credential was found: the secret-looking strings in
tests/andREADME.mdare placeholders such astest-secretandmy-webhook-secret.🤖 Generated with Claude Code