Skip to content

[Governance] Enforce task-owned branches and pull requests#135

Open
web2solutions wants to merge 4 commits into
devfrom
codex/governance/133-task-branch-pr-naming
Open

[Governance] Enforce task-owned branches and pull requests#135
web2solutions wants to merge 4 commits into
devfrom
codex/governance/133-task-branch-pr-naming

Conversation

@web2solutions

Copy link
Copy Markdown
Owner

Summary

Adds requirement 077 and makes one task per branch and pull request a mandatory delivery rule. Branch names and PR titles now identify the change nature, and Gate 5 blocks non-compliant delivery.

Closes #133

Project Tracking

Task Isolation and Naming

  • Task-owned branch: codex/governance/133-task-branch-pr-naming
  • Branch nature: governance
  • PR title prefix: [Governance]
  • This branch and PR contain exactly one GitHub Issue.
  • Branch and PR title nature agree.

Traceability

Changes

  • Added .agents/requirements/077-task-owned-branch-and-pr-naming-governance.md.
  • Updated the requirement index, NFR registry, local governance snapshot, ledger, and coverage status.
  • Added task isolation and naming checks to feature, fix, security, and new governance PR templates.
  • Updated engineering, governance, traceability, and delivery-gate specs in English and Portuguese.
  • Corrected pre-existing coverage drift by mapping requirement 076 and indexing the second requirement 055 artifact.

Validation Evidence

  • git diff --check
  • Requirement audit: 79 files, 77 unique IDs, 77 ledger mappings, no missing index entries
  • pnpm run lint
  • Unit tests: 84 suites / 456 tests passed
  • Strict pre-push gate: architecture, cycles, workspace, release governance, security smoke, OpenAPI, serverless handlers, build, API smoke, and patch coverage passed
  • Changelog synchronized

Risk and Rollback

  • Risk: delivery naming rules may require existing automation and contributors to adjust future branch/PR names.
  • Mitigation: explicit formats, allowed nature values, examples, and template attestations are documented.
  • Rollback: revert commit d842b94; no runtime or data migration is involved.

web2solutions and others added 4 commits June 30, 2026 03:40
…ecks (#60)

## Summary
- split Organization operations into dedicated `OrganizationController`
- updated REST and Realtime controller resolution for `/organizations`
- added requirement `045-data-entity-controller-ownership` and updated
README/agents with PCI-focused positioning
- fixed OAS route-resolution CI checker to map organizations to
`OrganizationController`
- fixed organization mutation handler typing across framework adapters
and AWS Lambda runtime wiring

## Validation
- `npm run test:unit`
- `npm run oas:check-routes`
- `npm run build:dev`
- pre-push strict gate passed (`ci:gate:strict`, `coverage:patch`)
…gress (#112)

## Summary
- advances JumentiX monorepo migration execution across Wave 3, Wave 4,
and Wave 5 preparation
- adds migration inventory + rollback governance and syncs
requirements/todos/docs
- hardens CLI package with non-interactive flags and help flow- evolves
workspace package layout and compatibility bridges
- fixes lint/build/unit gate blockers to keep local CI flow green under
Node 22

## Project Tracking
- Related issues: #106, #107, #95, #90, #91
- Project: Jumentix (https://github.com/users/web2solutions/projects/1)
- Status updates applied in project: #106 and #107 moved to In review

## Acceptance Criteria
- [x] lint passes
- [x] unit tests pass with configured strict coverage threshold
- [x] build:dev passes
- [x] docs + agents synced with delivered scope

## Validation Evidence
- 
> aaa-typescript-boilerplate@0.0.2 lint
> eslint . --ext .ts 
> aaa-typescript-boilerplate@0.0.2 test:unit
> NODE_ENV=dev jest ./test/unit --runInBand


------------------------------------------------------------------------|---------|----------|---------|---------|------------------------------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s

------------------------------------------------------------------------|---------|----------|---------|---------|------------------------------------------
All files | 99.56 | 91.69 | 99.23 | 99.71 |
sdk-clients/grpc | 100 | 100 | 100 | 100 |
GrpcApiClient.ts | 100 | 100 | 100 | 100 |
seed | 100 | 100 | 100 | 100 |
organizations.ts | 100 | 100 | 100 | 100 |
users.ts | 100 | 100 | 100 | 100 |
src/config | 100 | 90 | 100 | 100 |
constants.ts | 100 | 100 | 100 | 100 |
jwt.ts | 100 | 100 | 100 | 100 |
security.ts | 100 | 90 | 100 | 100 | 2
src/infra/audit | 100 | 100 | 100 | 100 |
InMemorySecurityAuditRepository.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/infra/context | 100 | 100 | 100 | 100 |
Context.ts | 100 | 100 | 100 | 100 |
src/infra/events | 100 | 100 | 100 | 100 |
InMemoryEventBus.ts | 100 | 100 | 100 | 100 |
src/infra/exceptions | 100 | 100 | 100 | 100 |
BaseError.ts | 100 | 100 | 100 | 100 |
ComposeEventError.ts | 100 | 100 | 100 | 100 |
ConflictError.ts | 100 | 100 | 100 | 100 |
DataBaseNotFoundError.ts | 100 | 100 | 100 | 100 |
DatabasePagingError.ts | 100 | 100 | 100 | 100 |
DomainNotFoundError.ts | 100 | 100 | 100 | 100 |
DomainValidationError.ts | 100 | 100 | 100 | 100 |
ForbiddenError.ts | 100 | 100 | 100 | 100 |
InternalServerError.ts | 100 | 100 | 100 | 100 |
NotFoundError.ts | 100 | 100 | 100 | 100 |
NotImplemented.ts | 100 | 100 | 100 | 100 |
ResourceLockedError.ts | 100 | 100 | 100 | 100 |
UnauthorizedError.ts | 100 | 100 | 100 | 100 |
ValidationError.ts | 100 | 100 | 100 | 100 |
error.codes.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/infra/jwt | 100 | 80 | 100 | 100 |
JwtService.ts | 100 | 80 | 100 | 100 | 54
src/infra/messages | 100 | 100 | 100 | 100 |
InMemoryMessageMediator.ts | 100 | 100 | 100 | 100 |
compileMessageMediator.ts | 100 | 100 | 100 | 100 |
src/infra/messages/adapters | 100 | 100 | 100 | 100 |
BullMqMessageMediatorAdapter.ts | 100 | 100 | 100 | 100 |
InMemoryMessageMediatorAdapter.ts | 100 | 100 | 100 | 100 |
RabbitMqMessageMediatorAdapter.ts | 100 | 100 | 100 | 100 |
src/infra/messages/repositories | 100 | 100 | 100 | 100 |
QueueRequestResponseRepository.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/infra/mutex/adapter | 100 | 100 | 100 | 100 |
MutexService.ts | 100 | 100 | 100 | 100 |
src/infra/persistence | 100 | 100 | 100 | 100 |
compileDatabaseClient.ts | 100 | 100 | 100 | 100 |
src/infra/persistence/InMemoryDatabase | 100 | 100 | 100 | 100 |
InMemoryDbClient.ts | 100 | 100 | 100 | 100 |
src/infra/persistence/InMemoryDatabase/Stores | 97.19 | 90.24 | 100 |
98.95 |
InMemoryRelationalStore.ts | 97.08 | 90.24 | 100 | 98.91 | 47
OrganizationStoreAPI.ts | 100 | 100 | 100 | 100 |
UserStoreAPI.ts | 100 | 100 | 100 | 100 |
src/infra/persistence/KeyValueStorage | 100 | 100 | 100 | 100 |
BaseKeyValueStorageClient.ts | 100 | 100 | 100 | 100 |
InMemoryKeyValueStorageClient.ts | 100 | 100 | 100 | 100 |
compileKeyValueStorageClient.ts | 100 | 100 | 100 | 100 |
src/infra/persistence/external | 100 | 100 | 100 | 100 |
BaseExternalDataRepository.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/infra/security | 100 | 100 | 100 | 100 |
PasswordCryptoService.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/interface/Async | 97.56 | 85.52 | 100 | 98.31 |
RealtimeAPIBase.ts | 97.52 | 85.52 | 100 | 98.29 | 379,408
RealtimeDomainEvent.ts | 100 | 100 | 100 | 100 |
src/interface/CLI | 100 | 75 | 100 | 100 |
index.ts | 100 | 75 | 100 | 100 | 28
src/interface/CLI/core | 100 | 100 | 100 | 100 |
catalogStorage.ts | 100 | 100 | 100 | 100 |
prompt.ts | 100 | 100 | 100 | 100 |
src/interface/CLI/subapps | 99.41 | 85.44 | 100 | 99.39 |
domainManager.ts | 100 | 91.04 | 100 | 100 | 13-14,110-113
entityModelManager.ts | 99.18 | 82.87 | 100 | 99.16 | 238,333
src/interface/HTTP/ports | 100 | 100 | 100 | 100 |
BaseController.ts | 100 | 100 | 100 | 100 |
src/interface/HTTP/validators | 98.96 | 96.22 | 100 | 98.83 |
checkRequiredProperties.ts | 100 | 100 | 100 | 100 |
getSchema.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
isPropertiesMatching.ts | 100 | 100 | 100 | 100 |
throwIfOASInputValidationFails.ts | 100 | 100 | 100 | 100 |
validateRequestAgainstOAS.ts | 100 | 83.33 | 100 | 100 | 19
validateRequestParams.ts | 96.15 | 95.45 | 100 | 96 | 39
src/interface/WebSocket | 100 | 100 | 100 | 100 |
WebSocketAPI.ts | 100 | 100 | 100 | 100 |
src/interface/WebSocket/adapters | 100 | 100 | 100 | 100 |
start-websocket-api.ts | 100 | 100 | 100 | 100 |
src/interface/WebSocket/adapters/socket-io | 100 | 76.66 | 100 | 100 |
clusterAdapter.ts | 100 | 71.42 | 100 | 100 | 12-16
redisStreamsAdapter.ts | 100 | 66.66 | 100 | 100 | 11-15,20-22
socket-io.ts | 100 | 100 | 100 | 100 |
src/interface/gRPC | 100 | 93.54 | 100 | 100 |
gRPCAPI.ts | 100 | 93.54 | 100 | 100 | 84-85
src/interface/gRPC/adapters | 100 | 100 | 100 | 100 |
start-grpc-api.ts | 100 | 100 | 100 | 100 |
src/interface/gRPC/adapters/grpc | 100 | 100 | 100 | 100 |
grpc.ts | 100 | 100 | 100 | 100 |
src/interface/runtime | 100 | 100 | 100 | 100 |
RuntimeEnvironment.ts | 100 | 100 | 100 | 100 |
src/modules/Users | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/modules/Users/adapters/in/http/controllers | 100 | 96.36 | 100 | 100
|
AuthController.ts | 100 | 100 | 100 | 100 |
OrganizationController.ts | 100 | 100 | 100 | 100 |
UserController.ts | 100 | 93.75 | 100 | 100 | 45,59
src/modules/Users/adapters/out/persistence | 100 | 50 | 100 | 100 |
OrganizationDataRepository.ts | 100 | 50 | 100 | 100 | 73-75
UserDataRepository.ts | 100 | 50 | 100 | 100 | 91-93
src/modules/Users/application | 96.42 | 75 | 100 | 96.42 |
AuthUseCases.ts | 94.73 | 75 | 100 | 94.73 | 65,91
UserUseCases.ts | 100 | 100 | 100 | 100 |
src/modules/Users/application/use-cases | 100 | 100 | 100 | 100 |
AuthUseCases.ts | 100 | 100 | 100 | 100 |
OrganizationUseCases.ts | 100 | 100 | 100 | 100 |
UserUseCases.ts | 100 | 100 | 100 | 100 |
src/modules/Users/composition | 100 | 100 | 100 | 100 |
composeUsersAuthServices.ts | 100 | 100 | 100 | 100 |
src/modules/Users/domain/Model | 98.84 | 97.5 | 100 | 98.72 |
Organization.ts | 100 | 90.9 | 100 | 100 | 116
User.ts | 98.05 | 100 | 100 | 97.87 | 291,322,353
src/modules/Users/domain/security | 100 | 85.71 | 100 | 100 |
Rbac.ts | 100 | 85.71 | 100 | 100 | 58,66
src/modules/Users/events | 100 | 100 | 100 | 100 |
LoginRequestEvent.ts | 100 | 100 | 100 | 100 |
LogoutRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationAddressCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationAddressDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationAddressUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationEmailCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationEmailDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationEmailUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationGetAllRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationGetOneRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationPhoneCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationPhoneDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationPhoneUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
OrganizationUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
RegisterRequestEvent.ts | 100 | 100 | 100 | 100 |
UpdatePasswordRequestEvent.ts | 100 | 100 | 100 | 100 |
UserCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
UserDocumentCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserDocumentDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
UserDocumentUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserEmailCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserEmailDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
UserEmailUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserGetAllRequestEvent.ts | 100 | 100 | 100 | 100 |
UserGetOneRequestEvent.ts | 100 | 100 | 100 | 100 |
UserPasswordUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserPhoneCreateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserPhoneDeleteRequestEvent.ts | 100 | 100 | 100 | 100 |
UserPhoneUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
UserUpdateRequestEvent.ts | 100 | 100 | 100 | 100 |
src/modules/Users/events/contracts | 100 | 100 | 100 | 100 |
UserIntegrationEventName.ts | 100 | 100 | 100 | 100 |
UserMessageContracts.ts | 100 | 100 | 100 | 100 |
src/modules/Users/events/listeners | 100 | 100 | 100 | 100 |
registerUserEventListeners.ts | 100 | 100 | 100 | 100 |
registerUserMessageHandlers.ts | 100 | 100 | 100 | 100 |
src/modules/Users/features | 100 | 100 | 100 | 100 |
createDocument.ts | 100 | 100 | 100 | 100 |
createEmail.ts | 100 | 100 | 100 | 100 |
createPhone.ts | 100 | 100 | 100 | 100 |
createUser.ts | 100 | 100 | 100 | 100 |
deleteDocument.ts | 100 | 100 | 100 | 100 |
deleteEmail.ts | 100 | 100 | 100 | 100 |
deletePhone.ts | 100 | 100 | 100 | 100 |
deleteUserById.ts | 100 | 100 | 100 | 100 |
getAllUsers.ts | 100 | 100 | 100 | 100 |
getUserById.ts | 100 | 100 | 100 | 100 |
updateDocument.ts | 100 | 100 | 100 | 100 |
updateEmail.ts | 100 | 100 | 100 | 100 |
updatePassword.ts | 100 | 100 | 100 | 100 |
updatePhone.ts | 100 | 100 | 100 | 100 |
updateUser.ts | 100 | 100 | 100 | 100 |
src/modules/Users/interface/websocketapi/frameworks/socket-io/handlers |
100 | 100 | 100 | 100 |
_createWebSocketOperationHandler.ts | 100 | 100 | 100 | 100 |
login.ts | 100 | 100 | 100 | 100 |
src/modules/Users/service | 100 | 90.66 | 93.02 | 100 |
AuthService.ts | 100 | 90.81 | 84.21 | 100 |
69-77,159,281-282,302,355,419
OrganizationService.ts | 100 | 100 | 100 | 100 |
UserProviderLocal.ts | 100 | 100 | 100 | 100 |
UserService.ts | 100 | 90 | 100 | 100 | 111-112,187,215,237
src/modules/Users/service/ports | 100 | 100 | 100 | 100 |
EAuthSchemaType.ts | 100 | 100 | 100 | 100 |
src/modules/ddd/valueObjects | 100 | 100 | 100 | 100 |
AddressValueObject.ts | 100 | 100 | 100 | 100 |
DocumentValueObject.ts | 100 | 100 | 100 | 100 |
EAddressType.ts | 100 | 100 | 100 | 100 |
EDocumentType.ts | 100 | 100 | 100 | 100 |
EEmailType.ts | 100 | 100 | 100 | 100 |
EmailValueObject.ts | 100 | 100 | 100 | 100 |
PhoneValueObject.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/modules/port | 100 | 100 | 100 | 100 |
BaseDomainEvent.ts | 100 | 100 | 100 | 100 |
BaseModel.ts | 100 | 100 | 100 | 100 |
BaseRepo.ts | 100 | 100 | 100 | 100 |
BaseService.ts | 100 | 100 | 100 | 100 |
ServiceResponse.ts | 100 | 100 | 100 | 100 |
UUID.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
operators.ts | 100 | 100 | 100 | 100 |
relations.ts | 100 | 100 | 100 | 100 |
setFilter.ts | 100 | 100 | 100 | 100 |
setFilterAndPaging.ts | 100 | 100 | 100 | 100 |
setPaging.ts | 100 | 100 | 100 | 100 |
src/shared | 100 | 96.66 | 100 | 100 |
utils.ts | 100 | 96.66 | 100 | 100 | 57
src/shared/decorators/guard | 100 | 100 | 100 | 100 |
Authorize.ts | 100 | 100 | 100 | 100 |
src/shared/openapi | 98.52 | 94.14 | 100 | 100 |
OpenApi31DataEntity.ts | 98.52 | 94.14 | 100 | 100 |
70-82,89,114,137,157,218,379,436,449,477
src/shared/validators | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |

------------------------------------------------------------------------|---------|----------|---------|---------|------------------------------------------
> aaa-typescript-boilerplate@0.0.2 build:dev
> NODE_ENV=dev tsc
…#132)

## Summary
- reorganize Jumentix docs by audience (consumers vs creators)
- keep internal planning/migration/governance docs out of
consumer-facing website content
- add PT-BR documentation corpus across software docs (excluding .agents
and .github)
- add and update tooling scripts for PT-BR documentation generation and
link handling
- update website content source mapping to consumer-focused docs only

## Governance
- requirement 076 updated to enforce no PT-BR mirroring for
.agents/.github
- technical docs hub split by audience and linked from root README

## Validation
- pre-commit hooks passed (changelog update, lint, unit tests)
- unit tests: 86/86 suites passed locally
@web2solutions web2solutions self-assigned this Jul 25, 2026
@web2solutions web2solutions added the chore Maintenance or operational task label Jul 25, 2026
@web2solutions

Copy link
Copy Markdown
Owner Author

Full-matrix audit after the requirement expansion: failed closed.

pnpm run test exited 1 with 74 failed / 111 passed suites and 377 failed / 807 passed tests. Representative failures include Fastify duplicate sendFile registration, HTTP contract/status drift, missing gRPC proto resolution, tenant-result mismatches, and organization authorization.

The requirement amendment is prepared locally but is not committed or pushed because commits and pushes now require a green full matrix. This PR remains blocked; the earlier strict gate result is not sufficient full-matrix evidence and must not be treated as green.

@web2solutions
web2solutions changed the base branch from main to dev July 25, 2026 21:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance or operational task

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Governance] Enforce one task per branch and pull request

1 participant