Skip to content

[draft] feat: - #2

Open
u-00a0 wants to merge 16 commits into
mainfrom
feat/v1
Open

u-00a0 wants to merge 16 commits into
mainfrom
feat/v1

Conversation

@u-00a0

@u-00a0 u-00a0 commented Sep 18, 2026

Copy link
Copy Markdown
Member

No description provided.

u-00a0 and others added 11 commits September 17, 2026 23:02
feat: implement phase 01 and 02 backend foundations
- Introduced `README_zh-CN.md` for Chinese localization of project documentation.
- Created `MARKDOWN-POLICY.md` to define the content policy for Markdown representation, transport, and pagination.
- Established `ADR 0003` to document the decision on storing raw Markdown only and deriving representations at request time.
- Updated progress documentation to reflect the current state of module 07 and its associated tasks.
- Enhanced module plans to include new implementation items related to Markdown handling and representation.
- Ensured all changes align with existing security and performance guidelines.
Add a "Commit messages" section to the repository guidance so commit
format is stated in one place: type(scope): description, English,
imperative lower-case subject without a trailing period, one coherent
change per commit, and `!` plus a BREAKING CHANGE footer for
incompatible changes.

The allowed types match the change kinds this repository already uses
and document, and no commit-msg hook enforces the convention yet.
Raise actions/checkout and actions/setup-node from v4 to v7 across all
three jobs, and set node-version to 24 instead of the exact 24.21.0 so
the runner takes the latest Node 24 patch.

The major stays pinned to 24, which package.json still constrains with
engines.node ">=24.21.0 <25". These edits were already present in the
working tree from an earlier session and are committed here unchanged.
Scan the repository with CodeQL on pushes to main, pull requests, and a
weekly schedule. The file comes from the GitHub advanced-setup template
so the configuration stays reviewable and version-controlled rather
than living only in repository settings.

Populate the language matrix with javascript-typescript and
build-mode: none. The template references matrix.build-mode but ships
no such key, so the value has to be set explicitly; `none` builds a
database without compiling, which suits an interpreted language.

Keep the default query suite for now. The commented `queries:
security-extended` line is the documented opt-in for broader but less
precise coverage.

Verified: YAML parses, all matrix references resolve, cron has five
valid fields, and the checkout/setup-node/codeql-action tags resolve on
GitHub. main has no branch protection, so findings are advisory and do
not block merges.
List opened, synchronize, and reopened under the pull_request trigger.
These are already the default activity types, so scanning behavior does
not change; stating them makes PR submission and later head-branch
updates checkable in the file itself instead of relying on an implicit
default.

Also document that a pull request with a merge conflict does not
trigger the workflow until the conflict is resolved.

Verified: YAML parses and the trigger, matrix, and schedule assertions
hold. Fork pull request behavior for security-events: write remains
unverified.
Add 01.3f and 01.V4 for static application security testing, append the
required session entry, and update master status.

01.3b already covers SECURITY §127 with dependency, secret, and license
scanning, and §127 does not request static analysis, so this is recorded
as an extension rather than a corrected omission. Both items stay
unchecked because no hosted CodeQL run exists yet.

The module previously claimed every checklist item was complete. Adding
two open items makes that false, so the module is now In progress in
both its own record and master progress; the original foundation
acceptance is unchanged and still met.

Verified: the session entry carries all nine required fields, relative
links across the three documents resolve, and the only unchecked items
are 01.3f and 01.V4.
Drop the weekly cron trigger so analysis runs on a push to main or on
pull-request activity and nowhere else.

This accepts a real gap, recorded in the workflow itself so it reads as a
deliberate choice rather than an oversight: CodeQL ships new and updated
queries over time, so while the branch is dormant a newly disclosed
vulnerability class will not surface until the next commit or pull
request. Re-adding a cron restores periodic scanning.

Verified: YAML parses, the only remaining triggers are push and
pull_request, no cron remains in the file, and the matrix and steps are
unchanged.
@github-advanced-security

Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

Bundle both runtime entry points and the workerd test fixtures with
tsdown 0.23.0 on rolldown 1.2.9 instead of esbuild. tooling/build.mjs
becomes tooling/build.ts, which owns dist/, builds each target through
tsdown's programmatic API, and exposes --target=all|node|cloudflare|fixtures
so a test lane builds only what it needs.

Workerd resolution conditions, externals and target configuration move into
tooling/bundler-options.ts and tooling/build-targets.ts, which
tsdown.config.ts re-exports. Test files no longer bundle their own fixtures,
so a fixture cannot drift from the deployed Worker profile.

Code splitting stays enabled for apps/api-cloudflare, so its artifact is an
entry plus content-hashed chunks. tests/fixtures/worker-modules.ts declares
every emitted module because declaring only the entry fails at startup, and
tests/workerd/entry.test.ts now starts that chunked production artifact.
Fixtures are pinned to codeSplitting: false: a chunked fixture answered
/health/ready with 500 in Miniflare while the chunked production Worker
answered 200 from an identical module layout, and that interaction is
unexplained. tests/node/entry.test.ts asserts the Node entry remains a
single file so a future dynamic import cannot break the start command.

Also make tooling/secrets.mjs skip paths that git reports as tracked but
that are deleted in the working tree, which previously crashed the scan
with ENOENT.

Verified with the full local matrix; see docs/development/TOOLCHAIN.md.
Adopt the Oxc tooling direction recorded in ARCHITECTURE §45. oxlint 1.83.0
lints with no TypeScript compiler peer dependency, and oxfmt 0.68.0 formats
TypeScript, JavaScript, JSON, Markdown and YAML, which Biome could not cover
at all. tsc remains the only type checker; oxlint's type-aware mode is not
adopted.

.oxlintrc.json mirrors tooling/check-boundaries.mjs for the syntax-level half
of the import policy: per-package eslint/no-restricted-imports with
negated-group allow-lists, import/extensions for the .ts specifier
convention, and the correctness/suspicious/perf categories. pnpm lint now
runs with --deny-warnings, so a new warning fails the gate. The boundary
script stays because only path resolution can enforce package manifests and
relative cross-package ownership. tests/unit/oxlint-config.test.ts keeps
negative fixtures that must fail, because oxlint does not validate rule
options at runtime and a misspelled key would otherwise fail open.

.oxfmtrc.json reproduces the previous style and keeps sortPackageJson and
sortImports disabled. docs/** stays excluded, so historical planning
documents are not reformatted; AGENTS.md, the READMEs and .github/** are now
covered, closing the gap recorded in module 01. biome.json, .prettierrc.json
and .prettierignore are removed.
Format the workspace with oxfmt under the previous Prettier style. The
source change is packages/domain/src/index.ts, where oxfmt breaks the
leading-operator union onto separate lines; the rest is Markdown, YAML and
JSON touch-ups in AGENTS.md, the READMEs and .github/workflows/codeql.yml.
docs/** and .agents/** are excluded: historical planning documents keep
their layout and the guidance skills stay under hand maintenance.

packages/server/src/bounds.ts gains one scoped no-await-in-loop disable:
reading a ReadableStreamDefaultReader is inherently sequential and the body
bound is enforced per chunk as it arrives.

Record the migration in ADR 0004, mark the superseded tooling paragraph in
ADR 0001, refresh the TOOLCHAIN component table, install policy, formatter
scope and development commands, and note in the module 01 evidence that the
hosted runs recorded there were produced with esbuild, Biome and Prettier
and must be re-confirmed.

Verified locally: frozen install, typecheck, lint, format:check (idempotent
on a second run), db:check, build, unit/contract 11, Node 10, workerd 36,
PostgreSQL 24 = 81 ordinary tests, scan:secrets, scan:licenses and the
high-severity audit gate. Hosted CI has not run against the new toolchain.
@u-00a0 u-00a0 added this to the MVP milestone Sep 18, 2026
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