Skip to content

Commit a44b3c3

Browse files
authored
docs: floci architecture findings, connector scope correction, delivery constraints (#28)
1 parent cfc7170 commit a44b3c3

2 files changed

Lines changed: 56 additions & 13 deletions

File tree

conformance/cases/60-connectors.json

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
"subnetId": "subnet-00000000000000001",
55
"securityGroupId": "sg-00000000000000001"
66
},
7-
"tags": ["documented-only"],
7+
"tags": [
8+
"documented-only",
9+
"subset:floci"
10+
],
811
"steps": [
912
{
1013
"name": "create",
@@ -15,28 +18,48 @@
1518
"Name": "m80-conf-connector",
1619
"Configuration": {
1720
"VpcEgressConfiguration": {
18-
"SubnetIds": ["${subnetId}"],
19-
"SecurityGroupIds": ["${securityGroupId}"]
21+
"SubnetIds": [
22+
"${subnetId}"
23+
],
24+
"SecurityGroupIds": [
25+
"${securityGroupId}"
26+
]
2027
}
2128
}
2229
},
23-
"expect": { "status": 202, "bodyMatch": { "Name": "m80-conf-connector" } },
24-
"capture": { "connectorId": "Id" }
30+
"expect": {
31+
"status": 202,
32+
"bodyMatch": {
33+
"Name": "m80-conf-connector"
34+
}
35+
},
36+
"capture": {
37+
"connectorId": "Id"
38+
}
2539
},
2640
{
2741
"name": "get-until-active",
2842
"operation": "GetNetworkConnector",
2943
"method": "GET",
3044
"path": "/2026-04-04/network-connectors/${connectorId}",
31-
"expect": { "status": 200 },
32-
"until": { "path": "State", "equals": "ACTIVE", "timeoutSec": 900, "intervalSec": 5 }
45+
"expect": {
46+
"status": 200
47+
},
48+
"until": {
49+
"path": "State",
50+
"equals": "ACTIVE",
51+
"timeoutSec": 900,
52+
"intervalSec": 5
53+
}
3354
},
3455
{
3556
"name": "list",
3657
"operation": "ListNetworkConnectors",
3758
"method": "GET",
3859
"path": "/2026-04-04/network-connectors",
39-
"expect": { "status": 200 }
60+
"expect": {
61+
"status": 200
62+
}
4063
},
4164
{
4265
"name": "update",
@@ -46,19 +69,27 @@
4669
"body": {
4770
"Configuration": {
4871
"VpcEgressConfiguration": {
49-
"SubnetIds": ["${subnetId}"],
50-
"SecurityGroupIds": ["${securityGroupId}"]
72+
"SubnetIds": [
73+
"${subnetId}"
74+
],
75+
"SecurityGroupIds": [
76+
"${securityGroupId}"
77+
]
5178
}
5279
}
5380
},
54-
"expect": { "status": 202 }
81+
"expect": {
82+
"status": 202
83+
}
5584
},
5685
{
5786
"name": "delete",
5887
"operation": "DeleteNetworkConnector",
5988
"method": "DELETE",
6089
"path": "/2026-04-04/network-connectors/${connectorId}",
61-
"expect": { "status": 202 }
90+
"expect": {
91+
"status": 202
92+
}
6293
}
6394
]
6495
}

docs/floci.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Division of labor with floci
22

3+
## Architecture findings (2026-07-29)
4+
5+
Research against the local floci fork, recorded so the implementation issues stand alone.
6+
7+
Floci is Quarkus. Services are JAX-RS controllers registered in `ResolvedServiceCatalog` as descriptors that claim requests by sigv4 signing name; rest-json dispatch then falls to JAX-RS path matching. Both MicroVM services sign as `lambda`, so their requests arrive under floci's lambda claim and route purely by path, and the MicroVM URI families (`/2025-09-09/`, `/2026-04-04/`, plus tags at `/2017-03-31/tags/`) collide with nothing the existing `LambdaController` serves. The bedrock-agentcore branch in the fork is the recipe for the whole shape: controllers, service, model classes, catalog descriptor, config toggle, tests, in reviewable conventional commits.
8+
9+
CloudFormation provisioning has two plug points. The legacy path is a switch in `CloudFormationResourceProvisioner` calling services in-process. The newer path is the `CfnResourceProvisioner` interface with `CloudFormationResourceRegistry` (`SqsCfnProvisioner` is the model). New resource types go in the new way.
10+
11+
Scope correction to the split below: chant's `MicrovmApp` emits `AWS::Lambda::NetworkConnector` when VPC egress is requested, so the CFN-sufficient subset includes connectors, not just `MicrovmImage`. The conformance suite's `subset:floci` tag covers connectors accordingly.
12+
13+
Delivery constraints. Nothing is pushed to the fork or upstream until the work is complete and green locally. Upstream delivery follows the fork's established convention: a `[FEAT]` issue (Service / API Action / AWS documentation / why / willing-to-PR template) filed together with its PR, one pair per reviewable unit. Conventional commits throughout. The fork-only `publish-docker.yml` (manual dispatch, any ref, multi-arch to GHCR) publishes a testing image at delivery time, not before.
14+
315
## The split
416

517
| Concern | Home | Why |
@@ -12,7 +24,7 @@ floci upstream is `floci-io/floci`, Java, in-tree service modules, 18k stars, no
1224

1325
## Asymmetric scope
1426

15-
The floci module implements the subset CFN provisioning needs. Image create, get, delete, build lifecycle enough for stack create and delete to converge, basic VM CRUD if `AWS::Lambda::Microvm` ever becomes a CFN type. It does not need tokens, endpoint stubs, idle timers, or drift levers. Scoping it narrow keeps the second implementation cheap and the drift surface small.
27+
The floci module implements the subset CFN provisioning needs. Image create, get, delete, build lifecycle enough for stack create and delete to converge, network connectors (`MicrovmApp` emits `AWS::Lambda::NetworkConnector`), and basic VM CRUD only if `AWS::Lambda::Microvm` ever becomes a CFN type. It does not need tokens, endpoint stubs, idle timers, or drift levers. Scoping it narrow keeps the second implementation cheap and the drift surface small.
1628

1729
## Sequencing
1830

0 commit comments

Comments
 (0)