Sesuaikan modernisasi GitHub Copilot

Pembaruan GitHub Copilot dapat diperluas. Agen menyediakan beberapa titik penyesuaian untuk mengodekan pola peningkatan tim Anda, menerapkan standar pengodean selama peningkatan, dan menentukan alur kerja peningkatan baru.

Gambaran umum titik kustomisasi

Titik kustomisasi Ruang lingkup Keteguhan Upaya
Instruksi obrolan Per sesi atau peningkatan Sesi atau disimpan ke scenario-instructions.md Minimal
Artefak skenario Per peningkatan Durasi peningkatan Kurang Penting
Keterampilan kustom Tim atau pribadi Permanen (diperiksa ke repositori atau profil pengguna) Medium
Skenario kustom Tim atau pribadi Permanen Tinggi

Petunjuk / Saran

Mulailah dengan instruksi obrolan dan pengeditan artefak skenario. Beralih ke keterampilan khusus ketika Anda mendapati diri Anda mengulangi instruksi yang sama pada setiap peningkatan.

Menyesuaikan melalui obrolan

Sesuaikan perilaku agen secara real time melalui percakapan alami. Agen segera menerapkan instruksi Anda atau menyimpannya di scenario-instructions.md untuk referensi di masa mendatang.

Anda mengatakan Apa yang terjadi
"Mulai sekarang, selalu commit setelah setiap tugas" Disimpan ke scenario-instructions.md sebagai preferensi eksekusi
"Lewati validasi pengujian untuk tugas ini" Diterapkan segera ke tugas saat ini saja
"Gunakan strategi bottom-up untuk peningkatan ini" Mempengaruhi strategi fase perencanaan
"Jangan sentuh proyek Logging" Ditambahkan ke preferensi; agen mengecualikan proyek tersebut
"Selalu gunakan namespace yang cakupannya file" Disimpan sebagai preferensi standar pengkodian
"Berhenti sejenak setelah setiap tugas untuk saya tinjau" Disimpan sebagai preferensi gaya eksekusi

Petunjuk / Saran

Untuk membuat instruksi tetap ada di seluruh peningkatan, ungkapkan sebagai preferensi permanen: "Mulai sekarang, selalu..." atau "Untuk semua tugas dalam peningkatan ini...". Agen menulis instruksi ke scenario-instructions.md.

Mengubah artefak skenario

Saat agen menjalankan pemutakhiran, ia membuat ruang kerja di .github/upgrades/{scenarioId}/. Folder peningkatan berisi artefak yang dapat diedit yang secara langsung mengontrol perilaku agen.

scenario-instructions.md

File scenario-instructions.md adalah memori persisten agen untuk pemutakhiran. Agen selalu memuat file ini ke dalam konteks, sehingga apa pun yang Anda tulis di sini secara langsung memengaruhi setiap keputusan yang dibuat agen.

Tambahkan bagian seperti ini untuk memandu agen:

## User Preferences

### Technical Preferences
- Always prefer explicit type declarations over `var`
- Use `ILogger<T>` instead of `ILoggerFactory` for dependency injection
- Target .NET 10 for all projects
- Keep Newtonsoft.Json in the shared library (don't migrate to System.Text.Json)

### Execution Style
- **Pace**: Methodical
- **Pause Points**: After assessment, after each task group

### Custom Instructions

#### 02-common-lib
- Skip the database migration for now — it has external dependencies
- Use the connection string from `appsettings.Production.json` for testing

#### 03-data-layer
- Keep existing repository interfaces during migration
- Preserve all Entity Framework conventions

## Key Decisions Log
- 2025-01-15: Keep Newtonsoft.Json in SharedLib — third-party SDK requires it
- 2025-01-16: Skip database project — DBA team will handle separately

plan.md

File plan.md menentukan tugas dan cakupannya. Ubah plan.md ke:

  • Urutkan ulang tugas untuk mengubah urutan eksekusi.
  • Tambahkan tugas yang tidak di rencanakan agen.
  • Hapus tugas yang tidak berlaku.
  • Tambahkan catatan untuk memberikan konteks untuk tugas tertentu.

Berkas tugas individu

Setiap tugas di tasks/{taskId}/task.md berisi spesifikasi tugas dan catatan kerja. Editlah berkas ini untuk...

  • Menyempurnakan cakupan tugas.
  • Tambahkan konteks khusus domain yang tidak diperhatikan agen.
  • Berikan contoh kode untuk hasil yang diinginkan.

Penting

Perangkat agen mengelola tasks.md sebagai dasbor yang hanya bisa dibaca. Jangan edit tasks.md secara langsung. Agen menimpa perubahan manual apa pun. Edit scenario-instructions.md atau file individual task.md sebagai gantinya.

Membuat keterampilan kustom

Keterampilan adalah titik pengembangan utama untuk agen. Skill adalah file Markdown dengan header metadata yang mengajarkan agen cara menangani peningkatan, pola, atau tugas tertentu.

Di mana menempatkan keterampilan khusus

Tempat Ruang lingkup Gunakan ketika diperlukan
.github/skills/my-skill.md Repositori (dibagikan dengan tim) Pola peningkatan di seluruh tim
.github/upgrades/skills/my-skill.md Repositori (khusus untuk peningkatan) Keterampilan khusus untuk skenario peningkatan
%UserProfile%/.copilot/skills/my-skill.md Profil pengguna (pribadi, semua repo) Preferensi dan pola pribadi

Petunjuk / Saran

Keterampilan tingkat repositori (.github/skills/) adalah pilihan yang paling umum. Mereka melakukan perjalanan dengan kode, dan seluruh tim dapat menggunakannya.

Struktur file keterampilan

Setiap file keterampilan memiliki dua bagian: header metadata (yang digunakan agen untuk memahami kapan keterampilan berlaku) dan isi Markdown (instruksi yang diikuti agen).

---
name: migrating-foobar-v2-to-v3
description: >
  Migrate our internal FooBar library from v2 to v3. Activates when
  FooBar.v2 NuGet package is detected, or when asked to "upgrade FooBar",
  "migrate FooBar", or "update FooBar library".
metadata:
  discovery: lazy
  traits: .NET | CSharp
---

# Migrating FooBar Library v2 to v3

## Overview

FooBar v3 introduces a new async-first API surface. This skill guides the
agent through replacing synchronous FooBar.v2 calls with their v3 async
equivalents, updating configuration, and verifying behavior.

## Workflow

1. **Identify FooBar.v2 references**
   - Search for `PackageReference` elements referencing `FooBar.v2`
   - Locate all `using FooBar.V2;` directives

2. **Update package references**
   - Replace `FooBar.v2` with `FooBar.v3` in all `.csproj` files
   - Run `dotnet restore` to verify resolution

3. **Migrate API calls**
   - Replace `FooBarClient.Send(...)` with `await FooBarClient.SendAsync(...)`
   - Replace `FooBarConfig.LoadFromFile(...)` with `FooBarConfig.LoadFromJsonAsync(...)`
   - Update method signatures to `async Task` where needed

4. **Update configuration**
   - Rename `foobar.config` to `foobar.json`
   - Migrate XML config entries to JSON format

5. **Verify**
   - Build the project: `dotnet build`
   - Run existing tests: `dotnet test`
   - Verify no remaining references to `FooBar.V2` namespace

## Success Criteria

- [ ] No references to `FooBar.v2` NuGet package remain
- [ ] All `FooBar.V2` namespace usages replaced with `FooBar.V3`
- [ ] Project builds without errors
- [ ] All existing tests pass

## Error Handling

- If `FooBar.v3` is not available in the configured NuGet feeds, instruct
  the user to add the internal feed
- If async migration causes deadlocks in legacy synchronous code paths,
  wrap calls with `.GetAwaiter().GetResult()` and add a TODO comment

Bidang metadata

Ladang Required Deskripsi
name Yes Pengidentifikasi unik dalam format kebab-case. Mulailah dengan kata kerja gerund (misalnya, upgrading-, converting-). Maksimum 64 karakter.
description Yes Menentukan kapan agen memuat kemampuan. Sertakan frasa pemicu, seperti kata dan pola yang harus mengaktifkan keterampilan.
metadata.discovery No Mengontrol kapan keterampilan dimuat: preload (selalu tersedia), lazy (sesuai permintaan saat deskripsi cocok, default dan direkomendasikan), atau scenario (menentukan orkestrator alur kerja).
metadata.traits No Kata kunci yang menjelaskan teknologi dalam proyek Anda, seperti .NET, CSharp, VisualBasic, atau DotNetCore.

Praktik terbaik pengembangan keterampilan

  • Spesifikkan dalam deskripsi: Sertakan nama paket yang tepat, nama pustaka, dan frasa pemicu bahasa alami yang mungkin diketik pengguna.
  • Sertakan alur kerja langkah demi langkah yang jelas: Beri nomor langkah-langkahnya. Jadilah eksplisit tentang file apa yang akan diubah dan perintah apa yang akan dijalankan.
  • Sertakan kriteria keberhasilan: Tanpa kriteria keberhasilan, agen tidak tahu kapan harus berhenti. Gunakan kotak centang atau daftar kondisi yang dapat diverifikasi yang jelas.
  • Sertakan penanganan kesalahan: Mengantisipasi mode kegagalan umum, seperti paket yang hilang, kegagalan build, atau pengujian rusak.
  • Jaga agar keterampilan tetap fokus: Satu keterampilan per peningkatan atau jenis tugas. Keterampilan untuk "meningkatkan FooBar v2 ke v3" lebih baik daripada "meningkatkan semua pustaka internal."
  • Nama dengan kata kerja gerund: Gunakan , bukan upgrading-foobar-v2-to-v3 atau foobar-upgrade.
  • Gunakan lazy penemuan: Gunakan lazy penemuan untuk sebagian besar keterampilan kustom untuk menghindari memperbesar jendela konteks agen.

Membuat skenario kustom

Untuk pengguna tingkat lanjut yang ingin menentukan alur kerja peningkatan yang sepenuhnya baru, skenario kustom memungkinkan Anda mengatur alur peningkatan multi-fase penuh. Skenario adalah kemampuan dengan metadata.discovery: scenario yang menetapkan fase yang perlu diikuti oleh agen.

---
name: migrating-soap-to-rest-api
description: >
  Migrate legacy WCF/SOAP services to ASP.NET Core REST APIs. Activates
  when WCF service references, .svc files, or SOAP clients are detected,
  or when asked to "migrate SOAP to REST", "replace WCF", or "convert
  web services to REST".
metadata:
  discovery: scenario
  traits: .NET | CSharp
  scenarioTraitsSet: [wcf, soap, web-services]
---

# SOAP to REST API Migration

## Pre-initialization

Gather from the user:
- Which SOAP services to migrate (all or specific ones)
- Whether to maintain backward compatibility with a SOAP facade
- Authentication mechanism for the new REST APIs
- API versioning strategy (URL path, header, query string)

## Assessment

Analyze the solution for:
- `.svc` files and WCF service contracts
- WSDL files and service references
- `System.ServiceModel` usage and binding configurations
- Data contracts and their serialization requirements
- Client proxies consuming SOAP services

## Planning

Create tasks in this order:
1. Create shared DTOs — Convert `[DataContract]` types to POCOs
2. Create REST controllers — One controller per `[ServiceContract]`
3. Map operations to HTTP methods
4. Migrate service implementations
5. Update clients — Replace `ChannelFactory`/generated proxies with `HttpClient`
6. Remove WCF infrastructure
7. Add API documentation — Swagger/OpenAPI via Swashbuckle

## Execution

For each service contract:
1. Create a corresponding controller
2. Create a service interface and implementation
3. Register the service in DI
4. Map WCF operations to REST endpoints
5. Update any in-solution clients to use the new REST endpoints
6. Build and run existing tests

Tempatkan file skenario di .github/skills/ atau .github/upgrades/skills/ agar agen menemukannya.

Petunjuk / Saran

Bidang scenarioTraitsSet menentukan sifat yang digunakan agen untuk mencocokkan skenario Anda dengan karakteristik solusi. Sifat-sifat ini membantu agen menyarankan skenario Anda jika sesuai.

Kontrol sumber dan percabangan

Agen menawarkan untuk bekerja pada cabang Git, tetapi Anda memiliki kontrol penuh atas strategi:

  • Penamaan cabang: Beri tahu agen nama cabang apa yang akan digunakan, atau biarkan agen menyarankannya.
  • Cabang per tugas: Minta cabang terpisah per tugas untuk tinjauan terperinci.
  • Waktu penerapan: Pilih kapan agen menerapkan: setelah setiap tugas yang selesai (default), hanya di akhir peningkatan penuh, atau sesuai permintaan.
  • Tidak ada kontrol sumber: Agen ini juga bekerja dengan folder non-Git tetapi merekomendasikan untuk mencadangkan proyek Anda terlebih dahulu.

Contoh instruksi obrolan:

  • "Gunakan nama cabang 'upgrade/dotnet10' untuk peningkatan ini"
  • "Buat cabang per tugas sehingga saya dapat meninjau masing-masing secara terpisah"
  • "Jangan berkomitmen sampai saya secara eksplisit meminta Anda untuk"
  • "Melakukan commit setelah setiap tugas dengan pesan deskriptif"

Petunjuk / Saran

Untuk peningkatan multi-proyek besar, cabang per tugas memberi Anda fleksibilitas untuk meninjau dan menggabungkan setiap perubahan secara independen, atau mengembalikan satu tugas tanpa memengaruhi sisanya.

Prioritas pemuatan keterampilan

Ketika agen menemukan beberapa keterampilan, agen menyelesaikannya menggunakan sistem prioritas. Sumber berprioritas lebih tinggi mengambil alih atau melengkapi sumber berprioritas lebih rendah:

Prioritas Sumber Tempat
5 (tertinggi) Keterampilan kustom (disediakan pengguna melalui API)
4 Keterampilan profil pengguna %UserProfile%/.copilot/skills/
3 Keterampilan peningkatan repositori .github/upgrades/skills/
2 Keterampilan pengelolaan repositori .github/skills/
1 (terendah) Keterampilan yang disematkan (yang terintegrasi dengan agen)

Agen mengumpulkan keterampilan dari semua sumber. Ketika keterampilan memiliki cakupan yang tumpang tindih, sumber prioritas yang lebih tinggi lebih diutamakan. Bidang discovery mengontrol kapan keterampilan dimuat. lazy berarti sesuai permintaan jika relevan, dan preload berarti selalu tersedia.

Petunjuk / Saran

Anda tidak perlu mengganti keterampilan bawaan untuk mengubah perilaku. Keterampilan repositori berprioritas lebih tinggi melengkapi keterampilan bawaan, menambahkan konvensi khusus tim Anda di atas perilaku garis besar.