Skip to content

Commit 0bd5372

Browse files
author
zhangwei
committed
refactor: streamline AI engineering assets and retire Azure CI
Consolidate cross-platform guidance and project skills, fix lifecycle and API templates, and enforce complete AI asset validation in repository policy. Document isolated Python setup and CI ownership; remove retired Azure pipelines and their dedicated scripts.
1 parent da9c615 commit 0bd5372

101 files changed

Lines changed: 1877 additions & 10632 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/api-example-release-iteration/SKILL.md

Lines changed: 0 additions & 124 deletions
This file was deleted.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
name: cross-platform-api-change
3+
description: Coordinate an RTC API Examples change across Android, iOS, macOS, and Windows when behavior, SDK usage, dependencies, CI, or packaging may affect more than one project.
4+
---
5+
6+
# Cross-Platform API Change
7+
8+
Use one written contract to keep every affected implementation aligned. The contract is
9+
the source of truth for behavior; an existing platform implementation is only a reference.
10+
11+
## Required Context
12+
13+
1. Read the root `AGENTS.md`.
14+
2. Read `docs/ai/README.md`, `docs/ai/change-contract-template.md`, and
15+
`docs/ai/project-matrix.md`.
16+
3. For SDK, dependency, CI, packaging, signing, or external-asset changes, also read
17+
`docs/ai/release-risks.md`.
18+
4. Read the platform and project `AGENTS.md` and `ARCHITECTURE.md` files for every project
19+
that may be affected.
20+
21+
Treat the current source tree as the case inventory. Do not rely on a separately maintained
22+
case catalog.
23+
24+
## Workflow
25+
26+
### 1. Establish The Contract
27+
28+
Before editing, copy `docs/ai/change-contract-template.md` into the issue, pull request, or
29+
task notes and complete it. Define observable behavior, SDK operations, inputs and defaults,
30+
callbacks, success and failure signals, lifecycle cleanup, non-goals, and the reference
31+
implementation or documentation.
32+
33+
Separate shared behavior from platform-specific API and UI details. If the requirement
34+
changes, update the contract first and then re-evaluate scope and existing work.
35+
36+
### 2. Decide Every Project
37+
38+
Review every row in `docs/ai/project-matrix.md`. Mark each project `REQUIRED`,
39+
`REVIEW_ONLY`, or `NOT_APPLICABLE`. Include a reason for every project that is not required.
40+
Do not assume that Android Views covers Compose, iOS UIKit covers SwiftUI or Objective-C,
41+
or a full-SDK project covers its audio-only counterpart.
42+
43+
### 3. Implement From The Same Contract
44+
45+
One coordinator owns the contract and cross-platform decisions. Split implementation by
46+
top-level platform only when parallel work is explicitly available, and give every owner
47+
the same contract, its project scope, allowed paths, reference, and validation requirements.
48+
Platform owners must not redefine shared behavior.
49+
50+
Implementations may differ because of SDK types, UI frameworks, permissions, or operating
51+
system behavior. Record each intentional difference and its reason in the contract.
52+
53+
### 4. Verify Each Required Project
54+
55+
For every required project:
56+
57+
- compare the diff with the shared contract;
58+
- verify SDK arguments, defaults, callbacks, lifecycle, threading, errors, registration,
59+
resources, localization, and cleanup as applicable;
60+
- run the strongest valid build or static check documented by that project;
61+
- record changed files, commands, results, blockers, and intentional differences.
62+
63+
Keep scope decisions and validation status separate. Record each planned validation as one
64+
of:
65+
66+
- `PASS`: the command or behavioral check completed and met its acceptance criteria;
67+
- `FAIL`: the check ran and failed;
68+
- `BLOCKED`: the check cannot run yet; record the blocker, remaining command, and the
69+
condition that will unblock it;
70+
- `NOT_RUN`: the check was not attempted; record why.
71+
72+
Do not convert `BLOCKED` or `NOT_RUN` into a pass. They are valid handoff states, but they
73+
leave the overall change incomplete.
74+
75+
Compilation is necessary but does not prove behavioral parity. Use an independent review
76+
pass when available.
77+
78+
### 5. Close Cross-Platform Acceptance
79+
80+
The change is complete only when every project has an explicit scope decision, every
81+
required implementation satisfies the contract, and every required validation is `PASS`.
82+
A change with `FAIL`, `BLOCKED`, or `NOT_RUN` validation may be handed off with clear next
83+
steps, but must not be reported as complete. Copy the final scope, differences, and
84+
validation evidence into the pull request using `.github/pull_request_template.md`.
85+
86+
Before handoff, confirm that SDK sources match `docs/ai/project-matrix.md` and that no real
87+
App ID, certificate, token, signing asset, private key, or private download URL is staged.
88+
89+
Do not commit task transcripts, agent identities, generated case catalogs, prompt snapshots,
90+
or run logs. Preserve durable product behavior and verification evidence in the issue or
91+
pull request.

.github/ci/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# CI Implementation
2+
3+
GitHub Actions entry points live in `.github/workflows/`. This directory contains their
4+
policy helpers and the release packaging scripts loaded by Jenkins.
5+
6+
| Path | Caller and responsibility | Validation |
7+
| --- | --- | --- |
8+
| `Jenkinsfile_bitbucket.groovy` | External Jenkins shared library loads the release pipeline. | Verify job configuration and release evidence in the release ticket. |
9+
| `build/` | Jenkins platform Groovy entry points call packaging scripts, which use each project's `cloud_build.*` / `cloud_project.*` adapters. IPA entry points also depend on external Jenkins configuration. | Run the signing-preflight unit tests below; actual signing, private SDK injection and artifact verification belong to Jenkins. |
10+
| `policy/` | `repository-policy.yml` runs AI asset validation and its regression tests; `.git-hooks/` supplies the local credential and commit-message checks. | Follow [AI validation](../../docs/ai/README.md) for venv setup and policy checks. |
11+
12+
After creating the venv described above, run the packaging helper tests from the repository root:
13+
14+
```bash
15+
.venv/bin/python -m unittest discover --start-directory .github/ci/build/tests --pattern 'test_check_ios_signing_assets.py'
16+
```
17+
18+
Keep the Jenkins entry point and `build/` paths stable: external jobs and existing scripts
19+
refer to them directly. A lack of repository-local callers does not establish that an
20+
external entry point is unused. GitHub compilation uses public SDK dependencies and
21+
produces compile evidence; Jenkins owns release artifacts and signing evidence.

.github/ci/policy/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PyYAML==6.0.2

0 commit comments

Comments
 (0)