meeting-notes
>-
service-scaffolder
Scaffold a new backend microservice end-to-end — create Abstractions, Core, DataAccess, GraphQL, Host, Worker projects with correct layer dependencies, DI wiring, health checks, and test projects. Triggers on: new service, new microservice, scaffold service, create service, add domain service, ne...
Full skill instructions
Scaffold a complete backend domain microservice following the established project structure and conventions.
Prerequisites: Read
general.instructions.mdfor architecture rules and layer definitions before scaffolding.
Follow these steps in order. Confirm the service name and scope with the user before starting.
Ask the user:
Consultation, Invoice)src/{ServiceName}/
├── src/
│ ├── Abstractions/
│ │ └── {ServiceName}.Abstractions.csproj
│ ├── Core/
│ │ └── {ServiceName}.Core.csproj
│ ├── DataAccess/
│ │ └── {ServiceName}.DataAccess.csproj
│ ├── GraphQL/
│ │ └── {ServiceName}.GraphQL.csproj
│ ├── Host/
│ │ └── {ServiceName}.Host.csproj
│ └── Worker/ ← optional
│ └── {ServiceName}.Worker.csproj
└── test/
├── Core.Tests/
│ └── {ServiceName}.Core.Tests.csproj
├── DataAccess.Tests/
│ └── {ServiceName}.DataAccess.Tests.csproj
├── GraphQL.Tests/
│ └── {ServiceName}.GraphQL.Tests.csproj
└── Worker.Tests/ ← if Worker exists
└── {ServiceName}.Worker.Tests.csproj
Follow the dependency rules strictly:
| Project | References |
|---|---|
| Abstractions | None (leaf) |
| Core | → Abstractions |
| DataAccess | → Abstractions, Core |
| GraphQL | → Abstractions, Core |
| Host | → Abstractions, Core, DataAccess, GraphQL |
| Worker | → Abstractions, Core |
| Core.Tests | → Core, Abstractions |
| DataAccess.Tests | → DataAccess, Core, Abstractions |
| GraphQL.Tests | → GraphQL, Core, Abstractions |
Create the foundational types:
// Models/{ServiceName}Entity.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName};
public record {ServiceName}Entity(
ID<{ServiceName}Entity> Id,
string Name);
// Interfaces/I{ServiceName}Repository.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName};
public interface I{ServiceName}Repository
{
Task<{ServiceName}Entity?> GetByIdAsync(
ID<{ServiceName}Entity> id,
CancellationToken cancellationToken);
}
// Services/{ServiceName}Service.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName};
public sealed class {ServiceName}Service(
I{ServiceName}Repository _repository)
{
public async Task<{ServiceName}Entity?> GetByIdAsync(
ID<{ServiceName}Entity> id,
CancellationToken cancellationToken)
{
return await _repository.GetByIdAsync(id, cancellationToken);
}
}
// DependencyInjection/{ServiceName}CoreServiceCollectionExtensions.cs
namespace Microsoft.Extensions.DependencyInjection;
public static class {ServiceName}CoreServiceCollectionExtensions
{
public static IServiceCollection Add{ServiceName}Core(
this IServiceCollection services)
{
services.AddScoped<{ServiceName}Service>();
return services;
}
}
// Repositories/{ServiceName}Repository.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName}.DataAccess;
public sealed class {ServiceName}Repository : I{ServiceName}Repository
{
private readonly IMongoCollection<{ServiceName}Entity> _collection;
public {ServiceName}Repository(IMongoDatabase database)
{
_collection = database.GetCollection<{ServiceName}Entity>("{serviceName}s");
}
public async Task<{ServiceName}Entity?> GetByIdAsync(
ID<{ServiceName}Entity> id,
CancellationToken cancellationToken)
{
FilterDefinition<{ServiceName}Entity> filter =
Builders<{ServiceName}Entity>.Filter.Eq(x => x.Id, id);
return await _collection
.Find(filter)
.FirstOrDefaultAsync(cancellationToken);
}
}
// DependencyInjection/{ServiceName}DataAccessServiceCollectionExtensions.cs
namespace Microsoft.Extensions.DependencyInjection;
public static class {ServiceName}DataAccessServiceCollectionExtensions
{
public static IServiceCollection Add{ServiceName}DataAccess(
this IServiceCollection services, IConfiguration configuration)
{
services.AddMongoDataAccess(configuration);
services.AddScoped<I{ServiceName}Repository, {ServiceName}Repository>();
return services;
}
}
// Types/{ServiceName}EntityType.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName}.GraphQL;
public class {ServiceName}EntityType : ObjectType<{ServiceName}Entity>
{
protected override void Configure(
IObjectTypeDescriptor<{ServiceName}Entity> descriptor)
{
descriptor.Field(x => x.Id).Type<NonNullType<IdType>>();
}
}
// Queries/{ServiceName}Queries.cs
[QueryType]
public static class {ServiceName}Queries
{
public static async Task<{ServiceName}Entity?> Get{ServiceName}ByIdAsync(
ID<{ServiceName}Entity> id,
[Service] {ServiceName}Service service,
CancellationToken cancellationToken)
{
return await service.GetByIdAsync(id, cancellationToken);
}
}
// Startup.cs
// TODO: Replace with your organization namespace, e.g., YourOrg.YourProject
namespace YourOrg.YourProject.{ServiceName}.Host;
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddJwtBearerAuthentication(Configuration);
services.Add{ServiceName}Core();
services.Add{ServiceName}DataAccess(Configuration);
services.AddGraphQLServer()
.AddTypes();
services.AddHealthChecks()
.AddMongoHealthCheck();
}
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();
endpoints.MapHealthChecks("/_health/live");
endpoints.MapHealthChecks("/_health/ready");
});
}
}
Set up test infrastructure per tests.instructions.md:
// Core.Tests/{ServiceName}ServiceTests.cs
public class {ServiceName}ServiceTests
{
private readonly Mock<I{ServiceName}Repository> _repository =
new(MockBehavior.Strict);
private readonly {ServiceName}Service _sut;
public {ServiceName}ServiceTests()
{
_sut = new {ServiceName}Service(_repository.Object);
}
[Fact]
public async Task GetByIdAsync_EntityExists_ReturnsEntity()
{
// Arrange
ID<{ServiceName}Entity> id = ID<{ServiceName}Entity>.New();
{ServiceName}Entity expected = new(id, "Test");
_repository
.Setup(r => r.GetByIdAsync(id, It.IsAny<CancellationToken>()))
.ReturnsAsync(expected);
// Act
{ServiceName}Entity? result = await _sut.GetByIdAsync(id, CancellationToken.None);
// Assert
Assert.Equal(expected, result);
}
}
dotnet build on the new servicedotnet test on the test projectsID<T> used for entity IDs/_health/live, /_health/ready)Add{ServiceName}{Layer}() namingMockBehavior.Strict>-
研发工作流入口 - 帮助用户快速进入正确的工作流阶段。 触发关键词: 工作流, 流程, 从哪开始, 帮我, 我该怎么做, 下一步, workflow, 不知道用什么, 新手引导, 怎么用
Periodically refreshed mirror of agents, skills, prompts and instruction files from public repositories.
Read-only Unity runtime performance snapshots — FPS, frame time, batches/draw calls, triangles/vertices, memory (total/mono/per-asset), object counts, AssetBundle stats. Exact signatures via GET /skills/schema.
Full multi-platform paid advertising audit with parallel subagent delegation. Analyzes Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads, Microsoft Ads, and Apple Ads accounts via 6 parallel audit agents. Amazon Ads, cross-platform attribution, and server-side tracking are covered by their standalon...
Unity Editor automation via REST API — create scripts, analyze scenes, manage assets, control editor, orchestrate workflows, run batch jobs, and route by Unity version. Triggers: Unity, Unity Skills, in Unity, automate Unity, Unity editor automation, create Unity script, scene summary, analyze Un...
Score product remarkability 1-10 to decide if it's worth promoting. Seth Godin's Purple Cow test. Triggers on: "is this product worth promoting", "should I promote", "product audit", "purple cow", "remarkable product", "is it remarkable", "rate this product", "product quality check", "worth my re...
Project cleanup and audit — find unused assets, content-hash duplicates, missing references, empty folders, large assets, dependency trees; two-step confirm-token delete. Exact signatures via GET /skills/schema.
**GUIDE SKILL** — Guide to the Skill Manager for Copilot extension. USE FOR: adding/removing skill repos, syncing skills, pushing feedback, configuring sync intervals, troubleshooting sync issues, understanding skill format. DO NOT USE FOR: creating new skills (use skill-creator), creating agents...
Configures Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies. Use when setting up Nightwatch, managing data volume, protecting sensitive data (PII), or optimizing event collection for production workloads.
End-to-end workflow: research a topic and then write a LinkedIn post about it. Use this skill whenever the user wants the full pipeline — from a topic idea to a finished LinkedIn post. Triggers on: 'research and write a post about', 'create a LinkedIn post about [topic]', 'I want to post about', ...
Periodically refreshed mirror of agents, skills, prompts and instruction files from public repositories.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience