Skip to content

fix: tighten actor.json version regex to match platform admission#655

Draft
DaveHanns wants to merge 1 commit into
masterfrom
fix/f36-tighten-actor-version-regex
Draft

fix: tighten actor.json version regex to match platform admission#655
DaveHanns wants to merge 1 commit into
masterfrom
fix/f36-tighten-actor-version-regex

Conversation

@DaveHanns

Copy link
Copy Markdown
Contributor

Summary

Tighten the .version regex in packages/json_schemas/schemas/actor.schema.json so it matches the platform's actual MAJOR_MINOR_VERSION_REGEX (apify-core/src/packages/simple-schema/src/regexs.ts:2). Currently the published JSON schema is looser than what the platform actually accepts — third-party tooling (linters, IDE plugins, agent loops, future SDKs) reads the schema, sees 1.0.0 or 100.0 as valid, and only finds out at platform admission that it isn't.

The diff

-      "pattern": "^([0-9]+)\\.([0-9]+)(\\.[0-9]+){0,1}$"
+      "pattern": "^([0-9]|[1-9][0-9])\\.([0-9]|[1-9][0-9])$"

Old pattern matches: 1.0, 1.0.0, 100.0, 00.01, 001.02.
New pattern matches: 0.0, 1.0, 99.99 — strict 2-part, each segment 0–99.

Empirical confirmation of platform behavior

Tested 2026-06-21 against the live platform against throwaway Actor vXEV76d7g0dyKXdPB:

  • POST /v2/acts/{id}/versions with versionNumber: "1.0" → 403 (semantic conflict, valid format)
  • POST /v2/acts/{id}/versions with versionNumber: "1.0.0"400 versionNumber must be MAJOR.MINOR, where MAJOR and MINOR is a number in range from 0 to 99.
  • POST /v2/acts/{id}/versions with versionNumber: "100.0"400 same error
  • Test Actor deleted post-test (cleanup verified).

The Console build path uses the same endpoint and the same Act2SourceVersionSchema — there is no separate path that would still accept the loose form.

Test plan

  • CI green
  • No downstream package in this monorepo references the regex by name
  • Bumping @apify/json_schemas consumers (apify-cli, apify-worker, IDE extensions) is a downstream concern — they'll get the strictness on their next dependency refresh

Refs

  • chocholous/apify-evals F36 (this gap), F12 (T1 hard-fail when agent writes 3-part), F22 (overlay teaching reinforces the same)

🤖 Generated with Claude Code

The `.version` pattern in `actor.schema.json` is currently looser than
the platform's actual `MAJOR_MINOR_VERSION_REGEX` (in apify-core).
External tooling that validates against this published schema (apify-cli
project linting, IDE plugins, third-party SDKs, agent loops) gets a
false-positive valid signal on 3-part SemVer like `1.0.0` and unbounded
two-part values like `100.0`, only for the platform to reject them at
the version-creation admission gate `POST /v2/acts/{id}/versions`.

Changes:
- `packages/json_schemas/schemas/actor.schema.json`: tighten pattern
  from `^([0-9]+)\.([0-9]+)(\.[0-9]+){0,1}$` (accepts 3-part SemVer
  and unbounded segments) to
  `^([0-9]|[1-9][0-9])\.([0-9]|[1-9][0-9])$`, matching the platform's
  exact `MAJOR_MINOR_VERSION_REGEX` from
  apify-core/src/packages/simple-schema/src/regexs.ts:2 (each segment
  0-99).

After this lands, every downstream consumer (apify-cli, apify-worker,
IDE extensions, etc.) fails-fast on invalid version strings at lint
time instead of failing late at platform admission.

Empirical confirmation of platform behavior (2026-06-21, throwaway
Actor `vXEV76d7g0dyKXdPB`): `POST /v2/acts/{id}/versions` with
`versionNumber: "1.0.0"` returns HTTP 400 schema-validation error.

Refs: chocholous/apify-evals F36, F12, F22.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

t-dx Issues owned by the DX team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants