Publish Forge resource economics evidence
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02669-87ee-7a31-b111-edc95a16e0fa
This commit is contained in:
tegwick 2026-08-22 12:34:25 +02:00
parent a0f4c493a3
commit 35dbe4dd42
12 changed files with 632 additions and 30 deletions

View file

@ -0,0 +1,20 @@
schema_version: railiance.forge-allocation-drivers.v1
resource_id: resource:railiance:forgejo
method_version: forge-raw-drivers-v1
candidate_drivers:
- repository_count
- package_bytes
- runner_job_minutes
consumer_groups:
- helix-forge
- coulomb-social
- railiance
selected_driver: null
attributed: []
residual:
share: 1.0
reason: current read-only surfaces do not bind repository, package, and runner usage to those consumer groups
selection_owner: resource-control
provenance:
- Kubernetes deployment, PVC, CNPG, runner, and storage observations
- Forgejo aggregate API evidence when an approved read-only route becomes available

View file

@ -0,0 +1,115 @@
{
"schema_version": "railiance.forge-resource-observation.v1",
"record_type": "usage_observation",
"resource_id": "resource:railiance:forgejo",
"source": "railiance-forge",
"workplan_id": "RFORGE-WP-0002",
"reef": "reef-railiance",
"captured_at": "2026-08-22T10:22:56Z",
"capacity": {
"deployments": [
{
"name": "forgejo-gitea",
"desired_replicas": 1,
"available_replicas": 1,
"requests": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"limits": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"observed": {
"cpu_millicores": 115,
"memory_bytes": 629145600
}
},
{
"name": "forgejo-runner",
"desired_replicas": 1,
"available_replicas": 1,
"requests": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"limits": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"observed": {
"cpu_millicores": 3,
"memory_bytes": 563085312
}
}
],
"persistent_volumes": [
{
"name": "forgejo-runner-data",
"storage_class": "local-path",
"requested_bytes": 5368709120,
"phase": "Bound"
},
{
"name": "gitea-shared-storage",
"storage_class": "local-path",
"requested_bytes": 10737418240,
"phase": "Bound"
}
],
"pvc_requested_bytes": 16106127360,
"forge_data_used_bytes": 2377375744,
"runner_data_used_bytes": 247693312,
"database": {
"instances": 1,
"ready_instances": 1,
"storage_requested_bytes": 10737418240,
"phase": "Cluster in healthy state"
}
},
"recovery": {
"database_continuous_archiving": true,
"database_backups_seen": 0,
"database_backups_completed": 0,
"shared_storage_restore_drill": false,
"runner_restore_drill": false
},
"allocation": {
"method_version": "forge-raw-drivers-v1",
"candidate_drivers": [
"repository_count",
"package_bytes",
"runner_job_minutes"
],
"consumer_groups": [
"helix-forge",
"coulomb-social",
"railiance"
],
"attributed": [],
"residual": {
"forge_data_used_bytes": 2377375744,
"reason": "consumer attribution source is not yet available"
},
"selection_owner": "resource-control"
},
"measurement_gaps": [
"forgejo-db has no Backup or ScheduledBackup evidence",
"material network traffic is unavailable",
"repository and package usage are not yet attributable to named consumers",
"runner job counts and durations are unavailable from the current read-only surface"
],
"provenance": {
"commands": [
"kubectl get deploy -n forgejo -o json",
"kubectl get pvc -n forgejo -o json",
"kubectl top pods -n forgejo --no-headers",
"kubectl get cluster forgejo-db -n databases -o json",
"kubectl get backup,scheduledbackup -n databases -o json",
"kubectl exec deploy/forgejo-gitea -- du -sk /data",
"kubectl exec deploy/forgejo-runner -- du -sk /data"
],
"repository_contents_read": false,
"secret_surfaces_read": false
}
}

View file

@ -0,0 +1,115 @@
{
"schema_version": "railiance.forge-resource-observation.v1",
"record_type": "usage_observation",
"resource_id": "resource:railiance:forgejo",
"source": "railiance-forge",
"workplan_id": "RFORGE-WP-0002",
"reef": "reef-railiance",
"captured_at": "2026-08-22T10:22:56Z",
"capacity": {
"deployments": [
{
"name": "forgejo-gitea",
"desired_replicas": 1,
"available_replicas": 1,
"requests": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"limits": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"observed": {
"cpu_millicores": 115,
"memory_bytes": 629145600
}
},
{
"name": "forgejo-runner",
"desired_replicas": 1,
"available_replicas": 1,
"requests": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"limits": {
"cpu_millicores": 0,
"memory_bytes": 0
},
"observed": {
"cpu_millicores": 3,
"memory_bytes": 563085312
}
}
],
"persistent_volumes": [
{
"name": "forgejo-runner-data",
"storage_class": "local-path",
"requested_bytes": 5368709120,
"phase": "Bound"
},
{
"name": "gitea-shared-storage",
"storage_class": "local-path",
"requested_bytes": 10737418240,
"phase": "Bound"
}
],
"pvc_requested_bytes": 16106127360,
"forge_data_used_bytes": 2377375744,
"runner_data_used_bytes": 247693312,
"database": {
"instances": 1,
"ready_instances": 1,
"storage_requested_bytes": 10737418240,
"phase": "Cluster in healthy state"
}
},
"recovery": {
"database_continuous_archiving": true,
"database_backups_seen": 0,
"database_backups_completed": 0,
"shared_storage_restore_drill": false,
"runner_restore_drill": false
},
"allocation": {
"method_version": "forge-raw-drivers-v1",
"candidate_drivers": [
"repository_count",
"package_bytes",
"runner_job_minutes"
],
"consumer_groups": [
"helix-forge",
"coulomb-social",
"railiance"
],
"attributed": [],
"residual": {
"forge_data_used_bytes": 2377375744,
"reason": "consumer attribution source is not yet available"
},
"selection_owner": "resource-control"
},
"measurement_gaps": [
"forgejo-db has no Backup or ScheduledBackup evidence",
"material network traffic is unavailable",
"repository and package usage are not yet attributable to named consumers",
"runner job counts and durations are unavailable from the current read-only surface"
],
"provenance": {
"commands": [
"kubectl get deploy -n forgejo -o json",
"kubectl get pvc -n forgejo -o json",
"kubectl top pods -n forgejo --no-headers",
"kubectl get cluster forgejo-db -n databases -o json",
"kubectl get backup,scheduledbackup -n databases -o json",
"kubectl exec deploy/forgejo-gitea -- du -sk /data",
"kubectl exec deploy/forgejo-runner -- du -sk /data"
],
"repository_contents_read": false,
"secret_surfaces_read": false
}
}

View file

@ -0,0 +1,31 @@
schema_version: railiance.forge-service-objectives.v1
resource_id: resource:railiance:forgejo
workplan_id: RFORGE-WP-0002
service_objectives:
availability:
objective: web, Git SSH, OCI, package, and runner readiness checks pass at each observation
percentage_target: null
measurement_gap: no approved monthly availability SLO or continuous evidence plane
recovery:
rpo: null
rto: null
requirement: isolated restore must prove clone, login, package pull, and runner re-registration before production trust
retention:
policy: null
requirement: cleanup must preserve referenced release artifacts and evidence
performance:
objective: null
measurement_gap: no approved latency or throughput target
operations_labor:
basis: activities declared; hours remain unknown until time records exist
activities:
- forge and registry health review
- runner health and label review
- storage growth and retention review
- database and shared-storage backup review
- upgrade and migration rehearsal
- incident response and restore drill
setup_hours: null
recurring_hours_per_month: null
measurement_gap: no attributable time records
cost_owner: resource-control/fin-hub

View file

@ -0,0 +1,18 @@
# Forge resource evidence
Run `make forge-observe REMOTE=railiance01` to capture a timestamped,
non-secret observation for `resource:railiance:forgejo`. The collector reads
Kubernetes deployment, metrics, PVC, CNPG, backup-resource, and aggregate
`du` surfaces. It does not read repositories, packages, Secrets, or pod
environments.
The observation separates requested/limited compute from observed usage,
records storage and recovery posture, and preserves unavailable dimensions as
measurement gaps. The companion YAML files define service/labor assumptions
and candidate allocation drivers. Unknown targets, labor, consumer
attribution, and booked cost stay unknown; `resource-control` owns allocation
method selection and `fin-hub` owns financial reconciliation.
The current capture also makes the recovery gap explicit: CNPG reports
continuous archiving, but no `Backup` or `ScheduledBackup` resource exists for
`forgejo-db`, and shared-storage/runner restore drills have not been evidenced.