Skip to content

feat: Phase 2 repair — add Spec Builder MVP (types, forms, normalize, autosave, map) and update docs [v0.3.0-phase2-baseline]#8

Merged
nova-rey merged 1 commit intomainfrom
codex/implement-spec-builder-mvp-features
Nov 2, 2025
Merged

feat: Phase 2 repair — add Spec Builder MVP (types, forms, normalize, autosave, map) and update docs [v0.3.0-phase2-baseline]#8
nova-rey merged 1 commit intomainfrom
codex/implement-spec-builder-mvp-features

Conversation

@nova-rey
Copy link
Owner

@nova-rey nova-rey commented Nov 2, 2025

Summary

  • align authoring spec types and conversion helper for the builder
  • rework the builder route with autosave, presets, import/export, normalize preview, and visual map
  • document the phase 2 baseline and builder usage in architecture/README

Testing

  • npm run lint (fails: missing @typescript-eslint/eslint-plugin in environment)
  • npm run build

https://chatgpt.com/codex/tasks/task_e_6907860a17108328803753a6c6804be0

… autosave, map) and update docs [v0.3.0-phase2-baseline]
@nova-rey nova-rey merged commit 3a97e69 into main Nov 2, 2025
1 check failed
@nova-rey nova-rey deleted the codex/implement-spec-builder-mvp-features branch November 2, 2025 16:38
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 51 to 56
<span className="block">Arg: delta/factor</span>
<input
className="w-full border rounded px-2 py-1"
value={String((rule.then.args ?? {}).delta ?? (rule.then.args ?? {}).factor ?? "")}
onChange={(e) => {
const raw = e.target.value;
const num = Number(raw);
if (raw.trim() === "") {
setArg("delta", undefined);
} else if (Number.isFinite(num)) {
setArg("delta", num);
} else {
setArg("delta", raw);
}
}}
value={String((value.then.args ?? {}).delta ?? (value.then.args ?? {}).factor ?? "")}
onChange={(e) => setArg("delta", Number(e.target.value) || e.target.value)}
/>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Handle empty and zero delta inputs without producing invalid args

The new onChange handler for the delta/factor field now calls setArg("delta", Number(e.target.value) || e.target.value). Because Number("") evaluates to 0, clearing the input stores an empty string instead of removing the argument, and entering 0 stores the string "0" instead of the number 0. The previous implementation trimmed the input and deleted the key when blank, ensuring only valid numeric values were sent. With the current code, normalizing a rule after clearing the field or setting delta to 0 will emit then.args.delta as a string, which CSC’s normalizer expects to be a number and therefore rejects. Consider restoring the explicit parsing/removal logic so blank values delete the argument and zero remains numeric.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant