Add SPEC-021 Personal Deployment, PRD §8.8 and milestone M9
The product will not be released: it runs on its owner's laptop against
their real assets. Requested as "local as staging"; specified as personal
production, because the instance holds the only copy of manual entries,
wallets, allocations and typed rates. 37 business rules, 23 acceptance
criteria, 13 logged decisions, and a mandatory-versus-skipped resource
inventory.
No hosting was ever being paid for -- no VPS exists and deploy.yml's
deploy job is skipped by preflight. Four defects found while specifying
it become part of the work, because the deployment is unsafe without them:
tests can wipe real data startTestDatabase reuses any
DATABASE_MIGRATION_URL; reset.ts TRUNCATEs
through it, runtime_state included
the image cannot migrate runner stage has no src/, tsx is a
devDependency; deploy.yml's migration step
has never executed
compose cannot run locally DOMAIN required, https AUTH_URL, Postgres and
Caddy published on every interface
a missed close is lost close capture is irreversible; laptops sleep
The refusal marker is database-level, not a runtime_state row: reset.ts
truncates that table, so a row marker would be erased by the operation it
guards against (DL-021-13).
Amendments:
PRD §8.8 (FR-8.51-8.74), M9, traceability row, FR-8.34 note
SPEC-016 BR-016-09 cadence superseded for this deployment
SPEC-002 backup.retain_count, personal.catchup_max_days
SPEC-002/003/008/009/016/018 Required by SPEC-021
Coverage: 302 requirements, 0 uncovered. Template: 21/21. Links: 0 broken.
Add SPEC-020 User Onboarding, extracted from SPEC-005
Onboarding was already specified as PRD F2.1 and owned by SPEC-005, so
this extracts and expands it rather than filling a gap. 31 business
rules, 21 acceptance criteria, 8 logged decisions.
The flow spans auth, import, fixed income and wallets; leaving it inside
a spec about parsing three file formats made that spec responsible for
four others' surfaces. SPEC-020 owns sequence, gating, progress and
empty states; step mechanics stay with their owning specs.
Two things it does not do, both deliberate:
stores almost nothing -- every step's completion is a query, for the
same reason positions derive from the ledger. One persisted column,
users.onboarding_dismissed_at, because a dismissal is the only
onboarding fact that is not derivable.
ships no screenshots of investidor.b3.com.br -- R2 already says B3
changes things, and the redesign that breaks a parser silently
invalidates a screenshot, which then walks the user to a control that
moved. Project-authored diagrams with a visible "verified as of" date,
re-checked whenever a parser changes.
Two things the request named that did not exist: there is no CSV path
(xlsx only; CSV is out of scope in SPEC-005) and there is no
registration data to complete (BR-001-05 caps personal data at what
Google supplies). "Required" now means the gates that actually block a
correct portfolio -- unread fixed-income rates and unclassified movement
types -- surfaced in the existing "Needs attention" queue.
Amendments:
SPEC-005 cedes FR-2.1-2.3 and the guided-onboarding AC
SPEC-001 hands off to SPEC-020 rather than SPEC-005
PRD F10 (FR-11.1-11.22), milestone M8, R1 mitigation updated,
F2.1 marked as owned elsewhere with its IDs kept stable
M8 is scheduled ahead of further feature work: R1 rates import friction
High/High and names guided onboarding as its mitigation, with >70%
signup-to-first-import as the exit criterion.
Coverage: 278 requirements, 0 uncovered. Template compliance: 20/20.
Add SPEC-017/018/019 and the amendments they force
Three features specified: wallet balancing, buy/sell opportunity, wallet
goals. 80 business rules, 52 acceptance criteria, 24 logged decisions.
None of them is additive-only, so the reversals are recorded where the
original decision lives rather than left to contradict it silently:
PRD Q6 answered yes after being open since the PRD was written
SPEC-015 target allocation removed from Out of Scope; DL-015-03
superseded in part -- the advice risk is mitigated by
requiring every threshold to originate with the user,
not by omitting the feature. BR-015-06 stands.
SPEC-010 BR-010-02 promoted from descriptive to calculated
SPEC-004 consent basis extended to opportunity and goal email
SPEC-002 four config keys added
SPEC-008 unchanged -- rules are held-assets-only, so DL-008-06
and the quote ceiling stand untouched
PRD gains F7 (FR-7.x), F8 (FR-9.x) and F9 (FR-10.x), milestone M7, and
three traceability rows. FR-8.x is skipped deliberately: section 8 owns
that range and renumbering it would invalidate citations in four specs.
Coverage check: 256 requirements, 0 uncovered. Template compliance:
19/19 specs at 5/5 sections.
Publish PRD and 16 specifications
PRD and specs become the wiki's source of truth for product documents.
Engineering guidelines remain in the repository alongside the code.
Adds Home index, sidebar navigation and a spec template page.