Skip to content

release: prepare Flatbread 1.0 - #235

Draft
tonyketcham wants to merge 5 commits into
mainfrom
toeknee/major-release-prep-c650
Draft

release: prepare Flatbread 1.0#235
tonyketcham wants to merge 5 commits into
mainfrom
toeknee/major-release-prep-c650

Conversation

@tonyketcham

@tonyketcham tonyketcham commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary of changes

Prepare all 12 public packages for the stable 1.0.0 release. Package metadata now uses one version and Node floor, release assets match v1.0.0, and package dependencies resolve for clean installs.

Lead the docs with Effort Graph as Git-native memory for coding agents. Keep static relational content as a first-class use and GraphQL as one read interface. Add short release notes and the MIT license.

Remove unused Apollo 3 and GraphQL server packages from the published runtime. Update Apollo Server, GraphQL, GraphQL Code Generator, esbuild, and lodash-es to supported releases. Trim Proof's npm payload to its bins and built output. Make @flatbread/core declarations portable in strict clean installs.

Verification

  • pnpm verify
  • Packed all 12 npm packages at 1.0.0
  • Clean main Flatbread install: zero production audit findings
  • Strict NodeNext TypeScript consumer compile: pass
  • Packed Flatbread CLI/import smoke: pass
  • Packed Proof dry command check: pass

Known upstream limits

Installing all 12 packages reports seven audit entries with no compatible upstream fix. Proof inherits them through @cursor/sdk and undici@5; resolver-svimg inherits them through svimg and sharp. Neither package is part of the main flatbread install, which audits clean. CHANGELOG.md records the details.

Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

  • I added doc comments to any new public exports, and inline comments to any hard-to-understand areas
  • My changes generate no new console errors locally
  • If applicable, try to include a test that fails without this PR but passes with it

Does this introduce any non-backwards compatible changes?

  • Yes
  • No

The published packages now require Node >=20.19. Runtime APIs do not change.

Does this include any user config changes?

  • Yes
    • If so, I have updated the relevant areas of documentation
  • No
Open in Web Open in Cursor 

Move all public packages to 1.0.0, align package metadata, and add the release license.\n\nLead the public docs with Effort Graph agent memory while keeping static relational content and GraphQL read paths clear. Add concise release notes and record the positioning decision in the Effort Graph.\n\nTest plan: pnpm verify; package tarball and clean-install smoke tests.

Change-Id: I3b53d7e244cc251ce9968b3578fabeabcc96298f
Drop unused Apollo 3 and GraphQL server packages from the stable package. Update Apollo Server, GraphQL, and lodash-es to supported releases, and keep test-only picomatch out of the published runtime set.\n\nTest plan: pnpm verify; clean tarball install; npm audit and CLI smoke checks.

Change-Id: Ib49018eafae4ef88cbbd3975f8149b2102ac1f3f

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Review verdict: REQUEST_CHANGES

Consensus HIGH on invalid bare Effort Graph read CLI names in docs/positioning.md, plus an independent HIGH that published packages still omit LICENSE text from npm tarballs.

Dependency drops/bumps look sound (no remaining imports of removed Apollo 3 / express-graphql / etc.). This is a release/docs/deps PR — no packages/*/src changes — so there is no source coverage plan.

Blocking / high

  1. docs/positioning.md — after `flatbread effort list`, `records` / `relations` / `blocking-decisions` / `get` read as top-level commands; CLI only has flatbread effort <subcommand>.
  2. LICENSE — root MIT text is added, but publishable packages ship files: ["bin","dist",…] with no package LICENSE, so tarballs stay SPDX-only.

Also fix (MED)

  • Root CHANGELOG says there is no migration guide while engines.node: ">=20.19" breaks Node 18 / early 20.
  • Effort Graph README overstates journal recovery as always-rollback.
  • Skill install URL / gitTag: "v1.0.0" will 404 until the annotated tag exists.
  • effortGraphContent() docs omit the spread/merge pattern when content already has entries.

Coverage plan

none — no source changes.

Perspectives: dependency-runtime-surface, release-discipline, docs-and-positioning, dx-and-examples. Models: grok-4.5 high / composer-2.5.

Open in Web View Automation 

Sent by Cursor Automation: Flatbread PR Review

Comment thread docs/positioning.md
Comment on lines +24 to +26
source. Writes go through `flatbread effort write`; reads come back as bounded
digests from `flatbread effort list`, `records`, `relations`,
`blocking-decisions`, and `get`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HIGH — These read as top-level commands after `flatbread effort list`. The CLI only registers flatbread effort <subcommand> (effort get, effort records, effort relations, effort blocking-decisions).

Fix: Prefix every read the same way as list, e.g. `flatbread effort records`, `flatbread effort get`.

Comment thread LICENSE
Comment thread CHANGELOG.md
Comment on lines +19 to +21
Writes go through a journal, so a change that touches several files either
finishes in full or leaves nothing behind: if the process dies mid-write, the
next run restores the earlier contents of the unfinished change.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — “Finishes in full or leaves nothing behind” / “restores the earlier contents” implies always-rollback. Recovery also forward-completes committed-but-unpublished journal transactions.

Fix: Describe both paths — uncommitted → rollback; committed-unpublished → complete on next run.

Comment on lines +69 to +70
npx skills add https://github.com/FlatbreadLabs/flatbread/tree/v1.0.0/packages/effort-graph/skills/effort-graph --skill effort-graph
npm install --save-dev flatbread@1.0.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — Install URL hardcodes tree/v1.0.0 before that annotated tag exists (npm latest is still alpha). The flatbread@1.0.0 line under an @flatbread/effort-graph README can also confuse which package to install.

Fix: Keep the URL generic until publish (or gate tag creation at release), and note that the flatbread meta-package provides the CLI / effortGraphContent re-export.

"gitTag": "v1.0.0-alpha.22"
"flatbreadVersion": "1.0.0",
"effortGraphVersion": "1.0.0",
"gitTag": "v1.0.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — Committed gitTag: "v1.0.0" makes skill install paths 404 until the annotated tag is pushed post-publish.

Fix: Treat annotated v1.0.0 tag creation as a hard release checklist gate (already noted in CONTRIBUTING).

Comment on lines +291 to +292
For agent memory instead of site content, add `effortGraphContent()` to your
config, then run `flatbread effort bootstrap` to check the setup and

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — “Add effortGraphContent() to your config” omits the spread/merge pattern bootstrap emits when content already has entries.

Fix: Show content: [...existing, ...effortGraphContent()] or link packages/effort-graph/skills/effort-graph/setup.md.

Update GraphQL Code Generator and esbuild to supported releases without changing generated output. Trim Proof's npm payload to its bins and built files.\n\nTest plan: pnpm verify; package audits; Proof pack and CLI smoke checks.

Change-Id: I69eee15141a4d6332f504bee70f4b533d076e077
Use GraphQL's public types in emitted declarations and declare vfile as a runtime dependency because the public API exposes VFile. Add checks that prevent private GraphQL paths and missing declaration dependencies from returning.\n\nTest plan: pnpm verify; strict clean-consumer TypeScript compile.

Change-Id: I3f66f068fa24441f598224f2cfbbec48e722695c
Document the unresolved audit chains in Proof and resolver-svimg. The main Flatbread install remains clean.

Change-Id: I4230756307f943c0e72610c25b0c86b625f05ab6

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review verdict

REQUEST_CHANGES — Core type/dependency packaging for 1.0 looks sound (ExecutionResult / public GraphQL types, vfile as a real dependency, dropped Apollo Express stack clean). Two consensus HIGH doc/release-contract issues are still open before tag: bare Effort CLI names in positioning, and pre-tag v1.0.0 install URLs.

Prior LICENSE packing HIGH is closed for the real publish path: pnpm pack / pnpm publish include root LICENSE even when files omits it (scripts/publish.ts uses pnpm). Engines floor is documented; a short upgrade playbook remains optional.

Blocking / high (fix before tag)

  1. docs/positioning.md — prefix records / relations / blocking-decisions / get with flatbread effort .
  2. packages/effort-graph/README.md — replace hardcoded tree/v1.0.0 and flatbread@1.0.0 with placeholders (or gate after tag).

Also worth fixing

  • Show content: [...(existing ?? []), ...effortGraphContent()] in packages/flatbread/README.md.
  • Pin FlatbreadProvider['query']Promise<ExecutionResult> (and import ⊆ dependencies) in types.test.ts.
  • Clarify journal recovery (rollback vs complete; write/start entry points) in the effort-graph README.

Coverage plan

  1. packages/core/src/types.test.ts — positive Equal<ReturnType<FlatbreadProvider['query']>, Promise<ExecutionResult>>.
  2. Same file — every dist/index.d.ts import specifier ⊆ dependencies.
  3. Same file — missing-dist → clear assertion, not raw ENOENT.

Reviewer scoreboard

Perspective Signal
correctness-and-contracts strong
test-coverage-robustness good
release-discipline mixed (LICENSE HIGH wrong for pnpm)
docs-and-positioning good
dependency-runtime-surface strong (APPROVE)

Models: grok-4.5 (HIGH) / composer-2.5 (MED/LOW). Canvas: dag-review-b7164a8-judge.canvas.tsx. Judge: /tmp/review-judge-final.md.

Open in Web View Automation 

Sent by Cursor Automation: Flatbread PR Review

Comment thread docs/positioning.md
Comment on lines +25 to +26
digests from `flatbread effort list`, `records`, `relations`,
`blocking-decisions`, and `get`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HIGH — These read as top-level commands after `flatbread effort list`. records, relations, blocking-decisions, and get are not valid shell invocations on their own.

Prefix each: `flatbread effort records`, `flatbread effort relations`, `flatbread effort blocking-decisions`, `flatbread effort get` (match skill/reference).

Comment on lines +69 to +70
npx skills add https://github.com/FlatbreadLabs/flatbread/tree/v1.0.0/packages/effort-graph/skills/effort-graph --skill effort-graph
npm install --save-dev flatbread@1.0.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HIGH — Hardcoded tree/v1.0.0 and flatbread@1.0.0 404 until the annotated tag exists. CONTRIBUTING and setup.md correctly use placeholders.

Use <gitTag> / @X (or state “after v1.0.0 is tagged”) so merge-before-tag does not ship broken install lines.

Comment on lines +291 to +295
For agent memory instead of site content, add `effortGraphContent()` to your
config, then run `flatbread effort bootstrap` to check the setup and
`flatbread effort bootstrap --verify` to fail when something is missing. The
[Effort Graph README](https://github.com/FlatbreadLabs/flatbread/blob/main/packages/effort-graph/README.md)
has the install commands.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — “Add effortGraphContent() to your config” can be read as replacing content, which wipes posts/authors on dual-use repos.

Show the spread-merge pattern already used in skill setup.md / CLI bootstrap:
content: [...(existing ?? []), ...effortGraphContent()].

Comment on lines +19 to +21
Writes go through a journal, so a change that touches several files either
finishes in full or leaves nothing behind: if the process dies mid-write, the
next run restores the earlier contents of the unfinished change.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — “Finishes in full or leaves nothing behind” / “restores the earlier contents” only covers before-image rollback. recoverJournal also completes committed-but-unpublished transactions via after-images, and recovery runs on write/flatbread start, not read-only CLI.

State both recovery actions and the entry points.

Comment on lines +70 to +88
test('core declarations use only the public GraphQL type surface', (t) => {
const declarations = readFileSync(
new URL('../dist/index.d.ts', import.meta.url),
'utf8'
);

t.false(declarations.includes('graphql/jsutils/'));
});

test('core publishes dependencies used by its declarations', (t) => {
const manifest = JSON.parse(
readFileSync(new URL('../package.json', import.meta.url), 'utf8')
) as {
dependencies?: Record<string, string>;
devDependencies?: Record<string, string>;
};

t.is(manifest.dependencies?.vfile, '5.3.4');
t.false('vfile' in (manifest.devDependencies ?? {}));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — Good negative check (graphql/jsutils/) and vfile pin, but the CHANGELOG’s positive stickiness claim is unlocked: no assert that query returns Promise<ExecutionResult>, and demoting graphql out of dependencies would still pass.

Add Equal<ReturnType<FlatbreadProvider['query']>, Promise<ExecutionResult>> and assert every dist/index.d.ts import specifier ⊆ dependencies.

* @returns GraphQL response
*/
async query(args: Omit<GraphQLArgs, 'schema'>) {
async query(args: Omit<GraphQLArgs, 'schema'>): Promise<ExecutionResult> {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

MED — Public return-type fix is correct; pair it with a compile-time Equal (or d.ts match) in types.test.ts so the private GraphQL type leak cannot regress silently.

Comment thread CHANGELOG.md
Comment on lines +95 to +98
There is no migration guide. Of the changes above, the Node floor is the one
that can break an install. For anything else that moved since
`1.0.0-alpha.22`, read the Git history; the alpha train did not keep
per-release notes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

LOW — Engines floor is declared elsewhere; saying there is no migration guide still leaves Node <20.19 upgraders without concrete steps. A short “Upgrading to 1.0” note (nvm/CI/engine-strict) would close the residual gap.

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.

2 participants