forge-orkes 0.55.0 → 0.58.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create-forge.js +6 -0
- package/package.json +1 -1
- package/template/.claude/hooks/forge-release-fold.sh +458 -0
- package/template/.claude/hooks/tests/forge-release-fold.test.sh +773 -0
- package/template/.claude/settings.json +1 -1
- package/template/.claude/skills/forge/SKILL.md +4 -2
- package/template/.claude/skills/reviewing/SKILL.md +1 -1
- package/template/.claude/skills/upgrading/SKILL.md +18 -0
- package/template/.claude/skills/verifying/SKILL.md +9 -2
- package/template/.forge/FORGE.md +8 -3
- package/template/.forge/checks/forge-check-lint.sh +383 -0
- package/template/.forge/checks/forge-hold-check.sh +259 -0
- package/template/.forge/checks/tests/forge-check-lint.test.sh +597 -0
- package/template/.forge/checks/tests/forge-hold-check.test.sh +404 -0
- package/template/.forge/gitignore +6 -1
- package/template/.forge/migrations/0.56.0-merged-validated-fold.md +74 -0
- package/template/.forge/migrations/0.58.2-merge-floor-checks-relocation.md +61 -0
- package/template/.forge/templates/hold-config.yml +34 -0
- package/template/.forge/templates/project.yml +51 -21
- package/template/.forge/templates/state/index.yml +51 -24
|
@@ -69,6 +69,36 @@ verification:
|
|
|
69
69
|
e2e_soft_cap: 10 # M9: advisory cap on e2e:true stories per milestone. Reviewing warns when exceeded. Soft — never blocks.
|
|
70
70
|
# Advisory mode: commands already failing before Forge started run but don't block — warn only.
|
|
71
71
|
|
|
72
|
+
# forge: # Framework behavior toggles (all optional; absent → defaults).
|
|
73
|
+
# validation_event: in_session_signoff
|
|
74
|
+
# # How a merged unit becomes VALIDATED in the derived release_state
|
|
75
|
+
# # ladder (unmerged → merged → validated; computed by
|
|
76
|
+
# # .claude/hooks/forge-release-fold.sh, never stored). Two bindings:
|
|
77
|
+
# # in_session_signoff (DEFAULT — absent means this): today's behavior,
|
|
78
|
+
# # byte-for-byte — validated derives from the operator's in-session
|
|
79
|
+
# # sign-off (signoff/<unit> tag, current.human_verified, or the
|
|
80
|
+
# # legacy-complete grandfather).
|
|
81
|
+
# # promotion_approval (opt-in): validated derives from a HOST-recorded
|
|
82
|
+
# # promotion — a CI-signed tag minted by the deploy pipeline's
|
|
83
|
+
# # Environment-approved job (the Track B coupling: that job must emit
|
|
84
|
+
# # the tag below byte-exactly). The fold verifies it OFFLINE
|
|
85
|
+
# # (git tag -v; no network) and checks CONTAINMENT: every unit whose
|
|
86
|
+
# # landed sha is an ancestor of the approved deploy sha is validated.
|
|
87
|
+
# # B5 CONSEQUENCE: choosing promotion_approval changes when `complete`
|
|
88
|
+
# # can be set — close becomes machine-verified (no in-session sign-off);
|
|
89
|
+
# # the human gate moves to the deploy boundary (derived validated at
|
|
90
|
+
# # promotion). Default binding keeps today's close gate byte-for-byte.
|
|
91
|
+
# # This key sits on the step-2 protected-paths hold list: a diff
|
|
92
|
+
# # flipping the mode blocks auto-merge for operator review — changing
|
|
93
|
+
# # it is an operator decision, never an agent edit (F4/F5).
|
|
94
|
+
# promotion: # Read only when validation_event: promotion_approval.
|
|
95
|
+
# tag_pattern: "promotion/{sha}" # FROZEN 2026-07-16. {sha} = the full deploy sha the promotion job
|
|
96
|
+
# # approved (not per-unit). The producing side must mint it byte-exactly —
|
|
97
|
+
# # a pattern drift here is a silent never-validates bug.
|
|
98
|
+
# allowed_signers: "" # Path to the CI key's allowed-signers file (committed, PUBLIC keys
|
|
99
|
+
# # only — the private key lives host-side, in the deploy Environment).
|
|
100
|
+
# # Empty ⇒ git config gpg.ssh.allowedSignersFile.
|
|
101
|
+
|
|
72
102
|
success_criteria: # How do we know we're done?
|
|
73
103
|
- "" # e.g., "User can create and edit posts"
|
|
74
104
|
- "" # e.g., "All tests pass with >80% coverage"
|
|
@@ -90,28 +120,28 @@ models:
|
|
|
90
120
|
securing: sonnet # Security analysis needs depth
|
|
91
121
|
debugging: sonnet # Investigation needs solid reasoning
|
|
92
122
|
discussing: sonnet # Conversation needs natural fluency
|
|
93
|
-
# by_complexity: # Per-task complexity -> model (M24). Overrides skills.X — see FORGE.md Model Routing Precedence.
|
|
94
|
-
# trivial: haiku
|
|
95
|
-
# standard: sonnet
|
|
96
|
-
# complex: opus
|
|
97
|
-
|
|
98
|
-
orchestration: # M10 multi-agent orchestration (experimental). Only consulted when M10 is installed.
|
|
99
|
-
# auto: true # false = never auto-route Standard/Full through orchestrating (install = consent; set false to opt out).
|
|
100
|
-
# worktree_root: "../<repo>-worktrees" # Where Forge worktrees live. Default: ../<repo-basename>-worktrees (per-repo sibling — see ADR-010).
|
|
101
|
-
# Relative paths resolve against the REPO ROOT (not shell cwd). Absolute paths and a leading ~ are honored.
|
|
102
|
-
# Editing only affects newly created worktrees; live worktrees keep their recorded lifecycle.worktree_path.
|
|
103
|
-
# Common overrides:
|
|
104
|
-
# ~/.forge/worktrees/<repo> — central home dir, keeps the parent dir of the repo clutter-free
|
|
105
|
-
# ../wt/<repo> — shared dir with per-repo subfolder
|
|
106
|
-
# Do NOT point this inside the repo working tree (file watchers + indexers will recurse into the worktree).
|
|
107
123
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
124
|
+
# notion: # OPT-IN work-management adapter — INERT by default. Projects Forge
|
|
125
|
+
# # milestones/streams/packages onto a Notion board and reads human triage/
|
|
126
|
+
# # priority proposals back. Activates only with BOTH this block (enabled: true)
|
|
127
|
+
# # AND a Notion MCP server in .mcp.json; absent either → fully inert, zero
|
|
128
|
+
# # behavior change. Git (.forge/) stays source of truth — Notion is a
|
|
129
|
+
# # projection + inbox, never symmetric sync (ADR-019). Mirrors the opt-in
|
|
130
|
+
# # shape of forge.beads_integration.
|
|
131
|
+
# enabled: false # Master switch. false/absent → adapter never runs.
|
|
132
|
+
# database_id: "" # Id of the single "Forge Work Items" Notion database (all layers as rows).
|
|
133
|
+
# properties: # OPTIONAL rename map: Forge property → your Notion column name. Omit → defaults.
|
|
134
|
+
# Forge ID: "Forge ID" # Binding key — agent-owned, set once, never overwritten.
|
|
135
|
+
# Status: "Status" # Agent-owned, overwritten each projection.
|
|
136
|
+
# Priority: "Priority" # Human-owned — read as proposal, never overwritten.
|
|
137
|
+
# intake_filter: # OPTIONAL (FR-116): gate which Forge-ID-less pages pull_inbox() treats as
|
|
138
|
+
# # triage requests, so one board can mix agent items + arbitrary human pages.
|
|
139
|
+
# # Absent → every Forge-ID-less page is a candidate (FR-114 base). One of:
|
|
140
|
+
# property: "Type" # {property, equals} — page's <property> equals <value>
|
|
141
|
+
# equals: "Request"
|
|
142
|
+
# # property: "Type" # {property, in} — page's <property> is one of <values>
|
|
143
|
+
# # in: ["Request", "Bug"]
|
|
144
|
+
# # view: "Triage" # {view} — pages in the named saved Notion view
|
|
115
145
|
|
|
116
146
|
risks: # What could go wrong?
|
|
117
147
|
- risk: ""
|
|
@@ -1,25 +1,52 @@
|
|
|
1
|
-
# Forge Global State — Cross-Milestone Index
|
|
2
|
-
#
|
|
3
|
-
# This file
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# Worktree / parallel agent sessions MUST NOT write this file. Editing only the
|
|
8
|
-
# per-milestone files (different files = no git conflict) and regenerating this
|
|
9
|
-
# registry from them is what makes Forge state safe across many worktrees.
|
|
10
|
-
#
|
|
11
|
-
# Rollup is deterministic + idempotent: regenerating from the same milestone
|
|
12
|
-
# files yields identical bytes, so concurrent regenerations never conflict.
|
|
13
|
-
|
|
14
|
-
milestones: # Registry rolled up from state/milestone-{id}.yml
|
|
1
|
+
# Forge Global State — Cross-Milestone Index
|
|
2
|
+
# Auto-managed by agents. Do not edit manually unless recovering from errors.
|
|
3
|
+
# This file tracks global concerns. Per-milestone state lives in state/milestone-{id}.yml.
|
|
4
|
+
|
|
5
|
+
milestones: # Active milestones and their high-level status
|
|
15
6
|
- id: 1
|
|
16
|
-
name: "" #
|
|
17
|
-
status: not_started #
|
|
18
|
-
last_updated: null #
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
name: "" # Human-readable milestone name from roadmap
|
|
8
|
+
status: not_started # not_started | active | deferred | complete
|
|
9
|
+
last_updated: null # ISO 8601 timestamp — used for resume default selection
|
|
10
|
+
release_state: unknown # DERIVED — fold output, git-ignored cache only
|
|
11
|
+
|
|
12
|
+
metrics:
|
|
13
|
+
total_commits: 0
|
|
14
|
+
total_files_modified: 0
|
|
15
|
+
verification_passes: 0
|
|
16
|
+
verification_failures: 0
|
|
17
|
+
checkpoints_hit: 0
|
|
18
|
+
|
|
19
|
+
# Desire Paths — Patterns in how the framework is actually used
|
|
20
|
+
# Collected automatically by agents. Reviewed during verification retrospective.
|
|
21
|
+
# When a pattern appears 3+ times, it becomes a candidate for framework evolution.
|
|
22
|
+
# Desire paths are GLOBAL — they track framework usage across all milestones.
|
|
23
|
+
desire_paths:
|
|
24
|
+
deviation_patterns: [] # Repeated Rule 1/2/3 deviations (same type, same area)
|
|
25
|
+
# - pattern: "" # e.g., "Rule 2: missing null checks in API handlers"
|
|
26
|
+
# occurrences: 0
|
|
27
|
+
# first_seen: null
|
|
28
|
+
# last_seen: null
|
|
29
|
+
|
|
30
|
+
tier_overrides: [] # User overriding auto-detected tier
|
|
31
|
+
# - detected: "" # What Forge detected
|
|
32
|
+
# overridden_to: "" # What user chose instead
|
|
33
|
+
# reason: "" # Why (if stated)
|
|
34
|
+
|
|
35
|
+
skipped_steps: [] # Steps users consistently skip or rush through
|
|
36
|
+
# - step: "" # e.g., "constitutional gate check"
|
|
37
|
+
# skill: ""
|
|
38
|
+
# times_skipped: 0
|
|
39
|
+
|
|
40
|
+
recurring_friction: [] # Same problem appearing across sessions
|
|
41
|
+
# - description: "" # e.g., "Design system violations in form components"
|
|
42
|
+
# occurrences: 0
|
|
43
|
+
# related_files: []
|
|
44
|
+
|
|
45
|
+
agent_struggles: [] # Tasks where agents consistently fail or need retries
|
|
46
|
+
# - task_type: "" # e.g., "Responsive layout implementation"
|
|
47
|
+
# failure_pattern: ""
|
|
48
|
+
# occurrences: 0
|
|
49
|
+
|
|
50
|
+
user_corrections: [] # User correcting agent output in the same way repeatedly
|
|
51
|
+
# - correction: "" # e.g., "Always adds 'use client' directive"
|
|
52
|
+
# occurrences: 0
|