Skip to content

Describe the write-path, State Machine, and Scaffold output - #174

Merged
raghubetina merged 1 commit into
mainfrom
batch-0817-skill-text
Oct 13, 2026
Merged

raghubetina merged 1 commit into
mainfrom
batch-0817-skill-text

Conversation

@raghubetina

@raghubetina raghubetina commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Why

The service's next Compiler keeps far more of an authored Plan, and the Skill's references still described the omissions it replaced. An agent would tell users about losses that no longer happen, and would miss what it now has to write. This updates the packaged Skill text for plugin 0.8.17.

All described service PRs are merged (service main f426a55c). The text for #1165 and #1166 follows their Domain agent's corrections: the immutable-key writer caveat covers only an optional immutable Reference without a cascade carrier, plus indirect collections over an optional immutable source; a Policy that reads an unmaintained Counter becomes a denying stub; a filtered count, or one whose example needs an unemitted Reference or breaks a conditional Validation, gets a Test coverage to complete entry; and every target of a one-to-one immutable polymorphic nullification still refuses its own deletion. #1169 (canonical-form lints warn) and #1170 (reserved scope rename) shipped as their bodies described; their final bodies and the merged scopes.md changed only release identities, so the text needed no change.

The changes:

  • Validations:
    • Decimal and money comparisons lower, as do conditional presence and absence on scalar Fields and wider and conditional uniqueness.
    • A rule that can't lower becomes validate :<key> with an empty method, listed under Behavior to write, plus a failing enforces <path> example wherever the Compiler can build a rejected record.
    • An unconditional left-out uniqueness over indexable columns keeps its unique index.
  • Seeds: they keep every record that no rule is proven to reject, and the Analyzer warns (foundation_plan.development_data.validation_violated) on a record that breaks its own rule. The read-back names warned records, not dropped ones. reference_data is seeded in every environment.
  • State Machines:
    • Several machines on one Entity become namespaced AASM machines (leave_status!).
    • Optional machines get no aasm block. They keep a nullable column, stubbed events, and an empty applicability callback behind a failing example.
  • Scaffolds:
    • A failing input, binding, return, or Policy-mismatched collection drops only itself, and a create missing a required value stays, partially generated.
    • Account-target inputs whose Policies don't decide the options use exact email lookup; a Policy-free Account keeps the picker.
    • The Primary Descriptor may be optional, with a Model #id label.
    • A reserved Policy rule is renamed (present_rule?).
  • Import:
    • rich_text lowers like long_text, Trees import, and cardinality is skipped as one key.
    • The public_scaffold warning line is gone.
  • Relationships: cascade and nullify with no authored inverse get the conventional inverse. A taken name or a one-to-one immutable nullification is pinned with ActiveRecord::InvalidForeignKey.

Two discrepancies, recorded rather than fixed:

  • #1160's body keeps derivation pruned, so the text doesn't claim derivation imports.
  • The service's associations.md still says a standalone create that needs a required multi-target Reference is omitted. scaffold_lowering.rb#disclose_incomplete_creates generates it with scaffold.route.partially_generated, which the Skill now follows.

The sample-data eval now expects its no-self-follow sample follows to be seeded.

Two eval fixtures still encode older analyses: the optional-descriptor error in correct-source-issue-alongside-capability-gap, and rich_text as a service gap in unsupported-field-capabilities. They are synthetic inputs and stay consistent with their own prompts, so I left them; a follow-up can refresh them.

Release. The version moves to 0.8.17 (sync-plugin-version.mjs + npm version). plugin_source.tarball_sha256 is unchanged; script/release ship records it. Locally:

  • sh script/check --cli-root, run with pinned CLI 92f27714 and an empty GIT_TEMPLATE_DIR, passes.
  • check-cli-contract and check-plugin-release-order --prospective pass.

Behavioral evals were not run.

Docs: updated skills/create-full-stack-app/references/foundation-plan-023.md, modeling-guide.md, interview.md, examples.md, CHANGELOG.md, and the sample-data eval case.
Review: Codex, approve (3 rounds, 3 findings fixed)

@raghubetina
raghubetina force-pushed the batch-0817-skill-text branch from ae8992a to 9edb0c0 Compare October 13, 2026 04:58
The service's next Compiler keeps far more of an authored Plan, and
the Skill's references still described the omissions it replaced, so
an agent would warn users about losses that no longer happen and
miss what it now has to write.

The Plan reference, modeling guide, interview, and examples now say:
- decimal, money, conditional presence and absence, and wider and
  conditional uniqueness Validations lower, and a rule that cannot
  is an empty validate method behind a failing enforces example;
- seeds keep every record no rule is proven to reject and warn on a
  record that breaks its own rule; reference data seeds everywhere;
- several State Machines on an Entity are namespaced AASM machines,
  and an optional machine gets stubbed events and an empty callback;
- a failing Scaffold piece drops only itself, Account inputs no
  Policy decides use exact email lookup, descriptors may be optional
  with a Model #id label, and reserved Policy rules and scope keys
  are renamed with a warning;
- cascade and nullify get the conventional inverse, inverses over
  immutable References are plain Rails, and Counter and defaulted
  Reference storage stays;
- rich_text is stored as text, Trees import, cardinality is skipped
  as one key, and canonical-form lints warn.

The sample-data eval now expects its no-self-follow sample follows to
be seeded. The version moves to 0.8.17, with its CHANGELOG entry; the
release records the package digest.
@raghubetina
raghubetina force-pushed the batch-0817-skill-text branch from 9edb0c0 to b821581 Compare October 13, 2026 05:13
@raghubetina
raghubetina marked this pull request as ready for review October 13, 2026 05:24
@raghubetina
raghubetina merged commit 14713d3 into main Oct 13, 2026
5 checks passed
@raghubetina
raghubetina deleted the batch-0817-skill-text branch October 13, 2026 05:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant