fix(knowledge): 1.2.2 — production-validated corrections from the system audit - #10
Merged
Merged
Conversation
…tem audit Knowledge-only release. Every line was validated live on 2026-09-13 by the system audit and re-verified in lua-core-services / lua-iac source before editing. No hook, permission or MCP behaviour changed. - SA-129: deployed job retries are the queued path only — fixed backoffSeconds (default 60), min(maxAttempts, 10), none without a finite maxAttempts, job.execution on every run (lua-core job.service.ts; lua-iac LUA_JOBS_INTAKE_MODE=enqueue in prod and staging). user.send() never reaches email: only lua-whatsapp writes channel windows. - SA-042: Workflows.resume/signal/signalByKey/startBatch/setGoal/goals.* work deployed; the *_unavailable / not_implemented codes guard an unbound provider; only raiseBudget is 501 everywhere; deployed list ignores the typed `workflow` filter (workflow-sandbox-bridge.ts). - SA-037: Voice.createSession absent in every runtime, lua test included. - SA-035: deployed Data.create/update never forward `index`; indexes can only be declared from a lua test run (seed-tool recipe). - SA-033: lua chat -e sandbox uploads the whole process.env and the runtime never reads it (skill-eligibility.resolver.ts reads subAgent.env); corrected the 1.2.1 claim, added clean-shell guidance to the chat/test/env slashes, the QA agent, SECURITY.md and the user guide. - SA-132: deployed webhooks have no wall timeout (handler outlives the ~90 s ingress 504; tools are cut at 180 s on the remote runner) — keep handlers short and idempotent, never rely on a server-side cut. - SA-061: concurrencyPolicy 'forbid' is not enforced on lua workflows start / REST / Workflows.start / trigger starts — guidance no longer relies on RUNS_IN_FLIGHT. - SA-078: OrderStatus.FULFILLED sends 'fulfilled'; the platform stores, filters and charts 'fullfilled' and never validates the status param. - SA-050 / SA-119: LuaWebhook zod schemas are never applied (safeParse in execute); `secret` must be a literal/const and blocks vendor-signed senders (it verifies Lua's own x-lua-signature). - SA-015 / SA-016 (new; SA-005 was already in 1.2.1): lua test prints the success banner and exits 0 when execute throws; lua push all / lua deploy all exit 0 on partial failure — slashes and agents now parse the output. - Bump 1.2.1 → 1.2.2 everywhere; rebuild dist/server.js; CHANGELOG entry names the source for every line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfAcTzKPi9LdoGvRcjJNQo
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.
Summary
Knowledge-only release 1.2.2 of
lua-agent-builder. Every correction below was validated against production by the 2026-09-13 system audit and re-verified inlua-core-services/packages/*andlua-iacsource before editing. No hook, permission or MCP behaviour changed;dist/server.jsis rebuilt only for the version strings.Do not merge before review — merging to
mainauto-releases.Checklist
user.send()email (primitives.md§6, §12, §14, §16;decision-trees.md;agents/lua-skill-builder.md). Production and staging pinLUA_JOBS_INTAKE_MODE = "enqueue"(lua-iacservices/lua-core/prod/k8s/config-map.tf:53,staging/k8s/config-map.tf:91), so deployed code jobs retry after a fixedbackoffSeconds(default 60),min(maxAttempts, 10), none without a finitemaxAttempts, withjob.executionon every run (lua-corejob.service.tsrun→enqueueJob~302-323,backoff: { type: 'fixed' }~409,getHeavyRetryEligibility~512-531,scheduleHeavyRetry~572-607;lua-sandbox-runnerexecutor-entry.ts~231-239). The exponential path is reached only byagent-kind jobs (enqueueJob~349 routes them toprocessJob). Email removed from the last-interaction reach list: only lua-whatsappupsertChannelWindow(utils/channel-window.util.ts) writes channel windows, from its WhatsApp/Facebook/Instagram/MessageBird/SMS/Teams services; lua-email never does, sochannel.service.ts:407is unreachable.primitives.md§12, §14;workflows.md§6).resume/signal/signalByKey/startBatch/setGoal/goals.*work deployed;resume_unavailable/signal_unavailable/not_implementedare unbound-provider guards (lua-coreworkflow-sandbox-bridge.ts~251-263, ~266-271, ~278-281, ~188-193, ~320-324, ~348-352); onlyraiseBudgetis 501 everywhere (:319notImplemented; lua-cliworkflow.api.service.tsunavailable('raiseBudget', 'R45')). Also recorded from the same result: deployedlistignores the typedworkflowfilter (:223-230).Voice.createSession(primitives.md§12, §14): re-validated absent in every runtime,lua testincluded (sandbox-runtimecontext.ts~355-369; lua-cliutils/sandbox.ts~332-341).Dataindexes (primitives.md§12, §14, §16;decision-trees.md;agents/lua-architect.md,agents/lua-skill-builder.md): deployedcreate/updatenever forwardindex(sandbox-runtimecustom.data.api.service.ts~38-48, ~160-175 post{ data, searchText }only); indexes can be declared only from alua testrun (lua-clicustom.data.api.service.ts) — seed-tool recipe added.lua chat -e sandboxuploads the wholeprocess.env(primitives.md§12env(key), §14;cli-reference.md§4;commands/lua-chat.md,commands/lua-test.md,commands/lua-env.md;agents/lua-qa.md;SECURITY.md;docs/USER_GUIDE.md): lua-cliutils/sandbox.ts~149-172 andservices/sandbox.service.ts~232-238 upload it; the runtime never reads it — a sandbox turn'senv()resolves fromsubAgent.env(lua-coreskill-eligibility.resolver.ts~317-318, ~418). Corrected 1.2.1's claim that sandbox turns read the upload. Guidance: never run sandbox chat from a shell holding secrets you do not want uploaded; preferenv -i/ a clean shell;lua testuploads nothing; a platform ticket is open.primitives.md§4, §14;decision-trees.md;agents/lua-architect.md,agents/lua-skill-builder.md): lua-corewebhook.service.ts~327-340 →execute.webhook.service.ts~40-56 run the handler in-process with only the VM's synchronous-prefixtimeout(sandbox-runtimerunner.ts~57-68); tools go to the remote runner with a 180 s wall (execute-function.service.ts:15TOOL_TIMEOUT_MS,:245wallMs; lua-iacLUA_SANDBOX_ROUTING_DEFAULT = "remote"). Guidance: short, idempotent handlers; never rely on a server-side cut.concurrencyPolicy: 'forbid'not enforced on starts (primitives.md§5, §12, §14;workflows.md§1, §6, §9;commands/lua-workflow.md;decision-trees.md;agents/lua-architect.md):WorkflowRunService.createRunhas no overlap check (lua-coreworkflow-run.service.ts:5-12header; the only guard is the schedule dispatcher,workflow-schedule-dispatch.service.ts~253-268). No QA/deploy/workflow guidance relies onRUNS_IN_FLIGHTany more;idempotencyKeyand in-workflow guards are recommended instead.OrderStatus.FULFILLEDvsfullfilled(primitives.md§12, §14;agents/lua-architect.md,agents/lua-skill-builder.md): lua-cliinterfaces/orders.ts:18'fulfilled'goes into the path unmapped (order.api.service.ts~42-44); the platform enum, Swagger and charts usefullfilled(shared-schemasecommerce-order.schema.ts:6-11; lua-apiorders/base.controller.ts:31,:182;chart.service.ts); the status param is never validated; 200success:falseenvelopes are rethrown by the SDK as generic errors.LuaWebhookschemas andsecret(primitives.md§4, §14;decision-trees.md;integrations.md;agents/lua-architect.md,agents/lua-skill-builder.md): the Zod schemas are parsed only by the class helper (lua-clitypes/skill.ts~694-712), which the bundler strips (compiler/bundler.ts~78-96);lua test(utils/sandbox.ts~492-533) and lua-core (execute.webhook.service.ts~171-176) callexecute(event)directly →safeParseinexecute.secretmust be a literal/const (compiler/plugins/webhook.plugin.ts~144-152) and verifies Lua's ownx-lua-signature(lua-corewebhook.service.ts~250-262), so it blocks vendor-signed senders — verify their HMAC in adefineTriggerverifyoverrawBody.--ciexit codes (cli-reference.md§1, §4;commands/lua-test.md,commands/lua-push.md,commands/lua-deploy.md;agents/lua-skill-builder.md,agents/lua-debug.md,agents/lua-deploy-pilot.md;primitives.md§14): SA-005 (raw prompts exit 0 under--ci) was already in 1.2.1 — verified present (prompt-handler.ts:16-20;test.ts:62-81), unchanged. SA-015 and SA-016 were not present and are added:lua testprints the success banner and exits 0 whenexecutethrows (utils/sandbox.ts~463-467 / ~524-528 / ~599-603 / ~713-717;test.ts~390-399, ~497-501 — the debug agent previously said "exit 1 with a stack");lua push all/lua deploy allexit 0 on partial failure (push.ts~1300-1353;deploy.ts~537-545, ~604-645).package.json×2 and both lockfiles,.claude-plugin/plugin.json,.claude-plugin/marketplace.json,mcp/lua-platform/src/server.mjs(×3),mcp/lua-platform/src/api-client.mjs, rebuiltmcp/lua-platform/dist/server.js,docs/USER_GUIDE.md.CHANGELOG.md1.2.2 entry names the source for every line.Verification
npm run lint— all 18 lint scripts pass (LUA_CLI_SRCset, solint-knowledge-commandsreally ran: 716lua …references validated againstcommand-definitions.ts;lint-release-version: 1.2.2 consistent)npm test -- --coverage— 18 suites / 428 tests pass;scripts/check-coverage.mjspass (99.12 % statements)npm run build,npm test(9 suites / 147 tests),npm run lint,npm run typecheck,scripts/check-bundle-size.mjs(0.10 MB) — all pass🤖 Generated with Claude Code
https://claude.ai/code/session_01AfAcTzKPi9LdoGvRcjJNQo