Skip to content

v4.53.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:04
· 1544 commits to main since this release
e4564ca

Added

  • kj init offers to enroll the phone (KJC-TSK-1046, ADR 0020): with a person at the terminal and no phone enrolled, the wizard offers to enroll it and collects the public key from karajancode.com/sign; once the wizard is closed, the identity command enrolls it with all its checks, roster and recovery code. Without a terminal init only informs.
  • kj review --publish-pr <n> (KJC-TSK-0913): the approved verdict of each commit of a PR, found by the diff it brought, is published on it as one GitHub review (event COMMENT), so the review counts in reviews.totalCount; a commit without one fails it, and a review already published for the same head is not repeated.
  • kj review warns of dependencies published under 72 hours ago (KJC-TSK-0722): it reads what a package-lock.json diff installs, asks npm how old each version is and hands the young ones to the reviewer; supply_chain.cooldown_hours moves the threshold, and a regenerated lockfile is said in one line.
  • kj harden says how to make the method's checks required (KJC-TSK-0928): on a GitHub remote it reads the base branch protection and gives the exact step (the full command for an unprotected branch, the additive one for missing checks, or the settings page where a command could undo existing protection). It never applies it.
  • Starting a card reserves it (KJC-TSK-1047, team Karajan): kj hu move <id> running reserves the card to who works the clone; a running card reserved by someone else moves only with --release; kj hu list shows it.
  • Per-HU measurement for model routing (KJC-TSK-0702, KJC-TSK-1057): each HU records the coder's provider and model, tokens out and the reviewer's rejections, and kj report adds up cost and first-time failures per coder model, with earlier HUs as the baseline.
  • kj worktree prune also deletes loose kj-hu-* branches with no commits of their own, and measures against origin/<base> (KJC-TSK-1037, ADR 0019).
  • kj review warns when another branch in progress touches the same files (KJC-TSK-1052, team Karajan): remote branches with commits outside the base, active in the last 14 days, that share files with the commit, with their author.
  • The supply-chain cooldown can block (KJC-TSK-1056): with method_gates.dep_cooldown: block, a dependency published under the threshold stops kj review before any reviewer token; only a human grant on method.dep_cooldown lifts it, and what cannot be verified never blocks.
  • kj check warns of young dependencies and kj release check of old npm tokens (KJC-TSK-1059): the branch's lockfile against the merge base, and each long-lived npm token older than supply_chain.npm_token_max_days (90), named only by an id prefix.
  • kj check says when the audit is due by work cycles (KJC-TSK-0719): distinct cards and work commits since the last scored audit, against audit_cycle.every_cards (10) and every_commits (60), with the counter in view.
  • Each HU leaves the decomposition with its tier and why (KJC-TSK-0698): trivial, standard or deep, judged in the same answer and checked against a deterministic signal; the higher wins, and a sensitive zone is always deep.
  • Named model profiles (KJC-TSK-0699): kj run --profile frugal|standard|deep (or model_profile in the config) fills the model of every role nothing else sets; the reviewer never goes below standard, and kj config names the profile.
  • EXTEND, REWORK or REBUILD per HU, and REWORK only with a licence (KJC-TSK-0717, KJC-TSK-1061): the planner classifies each change to existing code with its criterion; kj plan license <plan> <hu> --module <path> scores the module with kj mutate, and under method_gates.rework_mutation_min (0.8) the plan needs an HU that hardens the module first.
  • The prompt-injection patterns are a versioned, portable catalog (KJC-TSK-0703): src/utils/injection-patterns.json, which Python's re reads too, so karajan-radar can share it.

Changed

  • claude runs on claude-opus-5-5 unless the user declares a model (KJC-TSK-0914).

  • One table of default models, with ids verified on 2026-10-16 (KJC-TSK-0699): codex takes gpt-5.6-luna, terra and sol; gemini, qwen, copilot, opencode and aider leave the model to their CLI, since none of their ids could be verified.

  • The pipeline stamp proves Sonar coverage per staged source (KJC-TSK-0839), as kj review --staged does, and the method report judges it by that coverage.

  • kj doctor checks the team's SonarQube (KJC-TSK-1051): with sonarqube.external it no longer advises a local Docker, and with sonarqube.quality_profile it checks the project runs on that profile.

  • The Sentinel treats .karajan/security-level.json as a governance file (KJC-TSK-1054): only kj security writes it.

  • The injection guard no longer flags a long JSDoc of tags (KJC-TSK-0743), and its two source exclusions are gone.

  • With no phone anywhere, a person lowers the level at the terminal (KJC-TSK-1045, ADR 0020): at the default max level and with no phone enrolled, lowering to normal demanded the very phone that was missing. Now the human layers and the typed code lower it; the record says it is unsigned and reads as max again once a phone is enrolled. An agent session is still refused.

Fixed

  • kj doctor no longer calls the phone optional at the max level (KJC-BUG-0360): without a phone the seal, rule approvals and enrolling another phone are refused at max, the default; doctor listed the phone as optional and its text spoke of a typed code, true only at the normal level. The check now fails at max and names what is refused.
  • A blocking Sonar gate hands the coder each issue (KJC-BUG-0359, #2158): the coder got only severity counts and guessed until sonar_repeat; the feedback now lists severity, rule, file, line and message, capped at 25.
  • An opencode failure reaches kj with its message (KJC-BUG-0358): with --format json opencode reports the failure as an error event on stdout, and kj showed it without a reason.
  • The Spanish word «todo» is not a TODO tag (KJC-TSK-1042): Sonar's S1135 matches the word regardless of case; kj suppresses it, with its reason, when the line holds no uppercase TODO.

Infrastructure

  • Contract tests replay real CLI answers (KJC-TSK-1039, KJC-TSK-1043, KJC-TSK-1044): scripts/record-agent-fixtures.mjs records what claude (with and without hooks), codex, copilot, agy, gemini and opencode really emit, as reviewer and as coder; the contract test replays each through the path kj reads them by, and demands a failure's own reason.
  • The contract with claude is checked on the maintainer's machine (KJC-TSK-1063): npm run contract:claude records again with the installed claude when its version differs from the recordings, and kj release check is red until it matches.
  • The audit command tests no longer write to the repo's audit history (KJC-BUG-0361).
  • The root prettier covers packages/watch with its own config (KJC-TSK-0744), and docs/family-contracts.md lists the family's published contracts (KJC-TSK-0782).